SPEAKER:
OK, let's go ahead and get started. Great to see all of you here and way fun. The title is a little hoity toity today. The title is Advance Local Development with DDEV. But what we're really going to do is just explore some territory that you're interested in and we'll learn. We'll go ahead and take some interest, temperature feeling on that in just a minute. The first thing I think we're always supposed to say is, that you agree to the agreement, right? And everybody does, right? So, we all agree. So we've all agreed all the time. And we will not be mean to each other or pick on each other. So let me just share my screen right quick and I'm going to put up here the... put up here the things that just came to my mind for this. The first one is custom commands. It's really, really easy to add your own custom commands to DDEV local and third party services is another whole subject, like being able to add Solr or ElasticSearch or lots of other things to DDEV. There are all kinds of recipes for these.
And so we can do that. The advanced configuration using a custom Dockerfile or web_image_extra_packages is another topic. That's you know, the Web_image_extra_packages technique is pretty easy as long as you know where to find the packages. Casual Web hosting is a new feature. Well, new in the last revision, where you can actually put up websites using DDEV local on a real server. And I have all the stuff that I host, that I've been hosting over the last several years, has now ended up on the casual Web hosting feature. I just put it on Linode VM. And then last but not least, is probably the first thing that we'll start with is, using gitpad to develop the gitpad.io with DDEV. So, Oprah's gonna show that to us. But before we do that... I'm interested in what you have to say about what you're interested in and those things or other things. So feel free to unmuted, feel free to have your video on. What is exciting or what other questions might you have. Any question is fine, too, so.
OPRAH:
Go ahead, Catherine. I'll go after you. CATHERINE: Oh, thank you. OK, thank you. My name's Catherine and I have DDEV because I went through the Depok Academy Drupal for 12-week course, for Drupal development. And prior to that I've done a lot of WordPress. My Php was like, you know, I would do whatever I needed to do to get it done. And I wasn't following best practices. So, I decided that with Drupal it was really important for me to make sure I was doing things the correct way, because it's the stakes are higher and it's more collaborative. So, I had DDEV on my machine, I use a bunch of Linux and everything works great when you just get the Drupal file that they now make available. And whenever I went to VS-code and I'd read about people doing all this cool stuff with DDEV, I think I'm either not looking in the right place for documentation, but I just feel like I go down into the weeds. And specifically, I was trying to get Xdebug to work with VS-code and DDEV and I couldn't ever get it to work.
So, I thought, that's just probably me not being very smart. But what my big picture question is, how can I make sure my DDEV is properly configured so that when I'm doing Drupal stuff, I'm not having people tell me, well, I use Lando. I don't really know about DDEV. So, I think DDEV is really widely adopted. But I just feel like I'm not looking in the right place. And all the stuff you're talking about sounds so exciting. And my tendency is to jump ahead to advance things before I have my foundation correct. So, I'm feeling that tension. But what would you advise for just basic, basic like, I have something that's not working, where can I look for DDEV.
SPEAKER:
But most people do is, they go to the DDEV channel and Drupal Slack and they ask questions. And there's a lot of great community there that will answer the questions. The DDEV docs have a complete set up for VS-code and debugging. DDEV comes with Xdebug already set up. You don't have to do anything with it. If you're using VS-code, you do have to do some things that it's not DDEV specific, its Xdebug issues. But the docs tell you what to do. I've always been a Jet Branston. But let's add that to the list and we can do VS-code with Xdebug. Xdebug is a great topic. It's not advanced. It's something everybody should be doing. But we can just do that. We can just go through the docs and do that. So let's add that to the list. And of course, I'm happy to help you any time. And you can ping me in the DDEV channel, on Drupal Slack and there's lots of other ways to get me, but I'm happy to help you if you're having trouble like that.
CATHERINE:
Thank you, Randi, I will join that select channel today. Yeah, you better. (CROSSTALK) missing links like this.
SPEAKER:
Oprah, you were going to say something? OPRAH: Yeah. Well, just definitely, recommending again, Slack channel of DDEV, it's the best place to get help from a community that would help me figuring out everything about DDEV. If it's possible, if you can share maybe more of, if there is some kind of a roadmap of DDEV functionality, upcoming things. If is anything like that, you could share. So let's talk about what's in V1.17. Let's put that on the list. So, I'm going to start a little list here in the chat, roadmap DDEV V1.17 features, that's the upcoming version that will be released in the next couple of weeks, assuming that I'm not on jury duty next week and assuming that I don't get huge bugs when I'm manually testing it all through. And Xdebug with VS-code and maybe with PhpStorm too. Wow. I can't believe, oh, I haven't turned off the auto spelling on this Mac. I got to turn it off. That's terrible. OK, so there's a few other things that we could do today. It sounds like the Xdebug would be a good thing.
And of course, we can talk about the 1.17 features and other things on the roadmap and what's booked for 1.18 already. There's already like 30 issues on 1.18. So... I don't know if there's going to be a time for that. I'm curious about, I think there's DDEV go through extensive testing methods. And if you would be able to show what's happening, like what kind of testing DDEV goes through when you create a new version or PR, things like that? That's a When you create a new and new... any happens to any PR, dev runs DDEV a whole test routine on Windows to Windows, WSL2, M1 Mac Linux and Linux, ALM Linux IM 64 and well. And it thousands of tests on each of those environments, it's really kind of painful to wait for sometimes. And so there's a there's a of automated testing. But when we get to a formal, full stable release, I write up a whole manual test plan so that each feature is reviewed again manually. And that takes usually, that takes at least a week to do the RC 1 for V1.17 is already out there, was released this morning.
And yeah, I think I've been in most of those places, so I don't anticipate much trouble, but I always find bugs in that last round every time, you know, and things that get left out of the docs, stuff like that. So, put that on there. Joanne asked if we run into an error with DDEV drush launch. There isn't a command called DDEV drush launch. So, you probably wanted DDEV launch.
JOANNE PATALANO:
It is on your QuickStart.
SPEAKER:
In that case, it's a bug.
JOANNE PATALANO:
It's just a typo, really.
SPEAKER:
It's a typo. Can you do a PR for it? You can just click edit on the docs and fix that.
JOANNE PATALANO:
Yeah,
SPEAKER:
In the upper right, there's an edit, there's an edit this page button.
JOANNE PATALANO:
Yeah.
SPEAKER:
It might have already been picked. Also, if you're looking at this table docs as opposed to the latest docs. So, anybody else have things that would be high on your agenda for talking about today on features that are not just straight line, look at a website, features of DDEV.
CHRIS WALLACE:
I'm Chris Wallace. I'm from (CROSSTALK) Solutions. I'm working on sort of porting, we've been using like a virtual machine for the last three or four years, and we're in the process of switching everything over to DDEV. So, this is very timely for me. And I was looking at sort of things that are missing between DDEV and our thing. And I think a lot of this is stuff you're going to cover, stuff that I've looked at in terms of maybe custom commands, extra containers, extra packages. So like Wemuse, Memcache, Solr on some sites, we also do the (UNKNOWN). So, we would need ticker to be installed somewhere so that Solr can extract text from Wordocs and PDF. And then we make heavy use of Terminus. So I was kind of wondering why Terminus is like the one thing you have to SSH into the container for or like sort of execute without, you know, like why isn't there a DDEV terminus command? And if possible, could I create one?
SPEAKER:
Yeah, you can add custom commands. It's just nothing to it. So you just look at the examples.
CHRIS WALLACE:
Yeah.
SPEAKER:
In the global directory and you'll see that DDEV Drushes there and you just copy that and change the name to terminus and there you are. So, you can add anything terminus. Yeah, you should add that if you need it. Most people, of course, aren't on Pantheon and so we're a little stingy on what custom commands or what extra commands we add to do DDEV, because every time you add a new command, it's noise to somebody, right? And you want to limit the noise. So, I mean, most people in the world who use DDEV have no idea that Pantheon exists or why? And so that's a great case where you can just add your own command because you need it.
CHRIS WALLACE:
Yeah, cool, I saw that Terminus was in there, but just wasn't, you know, its not exposed to the custom command. So it's cool that that would be. So, I'm interested to learn about custom commands and probably some other things. We have some projects that are built with like Ruby and Bundler. So, you know, maybe there's if we cover some of that extra custom Dockerfile type so that there are some containers where I might want to add some Ruby in there. And yeah, I'm also interested, there's a lot of stuff we use a lot of sync commands, using make files. So, you know, we can do like make refresh and it gets the latest copy of the production database. It, you know, sets development settings, it clears the cache. It does, you know, like a chain of different things. And so I was wondering if there is a cool, you know, if we should switch that to some sort of DDEV custom commands or if we should just, you know, install make in the container and be able to do a custom command. So I'm just curious, everything that's out there for that.
SPEAKER:
I would be surprised to make is already in there. But, make is that most people use composer for the build type things or more modern techniques. Of course, I'm from the Goworld where make is still a thing and so I use make all the time. I never thought you know, I used to in the 1990s and I never thought I'd use it again, cause I thought it got replaced by everything. And then I come a long way in the Goworld it's the thing. And the Goworld like, OK, well, I know this from way back, so fine. But,
CHRIS WALLACE:
And probably the last big one for me is, we have a handful of sites that are kind of big multi sites. And just if there's integrations on multiple databases in database container and if there's any custom stuff for supporting multisite in DDEV.
SPEAKER:
So there's a whole DDEV contrib right up on how you do that, so that if you go to github.com/drud/ddev-contrib you see lots and lots of things there, but you just search for multisite on that page and you will see it.
CHRIS WALLACE:
Cool, alright. That sounded pretty easy. I ended up following one of those links that was like very perfect and at fault for it, and I was bummed. But I actually reached out to the developer and he sent me the archive of the article for DDEV multi site. And it looked pretty easy.
SPEAKER:
OK, yeah, the one that DDEV contrib should be fine. I don't think you'll have any trouble with that. And Joanne, I am trying to figure out how to give you... can we not put images here? I'll give you a link to it to show you how to edit.
OPRAH:
I see I couldn't find it before, but then I went to the top of the article, I see a pencil on the top, right? So, I can click on it and it takes me directly to the page that I'm going to paste here.
SPEAKER:
And then and here it is, such what it looks like.
CATHERINE:
You let anybody change your speech. I mean.
SPEAKER:
You're making a pull request, so you're going to do, it's an open source world and the docs are open source. And so by clicking that, you'll be making a pull request, which I'll review. And we appreciate people so much when they find things that can be approved in the docs, because, of course, I don't read all the docs every day. And if I did, my eyes would glaze over anywhere and I wouldn't hang with them. But you see, I mean, it's very much appreciated. This is like this is like oh 101 zero zero one like. I you know (INAUDIBLE). So I'm in and yeah. Yeah, you just go follow follow it along and you'll be good. Give a good name to it. So let's go ahead and get let's get this, get (INAUDIBLE) going (UNKNOWN) I think you should be able to share your screen at, at will and tell us tell us what the purpose is and what the meaning is and what the future is and show us how it works. Thank you. Hi, everyone. Yeah, I've been since I found DDEV, never look back, was a great end for anyone coming to it.
Yeah. I actually ended up learning Docker through working with DDEV and there have been so many different situation, installation project that been using DDEV. So chances are the unique creative thing you're trying to do, someone already did it and that's why asking things in the Drupal slack channel of DDEV is so beneficial, because you don't have to figure it out from scratch, which is different than what I'm gonna talk about now, because we did have to figure it out from scratch. So, yeah, shameless plug. I work at phase two and March 30th, we are going to have Drupal developer, ask me anything, event and here's a link if anyone want to join. And now I'm going to share my screen where we can dive into the future. Dive into the future. So the future of Zoom messing up my screen, no I see everyone and my screen. Great. You see the (INAUDIBLE) page. Great. SPEAKER: Yep, we do. So you might have heard of a project that kind of trying to do a similar thing, GitHub workspaces, (UNKNOWN), which in the nature trying to bring the whole environment of development and work with a browser, which that's why I really think this is the future and because there's so many benefits that you can have with it, yes, you would need Internet, but otherwise you can work with machines that are very lightweight.
You can literally work with a tablet and create anything. What's beautiful about Gitpod is that this is an open source project that allows you to do that. On top of that, if you're planning to bring your company to use that, they would allow you to even have their they have like pricing for things like that, but you could because it's an open source project, you can have it self hosted and bring this whole machinery into whatever infrastructure you would like to. From what I've seen so far, they work with AWS and Google Cloud, probably more are coming. Also, a few months ago, Gitpod become one of the official IDs of GitLab. So if you would go to your setting in GitLab, you can see you can choose the regular idea of GitLab or you can choose Gitpod. So finding Gitpod and realizing this is the future, now, I had a problem because like, how do you develop Drupal? 'Cause there's so many things you need to put together to get Drupal working. So I think I asked (UNKNOWN) Randy the beginning and I was like, well, now it's not gonna work.
What is so many things to figure out that. Yeah, so I actually went in and tried to figure out piece by piece and (UNKNOWN) Randy a lot, thank you so much, throughout the process Today, we have a solid working solution, now we are at the end of March Gitpod fixing one bug we found before that would make it even faster and what I'm gonna show you now is what is possible to do, what we're planning to add in the very near future, and how anyone can benefit from that, including whether it's for your billable project or for Drupal contributions. So any questions so far? OK, so this is the website of Gitpod, lemmi show you a nice idea. This one is VScode in a browser. Getting it to work is fairly easy. I'll take you step by step to what is mean and few things you need to do right now and in a few days, few of these steps gonna become again easier. Let me share with you this project it's called for now DDEV-Gitpod and anyone can you can.. You can actually do this right now. Yeah, yeah, yeah.
Please do it with me. You can do it with him, right, right while he's doing this, you can do it. (INAUDIBLE) Yeah. I highly recommend (CROSSTALK) trying it and see, see the magic. So if you go to the link that I showed in zoom, you would get to this repoll, scroll down a little bit to read me, just below the five minute video, you see the two things that you should do, like I said right now, in about a few days, this gonna be eliminated. It won't be needed anymore. It's becoming part of the official thing. Sign up means you kind of saying here's my GitHub or GitLab user and that's it. There's no it's a very simple process. One more thing you wanna do is to go this link would take you to the Gitpod IO settings, because for now, you need to scroll down that page. I think it could show it to you right here and enable feature preview. So what makes it Gitpod, in my opinion, so special, so unique is they encountered, I think, a super complex concept, which is we enjoyed DDEV because DDEV allowed me to run my a little machine on my machine.
And it's in a sandbox. doesn't affect the host machine. And it's really great. What Gitpod is is and (UNKNOWN) feel free to correct me if I'm wrong, there's like a docker setup. But within that docker set up, which is a. Development machine, you can create your own docker within that one way Gitpod did things before ,still doing it is allowing people to type a whole Docker file, which is very specific of all the Linux commands to get a system working. The beauty of DDEV is that in a very few commands or a few, not even command, just simple config files, we can create a very complex set up of anything, specifically, now we're gonna show Drupal, but literally you can do anything and I believe now DDEV repo itself, which is written in go language, also can be you can contribute to DDEV by using Gitpod. Without having to set up Go or Docker or anything else or even touch your local environment, you're running the entire development environment in the cloud. So it's beautiful. Yeah. So the end result is by having a link that looks like that, usually the syntax is Gitpod(INAUDIBLE)slash pound and then you attach to that whatever repo public thing you have from GitLab or GitHub.
And I believe also forgot the third one, another git hosting solution, and that will automatically launch your own set up in the cloud. So once you enable the feature preview, that's what does the docker in docker that's what in a few days you won't need to do anymore. So that will be done. That works, by the way, on a Poll request. It works so you can you can do the Gitpod. Gitpod has a handy little button that you can add, but you can go to any poll, you can just take the URL of a poll request and it'll launch, get bored with that poll request. Yeah. And I can show you one more thing I do. It's went in to Gitpod itself, lemmi open, one more window of GitHub. I added the extension. It's a chrome extension, all it does is add this nice Gitpod button. So now when I go to any GitHub project, I can click on it and it will open automatically. It will do that. What I showed you before with a Gitpod (INAUDIBLE) slash pod and the repo itself. So that same thing, if I'm on the main repo that what get are going to load, but if I go to any of the branches or to any PR, what Gitpod gonna bring to me is that specific PR.
So, going through quickly, what's happening or what's the what's the magic behind it. There's two main setting file, Gitpod yml and Gitpod file. Gitpod yml is is the are the different commands that you wish your machine gonna run. A huge thing that Gitpod added was the caching system, so as you're changing your machine and what is installed on it, but that part takes time, but at the same time it's being cached. So any changes I'm gonna make to the computer that doesn't change the configuration of my development machine is already built in. So in the next few days, we're gonna fix a bug that we had from before. When you gonna turn on a machine, it will already have DDEV installed. You would need to download the images or anything like that. Your project will just have have DDEV out of the box in probably less than a minute. Show us the thing. Show us the thing. Show us the thing. SPEAKER: Here's the thing. OK, so when you click on the keypad, you click create, it's a starting, I have one ready on the side if anything goes wrong here, but it does this, one, two, three, four, It is like four steps.
This is really cool, by the way. You get to play with this moving... at your (INAUDIBLE) part. Yeah. Somehow they're getting rid of it the next UI, but it's OK. Yeah. So this is fairly quickly, it usually takes about a minute to, to load and what will get is the specific repo clicked on, which is that Drupal DDEV Gitpod set up and it will open in the browser. Anybody tried to do it on your own and enable the feature and see that. You get the same result.
OK, SPEAKER:
Worked for me
SPEAKER:
right SPEAKER: Worked for me. So so what happens just like the DDEV promise itself, each one of us now have our own unique machine with the exact same setup, doesn't matter what you're using. On top of that, Gitpod does allow us to share. I can share my specific machine so and I did it many times with Randy so that you can get in and put the right commands and see why something doesn't work. So here's my browser with VS code right here. You can change the theme. You can install VS code extension. What will happen? Things to notice in this specific setup. One of the things we're running is called docker up, that's in order to be able to run the Docker in docker. The other thing that's happening on the other terminal is Docker is DDEV being running is running in the first time. So it's downloading all the latest images that DDEV requires. Again, few days, all this part gonna be already built in, you wouldn't even need to wait for things to download. It will be ready in your box. In the meantime, I can open, this VS code, so I can open files, I can edit things so I can use Gitpod to change the machine that I'm working on and see it happen.
One of the things I talked about with caching in your machine is called in Gitpod language pre-built and here specifically in this machine, we asked to create a pre-built on everything that's changed. So any any change in the branch and new PR everything gonna be rebuilt. So we're getting a working environment right away. So as you see DDEV finish running, if you're familiar with what DDEV run on the terminal, usually that's what you will see and I get to see that a service available in Port 880 available. I'm gonna open browser, which in Gitpods current index is the port name-the unique that they give each workstation. And now you would see a Drupal installation screen as you're familiar with it. One of the things I would do right here is I'm gonna draw a (INAUDIBLE) because now I have a full DDEV. I can do anything, I can do DDEV. (UNKNOWN), you know, you don't need that dock anymore. Haven't needed it for a while. (INAUDIBLE). Hey, old habit then. OK, so yeah. One thing I like to also do is put the word time here.
So I think it's fairly fast machine.(CROSSTALK). We have a little machine here. I think it's faster than my Mac right now, which is fantasy. So what I'm doing now is I'm using Drupal core to install the umami demo out of the box and just like we could see this one, which is the regular installation before you do anything now, you can see that we end up running drush. No set up needed basically everything is ready for us. Someone asked the right questions about Xdebug. It's one of the basic things all of us need. The beauty of this system now is Xdebug is built in. It just works. I'm gonna, I'll try. I'm gonna I ask you to demo it. Yeah, Absolutely required to demo it that way. well, First of all, let's just prove it that we really that's what happened when you go to the install page again. But if will go to the home page, we have the full umami showing up and what I'm gonna do next. OK, here's umami. I can run DDEV drush uli and getting admin access to do that, I can share with other people this URL.
I can open workstations or not. I can also share what's called a snapshot. I don't know if I can see it here, so other people can see the exact status or the snapshot of where my machine, including the database and everything is at right now. So now we want Xdebug because Xdebug is usually difficult to work with. So if I'm going to Web Index PHP, I think one of the things I should, because I don't know if it might if my PHP already have the PHP debugger, I think there's an extension. Yeah, so How we should, we should see if we can get that in there by default That will be there as well. Yeah, but just so you can see, I'm now installing a VS code extension. It's it's wild. So that's it, that's installed. Now It means that I can go to index again. Index, I'm gonna put debugger breakpoints, right, the red dot, I'm gonna go to the debugger and press one second before this DDEV ex debug on. You wanna do that and you wanna turn it off and you don't use it, so things go fast when you don't need to debug and once I'm press pressing play here, now it is listening to what's happening.
If I'm gonna refresh my umami web page and go back to my Gitpod, look at that, Xdebug worked. It's already looking at where I'm at. Yeah, I can like... Do some amazing things here and whatever you need Xdebug to do for you, it would. You get the call stack, you can find variables, you name it, it's there. So, this is awesome when Xdebug not working, it does work here. I posted the VSCode Xdebug instruction link in the chat. This isn't harder locally. It's exactly the same locally. But the fact is he didn't even have to set up anything. He just went here and in the browser. He's able to do all this and debug. Yeah, now, another thing that was a worrisome thing that people love to use DDEV, but they love their PhpStorm. So, PhpStorm actually came up in good timing for us with a project called Projector. And one of the things we type in the readme that you can try, is you type the in DDEV command and it's called run PhpStorm. So, if I do that and you can try it on your machine as well, so, its .DDEV/run PhpStorm.sh.
You see that message? I click open browser. And look at that, it start green for a second, you get a JetBrains user agreement that I would not do anything bad. OK, and this is 2020.3, I think it's the latest. We can click for now valid forfree. You can put your own license. And this is the real PhpStorm. So, anything you want to do in PhpStorm is absolutely available right here,, if I'm going to open my files. So, that was like huge thing, because when people like to develop Drupal with PhpStorm because of all the additional things PhpStorm is adding, it's great. So, in here, of course the ultimate test would be also to make sure that Xdebug is working. So, I'm just going to check again that I have... Believe Xdebug working, but... You probably want to turn it off on the VSCode. Yeah, I did. Yeah. It's often the VSCode. So, DDEV, no Xdebug is working. I'm going to PhpStorm, I'm going to put a breakpoint here. I'm going to turn this on. I'm not sure how this is, if it's valuable or not, but I have this extension that PhpStorm usually recommends.
So, Randy would know better if it's required or not. Yeah. Now I'm gonna go to...(CROSSTALK) Not required. OK, thank you. Refreshing the mummy page and now PhpStorm telling me that it understand there's an incoming connection, accept and I'm getting the full PhpStorm Xdebug experience in the browser. Unbelievable. So, this is really really cool. It make things much easier setting up things. It doesn't slow down my computer because it's somewhere on Google cloud. Chris Wallace mentions that f10 doesn't seem to work to step over. And the function key mapping is one of the funky things about running a Linux application in a browser on a different OS. And I think what you end up having to do is remapping some of the function keys because f10 has native meaning to your browser. And that's a problem. But I think I saw... Rendi, did you create that issue with projector of telling them that we need certain key bindings? I pitched in on it... Because Gitpod itself is taking over certain things that the browser is doing.
So, I'm sure it is possible in a way. Chris, were you on bsCode or because it would have been f8 on PhpStorm. So, you were probably talking about just bsCode. Yeah, so, there is going to be some difficulty about who owns what function keys. And I don't think there's a straight way around that. Yeah, so, what's really really nice about it, that all of you can actually take it for a run and see how it works. I really like it. I like how fast it is. What we're trying to do in the open source project of it is to create the easiest setup possible for being able to work with either Drupal or I guess any PHP project compared with an example I saw of a commerce Of Magento example that they had like this giant docker file that you really really need to dive into, understand docker, to make any changes. And here any change I want to make in the regular DDEV set up. We have the configurable. I can make that change, do the restart and it will take effect. So that's what I really really like about this, that this can support anything with a simplicity of DDEV.
Also from here, right, I can submit... patches, do anything I'm used to. They have two different parts. There's the project part where you can install extension, which is what we're going to do, probably adding PHP debug as part of the project. But if you have your own extension, you'll have form VSCode, it will know to bring your extensions into it. So, usually we have a pile of extension and then it makes it very easy. It works with environment variables whenever you need to share secrets or get your application to do certain things that get certain access. The long term, which again, after this bug is being fixed in the next few days that I would like to do is creating a Composer plug in that any project would run a composer command. There's about four or five files that we need to make this work. And once you add it into your Composer now this whole setup lives in your project without really affecting your project. The extra files you're going to see in your project are these (UNKNWON) file.
And as you can see here, you can take it and do whatever you want with it. Here is where we are installing the PhpStorm projector. Here's where we installing PhpStorm on the machine. Here's where we're installing the latest DDEV. You could change it and get the ddev-edge if you want. Goes here. The (INAUDIBLE) is where you have the set up of what happens in a pre-build. So, how do you prepare your machine ahead of time and what happens when you just open your workstation? And in this part, or modify or announcing which ports we know we're going to use. It seems like in April they're going to make some changes in ports, they told you the syntax of ports they write the ports - the unique thing that they give each workstation. They might be able to change it into what we're more familiar with, which is the URL stay the same : the ports that we want. All ports under 1024 are blocked. So, that's why we open the website on 808 and the different things here are also built in is what we have here.
If you want, is phpMyAdmin and what do you call the mail service? MailHog. MailHog as well. That just run the port and you'll see it happening. They have this little icon to help you see which ports are available and working. If it's a 25, yeah. So, this is MailHog right there and Is this phpMyAdmin? Yeah, so, you can decide if to put a VSCode extension to manage your database or use phpMyAdmin. And you can even change the theme, if you like dark or light theme. Anyone has questions or things that you wish this would do? You know, it's almost disorienting watching you do this because it's not even clear to us that you're doing it all in a browser. It looks like VSCode to us, because it is VSCode, but it's like it doesn't even... We hardly I mean, if your eyes aren't seeing the URL bar at the top, you're just like, "oh, well, yeah. So, what? This is what we always do, isn't it".
CATHERINE:
I have a question. I got as far as seeing my VSCode in my browser, but when I started to look for DDEV, it says it can't find docker. So, there's something that I missed and...
SPEAKER:
So let me show you something. Maybe that's where it's at. So, as part of the setup, which I also hope to make it a little better, there's three different terminals running in parallel. DDEV when you run it first time for now, the next few days it's taking time because it's downloading all the images and that's what you see DDEV run. So, the different terminals are, one needs to run docker-up all the time. So, we kind of keep that terminal to run in the background, we don't need to touch it, but we have to make sure that it is running. The other one is the one that's running DDEV. Right now this is also where I run PhpStorm and the third one. And you could open more if you want to do any kind of terminal. Kummetz, do you get a specific error there, Catherine?
CATHERINE:
Oh, I think I just got lost at the beginning. The other thing that I was going to ask you about is security, because it asked me to create an account and sign away all of my life. You know, I was always worried when it says it can make changes to my GitLab and GitHub and Bitbucket and Gitpod.io projects. I guess I trust you so, I said yes. And now I'm in here and I see this, I just think I got lost at the beginning.
SPEAKER:
I think you don't have to give all these permissions. Again, they're based in Europe. I think they care a lot about security and all, and they have all these certification and how they do different things. I believe that if I go to settings here, you can define what kind of... Is that integration, access, control? I think I'd give everything, but I think you can decide... I only let it read email addresses. That's all I do. Yeah. So, you can totally do that. But if that's all yours has Catherine, is read email addresses. It was only asking for your permission to get your email address from GitHub. That's all it was asking.
CATHERINE:
And actually the benefit of being able to integrate with all those platforms is certainly helpful but I could see if I were on vacation, for example, and I didn't have all of my stuff with me, I could jump on a different computer and do something and push the changes up to the repository with without too much trouble. So, I don't mind if it's a trustworthy platform, I I'm all for saving time and and so forth. Then the other question is, when I first first went in and I have this VSCode, I don't see a welcome, I think that I just see the VSCode file edit selection view and so forth. So, I don't want to hold up the works, but I want to put in the Xdebug extension. And it says PHP Debug, debug support for PHP with Xdebug. Feliks Bekker, built in. It says built in. And you had to you add it. might.
SPEAKER:
These are things that are going to change in the next few days. They are working with two different ID's. One is called **theta Thea is called VSCode. I believe today **thea Thea the default one in a few days, VSCode going to be the one. Just so you can see for now where you setting that? That's a great question. In your settings...
CATHERINE:
It says open VSX Registry, So,..
SPEAKER:
So, Thea is a little bit more complex because it supports things, but because of Microsoft, they cannot do certain things. So, when you go to the bottom of , in Gitpod.io /settings, this is the feature preview that I want to enable. And here the default IDE you choose code and you're going to get VSCode.
CATHERINE:
OK, let me see if I can figure out where settings are.
SPEAKER:
So, Gitpod.io/setting in the URL. Or click on your picture, then hit settings.
CATHERINE:
oh, on my own picture, OK. And account, share works days. Is it on the account? No. So, there's a little menu...
SPEAKER:
Are you in VSCode now or...
CATHERINE:
I don't know where I am, but let me do...
SPEAKER:
I suggest in the URL to type Gitpod.io/settings. That will take you directly to that page.
CATHERINE:
OK, and receive important e-mails, receive mercury emails, that's fine. Environmental variables. Git provider integration's and...
SPEAKER:
Turn on the feature preview and (CROSSTALK).
CATHERINE:
Enable feature preview and we called IDE. It is code...
SPEAKER:
But the feature preview wasn't enabled, right? Yeah, that wouldn't have been working. Yeah. Most of the stuff wouldn't work with that on.
CATHERINE:
Now I can go back in my history and...
SPEAKER:
So, as they go they're adding functionality and sometimes they would make it our preview beta functionality. So, not everybody needs to test different things. So, he's testing the latest greatest. In a few days it's going to be part of the main branch. So, when you open I don't know if that's a setting or but you would see the readme open up right away when you initially open a project. I've seen that that Drupal.org start having, that module contributors can get a life preview. I wish that would we get to a good working point with this one we'll be able to add some kind of a button on Drupal.org for people to just click it and start contributing to core modules and things like that. Won't that be great? Won't that be great? Another interesting thing that I thought would be very useful is because we are using DDEV and it's in the repo of my company, I can run the same set up of DDEV as in Gitpod. So, most people maybe today, because it's not the future yet, would be more comfortable with their own machine.
So, the same DDEV set up would work for them and they would run everything they need to run. But because then the repo is somewhere in the cloud when they need to access that, not in the regular machine or for some reason they want to test something else, Gitpod should work the same way. The part of the machinery of how we make it work and in bend a few things because Gitpod has their own way of doing things is in .DDEV for now we're adding this script file that checking what is the unique workstation URL we got and what are the available ports in according to that setting that up for DDEV. But that would not affect your normal DDEV set up. Yeah it says that i have a warning on my ddev run terminal. It says dread ddev ddev 1.1 6.7 is already installed. So that must be from before when i was trying to hit command. It's it doesnt.. Did you? You probably... If you only enable feature preview now i would suggest to stop their workstation that you're on and start a new one because i believe they're building it differently for you because of the feature preview.
But just hit stop workspace and it goes away or how do I...? Yeah when you do stop workspace it will tell you it's stopping and you don't need to stay on that window at all. You would just go back to the actual repo over here and you can click again on this link it should ask you If it asks you do you want to use the old one you say no i want a new one OK Yeah. Let's go ahead and finish up with questions about you know conceptual questions about git pod and then we'll move on to one of the other things. I think what we'll do for the next one is we'll take a look at custom commands using git pod. So what conceptual questions or future questions do we have for offer on this? How many of you followed along it's cool? Yeah. i sort of put it in the chat too but i'm curious how frequently are those URLs changing workspace and i'm curious about a multi site setup. It assumes, it makes some heavy assumptions about its default but if you had a multi site i think you could just put your you know copper ferret dash whatever URL and sites php they are a way to make those may be more consistent or reliable That's really really annoying.
Go ahead. Yeah so the way good parties thinking about things is they're talking about each one of these workspaces as disposable so purposely they want you to as many times as possible stop one start a new one because other changes might come and you always want to work on the fresh one and not on another one. By the way another note, if you have a working workspace it will stay there for 14 days but if you pin it, it will stay forever. So it doesn't go anywhere it's a great system to continue working on things. I guess that's Randy's help more of what we do... Im just guessing but a multisite support would happen in a similar way of how we're dealing with ports right now where we're reading the current workspace that was given and giving it an additional prefix Well we it's not the port because we're using the router right. We originally weren't using the router and now we are again. But we'd have to add additional host names and i don't know how git pod handles those. So we don't know the answer to that.
We haven't tried it with multisited. It's not about multi site, it's about having multiple hostnames that map to the same project. Other conceptual questions? Yeah. I use pattern is to use an enterprise Drupal installation that's sort of centrally managed i work for the university of minnesota and they have sort of a core drupal installation that's it's managed for us but then our sites will be you know just the site's default subdirectory in its own repo. Can i combine repos this way and you know spin up a drupal installation using ddev and get pod because that's pretty easy to do on a local host. But in git pod? I don't think there's any difference. OK So you know git pod is just a hosting service and an editing service and ddev is putting the web server up and if you're doing that locally there really shouldn't be any difference especially if you're using a single hostname to access it. Sure OK so that i guess i was basically spin up the drupal installation in git pod using this and then do it like a git pull you know git checkout of my own repo for the site's default folder and continue to that.
Offer is going to make a composer add on You gotta see how to bring it into your projects. Yeah so today if you want it this is right away, These are the few files that you need and if you take this file and this file it should work and git pod yml. Yeah so git pod yml, git pod dockerfile, ddev config yml and ddev gitpod setup ddev these are the four files that you need it would work the same on any regular let's call it drupal project. Yeah the composer plugin would make all that work much easier because then we will version the different features that might get added but and then you'll be able to bring it to your project and it will only affect the git pod setup. All right. Well i was thinking that the next thing we should do is make a terminus command. Who was it that asked about a terminus command? There we go. So let's just do that in vs code. So we'll do that using git pod. So i've got my git pod going and i'm going to share my screen. And here we go. Here's my ddev list and if i type ddev, i don't like being stuck in this little tiny terminal most of my screen is really taken up with terminals but if i do it..
just type ddev, it shows me all the commands that are available to me and what i want to do is to add a terminus command and the normal place to.. The place that you would add commands that you want to show up for every project which i think your terminus example would be, is in the home.ddev directory and in the commands directory and in this case we want something to run in the web container. And so here's a few of the things that are already there drush is one of them and i was suggesting that we use that as a pattern. So now vs code here doesn't show my home directory and i would prefer to open a file here with it. Can i do a file open of a particular file apache. I can. There we go. Tab didn't work. Are you're looking for an existing one? I'm just going here. What i really want to do is go to web and i'm going to use drush. I was looking for how to open it. I was gonna open vi in the terminal and i thought that would be evil. so here we have a drush and what i want to do is i want to save this as a new file and i'm going to call it terminus.
And so what i want to do so this is just a batch file this is a standard thing in the world here. I'm going to remove the ddeb generated here because it's not, it's your own, and you want to keep control of it. And we're gonna say run pantheon.io terminus command in web container. And i'm gonna say terminus here and what's a good terminus command? ddev terminus site list. Is that correct? Terminus drush commands are great Ohh! But is site list a valid one? We're gonna have a hard time using this because we're not authenticated. But in the project types we can remove this because well it's probably drupal 789 and backdrop and wordpress right. Because that's what they support. They probably don't support backdrop do they? And then we're just going to say terminus dollar ad to pass the commands on to it and so all we've done here i mean we've just copied and pasted but we've just created a new custom command. So now i'm going to go over here and i don't think you even have to do this anymore but i'm gonna make it executable.
I think ddev now makes it executable for you and now i'm going to go back to the project workspace, ddev get pod OK. And if i type ddev there is a terminus command and it says run. It's what i told it to say. And if i say ddev terminus if i just type ddev terminus it'll give us a list of the terminus commands and i can't do a site list. What can i do without authenticating? Not much. So this is what i did. This is good enough. Not much as useful beyond that. Does that makes sense for for custom command? So we did that with a custom global command, but when you're working with a team or you're working with something that's a little morelittle less generic than terminus then you would do that in the project commands web directory which has some other examples there. I got to remove that drush dot example since we have a real one So that's very cool. I didn't know it's so easy. Can you repeat the difference between the two places you could do it and why would you do it in each one? You betcha so the global one will show up on all your projects and the one that's in the project will only show up in that project Oh so the global one is on ddev it has nothing to do with your project That's right that's right.
The globaal one will show up everywhere. The project one also in most people set up will be checked in with the project which is an advantage for a team when you're adding something that is for a team or that's for a specific project. And we just did that in offers, well in my copy of ofers git pods we just demonstrated that whole thing with ddev right there. That's very cool. Yeah and keep in mind that it's until you actually push it somewhere i don't have access to it even that you used my setup. Yep, exactly and i do think somebody was asking about security a little while ago and Hope and i have gone over this a few times let me go ahead and share my screen again. But the security i think is very important and i'm not fully come to terms with it yet but i leave mine... let's get this out of here. On my settings, i think that's where it is right? Where is it? In your picture i think access control is where you want. Oh i missed it. Yeah i was right past it. So you see that i haven't authorized anything at all.
I don't use github or bitbucket at this point and so i've only authorized github to begin with but i've given it only the ability to know how i'm logging in. If i have to do a git push then i will temporarily enable the right public repos but i don't want that on by default because i'm still learning about the security implications of this. There's other ways also of getting your ssh key in here instead of using their access key. But i think the security question is very important and i think that paying attention to these buttons here is terribly important. So i would start with just that and nothing else. Yeah where we found the issue arise is one of the options i can open a workspace and then that link that always get a funny name there is shareable so the other person that i shared with or if i posted on public slack can go to that machine then if i have write permission they also can use my git for me. It is as if i'm logged in and doing everything. That's not good Right so never share your workspace but the other feature you have... He is picking on me 'cause i shared it today But they do have an option to share a snapshot of your workspace.
So that is whatever the database that whatever you did there that is a shareable link that has nothing to do with you as the user. Each user would have their own permission and only access to whatever they can access. OK so one of the other things let's see if anybody has a last minute question about custom commands or... Is there an easier way to share.., not easier, easy way to share comments like is it in ddev contrib that i can just download it? So there's a whole bunch of them and data of contrib but of course for your team the best places in your project and you just check it in right. So that for your team that's the answer but yes there's a whole section of them in ddev contrib Could i ask a question about versions of ddev... Can i ask you a favor i should have asked you this a long time ago. could you turn up your input volume your microphone volume? I'm sorry yeah. I don't have very good audio. I'll just talk louder OK i can hear you I can hear you So on git pod and on my local machine i have 1.14 and i have not worked with ddev to where i ever had to upgrade it So i don't know whether there's an implication with having a project say that i'm working on gitpod.io and then i bring it down locally and worked on it.
Locally would i run into version issues or should i have to always make sure my gitpod.io is synced version wise on ddev Git parts are gonna use the current version. And those of us that do support and maintain things would really very much appreciate it if you would upgrade yours as well. You're not gonna have any trouble going from 1.14 to 1.16. And so the real answer is to...the real answer is...please use the current stable version so that you don't end up with support problems that have already been answered by the new stable version. Right. I did have issues like that working in a project with other people. Something that worked for me did not work for them. They had an older dative with a bug that was already fixing the current version. So, yeah, upgrading to the current version is gonna be beneficial.
CATHERINE:
Is it just DDEV update and it won't break anything if I mean, I...
SPEAKER:
What operating system are you on?
CATHERINE:
I'm on (UKNOWN). And this one I'm on 18.
SPEAKER:
OK. So if you're using brew. If you're using homebrew (INAUDIBLE) then you'll do, OK.
CATHERINE:
I know (INAUDIBLE) has through command than I'm not of...
SPEAKER:
OK. So just go to...here. Let me just show you here. I'm just going to go to DDEV readthedocs.io which is the page here. And on that page, it says how to install. And it says here's the Homebrew technique which you didn't use. And so you go down and it says the installation or upgrade script which you apparently did use. And here's the command for you. Will I use Linux, I think I really enjoyed using brew? I don't know if it's possible for you to switch it.
CATHERINE:
I did. I didn't know...I don't think they had Linux brew back when I started using Linux. So I haven't...I guess I'm just a creature of habit. But...
SPEAKER:
It's your choice. You can just use the upgrades grip like this and you'll be fine.
CATHERINE:
And that will not overwrite anything that will break?
SPEAKER:
Yeah, with the reality is, you know, I can't...I don't know everything about your world. But the reality is DDEV is a single binary. And that single binary is where all this stuff is going on. It doesn't have like DLLs or anything like that. Or shared libraries that it's installing or anything like that. It's a single binary. When you do that, you will end up going to do a DDEV start. You'll end up pulling all the latest container, the latest images. And so you'll want to do that. But that, I mean, does not...it...you will do that. That's what will happen. But I would say that at least 95% of the time, you will not even know the difference. And you're just better to stick with the current stable version.
CATHERINE:
I will do that, thank you. SPEAKER: Alright. Well, let's go ahead and take a quick look at what's in the upcoming version. And we can talk about...we can talk about what might be there. And that's kind of a part of talking about the kind of a part of talking about the...the road map because that's the coming very soon road map. You go there. And... I will just get out the...the release notes that I'm working on so we can see what's going on. One of the very first thing I notice is that we don't have to say to do a DDEV power up anymore because DDEV will offer to do that for you. So...what...one of the really wonderful things that's gonna be in 1.17 and this is available now, of course, in the release candidate, but Composers' now version two by default. But you can still use version 1. It tells you how here. We have now a provider integration system that is user-configurable so you can change it or add other providers. We're talking about hosting providers here. So if you are using Acquia, you can pull from Acquia with the data pull Acquia.
OPRAH:
But if you're using some other thing who's another hosting provider that we don't have supported here, you can just, if you have a homegrown one, you can just implement it yourself very quickly and easily. I can. I guess I won't dive deep into that. I'll be doing a screencast on that within the next bit to show you how. But there's links here to how all of these work. And you can create your own, add your own. There's an arsenic example. There's a local file example. Like if you use Dropbox and you have a normal database that you're always installing from Dropbox, well, that's just a local file pull. It's nothing to it. We've added support for pushing to hosting provider although I'm still trying to talk people out of using it unless they know why they're using it. We have official support with the Apple M1 with the...in the Apple silicon. A whole bunch of really cool improvements to DDEV snapshot. You can now select. You could just do a DDEV snapshot restore and select from the snapshot you want.
You can restore the latest. Is everyone familiar with snapshot? It's a really good feature.
SPEAKER:
Yeah. Yeah. So if I go back to my...if I go back over here to my Gitpod. And go to the right Gitpod. When I don't know where my right Gitpod is. Here, this is how you can go back to something where you were before. So here's the one that I was on. And it...it's apparently timed out on me. So I can just say start and it'll open that up and bring it back up again. So I'll just show you what snapshot is. But I'll have to upgrade DDEV to...I won't fool around getting the latest details here. But I will show you a snapshot because that feature has been in there for a year or two and it really is nice. But basically, snapshot takes a snapshot. A very fast snapshot of your running database. And you gave it a name. And then you can restore it when you need to.
OPRAH:
So it's great for backups, but it's great, great, great for when you're incrementally working on a problem. So, for example, if you're working on a migration. A migration usually is a many step process where you're... you get a piece working, but then you have to work on the next piece. So what you do is you save the one piece. And you save it when you get to the one place and then you start working on the next one. And every time you need to get back to it, you just go back to this DDEV snapshot restore. So let's see what we've got going here. It's not started up yet. You might still have it downloading in the other terminals.
SPEAKER:
Yeah, yeah. Yeah, so... Which is not gonna get fixed in next few days. Yeah, yeah. So that'll be ready in just a second, but a snapshot saves a very fast database so that you can come back to it and you can always start over at the same place even if you fiddled with stuff. It's also great if you're insecure about what you're working on. So if you're, you know, if you're insecure about whether you're doing a site edit. And you might just screw everything up, you could just do a snapshot before it. And you can keep going back to that. Or if you're studying a bug, that's another great and another great thing. When you're studying a bug and trying to find a recreation scenario for it, you can always, you know, if you find one, you can snapshot it and then you got it and you can keep going back to it and working with it in the next debug and that kind of thing.
CATHERINE:
Now, you would never put a snapshot in your Git repo as version control to, you know, as a archive. It would just...
SPEAKER:
Well, if you did that and you had a public repo, then you'd be exposing everything about your...what you're were working with. So I wouldn't do that. No, I wouldn't do that. I would...if you had you...the snapshots are just a directory. But you could put them in a different kind of storage, but I wouldn't check them into Git.
CATHERINE:
It's like sharing your Gitpod...you are...
SPEAKER:
A little bit. It's a little. You see, it might be a little worse because if you had a copy of your production database, then everybody's hashed passwords are in there. So I think it might not be the thing you'd want to do.
CATHERINE:
Yeah. But it's safe to have it on Gitpod because nobody on Gitpod can see it unless we were to...
SPEAKER:
Yeah, nobody can see it and I'm gonna delete this instance in a few minutes anyway. So this is how you do it. You do a detailed snapshot. Dash, dash name equals MidCamp. And it just makes snapshot right there. And then with this version, so it tells you where it made it and that kind of thing. With this version of DDEV, we don't have the fancy...the new fancy features where I can choose which one I want. Here, but I can make another one called MidCamp 2. In this version of DDEV, I would do a DDEV restore snapshot. Hey, we got to get the auto...autocomplete in there. So we do a DDEV restore snapshot dash h. Did I not type it right?
OPRAH:
(CROSSTALK)
SPEAKER:
I think DDEV's autocomplete isn't installed. And it has to be. Anyway, let's...we have to figure that out. So we'll do a DDEV snapshot restore dash, dash name equals MidCamp. And it'll get the first one that I did. Sorry, I'm using the wrong, the backwards. It's already lost out of my fingers. (LAUGHS) I can't do it.
CATHERINE:
Coffiage from the terminal.
SPEAKER:
This is the problem right here, right? So there we go. So that's just the quick way to get back to where you were and you can get back to any number of things. The key to snapshot, though, is use a good name for your snapshot. The default is a date time sequence. And so do you. You don't want to use it. Acquia is a good one for that.
CATHERINE:
I used it in project where with a huge database that took half an hour to do an import, but snapshot took, I don't know, 30 seconds or something. Except way faster than getting the My Sequel import database.
SPEAKER:
Yeah. Because it's actually saving it in the native format. It's saving it in the actual native format. Let's run through the...so there's a whole bunch of improvements to DDEV Snapshot here. blackfire.io is now in there. And we could actually demo that, but that would be another demo. blackfire.io is a profiling technique. It's a commercial service, but they have a good, free. It's actually quite a generous free setup. So now there's a DDEV Blackfire on and you can just immediately do Blackfire which is (UKNOWN) very nice. If you are used to creating a lot of projects and you don't want to answer the questions that come with DDEV config, there's now a DDEV config dash, dash auto that just takes you quickly through the process. It's just a one-step thing. This is a big one. You can now create environment variables in your config.yml or your global config.yml. So you can create them globally or you can create them in your project. And it makes a huge difference. If you wanna share secrets, you can put secrets in your global config.
OPRAH:
You used to have to do this in dockercompose.start.yml and you don't have to do that now. And now...we now have a database browser if you're on Windows. So DDEV HeidiSQL. The defaults have changed for a PHP version. So PHP 7.4 is now the default for new projects. And the MariaDB default for new projects is now 10.3 which makes it easier with Drupal 9. You don't have to think about that with Drupal 9. And then the new Ducks' themes is very cool looking. And has better features as well. I don't think that any of the smaller changes are very interesting to this crowd, so I'll just skip those things that might change for you that might impact you. If you haven't been installing Drash in your Drupal 8 or 9 projects, you need to install it because it's not gonna be there and use your local bin, Drash on those on those versions. Composer 2 is now the default composer version. That's working with most things now. Drupal 8, 9, Drupal 9 plus. All of them work fine with Composer 2. But if you need to switch, it tells you how to switch to compose a version one.
And, of course, the provider interface is completely different so people that were using it before, it will take a little bit of...but it's pretty easy to get used to 'cause it's a lot simpler. You don't have to do the author, the config steps anymore. So I think that's most of the 170 things. The 180 things. When one 1180. I haven't started thinking a lot about it, but most of these are not big new features. So although code push and pull will probably come along for provider integrations so that you can do a DDEV push pantheon and it'll do the get push for you as well. So that's a big new one. And I think most of the rest of these are bugs and iterative improvements. The DDEV roadmap, which I don't maintain as well as I would like to, Google has the wrong. Google has the wrong thing here. The...I think the biggest thing that we'd like to get in that is probably beyond my ability to maintain right now is having gooey instead of just to text one that would make it so accessible to people.
But I think it probably expands beyond my ability to maintain it. And since I'm the maintainer, we have to keep things to where they're maintainable.
CATHERINE:
That's going to be like an electron app or something?
OPRAH:
Yeah, yeah. And we actually had an electron app in the past where...there's an actually native go gooey stuff that it could be implemented in. But, yeah. What I'd like to do is in have it in a native go so that it be all maintained as one thing. When we had it before as an electronic app just that...just ran the deed of command line, it was a huge thing to maintain and it didn't have tests and it may work.. It's up... (INAUDIBLE) But it just couldn't be supported, you know, because it didn't have tests. And because it was electron, you know, it's a whole different world, completely different world. So, it needed somebody else to be paying attention to it and (INAUDIBLE) didn't have the resources to keep anybody's eyes on that, which only makes sense. We'd like to expand the CMS support and improve the CMS support. We're getting quite a lot of traction in our Magento support and our Laravel support and what else we have? Several other things, but Sulu, Joomla, craft CM's, it would be great to have explicit support for those.
So, anyway, OK. And questions about roadmap or upcoming features in the next couple of weeks in the (INAUDIBLE) 18. You think you might like I really like (INAUDIBLE) milestone in their issues? Yeah. Do you think you might do something like that so then it will be feasible? I mean we have it in milestone, so here's the 117 milestone. We're almost done. Here's the 41 (INAUDIBLE) You're not sharing your screen. Oh, I guess I had to share my screen. I just now turned it off. So, here's the 117 milestone here, this is the one remaining open issue, here's the 41 that it closed in this. We can look at milestones here, and here's the 118 milestone, so I don't usually maintain these more than one milestone ahead. But, does that answer your statement? Yeah, I did not notice we have milestones. It's great. Yeah. It's a pretty simple technique for tossing things in and prioritizing them. Any other questions about the path forward? Anybody? Do you want to take a five minute break and come back and we'll look at some of the things?
Why don't we do that, we'll come back, is five minutes enough when we come back at 2:40, right? Come back at 2:40 Central Time. That's right. We'll be back at 2:40 Central Time. OK, we back. Anybody back? Tell me, is anybody, back? Oh, at least Ben is back. Ben and I can sit and talk and I can start without everybody else. That's good.
CATHERINE:
OK, looks like we lost a couple of people, which is not surprising. We've been going at it pretty hard, but we can have a good time. Either of you have a favorite paper question or topic that you want to deal with this afternoon? I'm personally curious about extending with docker files and such, extending some of the things that we might be able to do with this. I'm kind of a newbie to (INAUDIBLE) I'm kind of a newbie to DDEV in general, but our team is quickly adopting it a lot faster. And one of the things... First things that I had to do was enable like a custom connection to an Oracle database, for example, for some info. And so I needed to drop a custom docker file to get the appropriate extensions PHP, extensions and such. And I'm just wondering if there might have been easier ways to do it than what I did? So, yeah, so that's a great question. So, let's go that direction, we'll look at how to add an extension or a Debian package into DDEV and we'll look at where most people get their copy and paste solutions from.
So, we'll do both of those things. So, I think the first question is how do we add, just add at a package. So, we'll do that. I think you're your Oracle question is a little more advanced because I think they require you to have a separate repo and so that you have to have a separate repo you are stuck with using a docker file. But it sounds like if you've already been there, you've been in the really advanced land. But let me say first, I'm going to share my screen here. And let me say first that most people go to DDEV Cantrip first. They go to DDEV Cantrip first to see what's there, and so I wonder if this has Oracle in it. It doesn't have Oracle. I hope you'll paste. I hope you'll provide your Oracle recipe. There are examples here with Dr. Campos that start at YAML snippets. There are custom command examples. There are additional services for many different things. And then there's Dr. Phil examples like for the striped CLA or Laravel cue worker, and then there's some full tutorials.
So, for example, setting up Drupal multisite, that kind of thing and some type of three examples, headless chrome, things like that, that either will solve your problem or get you started on it. And there are also a pile of things in stack overflow where they're tagged, tagged data. This is a great support place because it can be maintained easily, and so it's a great place to ask questions, especially if you're not in a super hurry. I mean, they usually get answered really fast anyway, but they live on here. And you can edit your question and edit your answer and people can comment on it. And it's just a great place. One more place to look is an awesome DDEV, which is a list of people's blogs and that kind of thing. And I always want to hear too when you have something that should be added to this, if you write a blog or something like that, we want to have it. We want to have a link to it in here. But there's lots of stuff here, including all of my articles about DDEV which is quite a lot.
And sometimes they come at these problems from a different angle than the docs can. So, for example, this casual web posting, which we won't get to today, this is a screen cast that helps you to understand it from a bigger picture point of view. So, there's a lot of options there, but let's just go and find out how we would add a package to begin with and maybe we'll just do this with our... Are we still live here, still live, but do that with this. I like the new doc, so I'm going to switch to them and we will search to be in customizing docker images. So, I think you've already been here and you've already started to understand this. But the easiest thing is when you just need a package, an extra package like one of those is you just go and add web image, extra packages to your configure YAML. So, the default packages, there's many of them already in there, so these are already in the base distribution that we use. So, you don't really have to do anything. But then you could go searching for other types of packages that you might need by going to packages (INAUDIBLE) and then we can do what if that is not adequate, which it sometimes isn't like if you need to install a different node version, here's a recipe for you.
So, these are the, if you know what package you need, then it's really easy to just do the Web image extra packages. That's nothing to it. But when you have to do something fancier then you're going to have to end up writing a docker file. And there's a docker file examples in your project. So, we'll take a look at that. But I'm actually just going to take... I don't really want to take that one. Let's take a look here. Let's just search for docker file and DDEV. So, here's a classic thing of where you just want to run a yarn command before your project even runs or anything. It's not as good as what I want. Here's MBM. So, a lot of people need MBM so they can switch Nod versions in the project. And so you can take the top part is boilerplate and then you can do whatever. This is the documented process for installing a MBM here. And so that's a technique for you to do it. So, if you wanted to install Oracle, I imagine you need the PHP, the Oracle PHP extension, right? Yeah. So, this one uses the PECL repository, and so now what we've done is we've done a Web search to find out how I get the Oracle PHP extension, and then we find out that we want it to come from Pecl or from Perre.
And so I think that the docs actually tell how to do that, but they might not. No, they don't. So, but the stack overflow does. So, you find here, how can I install a PECL extension, like encrypt. And so this is exactly the same issue here, and we're just going to do a PECL install. So, here we did a Pecl... Here we did a PECL install script, and in the case over here, it'd be a PECL install or (INAUDIBLE) And so that's what we would do. And let me show you where you would do that. So, I'm just going to take this and copy it. And I'm going to go over to our happy world over here. And if we go into the DDEV folder and into the web build folder and there should be a docker file that example there, and there isn't. I wonder if that's just... The reason I'm pausing is I'm wondering if it's a bug where the example is not being written. So, let's go ahead and use the proper editor here, so we go into web build and I want a new file called docker file. And I want to paste into it this stuff, and I'm going to use the 7.4.
And I want the 1.16.7 (INAUDIBLE) Oh, no, we don't have to do this at all. That was an older version. You probably want to remove the first line. Yeah, thank you very much. It's not going to work, is it? So, we don't need this line here, I don't. Oh, yeah, we do need it. But we don't need to (INAUDIBLE) here. So, these are just the requirements for doing PECL and we want OCI8, right? And we want 7.4. And it's probably OCI8. This should have been (INAUDIBLE) PHP version in the first place. And this should be OCI8, and who knows, this could work, it may blow to smithereens, but you see now we have a docker file there. We do a DDEV start. Normally, I would do these commands one at a time in the Web container, I would DDEV (INAUDIBLE) there, and I do these commands one at a time until I had them working, right. That was going to be my follow up. I didn't know if there were some hints they had of doing that other than like stop the container, comment on what broke. Try it again. So, I am going to do it.
I'm going to do it the way I would normally do it, because that's the way to do it anyway. So, (INAUDIBLE) I'm going to set. Make sure that I've got the right thing here. No, I don't. Oh, we're back a version. So, this is going to have a little trouble anyway. So, I'm going to do (INAUDIBLE) upgrade. And then to see if I can get through this process here. And that will... It didn't blow up yet. OK, we need to leave SSL there. And so I don't know what I have to do to solve this, and I probably shouldn't try to solve it in front of you here. That means the beginning of it of what we're trying to do? Yeah, so what's that? I missed the beginning of it. So, what we're doing... Yeah, sorry about that. Yeah. You came in. What we're doing is we're doing a PECL, a custom docker file that does a PECL install of something that isn't in the normal repository. So, in this case, it's Oracle. So, we're trying to install... we made this docker file here, and DDEV with built docker file and...
JOANNE PATALANO:
What we're trying to do is install this PECL extension, since it's not in the default stuff. So, now what I'm going to do now that we've installed, hopefully most of the things, the prerequisites, I'm going to do a PECL. We're inside the web container here, PECL install OCI8. Oh, that's OCI8 now. We don't want OCI8, we want... This is I just landed here on the Web, so obviously I'm doing this (CROSSTALK) Oh, there we go. Thank you. STUDENT: It goes right underneath it. Thank you. Keep going, keep going.
STUDENT:
Right, where you were, but the literally the next line under it. For PHP 7 use PECL install OCI8-2.2.0.
JOANNE PATALANO:
Or PHP 7, you just tell me what to do. I can't see it.
STUDENT:
A little bit up like one inch.(CROSSTALK)
JOANNE PATALANO:
It was there. That's pretty good. Well, about that, we'll just do that then. So, I gotta go back to my place here. So, I want to do that. And I don't remember how to install PHP Eyes. So, you have to get PHP Eyes in there. This isn't that hard to process, but I don't want to go into the wild, the wild woods with everybody looking on and wondering what we're doing. But the bottom line is that to solve a problem that's complex and requires a custom docker file. The first step is find out how do I do what I need to do in regular Debian? So,, that's a first step. And so, that's why we searched for Oracle with PHP and we found our way here. And so, we found out how to do the PECL install on it. So, that's the first step. And then the next step is to experiment with it inside the web container using some of the resources like this one, which is about how to install a PECL extension and to adapt what we have.
OPRAH:
And then once we understand what we would be doing, we have to get PHP Eyes in there, obviously. So, if we were wanting to spend a lot of time on this, we'd just go search and figure out what I'm missing about having PHP Eyes in my container, and then we'd manually do the PECL install and then whatever other clean up needed to be done. And then we would then put that into our docker file. And basically, once we've found the correct formula, then we just put it into these run statements and check it in and there we are. And we do a DDEV start and it does the build. As you already found out, it takes a little bit of work to find your way through it sometimes. But the bottom line is find out what you need to do in Debian. Do it by hand, and then put it in a docker file.
STUDENT:
Yes, those resources, too, are very helpful. I'm not sure that I found everything that you were pointing at now back when I was trying to do all this. So, I was making my own way through it. But...
JOANNE PATALANO:
It's very impressive that you did that. That's definitely advanced. One of the things is whenever you start getting into the docker composed (UNKNOWN) or when you start getting into the docker file, all of a sudden your need for knowledge has gone from, "oh, I need to know how to do DDEV start and DDEV dev launch too. I need to understand docker and docker compose and what the integration is like and Debian and all those things. So, you just start multiplying and that's pretty... It can be a little work as you know, as you find out. But the fact that you can do it is really good.
STUDENT:
What are some of the more common web packages that are easier to install that people might need to think about?
JOANNE PATALANO:
Some of the easiest ones are just when you can just add a Debian package. So, like in the example in the docs. So, if we just needed a PHP extension, that was already supported. That's all there is to it. So, that's an easy one. The doing a yarn install in advance is another one. So, somebody wanted global PHP C S, the code sniffer. I don't know why they wanted it, but they, here's the example of how to do it, do it with a composer global install for whatever reason that they wanted it instead of it built into their project. You can get really obscure. Hopefully, most people won't have to go there. So, for example, you can override DDEV's PHP.com and stuff like that.
OPRAH:
There's a lot of things you can do here. Oh my goodness, there's a lot of things you can do. See if I can get myself back to where I'm supposed to be. Oh, you weren't even seeing my screen as I went through all that stuff. I apologize. You've got to tell me when I'm doing that. Sorry about that. So, what I was doing was I was I'd search for for DDEV and docker file in Stack Overflow, and I was looking at all that. I'm not even sure when I turned off my screen. I really apologize, I hope I wasn't rambling on too long without any context. Are we exhausted yet or do we want to do something else?
STUDENT:
Excited.
JOANNE PATALANO:
(LAUGHS)
STUDENT:
So, much cool stuff (CROSSTALK) extra services.
JOANNE PATALANO:
Now let's take a look at extra services then. So, we will just do that. I'll share my screen. And we will go to the extra services, I'm going to go to the latest docs because I like the look so much more. So, here's the additional services section of the docs here. And the classic example is Apache Solr. A lot of people need that with Drupal, but it's also one of the most complex that there is because solr itself is complex. The docker-solr container is complex and the Drupal integration is complex. And so, there's a number of steps to install it and you can screw it up a number of places along the way. And then worse than that, the people that maintain the solr container, they seem to change the model of how they maintain it periodically.
OPRAH:
So, the current documented technique is for Solr 8. But (INAUDIBLE) and Pantheon, like Solr 3, 4 and 7, and they don't work exactly the same, so, there's a recipe for them in DDEV cantrip. But let's do one that's easier and it'll be a good example for us. Let's just do Memcached. So, What we'll do, are you all familiar with Memcached? Are people still using that in the Drupal world? It used to be standard on every non-trivial Drupal site. I can't because I'm sure my screen I can't see you if you nod your head or anything.
STUDENT:
Yeah, I have a few projects still using it.
JOANNE PATALANO:
Are people starting to use Redis or what are they doing?
STUDENT:
Pantheon's supports Redis as an add on. So, a lot more people, I think are using Redis (CROSSTALK). So, they're like there's less of a need for it but...
JOANNE PATALANO:
So, let's do let's do Redis, we'll go ddev-contrib. There's a whole bunch of services here in ddev-contrib. These are community maintained. I try to try them out before I commit them but they you know, they don't have tests with them and so, they can get out of date. And when you find a problem, it's your job to solve it. This is a community maintained thing, but here's Redis and redis-commander. So, I'm going to open the Redis one and the red is commander because they're both very nice, very cool, and they're easy to use. So, the first thing that they did was they added a commands Redis directory to the commands folder of the project DDEV folder.
OPRAH:
Of course, this was written before there was a global commands section. And then they say, change it if you need to, which we don't need to, and then update the config as you need. So, I will just do what it says here. So, I'm going to take the redis-cli Command, I'm going to get the raw version of that, and I'm going to go back over to my still running thing here. And here I am VdeV Gitpod. And I'm going to put it in the project commands for now, because I'm there. And so, I'm just going to get that redis-cli custom command. And let's just take a look. We'll just take a look here and see what's in it. This is just like what we've been working with. There's nothing to it, it's just showing what the command is to run the redis-cli. So, now we have a redis-cli and we would go back over to ddev-contrib if we can find it we don't get lost in all of our tabs. Here we will do the next step of what they suggest and redis, we copied the redis, we just made a custom command, which we didn't specifically have to have.
And now we're going to get the the Docker Compose and the redis config. So, we need this redis config and we're going to put it in into .ddev/redis.com. So, I'm going to get the raw for that. And I'm going to go back over to my Gitpod and I'm going to make Redis directory here. And I'm going to get that config and I don't know really anything about Redis. So, there it is and it's the standard Redis config. And so, now I'm going to go back to my instructions. And it's going to tell me that I need this dockercompose.redis.YAML. So, I'm going to get the dockercompose.redis.YAML., get the raw, and you'll see all it's doing is getting us a container, giving it a name, giving it labels so that DDEV knows that it belongs to it and it's got volumes for the configuration. This is saying that the web container depends on Redis which, I know that that is needed there. So, we will go ahead and go back to here. We will get that YAML file. And now, if I ddev start, I should have Redis, but why don't we get the Redis commander while we're here?
Because there's nothing to it. Here's the Redis commander. I don't think you have to do anything other than what it says here. I don't think you have to do anything other than this. Except remember where it is when it runs. So, we'll do ddev start. I'm going to do a ddev restart because I want everything shut down before it comes up. And I need to delete that custom doctor file. The custom doctor felt it was broken it was still in there. So, now it's opened the the Redis connection and I can open the browser, I'm betting that this is the... Now let's see here. Let's try this one. We haven't. So, this may be a complexity of working with this on here. But it doesn't actually make any difference whether I can get to the Redis commander with you know, we may not have adequate configuration, but I can do a ddev ssh. Now, I'm in the web container and I can ping the Redis container, and I can connect to the Redis container on the internal port. So, the port for that, is it 6379? 6379, it looks like it is.
So, I should be able to... And so, I'm in the web container, so, I'm looking at the world like your speaker does. And I've got a connection to it. I think it's HTTP but... it may not be HTTP, but the...
SPEAKER:
My php code can now connect to the Redis additional service. So, basically what we did was we added we go, we added two docker compose services to this. The Redis. YAML and the Redis Command dot YAML, which didn't really work out, but the Redis one worked out just fine, and your php would be able to do that right now. So, that is essentially it, and if you look at the Redis one is an example, let's look at the Redis one here, don't know what that is about. If you look at the Redis one as an example, this is similar to the Memcache Daewon. It's really not that much trouble you. You said that some of this is boilerplate from the docks, like container name is boilerplate. The image is the one that you decided to work with coming from Docker Hub. The ports is what ports are exposed. The labels are there to tell ddev how to find how to find that this container belongs to it. And then these volumes allow the allow the data to be cached. And then, you know, here's the command and we have the important stuff inside the Redis icon.
And then this is telling a couple of details that get merged into the Web containers configuration so that it knows it has a specific link to Redis in there. Questions about that, I know it's a it's a little intimidating because it requires some understanding of docker compose, but the the find other people's stuff in data Cantrip is a pretty time honored technique.(LAUGHS).
CATHERINE:
Someone was asking saying at Twitter, "Do developers know that Stack Overflow actually have a homepage?"
SPEAKER:
What's that?
CATHERINE:
Someone was saying on Twitter and asking if developers know that Stack Overflow actually have a homepage because we always end up seeing an issue and reading everything.
SPEAKER:
(LAUGHS) yeah, I don't read everything at stack overflow. I know it's very addictive, but I just, I pay attention to ddev and that's all I bid. But actually I serve, you know, I Google, I consider it one of the finest information sources on the web, mostly because of the voting up kind of thing, so that you end up finding out what the actual answer was. I don't know why Drupal.org even has a forum anymore. I can't even believe after all these years that they do because Stack Overflow does so much better. That the best part is being able to figure out what the real answer was, and that's due to contributors like all of us. Make sure that when you do something on Stack Overflow, you share your answer and you vote up the ones that are real and comment if it's not working and stuff like that. Any last things that we should do before we go? You've been terribly patient and this is loads of fun to do this with you.
CATHERINE:
Andy, thank you so much for letting so much me every time.
SPEAKER:
Oh, it's so much fun, isn't we all learn from each other. It's great. I guess we did do the things that people had mentioned, I think the Window 17 features road map, Xdebug with be code php storm. We did, you know, let's see if the... Let me just look at our other list that we started with custom commands and third party services we did, custom docker file we did, Web image extra packages. The only thing we didn't do was casual Web hosting. And that's that's pretty easy to try out. Let me give you a link to that if you wanna see how that works. Let me just get a link for that, from Awesome data, which is the only place I can find anything. So, I did a screen cast on it, so if you want to see how that might work out for you, here it is in the chat. Like I say, I'm using it for all the little sites that I have that I have kept around over these years, and it is really snappy on a twenty dollars lineout. I did have it on a ten dollar lineout. But then when I got when I got like five sites on it, it was running out of memory.
So, I paid the money for a twenty dollars a month line out and it is snappy. Those sites are snappy, they don't scale or you know I mean like if they got started or something it's not going to stand up, it's going to die. But for all the little sites in our life and all the things that are not super production sensitive. It is pretty nice. and you end up using all the normal techniques that you're used to using with detA. So, that's a nice thing about it. So, did I miss other questions here? I think we did it. I think we did great. I can't believe your patience. I have and I appreciate it very much. OPRAH: Thank you Andy..
CATHERINE:
Additional maybe quick question.
SPEAKER:
Yeah. Yeah, go for it.
CATHERINE:
One thing is we use like a tool like browsersync one way or develop themes. And like, is there a way to sort of add additional port forwarding through the web container?
SPEAKER:
So, are you using browsersync already with you?
CATHERINE:
Yes, I know this is the first
SPEAKER:
there's a nice recipe on Stack Overflow that tells how to do it. So just go there and... go to stack overflow and browsersync and...
CATHERINE:
And if it's related, I really enjoy using ddev share when I need to show the website on my machine to other people.
SPEAKER:
Yeah, ddev share is a good technique. So, I think this is the good one (CROSSTALK). Here we go. There's the browsersync. I think this is the one that's the best answer recently. I will paste this here. Yeah, ddev share is really nice. It uses and garak and you can just show somebody your project, you know, with get pad, but you can also just give them the URL to the to the thing that you are using.
CATHERINE:
Well, you can actually also run ddev share from it will work as well, although you don't have to share your URL.
SPEAKER:
But why would you do that when... So, when you already have a wide open port that you can just show them on get pad.
CATHERINE:
You said the ports deal still... Can you share the website without changing the workspace?
SPEAKER:
Let's try it. OK, So, here we are. Let me share my screen. So, that I don't go off into the wind again. OK, So, here we are. And here I have this running... and I should be able to go to the port, right, which are right here. And the one that's 80, 80 is the one I want right?
CATHERINE:
In the middle five down, two down
SPEAKER:
that one right there. Here we go.(CROSSTALK) Unlock that.
CATHERINE:
No, no you wanted the opposite I think.
SPEAKER:
Everybody see if you can hit that page and install Drupal for me. I mean, I've been to paste it. Yes, I'm going to paste that. See if you can see if you can hit that.
CATHERINE:
Pages isn't working. Can he try the opposite of the of the lock thing?
SPEAKER:
Yeah, I can. Let's try that. So, here I am, I thought I was an...
CATHERINE:
It's I don't know why it's weird....
SPEAKER:
It's backwards, So it was set up right to begin with. So, you should be able to hit that again and install (INAUDIBLE) to work on my side. Yeah. So, yeah. So it was open by default or or I had allowed it earlier. Might have been, but yeah. So it showed open and the icon is showing me what I can do with it, not its current state.
CATHERINE:
So, I cannot go to your workspace but I can definitely go to public ports.
SPEAKER:
So, that's probably if you're using git pod that's probably more efficient than ddev share, but ddev share is there for everybody all the time and it works great. So, let me just show you Dev share so that you know, so if I do a ddev share here it's going to, we got to add and garak. Well maybe we don't need to add and garak.
CATHERINE:
we should have a list of things that are good to add.
SPEAKER:
Here, let me just let me just do it on my local machine, I'm going to do a.... Make sure that this is running and I will do a ddev share on this. And it had a complaint, but I don't think the complaint is very important. I haven't configured my token on here, so you should be able to go to this new URL. And so, see if you can hit that URL and see if it takes you to my DNN site.
CATHERINE:
Hope you don't take down your computer.
SPEAKER:
Yeah, right, yeah, I'm getting lots of requests through there, so it must be something like working. But it looks like a smile. It is their mommy, so that's a ddev share is a technique that lots of people don't know about. It's really, really easy to use. All you have to do is to install and grok or install Angra however you want. That's just the ddev project that's on my on my local machine here.
CATHERINE:
And I got too many connections. I think it...
SPEAKER:
Yeah, yeah, well, it looked like I haven't even installed I have a paid account, but on this machine, I haven't even put the token in. So, it it'll hit them pretty fast.
CATHERINE:
It's recommended in Angra, even if you have a free account to sign in, because that would allow more flexibility.
SPEAKER:
Yep. And I don't have I don't have that. So, that's. Yeah, very cool. So, OK, we still had one or two more questions, so if there's any more, we'll just keep at it, but. Your call.
CATHERINE:
Do you know of any additional performance gains in Docker and Mac?
SPEAKER:
the Aksu, the traditional problem with Docker desktop on the Mac is that it has kind of a two layer file share technique and ddev and all of the tools like it have the actual workspace files on the host and they share those into the container and on Docker desktop. That's a two level thing. And on the Mac, it just has never gotten very fast. So, the technique that I recommend to everybody on Mac or traditional Windows is to enable interface, and that's in the docs. You just search search for performance in the docs and NFS it makes a huge difference. So, the M1 release that they just released today while we were on this call or write, you know, 10 minutes before or something is actually really fast. I didn't get it, but I was working with the experimental release that I think is the same thing. And it was really quite a lot faster. And I'm going to be interested to see if maybe you don't even need NFS an with that. So, on the M1, there might be an answer on on the on the traditional Mac and traditional docker desktop.
Unfortunately, with where they're thinking right now, they haven't made progress. They went down a big rabbit hole last year with a syncing technology that all syncing technologies are going to have reliability problems. And they had the reliability problems, even though the the performance was amazingly wonderful for certain, for most use cases. But then all of a sudden it would crash on you and it'd be wrong or it would, you know, mess up your actual data, which is not what we wanna do. So, the the issue is the open issue on this on the docker for Mac issue cue has about two thousand comments on it now and unfortunately there just all people griping. The answer for now is use NFS and hope for the best. I think they're going to come back to it. I think they may just have gotten exhausted by the search. They've tried a bunch of things. They won't do native NFS because it doesn't have what's it called file IO sync or notifications. It doesn't have Inotify, which is really important to find people..
So, that's the, yeah, on the Mac, it's kind of unfortunate because Windows is making such huge strides. And WSL2, we have such amazing performance because it's real Linux and the Mac, the Apple doesn't seem to care about you know like having Linux or anything like that, that's not in the world that they're working toward. They want a controlled environment that they're, you know, that is predictable and doesn't have all kinds of different user interface things in it. And there's good reasons for that kind of thinking. But for us as developers, people are jumping ship all over the place and leaving the Mac to go to do what SL2.
CATHERINE:
Thank you so much, Andy.
SPEAKER:
Thank you, everybody. It's just a huge treat to have you here and your patience, and it's so much fun to work with you and do come on over to the ddev channel on Drupal slack with their all the time and come in to stack overflow and everywhere else and it'll be wonderful. So, happy to follow up anything that was left hanging here. Thanks so much, everybody, take a break. Great, thanks so much. Bye bye.