Today we are talking about Drush, Core Contributions, and Drupal’s Past with guest Moshe Weitzman. We’ll also cover Cache Metrics as our module of the week.
Listen:
direct LinkTopics
- Moshe Updates and Clients
- Maintaining Drush Long Term
- Locale Performance Overhaul
- CLI in Core Initiative
- Which Commands Make the Cut
- Roadmap Contrib Commands
- Moving Commands Technical Hurdles
- How to Help From AI Initiative
- DDEV Add-ons for Local CI
- MySQL Toolkit Database Images
- Testing With Real Databases
- Devel Module Status
- Organic Groups Origins
- Where Ideas Come From
- Finding Drupal Early Days
- Release Cadence And Backward Compatibility
- Avoiding Maintainer Burnout
- Maintaining With AI And Xdebug
Resources
Module of the Week
- Brief description:
- Have you ever wanted insights into how cache is working on your Drupal site? There’s a module for that.
- Module name/project name:
- Brief history
- How old: created in Oct 2019 by Moshe Weitzman (moshe weitzman), today’s guest, a consistent core contributor, a member of the security team, and one of the rare few with a two-digit user id on drupal.org
- Versions available: 2.0.3, 2.1.0, and 2.2.0, the last of which works with Drupal 8.7.7, 9, 10, and 11
- Maintainership
- Actively maintained
- Security and test coverage
- Documentation - in depth README
- Number of open issues: 2 open issues, 1 of which is a bug, but is marked fixed
- Usage stats:
- 37 sites
- Module features and usage
- With this module enabled, your Drupal site will log all cache tag invalidations
- Additionally, cache tag invalidations will be sent to New Relic as custom events, where you can use the rich reporting tools available to mine for further insights. Many Drupal hosting options include New Relic out-of-the-box, and there’s a free tier you can use if you’re self-hosting, so this a reporting tool lots of Drupal sites can use
- Cache hits and misses are also sent to New Relic, so you can investigate things like cache misses as a percentage by cache bin
- Finally, the aforementioned README also includes information about how to use a different analytics provider, in case New Relic doesn’t meet your specific needs
- Drupal sites probably don’t need this kind of visibility on a regular basis, but if you’re troubleshooting any kind of cache-related issue, this could be really useful
[00:00:00] John: This is Talking Drupal, a weekly chat about web design and development from a group of people with one thing in common: we love Drupal. This is episode 556, a chat with Moshe. On today's show, we're talking about Drush, core con- contributions, and Drupal's past with our guest, Moshe Weitzman. We'll also cover cache metrics as our module of the week Welcome to Talking Drupal.
Our guest today is Moshe Weitzman. He needs no introduction because he's been in Drupal forever. Moshe, welcome to the show, and thanks for joining us.
[00:00:42] Moshe: Hey. It's wonderful to be here. Hi, everyone.
[00:00:46] John: I'm John Picozzi, solutions architect at EPAM, and today my co-hosts are, joining us for the second week, Scott Falconer, senior director, Drupal, applied AI, and agent success at Acquia.
Right back. How's it going, Scott?
[00:01:01] Nic: Good.
[00:01:02] Scott: Glad to be back again.
[00:01:04] John: And last, but certainly not least, Nic Laflin, founder at nLightened Development. What's going on, Nic?
[00:01:11] Nic: Not too much. Happy to be back. Uh, looking forward to, uh, talking about Drush and CI, uh, Drupal CLI. I don't know why I keep saying CI.
[00:01:21] John: There's a lot- It's CLI
a lot of letters. I find, like, in development in general- ... a lot of letters and acronyms, and it's kinda hard- Yeah. A lot of acronyms ... to keep them all, keep them all right. I mean, somebody asked me what LLM or w- we were talking about LLMs the other day, and I think I, like, used, u- like, filled in LLM with, like, words that may, may or may not have actually been what LLM stands for.
But anyway.
[00:01:45] Scott: Seriously, just strike acronyms from your day-to-day life. It, it, they don't do any, any good.
[00:01:51] John: Or, or just don't try to describe them. Just use them and then don't describe them. You'll be, you'll be fine, I guess. Either, either way, w- we're moving on. Um, okay. Uh, and now let's turn it over, uh, to Martin Anderson-Clutz, a product marketing manager for Drupal at Acquia and a maintainer of a number of Drupal modules of his own, to talk about our module of the week.
Martin, what do you have for us this week?
[00:02:17] Martin: Thanks, John. Have you ever wanted insights into how cache is working on your Drupal site? There's a module for that. It's called Cache Metrics, and it was created in October of 2019 by Mo Schweitzman. Today's guest, a consistent core contributor, a member of the Drupal security team, and one of the rare few with a two-digit user ID on drupal.org.
It has 2.0.3, 2.1.0, and 2.2.0 versions available, the last of which works with Drupal 8.7.7, 9, and 9.10, and 11, or newer. It is actively maintained. It has security and test coverage, and for documentation, there's a fairly in-depth README. It has two open issues, one of which is a bug, but is marked as fixed, and it is officially in use by 37 sites according to drupal.org.
Now, with this module enabled, your Drupal site will log all cache tag invalidations. Additionally, cache tag invalidations will be sent to New Relic as custom events, where you can use the rich reporting tools available to mine for further insights. Many Drupal hosting options include New Relic out of the box, and there's a free tier you can use if you're self-hosting.
So this is a reporting tool that lots of Drupal sites can make use of. Now, cache hits and misses are also sent to New Relic, so you can investigate things like cache misses as a percent, as a percentage by cache bin. Finally, the aforementioned README also includes information about how to use different analytics providers in case New Relic doesn't meet your specific needs.
Now, Drupal sites probably don't need this kind of visibility on a regular basis, but if you're troubleshooting any kind of cache-related issue, this could be really useful. So let's talk about, um, cache metrics
[00:04:07] Nic: I think, you know, I, I might just tinker with this for core for a bit because, um, I mean, obviously this seems like the kind of thing that you don't want running in production, but if you don't measure things, you can't make them better.
And one of the things that, uh, comes to mind is there's an issue right now that is, I think it's ready to be committed, but Catch added some cache performance, uh, tests, I think in sometime in the Drupal 10 cycle. And Solu has been going through that and finding out where a lot of caches are being set and removed.
And anyway, he recently discovered that the, I think it's the bootstrap cache, gets invalidated on every single admin page view. Um, so if you're, you know, tooling around the back end of the website, you're invalidating the bootstrap cache every single time . Which means, I mean, it's fast to build, but there's no need for that to happen in almost every case.
So it's one of those things, if you don't measure something, you can't make it better. Um, and like I said, you don't want to just put this in production, but I think kind of clicking around the site with this on for a little bit and seeing what your site is doing can give you ideas for places to improve
[00:05:23] Moshe: Let me, let me add one bit there.
This absolutely is designed to be run in production.
[00:05:29] Nic: Oh,
[00:05:29] Moshe: really? Um, so the reason why that's safe to do is that all of these cache hits and misses and, uh, you know, as you rightly point out, there are lots of them on every request, are being sent to the New Relic PHP agent. That is batching up all of those custom events and sending them periodically to New Relic server.
So all of the, like, worries about we have too many events and we're gonna overload something are handled already by New Relic's code, so we don't have to worry about that.
[00:06:03] Nic: Oh, I, I was looking at the line, Martin, where you said it will log all the cache invalidations, so I assumed it was also logging them to the, you know, DB log, which would probably be a different story.
But if it's only New Relic, then yeah. I mean, New Relic is made for that, so I would hope it would be able to handle this.
[00:06:19] Moshe: Yeah, that's, that's up to DB log to log or not log stuff. So w- this thing just logs to its own thing.
[00:06:26] Nic: Oh, okay. Very cool.
[00:06:27] John: S- on but slightly off topic, I'm wondering how many, how many people run DB log in production?
[00:06:36] Nic: Um, I mean, I only really- I mean, if it's like a personal site or something, sometimes just so I don't have to worry about it. For client sites, I almost always disable it unless I'm actively looking at something. Um, and for the more high-performance sites, we usually do syslog and then have something else that ingests them.
[00:06:55] John: Yeah, yeah. But
[00:06:56] Nic: Okay.
[00:06:57] John: I was just
[00:06:57] Scott: curious. I run it a lot more than I tell people that they shouldn't run it.
[00:07:01] Moshe: Yeah. I, I do too. It's, exactly. So that was the advice in 2008 when Acquia launched, was like, "Don't run dblog." But MySQL's come a long way since then, and the advice hasn't changed. And I feel like that's sort of a disservice to a lot of sites who are flying blind, um, because it takes quite a lot of engineering to spin up syslog and have that go to New Relic or Datadog, and a lot of sites never quite get there, and so they end up not having the tools they need to debug their own sites.
[00:07:36] Nic: Yeah. I mean, I, I just turn it. I, I... It's one of those things where I turn it on when I need to debug something in production, and I, I don't think twice about it. In fact, most of the time I don't even turn it off and I just have the next deploy turn off automatically. Um, 'cause, 'cause there's, there's limits to how much it tracks anyway, so it's not like leaving it running all the time is gonna get something for you that you otherwise wouldn't, wouldn't be able to access.
So I, I usually leave it off just, maybe it's a micro optimization now, but it feels like old school, good advice in general. All right. I don't know
[00:08:14] John: about that. I, and I, I'm also thinking about installing this and then playing more with, uh, with New Relic. I, uh, I, I don't get into New Relic as much as I, I guess I should, but, um, now, now I have a little bit of more, uh, more of a reason to kinda get in there.
I can, I can see my, my cache metrics. Well, Martin, thanks for bringing us a, uh, topical module of the week. If folks wanted to connect or suggest a module of the week, how could they go about doing that?
[00:08:43] Martin: We're always happy to talk about candidates for module of the week in the talking Drupal channel of Drupal Slack, or folks can reach out to me directly as mandclu on all of the Drupal or social channels.
[00:08:55] John: Great. Thanks, Martin. Have a good one.
[00:08:58] Martin: See you next week.
[00:08:59] John: Look forward to it.
So Moshe, we haven't talked in, um, in a while. You haven't been on the show since, um, you were back, uh, talking to us about, um, Drupal Spoons. Um, I'm wondering w- like, where are you currently? What are you work- who are you working for? What are you working on? What's new? Kinda like, just, just in general, what, what do you got going on?
[00:09:27] Moshe: Um, so I have two main clients, um, that I'm doing, like, independent consulting for. Um, the first one is the state of Massachusetts, my home state.
[00:09:39] John: Oh, cool.
[00:09:39] Moshe: I, I work on a service- Me too ... called my.mass.gov. Shout out to Mass. Um- There you go My.mass.gov is not related to Drupal actually. Um, it is a login system, an SSO system-
[00:09:54] Nic: Hmm
[00:09:55] Moshe: that, um, is open to all the constituents and all the businesses in, in the state. And it's a se- it's like a one-stop login when you need to file unemployment, you need to get a fishing permit, you need to get a driver's license, you need to do all the things. Um- Hmm ... and so, uh, this has been up and running for a few years.
I've been working on it for one year. And, um, more and more agencies are hooking themselves up to it. Yeah. Uh, so the most recent one last week, the Registry of Motor Vehicles integrated with my.mass.gov. So any time you need to renew your driver's license or your car registration or something like that, you will need to get a my.mass.gov account and, um, go about your transactions with that agency that you need to do.
So you kinda leave my site at that point, and you go off as an authenticated user to the agency's site.
[00:10:51] John: And is, is that, um, I'm assuming, um, that that's run solely by the state of Massachusetts. It's not using, like, a third-party service. Like, I, I know for a while there, like, the US, the US government was using kind of a, a similar, like, central login system, but that was, that was provided by, I don't know, some third-party vendor or something like that.
[00:11:13] Moshe: Yeah, so this is, like, a system built on top of Microsoft Entra.
[00:11:18] John: Ah,
[00:11:18] Moshe: okay. Um-
[00:11:18] John: All right ...
[00:11:19] Moshe: so yeah, you know, lots of government things are tied in with Microsoft, and this is one of those.
[00:11:27] John: Got it.
[00:11:27] Moshe: Yeah.
[00:11:27] John: And, and you're, uh, you're just a contractor for the state. You're, you're not- Yes ... doing this through any, through any company.
Okay, cool.
[00:11:33] Moshe: I am dir- yeah, directly, um, working for the state on this one. Yeah.
[00:11:38] John: Awesome. Anything, uh, anything in the hopper, new and exciting for on the, uh, on the contribution front? Or has this taken up most of your, most of your cycles?
[00:11:48] Moshe: Uh, like, for a Drupal contribution?
[00:11:50] John: Yeah, yeah.
[00:11:51] Moshe: Yeah. Uh, well, the, the other, um, you know, big consulting job I have is with Tag1.
[00:11:57] John: Oh,
[00:11:57] Moshe: okay. Um, so they're a big, uh, consulting agency for Drupal. Um, and I work on, uh, one of their clients, Montefiore Einstein, it's called. It's a big hospital- Oh, hospital ... up in New York, yeah Um, so yeah, those, those are two interesting projects, um, for consulting work. And yeah, I, I definitely am still doing, um, Drupal contribution work.
Um, you know, the project I think that most people know is Drush. I'm still the primary and pretty much only, uh, maintainer of Drush. Um, that's had some, um, you know, pause in development 'cause we've worked hard on bringing that into Drupal Core, so I think we're gonna talk about that- Yeah ... later.
[00:12:43] Nic: Yeah, we, we definitely will.
Um,
[00:12:45] Moshe: and, uh, you know, I've been working on DDEV add-ons, which I hope we get time to talk about, too. Um, and yeah, a maintainer of the Devel module. Um, so yeah, definitely love to contribute and do the open source thing.
[00:13:02] Nic: So, so you just mentioned some of the most widely known, I don't wanna say modules, but because Drush definitely isn't a module, but the most widely used, uh, tools for developers in Drupal.
I was just looking at it. Drush has nearly 60 million installs, um, which is, which is a, a healthy number I would say. That, that's quite a few. Um, I know I couldn't do my day-to-day job without Drush. Um, what's it like maintaining a, um, maintaining a project like that for so long, and can you talk a little bit about what it's like, uh, kinda seeing...
I, I think you're starting to see the end of the road for it. Um, h- how has that been?
[00:13:50] Moshe: I mean, it's been a joy. It's really been a joy to maintain that project. Um, it's been a... It, it is fun for me personally to build and make it better and, you know, execute my vision of what I think a CLI in Drupal should be, um, where it should live.
It uses GitHub, um, and- And, um, it's been a joy collecting a team of maintainers that are super talented. Um, and they each own different pieces, and they come and go when they want to, and it, you know, it's an organic team that works pretty well. So, um, lots of things to love there, and it's a joy to go to DrupalCon and get lots of love for it, and get lots of thanks and, and even the complaints and the, "Why didn't you do this?"
It, it's fun to have those conversations, too. Um, so- ... yeah, it's, it's really a, been a pleasure to serve in that role.
[00:14:53] Nic: I, I do, I do want to apologize because the next version of Drupal is gonna break a lot of the language handling.
[00:15:00] Moshe: Mm.
[00:15:01] Nic: So I
[00:15:02] Moshe: will apologize in advance. I've... Yes, I've been seeing some odd failures in our tests related to localization, yeah.
[00:15:07] Nic: Yeah. Now, the good news is we've revamped locale significantly. We, and w- I'm trying to get the last, like, big breaking change in before 11.4 so you can, it can all be kinda handled at once. And if you have any questions, I'm happy to answer them bec- but locale almost broke me. Uh-
[00:15:25] John: Mm ...
[00:15:26] Nic: but I, I think it's gonna make a lot more sense and be a lot more performant.
I, I think the, uh, the benchmark I saw was that somebody installing Drupal with 200 modules in 30 languages, it would take two and a half hours to check. And with most of the changes that we've gotten in, it now takes, like, two minutes and 30 seconds. So-
[00:15:48] Moshe: Awesome ... I
[00:15:48] Nic: think, I think people will be happy.
Awesome. But yeah. The-
[00:15:52] Moshe: I'm, I'm glad that's- ... 11.3 ... I'm glad that's not one of my projects. That, that's a hell of a way to install Drupal.
[00:16:00] Nic: So, so let's talk about, um, let's talk a little bit about what's coming next, because you wrote a blog post, I think it's about six months ago or so, and there's a new really exciting initiative, a lot of people behind it, for getting CLI in Core.
You know, how did you come to the decision that you... I mean, obviously you, you went through the policy and trying to get people on board, but how did you come to the decision that it was time for Drush to change?
[00:16:31] Moshe: Um, so I have been wanting a CLI in Core for quite a long time. Um, and I had proposed different ways to do that.
Um- One that I had hopes, uh, would go in would be that Drush would become, um, a dependency that the Drupal core composer.json adds. Um, and, um, that got stuck in the ideas queue and maybe the r- the real queue for a while, um, with various people saying, "No, we wanna build our own CLI in core. We don't wanna have a new dependency."
Um, and-
[00:17:17] Nic: Well, I, I think there were some really big technical hurdles with that too because of, like, Drush supports multiple versions of Symfony, and I think that, like, there, there were some edge cases where upgrading Symfony would've been significantly more difficult for core. Like- Yeah ... in the n- in the newest round of reviews.
I, I don't know the older ideas queue issue, but I- Right ...
[00:17:38] Moshe: I
[00:17:38] Nic: think that's one of the reasons why it pivoted to, at least in the recent round.
[00:17:45] Moshe: I, I remember a thorny issue, a thorny comment like that, yeah, also.
[00:17:48] Nic: Yeah.
[00:17:51] Moshe: So I kind of came to a decision that it needed another big push and another new idea, and, um, if I sort of pre-declared that Drush was ready to, to fall on a sword and be gone, that maybe that would be the next impetus.
Um, and I think that it worked. Um, it's not merged yet, but it's RTBC and there are several maintainers who are positive for it. So in my mind, there's nothing really preventing it. Like, I'm not quite sure if it's gonna make it for 11.4 or not, but, um-
[00:18:35] Nic: I have hope.
[00:18:36] Moshe: Okay, good.
[00:18:38] John: Oh, I have so many questions. I,
[00:18:41] Moshe: I say that, not
I, I am genuinely unsure, 'cause I'm not following it. Yeah. Not c- not 'cause I have an opinion. Um, but I think it's going... If it doesn't go in there, it goes in the next one. So I think that the decision's been made for it to go in, so I'm really happy that, you know, we finally seem to have gotten over the, um, threshold of activation to get this thing in, in core.
There's, like, a lot of commands that are not in yet in the initial MR.
[00:19:07] John: Mm.
[00:19:08] Moshe: Um, so those are commands p- that people are gonna have to run with Drush, and a few commands are gonna run with DR, which is the new name for the CLI in core. Um-
[00:19:20] Nic: What are the commands getting in? May- may- it might be easier just to list the couple that are getting in.
[00:19:23] Moshe: Uh, well, the commands that are getting in are the ones that are already there, which people probably don't even know about, um, which are install, um, server, which might have a different name, which spins up a web server for you. Um, quick install, which, like, s- does everything, installs Drupal and spins up a server for you.
[00:19:44] Nic: Yep.
[00:19:45] Moshe: Um, new stuff that we added in this MR, cache rebuild is in Um, and-
[00:19:54] John: So now you're, now you're gonna do, uh, you know- ERCR ... like DRCR?
[00:19:58] Moshe: DRCR, yes.
[00:20:00] John: Yep. All right.
[00:20:01] Moshe: Um-
[00:20:02] Nic: Dr.- DrCR.
[00:20:03] Moshe: It's yes, DrCR.
[00:20:04] John: Is there a Cron? Can I do DR
[00:20:06] Moshe: Cron? I think we put D- No ... yes, DR Cron is in too, I believe.
[00:20:09] Nic: Oh, you did
[00:20:10] Moshe: get it. I think we did do that.
Okay. Yeah. Um-
[00:20:12] Nic: Yeah, w- notably, ULI is not in yet, config import and export is not, and update DD DB. I mean, those are the ones that I use. Yeah. I mean, I'm, it's already a huge initiative. I don't think it should've been blocked on getting those ones in. Yeah. I think the scope is, is right. Um, but hopefully those are in the next round because those are the by far the most used, uh, for CLI, uh, CI stuff.
[00:20:38] Moshe: Yeah.
[00:20:39] John: So, okay, so this gets, this gets put into Core. People can use some of these things. They're still gonna need Drush for, um, like, you know, Nic brings up a good one, like I'm a big, big fan of config import/export, so I'm still gonna need Drush to do that or I'm gonna have to do that through the UI, right?
Um, what's, you know, w- what's the, the, the horizon here, right? How, at what point will I not have to, which will sadden me a little bit, not have to install Drush on a Drupal site and just be able to use Drupal CLI?
[00:21:15] Moshe: Um, so there is a spreadsheet in the issue, uh, that lists all of the commands, and it gives them priority one, priority two, priority three.
So there's already some thought into like how we're gonna stage this stuff. Um, and there's gonna need, you know, we're gonna need a big initiative, a Nic style initiative, um, where we, we try to get all the things converted over. Um, at least the sort of priority one, priority two stuff. And, you know, priority three can- Can come if ev- anyone decides.
Like, you know, the nice thing about, um, the arrangement here is it doesn't really matter if Core is providing the command or a contrib module's providing the command. Con- you know, contrib, contrib modules can provide commands to the Core CLI just like they do for Drush. And so- Yeah ... um, we may see, um, another version of Drush, which I, you know, ironically goes all the way back to a module, um, where some of the lesser known stuff- Oh yeah,
[00:22:18] Nic: it used to be a module.
Yeah. I completely forgot about that.
[00:22:22] Moshe: Yeah.
[00:22:23] John: Um- Oh, that's interesting, where like some of the other- the commands are more just, just a module- Yeah ... that, that adds.
[00:22:30] Nic: I would be very surprised if a Drush module didn't show up within a month that does update database, does import, export, does all that stuff. Like-
[00:22:40] Moshe: Yeah
[00:22:41] Nic: does it stick around long term? Probably not. I, I imagine those ones will get into Core. But- Yeah ... there's a lot of, there's a lot of little commands that you barely ever use, uh, or like flags that are used on certain commands that are almost never used that probably won't make it into Core at some point, but they can
If they can be provided by contrib, then it doesn't really matter.
[00:23:04] Scott: Just so- If I'm following correctly- Yeah ... so we'll have the command line in Core, and then we can release contrib modules that would add commands to that? Yes. Yep.
[00:23:13] Nic: Just like now.
[00:23:14] John: Yeah.
[00:23:14] Nic: Just like now with Drush.
[00:23:15] John: Similar, similarly to what Drush does now, like you have, um, you know, purge, purge commands in there.
Yeah. And you have, you have, uh, um, you know, other modules that are adding, adding commands to rebuild redirects and stuff like that. So- Perfect ... um, okay. So that kinda answers-
[00:23:31] Scott: But then that's like a service in Core now as opposed to-
[00:23:33] John: Right. Yeah, yeah. Okay. So like y- Drush now you have to, you have to-
[00:23:37] Scott: Yep ...
[00:23:38] John: uh, you know, require it basically in your project if you want it to be in there.
But now i- you know, we'll be able to, we'll be able to just know that CLI is in Core and we can, um ... That was gonna be my next question, was like level of effort to like move things from Drush to Drush to Core CLI, but um, sounds like it's, it's already there and, and people can start, can start doing it if they, uh, if they want.
[00:24:02] Moshe: Yeah. I mean, a lot of the commands are easy to move. Um- You're just changing the sort of glue in around the command. Right. Um, but really, Core provides a service to change a user's password or to block a user, and we're calling that service from Drush. So, like, it's not really that big a deal. There are some commands that are complicated to move.
Um, update DB is complicated. Yeah. Um-
[00:24:29] Nic: Module install probably, and uninstall.
[00:24:31] Moshe: Mm, yeah. Module install is a little complicated because we kind of pre-figure out the dependencies and we say, "Hey, do you really wanna enable these other two modules first?" And-
[00:24:41] Nic: Oh, actually that probably becomes easier now- So-
because now we just call, we literally call the internal module install a service instead of doing that
[00:24:49] Moshe: conversion. Well, we do, but you kind of don't wanna call it from its outer form. You want to, like-
[00:24:54] Nic: Oh,
[00:24:55] Moshe: yeah ... call its more inner form so that you know what's about to be installed and you prompt the user.
So there's a little CLI user experience thing- Yeah ... that you want to have. Good point. Yeah. Yeah.
[00:25:05] John: So, okay. So I see. So, uh, y- m- I was gonna be like, "Well, how..." Dumb, dumb, dumb statement, but, like, how hard could it be to just move a, move a command from Drush to this, the, the s- Core CLI? But you're saying that within Drush there are some, like, some checks and some UI that's, the user sees that says, like, "Hey, you're, you're about to import all this config.
Like, you sure you wanna do that?" Um, and that's not necessarily coming out of Drupal Core by default.
[00:25:34] Moshe: Right. Like-
[00:25:35] Nic: And it's not, and it's not coming from a real request.
[00:25:38] Moshe: No. And it's coming from Drush. It's, it's coming from a different direction. And so, um- Yeah ... you know, clearly Drush was able to accomplish it for the last 10 years or whatever, so there is a way.
Right.
[00:25:50] John: Right,
[00:25:50] Moshe: right, right. Um, but that, that doesn't mean that that way meets Core's needs-
[00:25:55] John: Mm-hmm.
[00:25:55] Moshe: Yeah ... and, and standards. And so maybe someone's gonna go in, and if we just do it the way Drush did it, someone's gonna say, "That's not clean enough. You need to go into the module installer and change the module installer."
And so that, that's why- Mm ... um, these things can get a little more involved.
[00:26:12] Nic: Or- Got it ... or like the, there was a big change in 11.3 was it? Or 11.2, where now modules are installed in batches.
[00:26:19] Moshe: Yeah.
[00:26:20] Nic: And I don't, I don't know if that ever made it back to Drush, but I imagine we would wanna replicate that for the command just for performance reasons, right?
But, um-
[00:26:29] Moshe: Yeah. So that, that change was i- isolated from Drush. So Drush always told Core, "Please install these 10 modules," and C- Core has always provided- Oh ... that API. It just wasn't being- Okay ... used so well i- under the hood, so that really was a under the hood- That's fine ... change that took some heroics to accomplish.
But yeah, that w- that's been in for a while now.
[00:26:53] Scott: Yep. Interesting. I have one question here. So we, we've been tracking this work, um, from the Drupal AI Initiative. And, and you know, it, it's one of those balances where we can absolutely use this work and it's very important to us, but we also want to kinda stay to the side to not get in the way.
What's the best way for us to help in that regard? Um, 'cause it basically, it's incredibly useful to AI, but it's not an AI thing.
[00:27:21] Moshe: Yes. Yeah. I mean- I, I think that, you know, prioritization can be helpful. Like, uh, which, which features do, does the AI need in core specifically, um, is helpful. Um, otherwise, yeah, reviews and, you know, ideas for testing and stuff like that.
[00:27:44] John: Okay,
[00:27:44] Scott: perfect.
[00:27:45] John: Yeah.
[00:27:45] Scott: That sounds good. And then you, you had mentioned before, so one thing on Devel, I wanted to, to give a shout-out to that because I actually learned to do PHP and SQL in Devel when I first- Oh,
[00:27:55] Nic: really?
[00:27:56] Scott: I didn't know any better. Yeah. I mean, this was a while... I, I, I learned to program in Drupal, right?
And I'm pretty sure- Yeah, me too ... was like, "Oh, I can tell, type things up in, in here and make things happen." So, uh, it's been a huge part- Cool ... of my career journey.
[00:28:09] Moshe: Um- Uh, me, me three, by the way. I learned programming in Drupal too.
[00:28:13] Scott: Yeah. So I, I actually don't think I could function outside of it. Um, you know, just 'cause I don't know where Drupal starts and ends and where the rest of the programming world goes.
Um, but you'd also mentioned some, uh, DDev add-ons and work you're doing. Um, can you walk us through what's going on there?
[00:28:27] Moshe: Sure. Um, so I maintain two popular, um, add-ons, uh, DDev Drupal Contrib and DDev Selenium Chrome, Selenium Standalone Chrome, some of those words. Um, and uh, so this is, uh, really born first out of like a, I worked on the CI system for Drupal.
Um, and I wrote the sort of initial versions of GitLab templates. Um, and so this was bringing GitLab templates to your local environment. Um, and so you can run tests on your contrib modules the same way they run over at GitLab for the Drupal Association. And so this is a DDev add-on to, to make that happen.
Um, and it provides easy ways to run PHP Stan and PHP Unit and that sort of thing on your, on your contrib modules tests. Um, the Selenium Chrome add-on is like, uh, n- used by that contrib add-on in order to run functional tests and Nightwatch tests. Um, so that's how you do that part of your contrib modules testing.
[00:29:47] Nic: Um- Yeah, Nightwatch is hard to get running on your own. I highly recommend using the standalone Selenium Chromium whatever add-on.
[00:29:56] Moshe: Yeah. Um, and kind of my newest, uh, DDev add-on that I've been working on is called DDev Mtk. That's short for MySQL Toolkit. And MySQL, MySQL Toolkit is a project, an open source project by Previous/Next, which is a popular, um, Drupal agency.
And, um, they developed an approach to distributing databases for d- like, local development and for CI, where, um, instead of the usual approach with DDev and, uh, getting your database from production is to take us an export, a DB dump- Um, from prod and to pull that in and import it locally into your local database.
And that works fine for many sites, but it doesn't work that great for really large databases, um, because every developer is paying the cost i- in time to import that database. Um-
[00:30:59] Scott: Hmm ...
[00:31:00] Moshe: so the approach with MySQL Toolkit is that the database gets, gets baked into a Docker image. Um, and then that Docker image is the thing that gets made available to developers.
And so Ddev MTK is like a wrapper around their MTK project in order to make it easy to build database images that have databases baked into them. And so if you're familiar with Ddev, Ddev usually has a service inside called DB, and that's what your web service talks to when it wants to serve pages and, you know, run CLI requests and so forth.
So this add-on creates a new Ddev service called MTK, and it helps you take your settings.php and point it to the MTK service so that now your Ddev site is hitting this database image and not hitting the usual spot where, um, Ddev- Oh ... wants to have your database.
[00:32:04] Nic: A- and MySQL Toolkit is a SAS service that they provide, so, like, all the database dump...
It's, it's almost like a Docker Hub, I imagine, for your databases so everything is secure and-
[00:32:15] Moshe: So no ...
[00:32:15] Nic: private?
[00:32:16] Moshe: So, well, not exactly. So MySQL Toolkit is not a SAS service. It is a- Oh ... um, a philosophy and an open source project. Um, and I guess the add-on's more using the philosophy than the open source project.
But, um- Hmm ... the philosophy is like, "Hey, take, take your database dump and put it into a Docker image. Have that run in CI so that you have a new Docker image every night." Uh, host that Docker image where you use, typically where you host your code. So both GitLab and GitHub have container registry, um- Yeah
solutions. Um, so you put your database up in a private container in the container registry, and now your d- your DDev pulls that container. I mean, DDev already is all about pulling containers, right? Yeah. It, it pulls the DDev container for web, it pulls the DDev container for DB and for its own router service and so forth.
So this is another one of those. Um, it's your private database container, and it pulls it from your own repo hosting, so all of the privacy is-
[00:33:26] Nic: Yeah ...
[00:33:26] Moshe: you know, preserved. Yeah. So, so
[00:33:27] Nic: you have to make sure you keep it private, but-
[00:33:30] Moshe: Yes ...
[00:33:31] Nic: beyond that, those to- those tools exist. A- And so it sounds like it's saving two parts of it.
It's saving the export and it's saving the import, but you s- obviously you still have the download, but-
[00:33:40] Moshe: That's right ...
[00:33:40] Nic: download is, download is generally pretty fast. So.
[00:33:43] Moshe: Yes. How much time does it
[00:33:44] Scott: save for, like...
[00:33:46] Moshe: Um, I mean, you can go from a 20 minutes of wait time to two minutes of wait time. Yeah. That's, that's kind of what I've been seeing.
[00:33:53] Nic: I have a, I have a client I'm already gonna recommend this to because- Yeah ... yeah, they have a big database. It takes a good 20, 25 minutes to pull a refresh. And it, which, which isn't the end of the world, but it means that you only pull that refresh when you really need it, right?
[00:34:08] Moshe: Yes.
[00:34:09] Nic: And there are benefits on projects to being like, "You know, it's a new day, let me get a new database."
[00:34:15] Moshe: Yeah.
[00:34:16] Scott: And see what's changed. Well, it, it's interesting too because- When I'm doing, like, agentic development, like, you reinstall the site over and over and over. It used to be pull the database, get the site set up, and then hope it doesn't break, and probably don't touch it or do some light refreshes. But now you let an agent loose, and if it's really doing its testing, it's going to reinstall stuff five, six, seven times.
And so that time truly starts to add up throughout your working day.
[00:34:39] Moshe: Yeah. So that, it kinda leads me to another reason why I built this thing. Um, so another place that you want a full database is in testing your client site. So I also maintain another project called Drupal Test Traits. Um- Yes,
[00:34:57] Nic: I'm using that on that client
[00:34:59] Moshe: too.
Okay, good. So Drupal Test Traits, um, is an approach and some tools that help you, uh, write tests that run against a already installed site. So Drupal Core and Drupal Testing Framework is all about empty the site, build the universe from scratch, and start your test. And, um, Drupal Test Traits is great 'cause you actually have the real client database, you can run tests against that.
You make sure the menus are where they're supposed to be, and the roles are the way they're supposed to be, and so forth, and the features work the way they do. And so Drupal Test Traits want a real database, so this is a way to get them a real database really fast- Yeah ... is having these database images.
And I think that's useful in the context of AI, like you're saying. So if your AI is running Drupal Test Traits te- tests, then those can be really fast with this database image.
[00:35:52] Nic: I, I just wanna really quickly correct myself and say my client was already using Test Traits, and I am just using it in addition to it.
I did not introduce them to it. But yeah, we, we, they, they are using it, and, um, it's solving a couple of tricky, uh, circular reference content problems that otherwise you would have with a normal test workflow. So, um, yeah, I'm gon- I'm gonna send this to them right now because I think it'll, it'll help with the general development too.
[00:36:19] John: So Moshe, we, we talked about DDEV, um, because y- you're clearly doing a lot here and, and some very interesting things here. Um, but I'm also wondering about Devel. Like, what's the, what's the one-minute update on Devel? Like, I, I mean, I i- I imagine people are still using it. It's still out there. Um, are you, are you doing any active development on it?
Or is it kinda just maintenance stuff at this point?
[00:36:44] Moshe: I think it's mostly in maintenance mode. Um- Yeah ... it really, it really had a long, long life of active development, you know? Yeah. It's more than t- 20 years old, I think, now. Um, and so I, I don't see too many feature requests for it. Maybe that's 'cause it's off on GitLab, but, um- I, I think it also does most of what it needs to do, so, so it's primarily in a maintenance mode now.
If, if people have ideas for it, um, I'm in a state where I'm open to the ideas and open to co-maintainers and that kind of thing. Yeah. So I'd encourage people to, you know, if they're interested, this would be a good time to jump in and, yeah.
[00:37:27] John: It, it- Is, is that, is that... Uh, sorry, go ahead, Nic.
[00:37:30] Nic: Well, I was just gonna say, it, the date on it is 2003, which was the day that modules became projects, and so we don't know when it actually was there.
Because wasn't everything like a monorepo before that? If you had a control module, like- Yeah, there
[00:37:43] Moshe: were, there were directories in CVS, I believe. One for each project. Yeah.
[00:37:49] Nic: Yeah, so this, this predates that, so it's over 23 years old. Um, I, I will say for myself, I only really use devel anymore when I need to generate a lot of content really quickly.
Mm-hmm. Um, 'cause, I mean, getting... With, especially with DDEV, getting, like, Xdebug up and running is so easy. Like, I always used it just to basically crawl the tree. Kint stopped working a little bit, so I spent the time to learn Xdebug, and DDEV makes Xdebug so easy. I just-
[00:38:16] John: Mm-hmm ...
[00:38:16] Nic: I just use Xdebug when I need to debug something.
But generating content quickly, there's probably a command for that, but I, I still just install devel real quick, and devel:generate, and generate whatever I need to generate.
[00:38:30] John: Do you think, do you think, I, I was gonna ask, like, do you think, like, y- a lot of your DDEV work has been, has been influenced by, by Devel?
Like, have you, have you looked at Devel and gone like, "Oh, that's a useful feature. Like, let's just ba- kinda bake it into DDEV or build a DDEV, um, plugin to, to kinda do this thing"?
[00:38:50] Moshe: I mean, I think some pieces, um, yeah, sort of ex-debuggish kind of stuff, um, have overlap with DDEV. Then other pieces are so Drupal oriented that DDEV's kind of more of an outer layer.
[00:39:05] John: Yeah.
[00:39:06] Moshe: And Devel plugs into the site more, so it's more like a contrib module kinda place.
[00:39:11] Nic: Yeah.
[00:39:12] John: Mm. So-
[00:39:13] Nic: So- Wait, wait, sorry, Jed. No, go ahead So I'm noticing that we, we've talked about Drupal, we've talked about Devel, we've talked about DDEV. Do you contribute to any projects that don't start with a D?
[00:39:23] Moshe: Um, I definitely have a, a D focus, for sure.
Um, but yes- Okay. I- My, my list is long, so I think there are a few others.
[00:39:31] Nic: You did Organic Groups originally too, didn't you? That was another big one.
[00:39:34] Moshe: Yes. I was the- Yeah ... first O- maintainer of Organic Groups. Um, I loved that project actually, and-
[00:39:42] John: Oh, y- you mean, like, you were the OG on OG?
[00:39:46] Moshe: I was the OG. Yes. OG OG, uh, like doctor doctor.
Um- And, uh, I built that because I was the, um, OG of groups.drupal.org. Um- Mm. Which is a real shell of itself now. Um, but it, it was- It still says Gems on there, though It was an amazing site when Drupal was up and coming. Um, we had, you know, lots of local user groups who were meeting every night. Somebody was meeting somewhere across the world and talking about Drupal, and it w- it really consolidated all that activity, and this was, um, before really Facebook Groups got big, before Meetup got big.
It, it had those ideas, um, from the beginning, and it was definitely part of Drupal's rise. And, and the Organic Groups module was, how am I gonna power this site, um, that I think the Drupal community needs? And you'll, you'll see that, um, the Boston group is node number two on groups.drupal.org, because that's what I wanted to launch first.
Um-
[00:40:55] Nic: Okay.
[00:40:56] Moshe: So, so yeah, Organic Groups, and then, um, I handed that off to Amitai, who has been a wonderful maintainer for that project, um, and really made it a whole lot better. Uh, yeah. So, so that was a cool, a cool chapter.
[00:41:15] John: So I wonder w- with such great con- contributions in your past, you know, Drush, Devel, Organic Groups, I'm wondering where the ideas for these things come from.
Like, do you just wake up one day and go, "Eh, I think I'll build a CLI for Drupal today"? Or is it more- Um, is it more like, "Oh, there's a need in my, in my workday or in my, in the work I'm doing. Let me go, let me go open source this so other people can benefit from the, from the issues that I'm trying to solve"?
[00:41:45] Moshe: I mean, all of the above, really. Like- ... the, the ideas come from the needs, and the needs come from the ideas. Um, and the conversations and things other people say will like, "Oh, I didn't realize it could be used that way," or, "I th- I have a new idea of how I could solve that need." Um, for sure. Um, and, and sometimes things are quick projects, and sometimes they need to bake for a little while.
That whole Drupal Spoons thing got built in a few weeks, right at the first few weeks of COVID. Um-
[00:42:17] Nic: Yeah ...
[00:42:18] Moshe: and, you know, really was a nice system. Um, I think, uh, that, that the, the... It inspired, I think, the DA to move, um- Mm ... and get going on CI and issues. Um, and Dries said from the, from the stage at DrupalCon, like, we will have, um, fully moved to GitLab in a year, and that took over five years to do and hasn't actually gotten to the finish yet.
Um, so Drupal Spoons- Yeah ... kind of, uh, lost its momentum because of those announcements, I think. Um, but it's all good. We're, we're kind of almost there now, and, um, I think it's a good place to be.
[00:43:04] Nic: I'm gonna pivot a little bit to the community side, uh, 'cause you, you've been part of the Drupal community for, for a very long time.
I think Martin mentioned at the, or maybe John at the beginning, that you're one of the few users with two digits, uh, in your user ID. I think you're user number 23.
[00:43:20] Moshe: Yeah.
[00:43:20] Nic: Um, and if you, if you look at your user page, it says you've been on drupal.org for 25 years and two months. Um, how did you, um, I guess, how did you find Drupal, and, and what do you think ha- you know, how has the community changed over the last 25 years?
[00:43:39] Moshe: Uh, so I found Drupal, um, I found open source, um, first by reading a magazine article. Um, magazines were big back then. And, uh, I learned the word open source and that people were contributing their code for free and showing their f- code for free, and I was not a developer at the time. Um, at the time I was, like, an account manager for this company called Delphi Forums.
Um- Hmm ... maybe some old-timers used the Delphi service back in the day. It was, like, a dial-up service along with, um, AOL. And, uh, we were doing, we were just getting onto the web after being, um, like a terminal-based system. Okay. And we did, uh, message boards and chat rooms for White Label. So we made forums for about.com and Fox News and NBC Sports and lots of- Hmm
sort of media companies like that. And I decided to look into who does what I, what I do and what I know about i- that is open source, 'cause I was definitely motivated by this article. And I found a new CMS that Dries posted about on a site called Freshmeat. Um, which was the way you announced your new open source projects was on Freshmeat, M-E-A-T, meat.
Um, and it's got all of the hallmarks of design from that period, if you look at that, um, kinda like Slashdot. Um- And so, uh, to his credit, Dries had a README there that had install instructions that were a lot like the current install instructions, very sparse. Um, and he had install instructions for Windows users, which I was one of at the time.
Um, and I got it running locally on my Windows laptop. I had to figure out how to install CVS and install Apache and, um, and get a webpage going. And then sort of the aha moment was, like, I think that I can just open the files in this directory and change them and change a string and reload the page, and the page reflects the string change I made.
And it was like a shock to me that the source is right there. It doesn't have to go through approval. I don't have to pay people to see it. It's like change it and re- and it's there and it runs. And so, um A few. Is that a comfortable two? So, so, so- So instant gra-
[00:46:20] John: instant gratification
[00:46:21] Moshe: started- Absolutely
with, with open source And, and instant gratification all the way has been important. Um, that you- Fair enough ... make the change, and you reload the page, and it's there. Um, and- Is that Drupal 2 then? I f- I figured out Patch and CVS in order to contribute back. Mm. Um, which I'm pretty sure was, like, commit into some, commit a patch file into a directory, and Dries would wake up the next day and review it.
Um. And, uh- That's right ... and we had a mailing list. Everything was on a Mailman mailing list back in the day.
[00:46:54] Nic: Which I recently discovered still exists.
[00:46:56] Moshe: It does?
[00:46:57] Nic: Really?
[00:46:57] Moshe: Uh,
[00:46:57] Nic: I think, I, I think the security team still uses it. I think they just moved- Huh ... uh, moved over.
[00:47:03] Moshe: Mm-hmm.
[00:47:03] Nic: Um, w- what do you think the, uh... Oh, sorry.
I, I was cur- do you know if it was Drupal 1 or Drupal 2? 'Cause I think when you first
[00:47:13] Moshe: I think it was Drupal 3 ... started contributing. I think we had, like- 3? Well, maybe I started with Drupal 2, but, like, by the time I contributed, we were at 3. We had 1, 2, and 3 all in the same year, the first year.
[00:47:24] Nic: Yeah.
[00:47:25] Moshe: Um, and then I guess someone learned about slowing down, and major releases, and we should do it differently.
Yeah. So then we really slowed everything down. Um, and then a few years ago, we d- we developed this, uh, six-month minor release cadence, and-
[00:47:42] Nic: Which has been- Yeah ... a huge boon, uh, I think. I think-
[00:47:46] Moshe: I, I would agree ... from the industry I would agree ... a
[00:47:48] Nic: good, a good
[00:47:49] Moshe: cycle. It's, it's been quite nice to have that cadence, and, uh, I think the s- the g- the greater community really benefits from the predictability and the careful attention to the backward compatibility.
Like, it was awesome not having that in the early years. It really was. You could make sweeping changes and not have to keep everything working. Um, it's a huge cost that we pay to have that. Um- However, it, it, I think we, we really benefit from it, so I think it's a cost worth paying.
[00:48:24] John: But it also, it, it, you say it's a cost- Okay
but it's also one of Drupal's benefits, right? Like, you-
[00:48:30] Moshe: It's a benefit to the, to users, yes You,
[00:48:31] John: you hear people in, um, other communities, um, I'm gonna pick on WordPress 'cause this is where I've heard it, where, you know, they, they, they complain about their, their issues with backward compatibility and, and the bloat and the, and the, you know, the hard times it provides for their users.
So I mean, I think, you know, us, us having a focus on that and being able to, being able to master that, for lack of better words, is- Well- ... is, is one of our benefits or, or strengths.
[00:49:00] Nic: Well, it's both, it's both extremes, right? So WordPress takes the extreme where everything has to be BC forever, always, which means that you can never really-
[00:49:10] John: Yeah
[00:49:10] Nic: fully get rid of old ways of doing things. And then Drupal 7 to Drupal 8 for us was the extreme opposite. We're gonna break every single thing. Literally everything. I don't think there's a single Drupal 7 module that just works in Drupal 7 and 8, unless there was like, it literally did nothing but be like, "I'm a module."
Yeah, nothing. Actually, that might not even work because- It might. I don't know ... of the new YAML files. Yeah. Um, and, and, and now because we have that cadence and we have a deprecation and BC policy, you have a predictable way-
[00:49:39] Moshe: Mm-hmm ...
[00:49:40] Nic: way to update it. It,
[00:49:41] Moshe: it's been great for the community. I, I think I was imprecise.
We pay a huge cost in developer velocity. Hmm. That's the one place where I think that we pay a cost. And, um, velocity's important in a, we're in a competitive environment, people are choosing between Drupal and other things, and if we don't ship features, then we, we don't get picked. So, like, I don't want to minimize that.
It is, it is a deal, but I think that given where we are as a project, it's kind of been a no-brainer and it's been a net positive by far to have this cadence. And, you know, I credit Catch for kind of pushing for that, uh, a number of years ago
[00:50:21] Nic: Yeah, it's been, it's been a good thing.
[00:50:24] Scott: Perfect. Yeah, so I think through this call, you've mentioned probably five or six more things that you're maintaining on top of all the other things we know you're maintaining.
How do you keep up with it? How do you stay, you know, on top of it, not burn out? Have you burnt out doing it?
[00:50:39] Moshe: Oh, yeah. Um, I have not burnt out in a, um, whole sense. Um, I think I remain excited about Drupal and open source and development and solving programming problems. Um, I think I love to solve programming problems so much that I'm not an early adopter of AI.
Um, I actually enjoy getting in there and, like, figuring out what's going on and doing the learning. Um, I think that, like, uh, not doing the learning is one of the real challenges of a lot of AI users. Um, and so I'm not sure how that's gonna turn out, um, for the profession, but, um- In any case, uh, I have burnt out in a micro on certain projects.
I have burnt out, and I've been pretty good about handing off maintainership of those. So I think if there's, like, a lesson there, it's that you, you work on things that interest you, and you hand them off when you're done or before you're done with it, you know? Before you've lost complete interest. Um- Yeah
start working on building the list of, of co-maintainers, and then you're in a good position to walk away when it's time. So, you know, I did that with OG and I've done that with Login Destination, and I've done it with so many. Mm-hmm. If, if you look at my, like, my chart of projects that I'm ... Still have my name on, but I really haven't contributed in years to tho- to them.
[00:52:11] John: And, and you're, you're in a, you're in a spot right now where you're, you're potentially gonna see a, uh, a decrease in, in the, uh, in the Drush work, right? As that kinda moves into, uh, Drupal CLI. I imagine, like- Yeah ... at some point, again, kinda sad, but at some point Drush will, will be sunset and, and kind of, like, ride off into the, into the sunset, and then we'll just use Drupal CLI, and that'll, that'll be, air quotes, off your, off your plate, right?
[00:52:42] Moshe: Absolutely, yeah. That's what that blog post was about, was like, "Hey, this thing is on its way out. What, what should we do about it?" Um-
[00:52:51] Nic: What are your plans for that time?
[00:52:54] John: Vacation. Uh, a, an island somewhere.
[00:52:57] Moshe: Yeah. I mean, I don't know. I have never had trouble filling the time, so I feel like that's not something I need to focus on too much.
I guess I haven't mentioned Migrate module. Um, I was one of the co-authors of the original Migrate. Um, Ed built a business around it. Uh, you know, old-timers might remember that Mike Ryan and I had a company called Curve that was about migrating your site from other things into Drupal. Um- Oh,
[00:53:25] Nic: I didn't know that
[00:53:25] Moshe: and so we, we, we had this sort of business built on top of the open source project. Um, and that was wonderful for a while. Um, we were kind of, like, uh, Acquia hired by Acquia. Um- And so, uh, we kind of stopped working that much on Migrate, um, and where I w- I was into the office of the CTO and worked on open source stuff within Acquia, um, for a number of years.
Um, but, uh- Might be,
[00:53:56] John: might be a good time to, to r- reinvigorate that idea, you know, as, uh, as Drupal gains, gains momentum and, uh- Mm-hmm ... you know, and, and more people might be looking to move, move back to open source.
[00:54:09] Moshe: Yeah. Yeah. That would be a wonderful, um, thing to see Migrate come back as, like, a, you know, f- a niche consultancy.
Yeah, for sure.
[00:54:18] Scott: Yeah. There's a lot of potential in migration stuff. Um, one thing I want to touch on, so you mentioned, so what's your advice for people that want to be maintainers? 'Cause I see this friction, right? So we have longtime maintainers, and then we have people that want to maintain. They come in, they bring AI tooling, they cause a lot of chaos, right?
Um, what's your advice for someone that wants to maintain but wants to do it in the right and helpful way?
[00:54:42] Moshe: Um, so I think you have to understand, you have to understand what the code is doing. Um, and- You can ask your AI to tell me, you know, tell you what it's doing. Um, and it does a pretty amazing document when you ask it to do that.
Um, I still think, um, you have to, like, understand at a deeper level than just reading the docs. Mm-hmm. Um, the way I learned, and I still think it's a great way, is to step through the code in Xdebug. So my recommendation for developers is to set up Xdebug. It's, it's not as hard as it used to be, but it's still a thing.
Um, DDEV actually makes it quite a bit easier. Um, and then set a break point and, like, step through, and then you're gonna step through and take a left turn at some, you know, at some branch of the code, go through it, and then s- do it again, and take a right turn, and then take a left and a right, and take a left and a left and a left and a right, and, like, get to know-
what your code is doing by stepping through. And you can see the variable values, you can see, you'll be like, "Oh my God, it just took a turn into the, um, user authentication system and the access system, and I haven't actually learned the access system in Drupal. Let me learn the access- Yeah ... system in Drupal."
And you take a whole day to figure that out, and you're like, "Oh, well, cool. There's these access hooks, and they return objects that have decisions on them, and there's an arbitrator that figures out from all of the return values, is this person allowed or not allowed to go and do the thing that you want them to do?"
And, like, you've now learned a new subsystem. And then you go back to the contrib module you were working on, and you then learn it. And then you go and learn the render system, and you learn the Twig system, and, like, I think Xdebug is, unlocks a lot of that.
[00:56:41] Nic: I, I think you just highlighted something for me, Moshe.
Mm. So y- you're right, 'cause AI can describe what code is doing, but reading that is kind of like, um, it's kind of like if you're learning a language, right? You c- you can read the r- grammar rules of a language and understand them as you're reading them, but you haven't learned them until you actually use them.
And it's the same thing, like, if you use AI to quickly explain something, you can read it and you can understand as you're going through it. Like, it's easy to retain that short-term, but you're not learning it, so you're not, not able to understand the extension points. Um, you still need to do the work to fully understand what's happening to, to properly make changes.
Uh, looks like there's a, uh, couple of comments, by the way, that, um, Luke McCormick, I'm not sure how to pronounce your last name, just is, is highlighting- Good ... the same thing, using Xdebug is, uh, stepping through Xdebug was a lot easier before D-
[00:57:44] Moshe: I, I know what Luke's getting at. Um, The whole code base was way simpler before 8, because that's before Symfony came in and before we learned object-oriented programming. Um, so like there were just a lot fewer steps in, with stepping through the program had less steps. Yeah. Now there's a lot to learn, so it's, it's not Xdebug per se, but it's like there's just a lot to learn.
Um, and so I
[00:58:12] Nic: f- Yeah, and if you end up in a render loop then, or like with fibers, a loop-
[00:58:16] Moshe: Yeah, yeah ... or
[00:58:17] Nic: fibers,
[00:58:17] Moshe: then
[00:58:18] Nic: yeah,
[00:58:18] Moshe: you're, you- Fibers. I, I, I haven't actually gone through the whole fibers thing- ... 'cause that's tough. Um.
[00:58:22] Nic: Yeah, you, you will end up in a loop that's, it's a little bit difficult to, uh, try out.
But gen- generally if you're doing like a s- specific contrib module, you can keep things pretty contained.
[00:58:31] Moshe: And, and remember, there's step in and there's step over. So you want to use step over liberally and be like, "I am not going into this rabbit hole today." And you, you step over it. Um.
[00:58:43] John: No, sir, I won't go into the access system right now, but I'll come back to it later.
[00:58:48] Moshe: You have to, yeah. I
[00:58:49] Scott: need that button in real life, just a step over button.
[00:58:52] Moshe: Yes. That's true. I want to avoid this
[00:58:53] Scott: whole situation.
[00:58:54] Moshe: Yeah. I mean, I, I think of going through Xdebug as watching the, the movie of Drupal. Um, you're watching the movie of a request and how a request gets fulfilled. Um, and you're m- you're watching it at the level of a like engaged student, not at the level of like a, "I'm watching a movie on my couch with a sec- with my phone in my hand and like," you know, "occasionally looking at the captions."
Like, you're really an engaged student. But the, the movie part is because the Xdebug is figuring out what's gonna happen next. It's not you. You're not writing the code. Xdebug is just going where it's gonna go. Your only decision is over or in. Um.
[00:59:42] Nic: Yeah.
[00:59:43] Moshe: And so- ... I, I, I think it's quite a nice way to learn, learn Drupal and learn the, the core and learn the, the stuff you're, you're thinking about.
[00:59:53] Scott: Yeah. I think here's my challenge with that, though, is yes, that's how we learned. I don't think anybody's gonna do it. And to me, the analogy, it, it's similar to when I was learning PHP and people were like, "Well, it's a scripting language. You don't, actually don't understand what's happening beneath it."
Right? And I never was gonna learn that. And, and so I, I do think we have to confront that, that anybody new learning, like they're not gonna set up Xdebug. They're not gonna do it. They're gonna learn in a different way, um, but I think it'll be different.
[01:00:22] John: But then how, I mean, like to Moshe's point, though, Scott, how does somebody- Yeah, I don't
[01:00:27] Scott: disagree with Moshe
how does,
[01:00:28] John: how does somebody-
[01:00:28] Scott: I, I don't have an answer.
[01:00:29] John: How does somebody understand, right? So like it's, it's one thing, and we'll go back to the AI example, right? It's one thing to say like, "Hey, AI, how does, how does this piece of this thing work?" And for AI to tell you, "Well, it works like this." But how do they understand Oh, it works like this.
Like, uh, there's a little bit of a disconnect there and, uh, between like... And I mean, I guess we have that disconnect in other aspects of life, right? With like an automobile, like, y- your mechanic says, "Hey, it works like this." You don't, you don't actually know that it works like that, but you're just like, "Oh, okay.
Yeah. Okay." So maybe like we get into that, that area of like trust where we're like, "Okay. Yeah, that makes sense. All right, it works like that." But like, I don't know, like there feels like a little bit of a disconnect there where it's like-
[01:01:15] Nic: Yeah ...
[01:01:16] John: we, we need to know how it works in order to be able to improve it, build upon it, do things with it.
[01:01:23] Nic: The truth is, you learn by doing though. Yeah. And reading a summary isn't doing. Right. W- no matter... So, so you're right, Scott, I think a lot of people moving forward are gonna take that shortcut, but they're not gonna be learning those, those pieces. And, and we need to figure out how to fill those gaps so that people still find a way to do some- It's like math.
Again, you can read, like, two plus two is four and remember that, but if you're not practicing it and writing... There's a reason why you have to write out the times table over and over and over in school, so that you can actually learn the underlying- It's like,
[01:01:57] John: it's like one of my biggest, my biggest, uh, I don't know, gripes.
I don't know if that's actual gripe, but like we'll just go there. Is like you see somebody do something, right? With, with, you know, set up a cool AI feature or have AI do something for them on their site that's really cool, and then you're like, "Okay. Well, that was really cool. You showed me how to do it, but like how do I actually do it?
How do I actually- Yeah ... what are the pieces that I need to implement in order to replicate this," right?
[01:02:25] Martin: Yeah.
[01:02:25] John: That's, that's the part I feel like is missing if we don't kind of get in there and kinda d- do it ourselves.
[01:02:32] Scott: Well, yeah, I, I completely agree, and, and I don't think I have an answer to it. Um, the, the car analogy is interesting, because it's like if I need my car fixed, I'm gonna take it to a mechanic.
I don't wanna take it to someone that searches ChatGPT and is like, "I know how to do it," right? Um, so I, I think that this is also, there is a benefit for the standards that the Drupal community has, that there are people that are interested and will do this, so you can trust it. Um, my concern is I don't wanna be here in 20 years and it's just the same people that have been here the past 20 years, right?
Um-
[01:03:05] John: Right. Yeah. No, absolutely.
[01:03:07] Moshe: Yeah.
[01:03:07] John: That makes sense. I mean, I th-
[01:03:08] Moshe: I think there will be tiers of, you know, there's the, let's call them developers, and the developers are mostly using AI to develop code. You know, that seems to be the way it's going. But there are going to be architects who have a different level of understanding.
[01:03:25] Martin: Mm-hmm.
[01:03:25] Moshe: And, um, you'll need both on a project. It seems like that's where we'll go.
[01:03:32] Martin: Yeah.
[01:03:33] Moshe: Makes sense. Um,
[01:03:34] Martin: how-
[01:03:34] Moshe: So- ... how you distinguish yourself as just a developer who uses AI to build things is gonna be interesting. I mean- Yeah.
[01:03:44] Nic: Yeah. Yeah. There, I mean, there's, there's certainly some skill in knowing what to do still even if you're doing that.
But, um, yeah, there, there's, there's going to be some, some differentiation coming. L- let's, let's move back to, um, let's move back to something we've asked a, a few people. What do you think is coming in the future, Moshe? Since you're, you're so good at predicting something that's gonna be so useful to the community, what do you think is coming in, in Drupal's future?
How will Drupal evolve?
[01:04:16] Moshe: I mean, I definitely don't know for sure. I like some of the bets that Drupal's making. I mean And some of the foundations we have, the sort of core ideas of Drupal, the entity system and views, um, and validation, I think are, like, really strong bones for AI to work with. Um, so, uh, I feel good about some of those bones.
Um-
[01:04:48] Nic: Yep.
[01:04:49] Moshe: And there's a lot of investment in Drupal, uh, I mean, in AI, which I think is terrific. Um, in developer productivity, in sort of editor productivity, I think all that is useful. Um-
[01:05:07] Nic: Yeah. I mean, that seems-
[01:05:08] Moshe: Yeah ...
[01:05:09] Nic: seems reasonable. So,
[01:05:11] Moshe: uh, you know- I mean, Drupal, Drupal CMS I think is a good initiative also. Um, you know, packaging up those best practices and giving a better starting point for people, I think that's a good bet too
[01:05:25] John: So it sounds like you, you think Drupal's future is pretty bright.
[01:05:29] Moshe: Yeah. I think, I think we're doing the right things. Um-
[01:05:33] John: Yeah ...
[01:05:33] Moshe: no one can predict the future, but I think you gotta, you gotta give it your best shot, and there's lots of people who, who are still working on Drupal and making it better, and I think the, like, the money that's come in is being spent wisely. So yeah, I'm pretty bullish.
[01:05:47] John: Yeah. Awesome. Well, Moshe, thanks. Thanks for taking some time with us today and joining us to chat. We really appreciate it.
[01:05:54] Moshe: All right. That was exciting, guys. Thanks so much for the conversation.
[01:05:58] Nic: Do you have questions or feedback? You can reach out to Talking Drupal on the socials with the handle talkingdrupal or by email at [email protected].
You can connect with our hosts and other listeners on the Drupal Slack in the Talking Drupal channel.
[01:06:10] John: Do you wanna be a guest on Talking Drupal or our new show, TD Cafe? Click the guest request button in the sidebar at talkingdrupal.com.
[01:06:18] Nic: You can also promote your Drupal community event on Talking Drupal.
Learn more at talkingdrupal.com/tdpromo.
[01:06:25] John: You can get the Talking Drupal newsletter to learn more about our guest host, show news, upcoming shows, and much more. Sign up for the newsletter at talkingdrupal.com/newsletter.
[01:06:37] Nic: And thank you patrons for supporting Talking Drupal. Your support is greatly appreciated.
You can learn more about becoming a patron at talkingdrupal.com and choosing become a patron.
[01:06:47] John: Moshe, if folks wanted to get ahold of you, talk about all the stuff that you've done, talk about taking over some of your, uh, some of your, uh, modules and, and efforts, how could they best do that?
[01:06:58] Moshe: Uh, two places.
One is the contact, uh, tab on my drupal.org profile. The other one is on Blue Sky. Um, um, mosheweitzman.com is my, uh, handle on Blue Sky.
[01:07:11] John: Yeah. Is that also your domain name by chance?
[01:07:14] Moshe: It is, yes. Oh. I don't think I'm actually using that domain name for anything, but, um, I do own that domain name.
[01:07:20] John: There you go.
Yeah. Scott, what about you?
[01:07:23] Scott: Yeah, uh, LinkedIn, so give me a follow, uh, just Scott Falconer if you want your feed to be an incoherent mix of Drupal AI and trail running. Um, and then if any of you, I'll, I'll be at Acquia Engage Paris in a few weeks, so if anybody's in Paris, uh, reach out. I'd love to meet up with peoples in there.
[01:07:38] John: Awesome. Nic?
[01:07:41] Nic: You can find me online pretty much everywhere at nicxvan, N-I-C-X-V-A-N.
[01:07:45] John: And, uh, before I sign off here, I just wanna thank, uh, Bernardo and Luke for, uh, for shooting us some stuff in the, in the chat and, and listening along. Uh, really appreciate that. Um, and, uh, for me, I'm John Picozzi. You can find me personally at picozzi.com.
Uh, you can find me on the socials and drupal.org, @johnpicozzi, and you can find out more about EPAM at epam.com.
[01:08:09] Nic: And if you've enjoyed listening, we've enjoyed talking. See you guys next week.
[01:08:13] John: Thanks, everyone.