Today we are talking about Drupal Performance, Rapid Development, and Drupal Canvas Maturity with our hosts. We’ll also cover Microsoft 365 FullCalendar as our module of the week.
Listen:
direct LinkTopics
- Deprecating Module Theme Files
- Migrating Hooks to Classes
- Why This Change Matters
- Drupal Performance Gains
- Performance Audits and Lighthouse
- Automating Checks and Spreadsheet Rant
- AI Spreadsheet Cautionary Tale
- Privacy Concerns with AI
- Freelancer Pressure
- Rapid Change Reality
- Canvas Release Risks
- Community Support Needed
- AI For Documentation
- Canvas Production Readiness
- Canvas Architecture Debate
- AI For Voting Research
- LLM Bias And Sources
Module of the Week
- Brief description:
- Have you ever wanted your users' own Outlook calendars to show up right alongside your Drupal content in a calendar view? There's a module for that.
- Module name/project name:
- Brief history
- How old: created just last month, August 19 2026, by fabianderijk of Finalist
- Versions available: 1.0.0, which works with Drupal 11
- Maintainership
- Brand new — the first and only release is from last month, and the whole commit history is basically launch day
- Security coverage: brand new, so not yet
- Test coverage: yes, both unit tests and kernel tests
- Documentation: a genuinely thorough README — it walks through privacy, the config guard rails, and three different ways to customize event output
- Open issues: none yet, it's less than two weeks old
- Usage stats:
- Too new for a site count
- Module features and usage
- With this installed, it adds the signed-in user's Microsoft 365, or Outlook, calendar as an extra event source on a FullCalendar view — so their personal appointments sit right next to the Drupal content the view already renders
- It leans on the Microsoft 365 Connector module and its SSO submodule, plus the FullCalendar module. Each user must have signed in through Microsoft 365 SSO: anyone who hasn't just sees no events, which is a clean fallback
- It uses lazy loading, so it only fetches events in the date range the calendar is currently showing, not your whole calendar
- Privacy is baked in: anything marked private or confidential in Outlook is masked, so it shows up as just "Busy", with no title, location, or meeting link, unless the site builder deliberately turns masking off
- The response itself is per-user and marked private, no-store, so it never lands in a shared or CDN cache
- There's a clever server-side cache too: it stores the raw Graph response before masking, so a single fetch can serve several displays that each have different masking settings
- You get guard rails you can tune with Drush or an admin form: max events, max date range, cache lifetime, and a separate, shorter failure cache
- That failure cache is a nice touch — if there's no active Microsoft session, or Graph errors out, it caches the empty result briefly so a broken connection doesn't get re-polled on every single calendar click
- Under the hood it calls Graph's calendarView endpoint rather than /me/events, which means recurring meetings get expanded into their individual occurrences — exactly what a calendar grid needs
- Every event carries CSS classes for its status — busy, free, tentative, out-of-office, working elsewhere, cancelled — so you can style them however you want
- And if CSS isn't enough, there's a server-side alter hook and a JavaScript pre-build event for fully custom rendering. Nice detail: the hook is explicitly guarded so you can't use it to put back a title or location that masking just stripped out
- Clearly this will be more useful for edge cases, for example an intranet, but I think this is a really interesting example of the power of Drupal as an integration layer, or as some like to put it, the “glass” through which a user can interact with multiple systems
[00:00:00] John: This is Talking Drupal, a weekly chat about web design development from a group of people with one thing in common. We love Drupal. This is episode 568, Off the Cuff, number 12. On today's show, we're talking about Drupal performance, rapid development, and Drupal Canvas's maturity with our hosts. We'll also cover Microsoft 360 full calendar as our module of the week Welcome to Talking Drupal.
I'm John Picozzi, solutions architect at EPAM, and today we're doing things a l- a little bit differently than normal. We're doing one of our, one of our infamous, or famous, depending on how you look at it, off-the-cuff episodes. Um, we'll, uh, throw out some topics to our, to our hosts, and we'll, we'll talk through them, um, ad nauseam.
So brace yourselves. Uh, if you're listening live, feel free to drop a question or a, or a comment in the chat. We'll try to, we'll try to answer that if, if time permits. Uh, joining me today for, uh, our four-week guest host stint, uh, Amber Matz, developer advocate at Tugboat. Amber is a developer advocate at Tugboat, a service that automatically creates fully functional preview environments for every pull re- pull request, branch, or commit in your Git repository, eliminating the bottleneck of shared staging environments and manual deployment processes.
She's the co-host of the Drupal AI Learners Club, a growing, rapidly glow- growing, I would say, community of Drupal developers who learn, share, and develop best practices around using AI through regular live-streamed Zoom meetings and the AI Learners Club channel in Drupal Slack. Amber, welcome to the show, and thanks for joining us.
[00:01:53] Amber: Hi there. It's great to be here.
[00:01:57] John: And also joining us, Martin Anderson-Clutz, Product Marketing Manager for Drupal at Acquia. Martin, how are you?
[00:02:05] Nicholas: Great. Pleasure to be here.
[00:02:07] John: And last but certainly not least, Nic Laflin, Founder at nLightened Development. What's going on, Nic?
[00:02:12] Nicholas: Nothing much. Happy to be here. Looking forward to, uh, another Off The Cuff.
[00:02:17] John: Hey, I have a question for you, uh, related to Lego real, real quick. So was having a conversation with somebody today, and they were telling me that, you know, the idea of, like, getting a Lego set, building it, and then you, like, put it on a shelf and leave it there and never touch it again, um, is, like, more prevalent as opposed to, like, you know, kind of the get a Lego set, build it, kinda play with it, and then take it apart and, like, rebuild it into something else.
Um, do you feel like that is actually the case or, or is, is my coworker misinformed?
[00:02:51] Nicholas: Uh, I think for most adults your coworker's probably right. The, I think for most kids they usually build it and then take it apart. There's a huge community of people that build their own stuff, and they'll buy sets just for parts and combine things.
Um, it's also pretty easy to get bulk Lego that's just loose sets and things. Hmm. So you can kinda make whatever you want and modify. Like you can see over here, this, uh, farm that I have is an extension of- Hmm ... a set built from, from loose parts. So I don't know. I, people that kinda take sets apart after are probably in the minority w- once they're adults, but I, I
[00:03:34] John: wouldn't- It's
[00:03:34] Nicholas: all right
100%.
[00:03:34] John: I was just curious. I was just curious if there was, like, a definitive, like, y- no, like, everybody's- ... messing up their Legos and building their own stuff.
[00:03:42] Martin: S- so I will say-
[00:03:43] Nicholas: Build any Lego however you want
[00:03:45] Martin: Yeah. I, I had heard at one point that there was, uh, also a cultural shift, that apparently the, um, the build it and, you know, put it on the shelf completely built and never touch it again was more prevalent in Europe.
And actually, at least- Oh ... for a while in the US, it was more prevalent for at least the kids to, like, build it once and then take it apart and, you know, build cool new stuff with it.
[00:04:06] John: Yeah.
[00:04:06] Martin: So. All
[00:04:06] John: right. Well, I was telling my co-work, I have two kids, and one is the build it and leave it, and, like, play with it, but leave it, like, as, as is.
And the other one is build it, play with it, dismantle it, rebuild it, improve it. So, I don't know. The jury's still out, I guess. All right.
[00:04:22] Amber: Well, there is a third option. Yeah. So, some of the kits, like the DeL- DeLorean, for example. It has- Yeah ... like, different, um, modifications that you can make depending on which movie.
And then also- Oh,
[00:04:35] Nicholas: yeah ...
[00:04:36] Amber: I have, uh, I happen to know that you can also, like, take screenshots of the movie of your choice where you like the DeLorean, and then you can modify the design yourself to get it a little bit more, uh, movie accurate, and you can use other pieces from other kits. So, there's always like- Ah
an in between.
[00:04:55] John: So, like, take the set, but then modify the set to do your own, your own thing.
[00:04:59] Amber: To, like, yeah. Yeah. To correct the design to make it more movie accurate. Just- Mm-hmm ...
[00:05:05] Nicholas: really, really quickly, again, I get, maybe this can become one of our off-the-cuff topics. But there's a website called Rebrickable- Yeah
where you can have a lot of alternate builds or custom builds, and you can-
[00:05:16] John: Mm.
[00:05:17] Nicholas: Some of them are free, but you can also buy some, um, some sets. So, if you, if you're interested in something like the DeLorean and making it more movie accurate, there's probably dozens of-
[00:05:25] John: Right ...
[00:05:26] Nicholas: uh, mocks on there that you can look at.
[00:05:28] John: I feel like Nic might have found his Talking Drupal short idea, where he just talks about Lego- ... for two minutes, and maybe how it applies to, uh, Drupal. I don't know. All right. Let's move this party train on. Uh, and now we'll turn it over to, uh, Martin Anderson-Clutz. As I said, a product marketing manager, uh, for Drupal at Acquia, uh, and a maintainer of a number of Drupal modules of his own, to talk about our module of the week.
What do you have for us this week, Martin?
[00:05:57] Martin: Thanks, Jen. Have you ever wanted your users' own Outlook calendars to show up right alongside your Drupal content in a calendar view? There is a module for that. It's called Microsoft 365 Full Calendar. It was created just last month, August 19th of 2026, by, uh, Fabian Dreizek.
Uh, probably butchered that, so apologies to him. But, uh, it has a 1.0.0 version available, which works with Drupal 11. It is brand new, so the first and only release was, uh, August 19th, and the entire, uh, commit history is on that date. Uh, it currently has not yet, uh, opted into security coverage, but it does have test coverage, both unit tests and kernel tests.
And for documentation, there is a pretty thorough README that walks through privacy, config guardrails, and some other things. Uh, for open issues, there are currently none yet, and, uh, Drupal.org has yet to, uh, report a site officially using it. Now, with the module installed, it adds the signed-in user's Microsoft 365 or Outlook calendar as an extra event source on a Full Calendar view So their personal appointments sit right next to the Drupal content the view already renders.
It leans on the Microsoft 365 connector module and its SSO sub-module, plus the full calendar module. Each user must have signed in through the Microsoft 365 SSO. Anyone who hasn't yet, uh, just sees no events, uh, so you have sort of a clean fallback. It does use lazy loading, so it only fetches events in the date range the user is currently showing, not your whole calendar, and privacy is baked in.
So anything marked private or confidential in Outlook is masked, so it shows up as just busy with no title, location, or meeting link unless the site builder deliberately turns off masking. The response itself is per user and marked private, no store, so it never lands in a shared or CDN cache. There's also a clever server-side cache which stores the raw graph response before masking, so a single fetch can serve several displays that each have different masking settings.
Now, you get guardrails you can tune with Drush or an admin form, so max events, max date range, cache lifetime, and a separate shorter failure cache. Now, that ca- uh, failure cache is useful because if there's no Microsoft session or graph errors out, it caches the empty result briefly, so a broken connection doesn't get re-polled on every single calendar click.
Under the hood, it calls graphs, uh, calendar view endpoint rather than /me/events, which means recurring meetings gets expanded into individual occurrences, which is exactly what a calendar grid needs. Every event carries CSS classes for a status, so busy, free, tentative, out of office, working elsewhere, canceled, so you can style them however you want.
And if CSS isn't enough, there's a server-side alter hook and a JavaScript pre-build event for fully custom rendering. So there is a nice detail, which is the hook is explicitly guarded, so you can't use it to put back a title or location that masking just stripped out. Now, clearly, this will be more useful for edge cases, for example, an internet, but I think this is a really interesting example of the power of Drupal as an integration layer or, as some like to put it, the glass through which a user can interact with multiple systems.
So let's talk about Microsoft 365 full calendar.
[00:09:20] Amber: Well, first of all, didn't it used to be, like, Microsoft 360, and now they've renamed everything to 365?
[00:09:28] Nicholas: I don't recall. I-
[00:09:30] Amber: I think that's kind of funny.
[00:09:32] John: We're, we're, we're gonna have to, we're gonna have to go on the way back machine and check that out.
[00:09:35] Nicholas: Maybe
[00:09:36] Amber: it's not
[00:09:37] John: true.
I feel like you might be, you might be right, but, uh, I don't know.
[00:09:42] Amber: All right. Off topic. So- It's off the cuff. It was an off the
[00:09:48] Nicholas: cuff. Yeah. That's right. Per- perfect. See what you did there. I, I'm curious if this has a filter for showing, um... I- is this just showing your own events on the calendar when you're viewing it, or can it show other people, like, busy, kind of, kind of like the Outlook scheduling portion?
[00:10:08] Martin: So the way I understand it, it, it will only ever show your calendar, so the user that's sort of, like, logged in, because it, it, uh, uses the SSO integration. Um, and it will only show sort of your default calendar. Uh, I do think it would probably be more useful if there was a way to say, like, you know, maybe there's actually a shared calendar that would be the more useful one.
So if it's like, you know, monthly meetings or something like that, and then that could be the one that actually gets displayed in the calendar. Um, but that would be probably, like, a feature request that somebody would have to, to add in on the, on the module.
[00:10:40] Amber: But that's like, um- you know, a point of embarrassment, like if you accidentally share your, your personal calendar on your website.
So I think it's like a good caveat for people to just consider the implications of publishing your personal calendar on your website. Like think it through. There's not, I mean, I don't know to what degree this, like having security coverage would, would have for that, but also just some common sense, like thinking through publish, you know, which calendar.
So maybe, you know, keep an eye on it. It seems like an, an interesting module, especially like, you know, for, uh, clubs or, um, groups that have events and, you know, or bands or whatever that they want to publish a calendar, and being able to specify which calendar gets published. Like that can all be very useful, um- Yeah
in- instead of, you know, going through the process of setting up a content type and, and, you know, dealing with the lack of recurring event, you know, features or whatever limitations you're running into. So I like, I like the idea of it, but just like be cautious and use, use your common- Yeah ... sense before publishing your calendar.
[00:11:52] John: I, yeah, I, I kinda agreed with that when, a- and then I was like, "Oh, this doesn't have security coverage," but then I realized that the, the module that we're talking about relies on the Microsoft connector-
[00:12:05] Amber: Mm ...
[00:12:06] John: which, which has security coverage and is p- is probably facilitating the connection to the, uh, to the, to the calendar.
[00:12:13] Amber: Mm-hmm.
[00:12:13] John: Um, so I was a little, I felt a little bit better about that. Um, I do agree, bad idea to like just blanket and then be like, "Here's my calendar everybody." Um, but I do see it useful for like logged in users to be able to like add their calendar or like be able to see a joint calendar with like their calendar and like maybe a, a school or an organization and th- their events calendar maybe.
So, um, definitely some, some good use cases here.
[00:12:41] Nicholas: Yeah, we, we have a comment from Carlos mentioning that, you know, Microsoft has some fun naming conventions, right? So it's possible that they might have changed it at some point as well. Um, but I, I... The last thing that I have about this is not necessarily a, a Microsoft Calendar thing or a full calendar thing.
I would just say, I know Martin, you maintain a lot of date related things. Calendars is one of those things that still just feels so hard. Uh, speaking of sharing calendars, I've, I've been looking for a great solution to, like, block off various calendars and have synchronized calendars, uh, across tools, and it just doesn't work.
Like for example, you can't share a calendar into Outlook and have it block off times. So I have some clients that do use Outlook for their cal- internal calendars, so there's no way for me to... I can share my Google Calendar with my Outlook calendar, but there's no way to tell Outlook then, like, this is the default calendar.
Use this when you're showing my availability. You have to, like, also individually grant access to every single person that wants to see it. So if there was a tool that is in, you know, Calendly or something like that, that just kind of allowed them to synchronize, it'd be great.
[00:13:53] Martin: So I know this isn't exactly what you're asking for in terms of, like, actually synchronizing, but there is a, a link that you can share from your Google Calendar that, that is basically effectively like- Yeah
Calendly, where they can sort of like see your availability, pick a slot, and then, you know, they can opt in and it'll send them the, an invite automatically. So-
[00:14:13] Nicholas: Yeah ...
[00:14:13] Martin: you don't actually need a separate tool for that. I know it's not, you know, the, the true syncing thing, which I agree is like- Yeah ... heinous, so.
[00:14:22] John: And on that note, um- Martin, thanks for bringing us a interesting module of the week. If folks wanted to connect or suggest a module of the week, how could they do that?
[00:14:34] Martin: We are always happy to discuss a module of the week, uh, candidates in the Talking Drupal channel of Drupal Slack, or folks can reach out to me directly as mandclu in a variety of social and Drupal platforms.
[00:14:48] John: Great. Thank you. And, uh, you're sticking around, so, uh, I won't say goodbye to you just yet.
[00:14:54] Martin: Sounds great.
[00:14:55] John: All right, let's jump into our off the to- uh, off the cuff topics. Um, try to say that five times fast. Um, we're gonna start with, uh, with Nic, and uh, he wants to talk about module theme... Uh, sorry, .module, .theme file deprecations.
What do you got, Nic?
[00:15:14] Nicholas: Yeah, so I'm very-- I'm pretty excited about this. I've been working on it for, yeah, I don't know, eight months, nine months, basically since the beginning of the year, pretty, pretty intensely. Um, with all the hook changes that, uh, Drupal has seen since 11.1, I realized about a year ago that we probably could start working towards getting rid of .theme and .module files because, uh...
And, and the reason is there's a lot of subtle bugs that happen with, um, especially more advanced use cases that are almost impossible to get rid of with how these files get loaded and when they're available. Um, and so it... I think it's time to just make Drupal pretty much fully object-oriented, at least in the module and theme space.
And, uh, the .theme file extension is already deprecated, um, and the .module is just a few issues away from being deprecated itself. Um-
[00:16:14] John: Sorry, I might be late to the game here, and usually I am. So, um, if we're deprecating .theme and .module files, are we just replacing them with regular PHP files like theme.php- No
or like what's the, what's the game plan there?
[00:16:30] Nicholas: No. So you'll, uh... So there's a rec- at least in, in the theme and .module one, there are rector scripts that will help you convert most things, but basically all hooks can now just be in a hook class, right? So you just need to convert your module or theme. And then other, um, other functions, you kinda need to find a place for them, but ultimately most of them will be in a service, right?
Um, so you kinda just have to move them to a service and make them object-oriented. But the idea is at-- once you do that, everything will be autoloaded when it's needed, so you don't, you don't run into those subtle bugs. Um, so it will take some work to convert everything in all of contrib, but we... you have until Drupal 13, so it's gonna be at least...
Well, actually, you technically have until the, um, Drupal 12 is no longer supported, which is four years. So we have four years to do this conversion, and there's a script that gets you 90% of the way. Uh, so it, it should actually be pretty straightforward, uh, to convert most things. Um, Core obviously is doing some really complex things, and Core has, uh, as Amber was mentioning before the show, Core has a lot of gates.
So, uh, it's taken a significant amount of effort to get modules ready for this deprecation. Um, I think- somewhere around 60 issues at least, 70 issues that I've been working on. Um, but, uh, I think for most contrib modules and most custom modules that you run the rector script, we'll copy things over and it's pretty much done.
[00:18:06] John: Okay. So just, just again, dumb, dumb question, but like, so based on what you're saying, module and theme files going away from like the, the root folder, and then they're gonna... The, the code that's in them is probably gonna end up somewhere in the source folder. Is that- Yeah ... kinda how? Okay. Got it.
[00:18:23] Nicholas: Pretty much all of it should, yep.
[00:18:25] Martin: So I'm gonna just add that to what you said, Nic, which is to say that, uh, the project update bot, which kind of uses Rector under the hood, um, is already out there in the wild for contrib modules generating patches- Yep ... or I guess MRs that, um, that do that conversion with sort of like a fallback stub. So keeping the function, but like actually moving the code- Yep
into a class. And so, you know, probably you're gonna see that rolling, like compatibility with that new approach rolling out, you know, with like Drupal 12 compatibility because those are like actively- Yeah ... have been generated across the contrib space. But you can use those same tools now, you know, locally with something like Rector for your custom code as well.
[00:19:07] Nicholas: Yep ...
[00:19:08] John: is, uh, uh, I'm, I'm getting, I'm getting off topic here because I've gone down a rabbit hole. But like, in your source directory, is there a, um, rhyme or reason to the folders that are created in there? Or do you have the ability to just basically create-
[00:19:21] Nicholas: Completely random. No, of, of course there's-
[00:19:23] John: Well, no, I mean, I, I'm sure it's not completely random.
But like, I'm looking- So- ... at a module right now, right? And it has, uh, folders, which I, I'm like, "Okay, this makes sense." But then it also just has kind of PHP files hanging out in that- Yeah ... source folder. So I'm, I'm wondering, like, why?
[00:19:39] Nicholas: So mo- most folders, uh, or I would say most folders are prescribed, right?
Mm-hmm. So controllers go in the controllers folder. Sure. Uh, forms go in the forms, hooks go in the hooks. Event subscriber goes in event subscriber, plugins, et cetera, et cetera. Most of those are prescribed. Uh, you can create arbitrary folders for organizing things. Mm-hmm. Most people don't do that.
[00:20:03] John: Got
[00:20:03] Nicholas: it.
Um, custom services typically end up in, um, just the root of the source folder. That's why- Mm ... you, you just "random" PHP- Got it ... files there. Um-
[00:20:15] John: So that was, that was actually my... I was looking for- Yeah ... a services folder, and I didn't see one.
[00:20:19] Nicholas: Yeah. It-
[00:20:20] John: So that answers
[00:20:20] Nicholas: my question ... AI tends to create a services directory, which I hate, 'cause it's like, what is services?
Like, what does that mean? Like, that's the most generic thing ever. Just if you wanna organize them based on a type of service, do that. But, um, I, yeah, I'm not a fan of just a generic services folder. Although it does keep the top level a little bit cleaner. Yeah. Um, but really it's, it's how you wanna organize the code yourself.
[00:20:43] John: Got it.
[00:20:44] Martin: I think traits are probably the other thing that I see in sort of the base of the source folder quite a bit.
[00:20:48] John: Mm.
[00:20:49] Nicholas: That's true.
[00:20:50] Martin: Yeah. A
[00:20:50] Nicholas: lot of base classes will go there, too. Um, constant... You know, if you have a, a file that just has a bunch of constants or something. Um, just to add on to what Martin said, the project update bot, uh, for converting the hooks, it does require you to have the hooks documented properly, so you want the implements line.
Um, so m- you know, a pretty low effort thing. You probably wanna go through and make sure that those are accurate. Um,
[00:21:13] John: and- Uh, sorry. Where does the implements line live? What file?
[00:21:16] Nicholas: It, it's, it's in the... Wherever the hook is, it's right above the... It's the, in a comment. Ah, okay. Got it. The,
[00:21:20] John: yeah, the comment of the, the f- Got it.
Got it. Got it. Okay. Yep.
[00:21:24] Nicholas: And, and it won't convert, like, arbitrary functions that you have there, so, you know, you might need to take a quick look. But like I said, mo- for 90% of projects, that's, uh- 20 mi- if you do it manually, it's a 20-minute thing to move over. It's not, it's not a huge burden. And like I said, we have at least four years to do this.
[00:21:43] Amber: So if you copied the, the comment- the doc bal- doc block and function signature from API.drupal.org when you originally created the function in your .theme or .module, you should be in good shape. Like, the- Yes ... project update bot will recognize that and- Mm ... put it into its proper place. So this really makes, like, um, finding, uh, classes and functionality for your IDE a lot easier, instead of, you know, I know that, like, it's been a lot of fun over the years, you know, doing, um, a command F in a thousand line .theme file to find, you know, what it is that you're looking for.
So I mean, I'm sa- you know, I'll be sad to see that go.
[00:22:26] John: So, so along, along, um- If it was dark guys, you'd be dead ... Amber, Amber- Along, along Amber's line of snarkiness, I'm wondering, um, 'cause I... My, um, very, uh, infantile developer brain feels like this is a great way to go, and like, why didn't we do this sooner?
Um, which is a lot of, um, a lot of times when new things come to Drupal, that's the way I feel. Um, Nic, I'm wondering, are you hearing a lot of like groaning from like the get-off-my-lawn developers that are like- So- "Why are we doing this? It's extra work. I've gotta refactor my module."
[00:23:02] Nicholas: Yeah
[00:23:03] John: And, you know, things like that.
[00:23:04] Nicholas: Yeah. So I, I will say why we didn't do this sooner, I, over the last two years, I would conservatively estimate I've spent 1,000 hours working on all this stuff. Uh, so that's probably- That's it? ... the reason why. Yeah. Um-
[00:23:21] John: That was a joke. Don't, don't send me-
[00:23:22] Nicholas: Yeah.
[00:23:22] John: I- ... nasty grams.
[00:23:24] Nicholas: I will say I, for the first... When, when the .theme deprecation got in, I'm, I'm a little scared.
People will see my name on that and people will, uh, I- I'm, I think people will take issue with it, right? People do not like change. Um, so I did- This
[00:23:45] John: change is good, people. Get in line.
[00:23:47] Nicholas: Well, I, I'll say it is something that I spent a lot of time thinking about because, yeah, if we, we can support procedural and OOP.
Um- Oh ... and some people have told me that we should, and-
[00:24:00] John: Why?
[00:24:00] Nicholas: You know, there's- What's the
[00:24:01] John: reason for that?
[00:24:02] Nicholas: Well, because it works right now. Like, why do we have to go through the work? Now, the reason why, um, th- there's two, three reasons why I pushed through and did it anyway. One is there's performance benefits and testing benefits to converting, right?
Being consistent. Mm-hmm. So, for example, um- An example I can think of, I think it was in the translation module, one of the hooks was calling a service that didn't exist. Like, translation had deleted it years before, but because it was procedural and was using a service locator, just nothing ever happened.
Once we converted everything, we were setting up the dependency injection, it was like, "Hey, this doesn't exist." I looked at it, realized it didn't exist. So there, there's a, a huge opportunity for cleanup. There's a pretty big performance benefit because you can start to break up... Um, so for example, one thing that we start, we started doing in a lot of things is moving the cron hook and loggers to, uh, service closures, which means that they only load when cron runs.
So you, right now, if you have a hook cron, a cron hook in your module, it's loading on every single page load pretty much, and it's not doing anything, but that code is loading and any dependencies would be loading. With dependency injection and OOP architectures, you can put it in its own class and it will only load when cron is instantiated.
Um, so you can start to organize your code in a way that's like, hey, this is something that's very... it has a lot of dependencies, but only runs occasionally. Let's put it off to the side essentially and let it only come into play when it needs to.
[00:25:41] John: Um-
[00:25:41] Nicholas: I mean,
[00:25:42] John: not to mention that, you know, a lot of these changes help support us getting off the Drupal Island and bringing in outside developers to...
and that will look at this and go, "Oh, yeah. Okay, this makes sense. I see how
[00:25:53] Nicholas: this works." Yeah. We, we're using more native PHP elements, so instead of, you know, we're using attributes. Um, and like I said, even though it's taken an enormous amount of work for me to convert, uh, work on core, and a lot of people helped me.
I'm not... I can't say it was just me. But, um- Ultimately for most contrib and most custom, you can run the rec2rule. You can spend an hour copying stuff over. Um, I put an offer in the to change record, I can give people some advice on how to do it. It's not a huge amount of effort. Some edge... There's some edge cases that will definitely happen, but it's not gonna be a huge amount of effort to move this stuff over.
[00:26:30] John: And-
[00:26:30] Nicholas: Right?
[00:26:30] John: And, and in closing here, right, I think the last thing to think about is, like, listen, when you set up your new computer, you won't have to actually tell your IDE that, like, a .theme file is actually- Yes ... a PHP file, right?
[00:26:42] Nicholas: And that's one of the things I thought about too. Yeah.
[00:26:44] John: We're saving you, saving you time and, and energy.
Um, okay. So your, your next topic here is about Drupal performance. I imagine the, the... You've already talked a little bit about how removing these two file extensions are gonna help, uh, Drupal core and testing be more performant. Um, was that what you wanted to talk about with Drupal performance for Sites, or was there something else?
[00:27:06] Nicholas: Not, not really. So there, there's actually two, two separate things with the performance that I think are interesting. One is, um, the journey from even 11.2, but really, like, 10 to 11.4 now. The amount of, like, database queries on a cold cache lookup, Catch and team have done so much work. I, I'm gonna do some comparisons I think later this year of, like, the install time for Drupal core for 10 versus current, right?
I think Drupal 10, if you run Drush SI to install the site, I think it's, like, a 55 second or two minutes to install, something like that. And now it's, like, four seconds. Um, the amount of benefits that, uh, I think Sites will see just in, like, memory is pretty intense.
[00:27:57] John: Yeah.
[00:27:58] Nicholas: Um, it, it's a lot of under-the-hood stuff that it doesn't change how anything behaves.
You never really... A lot of people don't look at it, but now that we're measuring it, and we have people that have an eye on performance, every Drupal site is now getting faster and faster.
[00:28:14] John: I think you just, uh, figured out your second, second set of short content there. You can, you can, uh, you can tell people in a short about your performance testing of Drupal.
Um, yeah, I mean, I am super excited about the fact that, like, Drupal is getting faster to install, faster to use. Um, you know, I think, you know, that plus all of the other great features are really, um, you know, they're real, real win- wins for the, uh, for the Drupal ecosystem
[00:28:45] Nicholas: Yeah, I think, I think it-- Drupal is one of the f-- that if it's not statically generated, I think Drupal is one of the faster CMSs out there.
It's, it... Especially with the caching layer and especially with, um, the complex data model, it's, it's lightning fast. The, the other thing is I was auditing a, a site the other day, and I, I noticed that there's some very large images, and so I just wanted to put a call out to our listeners. Don't forget to check your performance budget for image sizes.
Don't forget to think about, um, mobile, you know, people that are on mobile internet or spotty connections. Um, it still matters in this day and age. Um, I think it's- It sure
[00:29:26] John: does ...
[00:29:26] Nicholas: I'm sure we'll, I'm sure we'll talk about AI at some point in the show. Um, I think it's a whole... One of the things to keep in mind is that AI looks very local at whatever you're doing, so you wanna keep it at an architectural point of view when you're looking at things that are assets that are getting loaded and, and things.
You wanna make sure that your performance is still something you're thinking about because people You know, people still interact with the site in a, in a way that, you know, i- if the site is taking a long time to load, they're not gonna engage as
[00:29:56] John: much. I can, I can agree with that. I live in an area where, uh, there is great internet, and then there are not, so s- there's some spots with not so great internet.
And trying to load, trying to load some sites with not so great internet is real frustrating, so.
[00:30:11] Martin: Uh, yeah, I'll just maybe quickly chime in. So there was a, a time when I used to do quite a few site audits, and performance audits were definitely a big part of that. Um, tools that, that you can use for free include, uh, WebPageTest, although I think it's like there's, like, a usage limit at the free tier now.
Hmm. Um, but even just, like, um, oh, what's the one that's... I'm drawing a blank here. The, the one that's built into Chrome that you can use. Lighthouse. Yeah. Lighthouse,
[00:30:36] Nicholas: yeah. Well, well-
[00:30:37] Amber: I was gonna ask you about that. Have, how does Google Lighthouse, the performance metrics, how does that, uh, work? Or how does that, is that effective a measure for performance?
[00:30:47] Martin: Well, it will definitely catch a variety of best practices. In fact, I think there's a rule set built into Lighthouse that has Drupal specific things that it will look for. Oh, cool. Um, but it will definitely catch if you've got, like, huge images or if you're not using, you know, mo- modern image formats like, you know, WebP or A- AVIF.
Um, so it, it will definitely give you some, um, you know, pretty useful feedback that you can sort of get the team started on in terms of, like, low-hanging fruit. And it'll kinda give it to you prioritized as well, which is nice. So yeah, even something like Lighthouse that's literally built into a browser is, is actually a very useful tool for, for some of that kinda stuff.
[00:31:27] Amber: That's right on. I, I use- Like, there, there, it's so hard to keep up with, with what's going on, and so those tools can be really helpful to help you discover, like, oh, I didn't know about AVIF or, or WebP or whatever, or, like, I've heard about it and, oh, it is actually important. Like, it, it's kind of, it helps you verify, like, yeah, this is something you need to be paying attention to.
[00:31:48] John: I, I used to- One- I used to have a coworker just, just talking about low-hanging fruit. That, that, that term used to, um, used to really drive him, drive him nuts. Continue. Continue, Martin.
[00:32:00] Martin: Oh, I was just gonna add that, um, the other cool thing about Lighthouse is you can actually bake it into your CI pipeline.
Mm-hmm. So you can have it test for things like, you know, performance, accessibility, SEO, you know, various things. And so if, you know, the, the code changes in a merge request drop your, you know, SEO or performance speed below a certain threshold- Mm-hmm ... or, you know, drop your accessibility score below a certain threshold, then it can, like, kick that out and basically, you know, push it back to the developer to say, "Hey, fix this before-" I- isn't-
"you can actually submit a merge request."
[00:32:31] Nicholas: Isn't that a Tugboat feature?
[00:32:33] Amber: It is. Thanks for mentioning that, Nic. Yeah, certain plans in Tugboat, um, include, uh, Google Lighthouse reports. So, um, so you can see the impact, uh, that your changes in a PR have on your performance, um, accessibility, best practices, et cetera.
[00:32:52] Nicholas: A- a- and it's really good because, you know, you, you wanna think about this stuff, but it's easy to, um... It- these are things that people generally check right before launch, but it's easy for somebody to upload an image that's too large, or you add a new image style and you forget to set up the responsive styles correctly.
And, and if you have regular checks in, in Lighthouse or CI or Tugboat or something, then it can flag if something, uh, something got updated in a way that it shouldn't have been and let you know that you need to main-
[00:33:22] Amber: Yeah ...
[00:33:23] Nicholas: do
[00:33:23] Amber: some maintenance. I think it's super important to, to do those checks, like, on a regular basis and have them be automated into your process because you do an audit, like, okay, we did an audit, like, our last audit was five years ago.
Here we go again. We're gonna do this big effort and do this big audit, and then it's r- the output is so overwhelming, and then you gotta go through this huge spreadsheet. And just building it into your process is just, it's gonna save you a lot of sanity and headache and time. So...
[00:33:51] John: Does anybody loathe and despise spreadsheets like I do?
Like, sometimes I think-
[00:33:56] Amber: I love spreadsheets. What are you talking about? Yeah.
[00:33:58] John: Sometimes I think, like- This is great ... I'm like, "Oh, this is a good spreadsheet. Like, I like it. I'm okay with it." But like, sometimes I'm just like, "Ugh, spreadsheets?" Especially spreadsheets for things that, like, there are good tools out there for, like, uh, like your, your, like, backlog of tickets or your, like, I don't know, shopping list or something like that.
I'm like, "Oh, why are we using a spreadsheet for this? Why?" Like, oof.
[00:34:22] Nicholas: Don't, don't let Mike Miles hear you malign spreadsheets.
[00:34:25] John: Listen, Mike Miles is a genius when it comes to spreadsheets. If you need a custom, highly engineered spreadsheet built, you should reach out to Mike Miles. He will make it happen.
I've seen him things do... I've seen him do things in spreadsheets that, like... Legend. Complete legend. Um, he, he, you know, gives me great confidence when I'm like, "Hey, we need to do this in a spreadsheet," and he goes, "Okay, here's how you do it." I'm like, "Okay, cool." But like, yeah, spreadsheets, anytime somebody's like, "Oh, let me pull out my spreadsheet," I immediately, like, my brain just goes to, like, gross.
Gross. I don't know if I'm gonna like this place.
[00:35:03] Amber: Well, I would disagree with you-
[00:35:05] John: Okay ...
[00:35:06] Amber: overall, except I will tell you a little story about spreadsheets and Google Sheets and using, like, their AI magic thing, and it always, like, wants to do magic things with your spreadsheet. So I had this, like, basic contact spreadsheet that I had imported in from someone else.
[00:35:24] John: Hmm.
[00:35:25] Amber: And it was like, "Oh, can I apply magic things to your spreadsheet?" I'm like, "Go ahead. Make it." It was pretty bad, you know? Well, whatever it did, I didn't even know this was possible, but when I sorted one of the fields, it only sorted that column. It didn't- Yeah ... keep the row in sync.
[00:35:43] John: Oh, no.
[00:35:45] Amber: And I'm like- What the heck?
And- Yeah ... uh, I got into big trouble because I- Yeah ... um, it, it affected like- You're like, "Jim Smith is from Tallahassee? Ah." ... who I thought was a... Well, it, like, made me real- uh, made me have misinformation about who was an active mem- member in my club.
[00:36:03] John: Yeah.
[00:36:03] Amber: Mm-hmm. And, um, and this is the implication. So, like, I'm a pres- I'm president of, uh, an accordion club in my, in my town, and, um, I...
This spreadsheet was telling me who was a paid member and who wasn't. When I sorted that spreadsheet and it only did the column, I had misinformation about who was a member. Oh, no. So when I sent out an email warning people of the party invite scam, which was really infiltrating our, um, our group, one person didn't get it, and that one person got scammed and their-
computer got hacked, and it was... And she got really mad at me because she didn't get the notice, and she was like, "I've been a paid member," and it was that-
[00:36:45] Nicholas: Yeah ...
[00:36:46] Amber: blankety blank AI beautifying my spreadsheet that- Uh, uh,
[00:36:51] John: so- ...
[00:36:51] Amber: fouled me up.
[00:36:52] John: So maybe Carlos, we won't let AI handle your- Yeah ... spreadsheets. Um.
[00:36:57] Amber: Yeah.
[00:36:58] Nicholas: I'll, I'll say this, there's another consideration there too that I think even at the level that you're at, Amber, you should consider, which is privacy, right? Yeah. Not, not everybody on that contact list would consent to having their information input into AI. And if you're-
[00:37:12] Amber: Yes ...
[00:37:13] Nicholas: I think if you're con-
[00:37:13] Amber: That's a great point.
Mm-hmm.
[00:37:15] Nicholas: Yeah, so, uh-
[00:37:16] Amber: Yeah ...
[00:37:16] Nicholas: you, you, like this is... We, we've talked many times on the show about how to automate things and, and one of the reasons why I, I won't enable AI on any of my Google accounts is 'cause I have, I have spreadsheets with sensitive client information.
[00:37:31] Amber: Mm-hmm.
[00:37:32] Nicholas: Um-
[00:37:32] Amber: That's funny. Like, I just read an article about, uh, about that e- last night, and I w- I had just last night gone through and turned off a bunch of those features, the smart features settings in, in my Google and Google Workspace- Sure
stuff for exactly that reason. But yeah- Something- ... no, I
[00:37:48] Nicholas: hadn't done that before.
[00:37:49] Amber: Yeah,
[00:37:49] John: you're right Something that's becoming clear to me is if your, um, your list of folks, um, were in a Drupal database, you probably wouldn't have had that problem. But hey, listen, uh, spreadsheets for the win.
[00:38:03] Amber: Well, you know, when you're in a volunteer organization and you're inheriting data and files- Yeah
from, um-
[00:38:12] John: Yeah ...
[00:38:12] Amber: folks-
[00:38:12] John: I, I hear you ...
[00:38:13] Amber: so you get what you get.
[00:38:15] John: Yeah. I also, I also do some volunteer work for a nonprofit org, and yes, getting people to- ... to move towards a, towards a solution is sometimes difficult.
[00:38:25] Amber: Believe me, I wish I had the bandwidth to develop a Drupal site to handle all this club business.
[00:38:30] John: Time. It's always
[00:38:32] Amber: time. But I do not.
[00:38:33] John: So, uh, Amber, let's move on to your, your topic here 'cause I think, I think it's a good one. I think we're gonna spend a bunch of time, time chatting about it. Um, you were highlighting the pressure of, uh, Drupal, Drupal's rapid development, um, both in core and, and out of core, and, um, keeping up with it as a freelancer.
So it's, it's interesting you bring this up because- I am in the process of building a new site for a client and using Canvas, which we'll talk about in a minute. But, um, there's also new AI features, new ways of doing things, single directory components, all this, all this great new stuff that we want, I wanna use, and I'm like, how do I, how do I keep up with it all?
So I'm wondering what, what you're seeing, what you're seeing out there in the world.
[00:39:20] Amber: Well, just stepping back, even like a- Mm ... a, a broader perspective of this, there is just a, a... There's been a sea change in a culture of rapid development that is just happening across the board, and there's this huge pressure, um, to, to, to rapidly push out features in hopes that, like...
And, and the pressure is not only to rapidly develop them, but for them to be the savior of our economy here, of our jobs, of our agencies, of our open source project, whatever it i- There's a huge amount of pressure. And what I've noticed is that there are certain projects like Canvas, for example, the Drupal AI ecosystem, Drupal CMS even, and there is this good thing about, like, all of the marketing, um, and communication that's going out about it.
That is good, but it also creates this pressure And there's a mismatch between, um, like what is being said about like the promise of these things, and what the actual reality of, of these products are. And so I... We were chatting before the show started, Nic, and- Yeah ... and you were saying like, um, the differences between even like minor r- point releases, um, and your reluctance or the problems that you're experiencing in testing, um, of like you were talking about single di- directory components.
And this isn't to like shame any, any project or anything, or to, or anything like that, but it's created an environment, uh, like a pressure sensitive environment I think where, um, where it's like, um, I- there's all this stuff coming out. How do I navigate this as a freelancer? How do I al- support like this development?
It's all... It's good, but how do I participate in that? Or how long do I wait? Or-
[00:41:27] Nicholas: Yeah ...
[00:41:27] Amber: when is it safe or, uh, makes, when does it make sense to actually bring this into my clients' sites, you know?
[00:41:35] Nicholas: So I, I have, I have so many thoughts about what you, you just said. So I, I'll, I'll clarify one thing before we get started too, is that I'm aware that- And that's all we have
[00:41:43] John: time for.
Okay, let's move on.
[00:41:44] Nicholas: Yeah. And so- Sorry ... I'll, I'll clarify that I'm aware that the .module and .theme deprecation does contribute to some, to some of this, right? Because it- Mm ... it forces you to go back and look at legacy code maybe that you haven't looked at in years and, and do some refactoring, right? I still stand by the decision.
I think it makes sense, but I'm aware that I also am contributing to some of this as well. Um, and in, in particular, my, my concern wasn't so much with the SDC, it was more, um, it... Concern is too strong of a word. Um, the part that I was talking about is, is, is that, um- As a freelancer, generally, I need to be the expert on the tools that I'm...
Or, or the solutions that I'm providing to my client, right? Mm-hmm. Because if they're... For a lot of my clients, even the ones that are agencies, I am one of... It, it's me and maybe one other developer- Mm ... maybe two other developers, and usually the other developers are more front-end focused, right? Right.
[00:42:45] John: Mm-hmm.
[00:42:46] Nicholas: Um, so if we're implementing a solution, if there's an issue or an upgrade path or something, that's something that I need to, um, be on top of.
[00:42:58] Amber: Right.
[00:42:58] Nicholas: And with Canvas- Right ... it, it's still moving. I mean, the really nice thing is it's still moving fast. Uh, like, if you look back at some bigger initiatives in Drupal, many times there's a big push, get it into core, and then development kind of stalled.
[00:43:12] Amber: Right.
[00:43:12] Nicholas: And with Canvas, it's not in core yet. I, I don't know that it will get in core, but there's still a lot of energy and a lot of thing... a lot of, um, talent being poured into it. Like, they just released, uh, language, uh, support- Mm-hmm ... translation support, which is great, and every time I test it, it looks great.
It looks better. It's improving. But one thing that's made me nervous as a freelancer for talking to some of my clients about it is every time a release happens, which is every couple of months or so I think, there's a bunch of comments that pop up in the Canvas channel saying, "Hey, my site stopped working," or, "This page stopped loading."
Like, the type of error that's like, it's not like, oh, style has changed a little bit, or this interface change. It's, I updated the site, I visited the page, it no longer works. Yeah. Period. And those are the scariest types of errors, right? Right. Because it's not like I can, um, I- obviously you try to have as much testing as possible.
You do QA. But if you push something like this up, it, it, like, it's immediately noticeable to everybody. Like, if something, if padding changes or something, styling changes, like, most people aren't gonna notice an extra couple of pixels of padding or a color change a little bit. But if somebody, like, visits the page and all of a sudden they get a white screen of death-
[00:44:33] Martin: Mm-hmm
[00:44:34] Nicholas: they're gonna notice that, right? Um, and you can mitigate that. If that, if Canvas is a, is a focus of yours, you can track the release notes, the changes, the updates. You can keep track of that. But the speed of their development also makes that, uh, a, a, a pretty large task as well. Like I said, I think the effort is generally worth it there.
But for me as a freelancer, it, it's hard. I, I don't think it's at the point where I can, um, easily off the shelf put it in. Like Views, for example. Views has a lot of overhead, too, but you can easily put that on every single project and not worry about it.
[00:45:13] Martin: Yeah.
[00:45:14] John: Well, so I mean... Oh, man. I have, I have also have quite a few thoughts, but I mean, I'm, I, I think, like- Prior to this push for rapid development, right, Drupal was in a place where somebody wanted to make a change, and it had to go through, like, 100 levels of, like, approval before it even got considered to be put into core or taken out of core or created or whatever, right?
Um, so I mean, I, I personally welcome a more rapid development process where we can say like, "Hey, we're gonna, we're, you know, in the next version we're gonna deprecate this module," or, "We're gonna move this module to the contrib space." Um, RIP telephone. Um, but- ... uh, you know, I, I, I think, like, those sorts of changes n- need to happen more rapidly.
I think that, you know, Canvas, Canvas has been a great addition to Drupal.
[00:46:13] Nicholas: Yeah.
[00:46:13] John: Um, like, I, I-
[00:46:14] Nicholas: I, I agree with that statement, by the way. I, I think Canvas is fantastic. I think the team working on it is great. I'm, I'm... This isn't a criticism of the project or how it's been handled whatsoever. It's- It, it- ... more of an observation of how I remind-
[00:46:28] John: Yeah.
Uh, uh, you know, I don't think it's a criticism, right? Like, uh, Canvas is great. AI, uh, uh, Drupal AI is great. Uh, you know, Drupal CMS is even, is even great for the, for the use cases that it, um, that it works for. I mean, I think these are all great improvements in pushing, in pushing the Drupal ecosystem forward.
Um, I do agree with both of you that, A, like, we are definitely in a move fast and break things, um, kind of area, where we're trying not to, obviously. We don't wanna ship broken things, and, and maybe we've gotten better at testing and making sure that we're not, you know, we're not shipping stuff with, with, um, breaking code in it.
Um, but we're also in this area of like how do we keep up to speed as like a sole proprietor or freelancer or, you know, a person that needs to be able to, to your point, Nic, you know, support or, or, or be able to speak intelligently to these solutions, right? Um, even myself, I find myself on some of the, the newer AI, uh, Drupal AI Canvas features like, "Yeah, I know we can do it because I've seen Martin do it in a, in a, you know, video somewhere, but, like, how do we actually do it?"
Or, you know, "I've seen this cool use case, and I know that we should be able to do it, but can we actually do it?" So, you know, I, I think, I don't know. I don't know if it's, hey, we need to take our foot off the gas just a little bit, or if it's we need better testing. Uh, I don't really have a, I don't really have a solution, not that you were looking to me for one.
But, you know, I think, I think moving faster and being able to more rapidly get things out the door is important for keeping Drupal, like, moving forward.
[00:48:15] Amber: Well, so I think that, um A good question to ask about this is what are the types of contributions we need to support and enable the rapid development of these features?
Mm. So maybe we can a- all agree that, like, these are great features. They've, people are hungry for them, that's why they're, they're putting them in their sites. Mm-hmm. Yep. They're needed and, and desired. But, you know, there can be problems. There can be, uh, things that break, and I, so what kinds of cont- contributions do we need?
We need people writing good release notes. We need people, uh, writing documentation. We need people doing, uh, presentations at local, uh, Drupal events. Uh, we need people doing videos and tutorials and things like that. And all of that stuff also helps people using the, the, um, AI-assisted development. Mm. And, uh, because the other implication of this rapid development is you're a developer, you're using, uh, Claude or whatever to, to, uh, uh, for your, for y- your Drupal development, and, uh, the LLM is trained on, you know, the previous version, and when these versions are coming out every two months, there's no way that it's keeping up.
Unless we're writing those l- release notes, we're writing the documentation, and we're keeping, we're writing in, we're creating skills that are helping the LLM, uh, to adopt. And all of that requires maintenance and contribution. So I think we need to, as a community, think about, like, what is missing and how can we be supportive of this rapid development, instead of just being, feeling entitled about it and just, like, leaving it to the initiative teams to, to deal with all of the problems.
Like, what can we- Yeah ... as a community do to support this rapid development and ensure that we all succeed in this?
[00:50:12] John: I mean, I think you, I think you hit on something that's, that's super important there, is, like, tutorials and documentation are super important for these things, and I feel like a lot of times when I get to, "Hey, I know I've seen this done.
I know it's possible," I'm like, "How? How do we do it?" And it, and There are no tutorials. There's no, like, there's no, like, how-to guide on how to do the thing that I've seen, which makes it really hard to reproduce. Um, I, I think Carlos actually hits on something. Um, he's talking about, you know, kind of AI, AI development, which we're not necessarily talking about here, but he's like, "Sometimes we need to stop."
Um, he also talks about, like, moving goalposts, right? So I feel like sometimes we have this idea and, like, before we get to an MVP, we have, like, two other ideas, and we start down those paths as well, right? Mm-hmm,
[00:51:03] Martin: mm-hmm.
[00:51:03] John: So, like... And I know, like, I, I've heard from numerous people, like, we need more project management in the Drupal space.
We need more, um, you know, uh, folks that are, are doing other things, uh, of, a- as opposed to just, just writing code. Like, I think that all kind of goes to this and, and speaks, uh, Amber, to what you're saying of, like, we need folks to build tutorials and documentation to be able to say like, "Hey, here's how you reliably use this or do this thing or, or create this feature," for sure.
Yeah.
[00:51:35] Nicholas: Yeah. No, and we, we need an easy way to index those based on versions and things like that as well. Mm-hmm. Yeah. Right?
[00:51:41] Martin: Yeah.
[00:51:41] John: Martin, you're trying to jump in there. I can see it. Go for
[00:51:44] Martin: it. So I just wanted to add a couple things. So number one, you know, I feel like it's never been easier to, to provide, you know, fairly in-depth documentation.
Mm-hmm. Um, you know, obviously you wanna, if you're using an AI-based tool, keep an eye that it's actually telling you, you know, accurately, you know, um, you know, t- talking about how, step by step of how to set things up because definitely it doesn't always, uh, get things right. But, um, but at least doing a lot of the writing is, uh, significantly easier than it used to be.
And so, you know, we can look at, at some of those tools as, as things that even help to solve, you know, the broader problem. Like, to me, I love anytime I can use AI in, like, a generative way that, that then helps people out in deterministic ways. So, you know, it's sort of like, um- You know, we talked about the security scanner, you know, I can't remember if it was last week or the week before, but like that idea of using it to sort of like identify patterns and then you can run those in your CI pipeline, and now that becomes a thing where you're, you know, checking for security things.
Um, but in the same way you can use AI like generatively for the documentation that helps, uh, people who are wanting to use those, but also helps, you know, people using AI agents to, to help with their setup as well. So, um, you know, definitely there's, you know, a sense of like a double-edged sword in there.
I mean, I do feel like the, uh, the pressure, a lot of the pressure for sort of, you know, moving more quickly for a lot of these kinds of solutions really comes back to the, you know, the growing prevalence of, you know, your levelables and your, you know, those kinds of tools where somebody can say, "Oh, well, I just, you know, spun up a whole website over a weekend," and, you know, maybe when I-- maybe there is no like upgrade path if I need to add like a, you know, member sign-in in six months.
But the-- some people will have the attitude, "Well, maybe I'll just try and, you know, sort of like vibe code that when I need that feature," right? Um, which is sort of like there's a whole level of t-technical debt there. But, you know, the, the problem is that You know, the, the sort of, like, very deliberate kinds of, like, incremental changes that, that I feel like as a community, uh, tended to be sort of our default stance for a long time.
Um, it's gonna be hard for us to keep up with sort of the pace of innovation that, you know, competing solutions have in the market, right? So we just, to some degree, like I, I feel like the way Canvas is doing it is great because it's sort of, like, outside of core, so, you know, for the project itself it allows it to innovate, but it also means that we can keep core really sort of, like, stable and cautious, uh, the way it needs to be, so that to some degree we can kind of get the best of both worlds there.
[00:54:22] Amber: Yeah.
[00:54:24] John: So Martin, now you guys are, like, segue masters. I'm not even, I'm not even kidding. I feel like I don't even need to be here. I can just, I can just go get a coffee. But, um, Martin, you wanted to talk about the maturity of Canvas. Um, go, go for it. Tell us more.
[00:54:40] Martin: Yeah, so really this came about because I was at Drupal GovCon a couple of weeks ago and I sat in a couple of sessions where it seemed like there were a lot of questions that people had lingering about, like, you know, when can I use Canvas, is it, is it production ready, those kinds of things.
And, um, you know, I think the reality is that, you know, to Nic's point, there's a ton of work that has gone into Canvas. It has lots of, you know, very exciting features, but it's still at a point where there are probably some, you know, sort of like, um, gaps in terms of functionality that, that you need to be aware of and sort of evaluate.
Is this... It's probably not good for every project yet. Um, you know, it, it has officially been stable since January I think it was. So certainly, you know, for the most part it's production ready, but it, particularly if you're using sort of the, like, um, you know, some of the mapping features, like in templates where you're mapping, like, uh, structured content values to, like, component pieces, there may be gaps in there that you need to fill with sort of, like, a custom code or something like that in the short term.
But I feel like those kinds of, like, edge cases where you're like, "Oh, I'm gonna ha- you know, it's gonna be more work if we use Canvas for this than, than some other tools," like, that gets smaller, like, basically on a weekly basis, you know, w- you know, as we talked about with the Canvas, um, you know, releases that have more and more features.
Uh, I will th- uh, put a shout-out and I'll drop it in the show notes. There is a site called drupal-canvas.com where you can go and they basically have, like, a, a public backlog of the things that they're working on, uh, you know, some of the things that, that are coming next. So that's a great tool to sort of understand, like, you know, I need this for my project.
I don't know if it's available yet for Canvas today, but, like, you can go and say, "Oh, okay. Well, they're saying that that's gonna be released at the end of September," right? So those kinds of tools can definitely be valuable in terms of understanding- You know, maybe the feature isn't ready today, but it's gonna take, you know, another nine months for our site to launch, so let's start building on Canvas 'cause we know that, that that's gonna be available by the time we need it.
So, um, the other, the other point I guess to make is that there is also a growing now ecosystem of modules that support Canvas. So people n- you know, not every listener will recall that when, you know, um, Layout Builder first launched, it... There was a lot of excitement around it, but then people started to realize there were a bunch of gaps.
And so, um, there are amazing things that people are doing with Layout Builder today, but a, lots of times people are using a few, sometimes dozens of different modules to sort of enhance the capabilities of Layout Builder because it does have this sort of like rich ecosystem around it. And so, you know, we're, we're just kind of in the infancy of that with Drupal Canvas, but we're gonna c- see that continue to grow.
And also, it's one of those things where it's a bit of a chicken and egg thing, right? Where if people aren't using Canvas for enterprise sites, then the sites that enterprise, or the, the capabilities that enterprise sites need, you know, people won't have a, have even identified those gaps yet, right? And so until people sort of start to try it out for things and then realize, oh, well, we actually need this, this particular piece before, uh, we can adopt Canvas, then, you know, then they can either file an issue on Canvas or even, you know, like create a module that, that sort of, you know, fills that gap or different things, right?
And, and whether that's a custom module that lives on their site or something they can contribute back to the ecosystem, like that's a, again, a case by case basis. But I feel like, you know, people actually starting to, to sort of, you know, plug it into their site and see how it works is, is really critical in terms of it really sort of achieving that full maturity.
[00:58:21] Amber: I think that's a great point that you bring up about having, being willing and courageous enough to have an experimenter's mindset, and I think that's one of the necessary traits that as developers we need in this rapid development environment, whether it's AI, whether it's Drupal development, Canvas, you know, keeping AI, keeping up with all of that stuff.
It's uncomfortable to be an experimenter when you're used to, it's like, hey, you know, I've been a Drupal developer for 15, 20 years, whatever now. Like, kinda hard. You're used to stability. You're used to these, these gates. You're used to this kinda slow and steady pace, and making that mindset shift to being willing to experiment, being a tester, uh, engaging in the, in the issue queue maybe more than what you're used to, and now having to deal with a new platform as issues, you know, projects move to GitLab.
Like, there's a lot of challenges and friction with that process, but it, it helps us all. Like, it helps you adapt to this rapid development environment.
[00:59:25] John: So, um, yeah, I, I love Canvas. Um, I am in the process of building, uh, a site with Canvas. Um, I actually had an idea for, for Canvas, and I might say this and you might go, "Oh, you could already do that.
Like read, read some documentation, would you?" Um, but, uh, like, so Canvas kind of builds its own page, right? So it's got this, this idea of a page builder, um, which great. Uh, we're actually using that for all of our, all of our kind of page, page content types as opposed to creating like a basic page, if you will, right?
Um, but we still have structured content, um, for, for other types of, types of content. And the, uh, the, uh, design that I'm working with has like a tab set on it, and like the first tab I'm actually, um, using components, using, um, uh, we're gonna use, uh, entity storage and build those components out and kinda use an entity reference field for that first tab to be able to bring those components in.
I was like, it'd be great if there was like a Canvas field that allowed me to like put Canvas in the, the, the content type screen to be able to drag and drop- Oh ... components.
[01:00:44] Nicholas: I will say that, uh, some people pushed very, very, very, very, very hard for that architecture, and it is very, very, very unfortunate that they did not go with that architecture because it would've simplified so many things.
But I, I think one of... I, I will agree with whatever you're saying. I think Canvas is a great initiative. I think it's the right direction generally. I think-
[01:01:10] John: Hold, hold on. Before you go too deep, I just wanna confirm you can't do that currently- You cannot ... right? Okay. You cannot. I,
[01:01:16] Nicholas: I, I think there's a helper module right now that, um, will Uh, allow that at some point soon.
But I, I think that's the biggest architectural decision that they made that I think, I, I mean, I'll say it, I think it was the wrong decision. I, I understand- Ah ... why they made the decision. I'm
[01:01:34] John: on the fence. I'm really on
[01:01:35] Nicholas: the fence. Look, it's so- Because like- It's so confusing to have pages. Uh, well, yeah, we have Tim right here.
It's so confusing to have, uh, you know, pages and content type. Like Drupal has content types. Canvas should have integrated with content types somehow, even if they were a restricted content type. Um, and it should have been field. Yeah. But, okay. Like it, it's, it's in a strange place right now.
[01:01:57] John: So, so, um- Go,
[01:01:58] Nicholas: go ahead,
[01:01:59] John: Martin
we're gonna let Martin talk, 'cause he's the, the- Yeah ... the foremost Canvas expert. But I'm just, and before I do that, I'm gonna say like, listen, in order to build something, you gotta start somewhere, and this feels like a, a, a, a steady place to start with your own page and have Canvas integrate into that.
We can always look into adding it to content types as a phase two. Mm-hmm. But, like, you gotta, you gotta start somewhere, man. Go ahead, Martin
[01:02:28] Martin: So the only thing I was gonna add was kind of a bit of an anecdote, which is, um, you know, I had, had been, you know, active in sort of the development of Drupal CMS 1, um, and then kind of fell off because there were some ways that Drupal CMS 1 didn't really fit the, the way that I tend to build Drupal sites.
Uh, but then when I started hearing some things about Drupal CMS 2 and sort of the different assumptions that it made or had baked in, I guess you would say, I was really excited about it and anxious to try it out. And then I can't remember if it was, uh, like the Mercury site template, like one of the, the more basic ones.
And when I sort of spun that up, I saw that, like when you go in, you can create a page, which is a Canvas page, but if you go into the CMS tab, the only content type that it had by default was called Page. So it's like I can make CMS pages or page pages, and it's like, uh- ... that's probably
[01:03:22] John: Page pages. Page, page, page, page pages.
[01:03:24] Amber: Which context do you want your context for? Like-
[01:03:28] Martin: Oh boy. All right ...
[01:03:29] John: it
[01:03:29] Amber: happens. Like the words, they take on- Yeah ... multiple
[01:03:32] John: forms. So listen, I'm not, I'm not, I'm not upset about it. I do feel like using entity, entity storage as a, as a, a way to bring in components into your, into your content types, at least it makes sense to me.
Somebody might reach out and be like, "You're an idiot. You're doing it wrong." That's fine. You're entitled to your opinion. Um- But like Canvas, Canvas is great. Drag and drop, awesome. Like I, I look forward to, to this project getting out there and being able to kinda see what content creators can, uh, can do.
Um, I will also highlight, uh, Tim Sharp's comment about my shirt. This is a, a Lego, Lego ... Oh, nope, go this way. Lego Drupal shirt, uh, from DrupalCon Atlanta, I believe. Um, so all right. Do we wanna say anything else about Drupal Canvas or, or can we, can we talk about the AIs? 'Cause I know Nic is burning-
[01:04:26] Amber: Well, let's just say thank you
to talk about that. Like we, you know, we had some criticism there, so I just wanna say thank you to everyone that's been contributing to Canvas.
[01:04:33] John: Yeah. I mean, listen, Canvas is, is definitely one of those features that is pushing Drupal forward.
[01:04:39] Amber: Yes.
[01:04:39] John: Um, you can, you can nitpick and, and critique and Monday morning quarterback, like how it's implemented or the way it works, but overall, it is, it is helping us be more competitive out there in the, in the, the big, bad real world.
Yeah. Um-
[01:04:54] Nicholas: And, and s- something that one of my clients told me a week or two ago that is, is, I cannot get out of my mind is, he said, "New, new features are what bring people to the ecosystem."
[01:05:06] John: Yeah,
[01:05:06] Nicholas: 100%. He wasn't, he wasn't s- specifically talking about Drupal itself i- in that context, but it works here, right?
Mm-hmm. Having ... I mean, we had Layout Builder, but Canvas is kind of the expected quality- I- ... of the drag and drop
[01:05:17] John: I think we should rename this show to Talking Drupal 568- Uh, move fast and break things. It's okay.
[01:05:27] Nicholas: Yeah, no, I- One other- Oh, go ahead, Martin. Sorry.
[01:05:29] Martin: Oh, I was just gonna say, one other thing I wanted to, to mention with Canvas that I think is actually super cool is how compatible it is with a headless architecture.
Like, I think- Yeah, yeah ... it's probably the best, um, you know, sort of Drupal-based custom layout creation and how it can sync code components across between, you know, the, the local Drupal instance, but like a headless front end or some other tool like a, you know, um, Storybook or something like that. Or there's even sort of like, you know, sort of Drupal native, semi-native sort of, uh, tools that you can use for, uh, the, the home for managing your components.
But, but that sort of agility to work very well with headless architectures I think is also critical.
[01:06:14] Amber: Right on.
[01:06:14] John: Okay. So we- we've got about nine, nine, m- we'll say five minutes left to- ... talk about my, my topic here. And, um, you know, I figured that, um, I would bring up AI 'cause we haven't yet, uh, do- dove into that, um, landmine-laden topic.
Um, so election season is upon us, and, um, if you're like me, uh, you don't maybe have so much time to do a lot of deep research on your, on your candidates. Um, and, um, Rhode Island's, uh, primary day is the 9th, I believe, which is next Wednesday. Um, but there are like a lot of, um, a lot of, uh, you know, uh, different people running for, for stuff in, um, uh, the Democratic primary.
So, uh, last night I was like, "You know what? I'm gonna ask ChatGPT if it can help me, not necessarily pick who I'm gonna vote for, but like at least give me some, some like high level, um, information about the, the folks and, um, you know, kinda where, where they land on some of the positions that, that are, uh, you know, being, being talked about."
Um, so I had like a- I don't know. It was probably like a 20-minute conversation with, uh, ChatGPT, where, uh, it outlined all of the, um, y- all the folks that were gonna be on my ballot, grouped them by, like, the office they were running for, and then it, um, it basically, you know... I basically had a conversation with it, and I said, like, "Hey, give me, uh..."
For, for the governor's race, "Give me, you know, what are their views on the top issues?" And it went through, and we went through, like, each section, and, you know, I was able to s- ask questions. Um, so this was more, like, interactive voice mode or whatever it's called. Um, and I was like, "So, like, tell me more about this candidate," 'cause I was really thinking about, you know, go- voting for them, and how do they compare to this candidate?
And, like, by the end of it, I was like, "Wow, all right. Like, this feels, this feels pretty good to me. Like, I wonder how many m- other people are doing it." Um, so I figured I would bring it up and ask.
[01:08:30] Nicholas: I- Okay ... believe for our nation, I think this is- ... possibly, quite possibly, hands down, bar none, the worst use for AI on the planet.
[01:08:46] Amber: Oh, I- Um- ... vehemently disagree.
[01:08:50] Nicholas: Um-
[01:08:50] John: So I will say- And
[01:08:51] Amber: I will explain why. So-
[01:08:53] John: But before you guys get into it, I will say that- Oh, God ... I was like, I was like, I was like, "Uh, I don't know how this interaction's gonna go." But by the end of it, I was, I was very much like, "This was a great interaction," and I'm wondering, like I said, how many people are having it.
Uh, Amber, why- Yes ... do you agree?
[01:09:13] Amber: Okay, so I used, uh, Claude for... in two different ways, uh, in our last, uh, election here, and, uh, one of them was, "Give me a rundown of this, of the candidates for this position." And it's basically a Google, and it, and it, it highlights the, um... I found, uh, local news articles. I found town hall recordings and stuff like that.
So it was basically, uh, a s- an internet search of-
[01:09:40] John: Mm ...
[01:09:41] Amber: of things that let me go and, and take a look at those. So it's basically Google, but it was Claude. So it was basically a Google replacement for finding resources. The other way that I used it, what I w- was a, a little more, I don't know- I don't know what the word is.
But what I asked was, okay, I definitely, like, in the, this is a primary, and in the November election, in the general, I want this candidate to be taken down. Like, I definitely don't want this candidate to win. So in the primary, who is the most likely person to be able to compete against, uh- Oh ... that, that candidate?
Interesting. And so then it, you know, 'cause I, I wasn't really thrilled with anybody, right? Right. Yeah. And so I'm like, okay, just like let me take my, my feelings out of this. What is the analysis of, like, who's the best competitor- Mm-hmm ... despite my personal feelings? Uh, like who's got the funding, who's got the platform- Yeah, yeah, yeah
you know, who is able to have the support needed to actually maybe win, uh- Mm-hmm ... in, in the November election. So those are the two ways that I used it, and it was, um, it was pretty- Mm ... pretty helpful for me.
[01:10:56] John: I will say my, my, um, the person I was looking at for lieutenant governor wasn't even, like, a front runner.
Like, the ChatGPT was like- Mm ... "Well, yeah, you can, you can vote for that person, but don't be disappointed when they, uh, don't
[01:11:11] Nicholas: win." But see, that, and that's the... So I, I'll say, um, we ha- the primary election is today in Massachusetts. Mm-hmm. It is. I voted this morning, and I s- sat down to do my research yesterday.
And I will say I was also forced to use AI, but let me tell you how I used it. So I, I went onto my city website and I looked up the ballots, and I couldn't find them anywhere. So I opened the chat bot and of course they force you to use virtual AI bot. And so I asked it, um, well, first of all, it was a terrible experience because it has three questions, but it only, like, what's your name, what's your email address, et cetera, but it only gives you the next block, box after you fill in the first, which is the worst form interface I've ever seen in my life.
[01:11:57] John: You're like, "How many more fields are there?"
[01:11:59] Nicholas: Well, yeah. "I don't know." You have no idea how many there are. You don't... Anyway, I asked the question, where is the, is the, who's on the ballot? It had no idea what I was asking, so it sent me to a person. The person had no idea, so I ended up having to call m- the election commission of my city to find out where it was, and it was buried like six layers down.
And, uh, so eventually I got it. AI was not helpful whatsoever.
[01:12:23] John: Oh, wait, you went to the city website instead of the state website for that?
[01:12:26] Nicholas: Well, I didn't know what the link, the city website had the link-
[01:12:28] Amber: So you're blaming a- ...
[01:12:30] Nicholas: to
[01:12:30] Amber: the state website ... you're, you're blaming, uh- No ... using AI on- AI had nothing to do with it
poor architecture- No, no ... and a poorly implemented chatbot. No. Fair.
[01:12:38] Nicholas: The, it,
[01:12:38] Amber: it- Like, I am with you. The AI- It's
[01:12:39] Nicholas: like you should blame the chatbot for AI immediately. Yeah. Hey, whatever. It, it literally had nothing to do with it. Like I said- ... eventually I had to call a person and they got me to the right link for the state, uh, election.
Um, I, I think- Relying on generative information to help you make decisions like this. I, I don't really have an issue with using it to find primary sources, right? Using it as a, as a search to find like news articles, 'cause those kinds of thi- collating that kind of information, it's generally good at that kind of thing I think relying on it to make choices like that, I, I think it, it's truly not a great use for it.
[01:13:21] John: Well, let's, let, let me, let me restate here. I wasn't using it to choose who I should vote for. I wasn't like, "Hey, tell me who I should vote for because I'm too dumb to figure it out on my own." I was basically, you know, asking it for a list of who was running, and then based on the issues and where they position themselves, asking more clarifying questions about like, "Well, okay, what about this for this person?"
And it was either confirming or denying those, those, uh, preconceived notions. You
[01:13:51] Nicholas: were relying on its information to make those decisions. I mean, did you look at primary sources? Like, how, how do you know that it wasn't just making up positions because there wasn't information available for those positions?
N- not, I don't mean like- Well- ... I don't mean like lieutenant governor. I mean, like, if you're like, "Hey, the lieutenant governor, what do they think about this issue?" Y- you don't know if it's generating opinions for that person.
[01:14:12] Amber: So- Well, the problem is... If I, I'm just gonna interrupt you here for a second.
[01:14:17] John: Yeah, go
[01:14:17] Amber: for it.
Jump right
[01:14:18] John: in.
[01:14:18] Amber: So, so the problem with, uh, using LLM in general to ask questions is it's all about the training data, right? Yeah. So what's the source material? And the source material for, um, asking questions about an election is the garbage that these candidates put into, you know, their statements, which are, like, very biased, very persuasive.
Like, it's very selective.
[01:14:41] Nicholas: Which is the p- which is
[01:14:42] Amber: the point of that. Which is the, which is the point. Yeah. Right? And so, like, the primary sources for an election, they're thin on the ground, right? Like, you've got the statements of the candidates, and then you've got, like, maybe there's a local paper, or OPB, or PBS or something will do, um, a story that's a little bit more objective and is a little more comprehensive.
Like, hopefully you can find that. The other primary source that I went to was, like, finding links to, like, actual town halls. So l- sitting and listening to, uh- Yeah ... you know, 45 minutes. So but, you know, sometimes there's just not good sources. So- And I can't remember also, like, d- were we talking about bias on the show, or was that in the pre-show?
And it kind of circles back to, like- Pre-show ... you want to make sure, like, you're not confirming your own bias, you know? So sometimes you, you got to consider that the source material isn't even there. And so then it's gon- maybe it'll hallucinate something that isn't there, and maybe it's gonna confirm your own bias, you know?
Well, so I will say- Based on
[01:15:39] John: what
[01:15:39] Amber: it knows of your
[01:15:40] John: values ... I will say on the sources, because I was interested in, in that, um, I'm looking at the sources that it used right now. And it used the candidates' websites. It used, uh, a local- Yeah ... newspaper. It used, um- You know, the, some, uh, state and local, uh, websites.
So I mean, there, there- So
[01:16:01] Nicholas: read those sources- So- ... and see, and make your decision. Yeah, for sure.
[01:16:05] Martin: Yeah. Yeah. One thing I, I wanna just quickly interject, which is for these kinds of applications, another strategy you can consider is something like a deep research report, where it'll come and say, "These are the kinds of sources I'm gonna use," and you can sort of go back and forth and say like, "No, don't, don't include those 'cause they're garbage," or, "Maybe also include these other ones because they tend to be more, like, balanced in their coverage."
And then once it does that, it goes out and actually just compi- it's not compiling it from sort of like what it was trained on. It's actually pulling the information and synthes- synthesizing it in real time from the sources. So that can potentially be a way to sort of, like, reduce the amount of hallucination you might run into.
Yeah.
[01:16:40] John: I mean, so, like, in, in interacting with this thing, you know, I was, I was very much, like, had kind of my preconceived notions based on those, those, uh, fun, uh, advertisements and, and, you know, mailers that I've gotten and other, other factors, you know? Um, news art- news, news programming and whatnot. So, like, I already had kind of an idea of like, hey, listen, I'm, like, think I'm leaning in this direction.
Um, it was more just a, a, a way to, like, distill all of those sources down and, and, you know, get, get a more precise idea of like, yes, I think I'm making the right choice. And maybe
[01:17:20] Amber: I'm not. Well, question for you, John. So, uh, it's been a bit since I've used ChatGPT, G- uh, ChatGPT very regularly. Is it good at surfacing sources, like, and, you know, showing, like, the URLs of-
[01:17:33] John: Yeah, yeah
[01:17:33] Amber: a source?
[01:17:34] John: So that's
[01:17:34] Amber: what I just- I've noticed that with Claude too. Yeah ...
[01:17:36] John: yeah, that's what I just looked at. There's a sources tab on the bottom, and if I click on it- Mm-hmm ... it shows me all of the sources that it used. Uh-huh. So I was able to kind of scroll through them, and like, it's all, like I said, the g- the candidates' websites, government websites, some news sources.
Um, so, uh, you know, a- it's not like, hey, I got this from, like, deepdarkwebguy.com or something like that. So- You,
[01:17:59] Nicholas: you don't know, but, but that's the truth. You don't know that because when it's coming from the- Well, I just read the- ... the training
[01:18:04] John: data- I just read the list of sources ...
[01:18:07] Nicholas: it, it hasn't, that's not how AI works.
It has the sources. The, the deep research thing that Claude has might be a little bit different, but just because it cites those sources doesn't mean that it actually pulled all the information from there, and LLMs will still con- contain bias from its training data.
[01:18:24] John: So you're telling me that the list of sources that ChatGPT just gave me aren't the list of sources that it actually used to produce that answer?
[01:18:32] Nicholas: It may or may not. You can't know that.
[01:18:35] John: I mean, I can know- It, it, it can't determine it ... a lot of things, Nic- No, but,
[01:18:38] Nicholas: no,
[01:18:38] John: no, you- ... but I still believe them to be true.
[01:18:40] Nicholas: I don't mean you personally. I mean it's unknowable.
[01:18:43] John: I can't know that- It, it, there are- ... my election place will be open on the 9th, and I'll actually be able to vote, but I'm still gonna do the research on the off chance that it is and I can
[01:18:54] Nicholas: Anyway, we should wrap.
[01:18:57] John: Aw. No, I wanna keep going. All right. Well, thank you everyone for joining us. It was a spirited conversation of, uh, a couple of different, uh, different topics. Um, and I appreciate everybody's, uh, points of view. Don't forget, you can reach out to us on Drupal Slack in the TalkingDrupal channel or email us with a show at talkingdrupal.com.
You can also promote your Drupal event, sponsor an episode, or become a guest by visiting, uh, talkingdrupal.com and clicking the button in the sidebar. Thank you, thank you, thank you to our patrons for supporting Talking Drupal. Your support has kept us going for now 568 or 12 off-the-cuff episodes, depending on how you wanna break that down.
All right. Uh, Amber, if folks wanted to get ahold of you, how best could they do that?
[01:19:53] Amber: Um, @ambermatz in the Drupal Slack, uh, Amber Himes Matz on LinkedIn and other places.
[01:20:01] John: Martin, how about you?
[01:20:03] Martin: Uh, folks can find me as mandclu on a variety of Drupal and social channels, and most of my writing these days is at acquia.com/blog.
[01:20:14] John: Nic, how about you? You
[01:20:16] Nicholas: can find me pretty much everywhere, @nicxvan, N-I-C-X-V-A-N.
[01:20:19] John: And I will say, just to bring in, uh, Tim's last comment here, he said that, "At the end of the day, my interaction with AI promoted the engagement with the civic process, and that's a net good." So I appreciate, I appreciate that slant on it.
I'm John Picozzi. You can find me personally at picozzi.com, on the social networks, and drupal.org@johnpicozzi, and you can find out more about EPAM at epam.com.
[01:20:46] Nicholas: And if you've enjoyed listening, we've enjoyed talking. See you guys next week.
[01:20:50] John: Yeah, have a good one.
[01:20:52] Martin: Thanks everybody. Thanks. Bye