WEBVTT 00:00.000 --> 00:06.880 Oh, wow, how exciting. Well, maybe I should share something then. Um, well, thank you very much and 00:06.880 --> 00:14.800 welcome to, uh, uh, welcome to my talk. I'm a little distracted here. I had a friend who came 00:14.800 --> 00:20.320 over and just brought me a whole bunch of peanut butter cups, homemade peanut butter cups. Maybe 00:20.320 --> 00:26.400 I'll show those off, uh, later. What? Okay. Here, uh, put it right there. 00:33.840 --> 00:41.760 Okay. So I'm going to, uh, get over to my plan, uh, stuff I'm sharing here, hopefully. 00:42.800 --> 00:48.640 Uh, and, and we'll jump, jump right in because I'm going to need as much time as I can possibly 00:48.640 --> 00:55.520 have today. Thanks so much for, uh, joining me for Emacs conference and for, especially for, 00:56.400 --> 01:03.520 um, all of you who, who, who participated, you know, in the discussions, contributing talks and, 01:03.520 --> 01:09.600 um, you know, uh, you know, including running the, the, the, and it's just so much fun to be here. 01:09.600 --> 01:16.320 Um, I guess while I'm standing here and, and saying stuff that's, that I'm going to have to 01:16.320 --> 01:23.280 transcribe, cause I didn't, uh, prepare a recorded version. Uh, I had a lot of trouble 01:23.280 --> 01:28.880 trimming this down so I can solve that problem by just talking a lot at the beginning, uh, 01:28.880 --> 01:37.120 about other stuff. Um, so in addition to the thanks, I just want to say thanks also to the 01:37.120 --> 01:41.920 folks on the development list that helped me kind of come up to speed on this. I won't make a big 01:41.920 --> 01:48.880 list here, but, um, and, and, and for all that I've learned from my previous conferences, it's 01:48.880 --> 01:55.200 just, I can't stress enough what a great opportunity volunteering for, uh, free software related things 01:55.200 --> 02:00.080 are, uh, as a way to get involved. People will just totally teach you how to be helpful and I'm 02:00.080 --> 02:18.800 loving it. I can preview the stream, but it's not super easy right now. I got all my screens 02:18.800 --> 02:23.680 kind of dedicated to other stuff. So should I pause for a second before I get into the slides? 02:23.680 --> 02:27.680 Cause that's, they're, they'll be hard to see if I'm not full screen. 02:29.440 --> 02:34.240 Yeah, that would be nice. Okay. Well, I'll keep ad libbing then cause I just have a million, 02:34.240 --> 02:42.960 uh, things I can say. Um, uh, so, uh, let me just quickly talk, uh, things that aren't in here. 02:42.960 --> 02:50.320 Um, I'm going to mention the mysis2.org and the, that project, which provides a port 02:51.280 --> 03:03.520 of, uh, the GNU, uh, uh, glibc and a lot of GNU and, uh, uh, their free software. Um, so, uh, 03:03.520 --> 03:03.840 I don't... 03:03.840 --> 03:07.760 All right, I'm switching a room to, uh, a DVD room to Stefan. 03:12.080 --> 03:15.440 All right. So I'm going to take mumble out of my, uh, pardon me, folks. 03:16.080 --> 03:18.640 It's going to take mumble out of my speakers here. 03:22.800 --> 03:30.080 Okay. We'll take the speakers out of play entirely and I'll just switch to some headphones. 03:33.600 --> 03:34.720 All right. So... 03:36.720 --> 03:42.240 Perfect. What an amazing amount of time. All right. So thanks a lot. Uh, today I've got a jam 03:42.400 --> 03:48.720 packed talk. Um, I've, I've done my best to make, to make this not too overwhelming, 03:48.720 --> 03:55.040 but overall we're going to try to try to actually build, um, Emacs while we're talking today. 03:55.040 --> 04:00.400 And we might actually build several Emacs. Uh, so let's take a look at that real quick. 04:00.400 --> 04:08.160 Um, so over here we have a screen where I am just once a minute looking, uh, 04:08.480 --> 04:15.360 uh, indirectly at whether there have been any pushes, uh, upstream to either the Emacs 29 or 04:15.360 --> 04:24.320 Emacs 30 branches. So I've arranged for us to sort of keep an eye on that, um, while we talk. 04:24.320 --> 04:30.000 And, you know, maybe that's, that's one thing that we'll do. And then additionally, we'll probably 04:30.640 --> 04:36.640 fire up a shell. This is the MySys2 environment that I talked about before, 04:36.640 --> 04:42.160 and we'll probably create some directories and things. But before we get into all that, let's, 04:42.160 --> 04:48.080 let's give some, some context. Uh, I've been doing my best to try to, uh, make sure all this 04:48.080 --> 04:54.240 information is on the Emacs wiki as well. So, uh, sorry, as I said, I got a little caught off guard. 04:54.240 --> 05:02.640 So I'm moving my foot pedals to the floor, back to the floor here. And I should be able to advance 05:02.640 --> 05:11.760 slides here. All right. So, um, I kind of provided some special definitions for things. I'm going to 05:11.760 --> 05:21.680 kind of level set with those. The, uh, um, when I say a binary release, I'm talking about some, 05:21.680 --> 05:27.440 some, uh, I'm talking about Emacs for Windows as, uh, just ready to run out of its folder or 05:28.080 --> 05:35.600 in whatever similar form. The, when I say a build, I'm talking about kind of a process of doing that. 05:36.400 --> 05:41.040 Um, when Emacs.get, of course, that's the upstream hosted by GNU Savannah. 05:41.600 --> 05:51.680 The Emacs release is, is a tarball created from that. The sources for, um, Emacs are going to be 05:51.680 --> 05:58.480 one of those two things, um, very specifically. So I'm not going to talk about patches patching. 05:58.480 --> 06:06.720 There's some implications there. Perhaps we'll get into it. Uh, so a snapshot is when I build 06:06.720 --> 06:14.880 from anything other than a release source, uh, a tarball. Um, just if I, if I say that I'm talking 06:14.880 --> 06:23.600 specifically about the, uh, the XZ version of the file as, as a technical point. Um, 06:23.600 --> 06:32.480 so that may come up. All right. Nothing else I think up my sleeve. Um, the, uh, as, as a key 06:32.480 --> 06:38.320 data point, it's worth understanding that there's a file called configure AC. It's going to be 06:38.320 --> 06:46.160 processed, uh, as part of auto-conf. We, we initially access that when we run, um, auto-gen 06:46.160 --> 06:52.720 as you'll see in a little bit. Um, the, but before, but, uh, so the auto-gen script will 06:52.720 --> 07:00.160 generally consider this, uh, so in a release build, um, this has been thought about kind of for us as 07:00.240 --> 07:10.480 part of, um, making the tarball. Um, the configure.ac, um, yeah, I think I pretty much covered, 07:10.480 --> 07:16.880 covered this. So, um, those, those that kind of partially built status, that's a, 07:16.880 --> 07:22.640 might be another phrase that you hear me use. So this slide unpacks that a little more. 07:22.880 --> 07:29.520 Um, so it can be a little confusing to understand what exactly the, you know, what is it, you know, 07:29.520 --> 07:36.160 how stable is Emacs depending on what I have. So the, I got a kind of set of rules of thumb here, 07:36.160 --> 07:43.680 right? First I want the highest, uh, you know, dot, uh, dot release value that I can get, 07:43.680 --> 07:50.080 assuming that that's higher than one. If it's, if it were to only be one, let's say, 07:50.160 --> 07:58.560 if it were to only be one, let's say my choices were 29.1 and 30.1, I would take 30.1. Um, 07:59.200 --> 08:05.520 cause that's, that's weird. But, um, what you'll normally see is you might see a 28.2, 08:06.080 --> 08:15.760 you might see a 29.1. So here I think 28.2 is got the most, most, most stable, um, 08:16.560 --> 08:26.160 set, uh, the, uh, or set of release binaries. The 29.1 will, will have a little more features, 08:26.160 --> 08:33.680 but will tend to be more stable than, uh, any, uh, lower point releases for 29, uh, certainly 08:33.680 --> 08:39.600 than any release candidates for 29, which might even have new features, um, but are mostly going 08:39.600 --> 08:46.000 to just be packages. So they're going to become the most stable thing here. And especially if 08:46.000 --> 08:53.600 they, they, they have a, you know, if this, this is not, uh, if this were to be 29.2 release 08:53.600 --> 09:04.960 candidate one as well, looking forward to seeing, um, the, uh, 30.50. Um, and, and in between this, 09:04.960 --> 09:11.840 this pretest here, we're talking about kind of developer land. Um, so, um, the expectation is 09:11.840 --> 09:16.560 that, you know, what you're doing that applies to windows users, uh, just as much if you are 09:16.560 --> 09:22.960 building anything in the snapshot range, any of that is going to be in this 30.0.50. Currently 09:22.960 --> 09:32.240 that'll change when the, uh, when the 30, 30, uh, an Emacs 30 release tags, uh, or release branches 09:32.240 --> 09:42.880 come. Okay. So let's talk about the local. Um, there's not much to know about what I have going 09:42.880 --> 09:51.200 on, except that I have my, my paths mess messed with. So, um, if, if that, that were to come up, 09:51.200 --> 09:57.120 if you're wondering how, why does this, uh, and insist command work, that's probably the place 09:57.120 --> 10:03.760 where you'd notice it. Uh, I am using windows 10. I haven't tried windows 11, uh, as mentioned, 10:03.760 --> 10:09.520 mysis2 is critical to all this. There's one script in particular that will error out if you try to do 10:09.520 --> 10:16.560 anything other than use mysis's, mysis's shell. And in fact, mysis owns or provides three shells 10:16.560 --> 10:21.760 and of them, that script is designed to work with a specific one of them as, as we'll come to. 10:22.720 --> 10:29.120 Uh, I don't talk about installing the dependencies, but just as, as kind of some kind of help, 10:29.680 --> 10:38.480 um, you can search using this formula and install, uh, using this formula. 10:38.480 --> 10:40.800 Good luck with those, you know, grep commands. 10:43.520 --> 10:49.440 And this is the tool for building the self-installing self-extracting installer or, uh, 10:49.520 --> 10:55.600 executable self-installer. Um, the script for that is provided along with the Emacs source. 10:56.720 --> 11:03.280 Um, and I've provided a helpful link to the main page for the project download link on the left. 11:03.280 --> 11:09.680 It is not, um, it's kind of scare where the way that this link appears, but I have clicked it and 11:09.680 --> 11:18.960 it's working for me. Automation does, uh, we'll, we have some time we'll be looking at this at a 11:18.960 --> 11:24.560 minimum. I wanted to mention that what I do on my local, what you're seeing in the crawler, I hope, 11:25.280 --> 11:35.600 uh, represents a, uh, a simple sleep loop. Uh, and we'll, we'll look into that if we have time. 11:36.560 --> 11:42.960 Um, I do have a little bit, I do use like a cron job and so on to clean up some hosting that, 11:42.960 --> 11:50.160 that I pay for, um, where I've got, where I, where I kind of self host some, uh, snapshots, 11:50.720 --> 11:58.880 more stuff than I feel comfortable uploading to, uh, to GNU. The, um, 12:01.760 --> 12:06.480 you know, I never said, uh, my name is Corwin Brust. For the last couple of years, I've been 12:06.480 --> 12:12.480 the volunteer making, uh, um, making the snapshots, the quote unquote, official binaries, 12:12.480 --> 12:20.560 uh, for windows of the, um, of, of Emacs for windows. So that's, that's all the different 12:20.560 --> 12:25.680 versions. Uh, help is always welcome with that. I'd be very happy to teach you in more depth. 12:25.680 --> 12:31.920 This video is, you know, kind of my drop dead file. Uh, I don't have specific plans. Uh, if 12:31.920 --> 12:36.480 somebody's like, Hey, get out of the way, this is the one thing I think I can do. Um, Hey, 12:36.480 --> 12:44.640 that's real relatable. Okay. Um, so I haven't tried, uh, the, I haven't tried a lot of fun 12:44.640 --> 12:50.400 things that I won't talk about. Um, the, uh, the rest of this talk is going to get into the 12:50.400 --> 12:56.560 nitty gritty. As I said, um, if we can't convince Emacs to start building over on that screen, 12:56.560 --> 13:05.120 we'll be opening it up here on the center stage. Um, uh, this begins and there's, there's, there's, 13:05.120 --> 13:11.520 there's great insight here too, on the wiki, uh, with picking an FTP source for any official 13:11.520 --> 13:19.760 release that is for a stable product, please visit, um, ftp.gnu.org. Otherwise you'll want 13:19.760 --> 13:27.280 to switch that FTP dot at the beginning to alpha dot and take a pretest, uh, or any snapshot or 13:27.280 --> 13:36.640 otherwise, then publish there the, uh, next, uh, you know, I'm gonna, you have some examples in 13:36.640 --> 13:43.440 here that assume that you're doing a release bill that you're doing $29 one, but, um, I am glancing 13:43.520 --> 13:51.440 out of the, the right side of my face at the chat on the opt-ins. Anybody in there wants to direct 13:51.440 --> 13:57.840 me at a particular, um, we can make some other, we can build something else. If you want to see 13:57.840 --> 14:03.840 a snapshot build more mentioned that, um, the examples that you're going to see here that I 14:03.840 --> 14:12.560 will, without other direction, cut and paste, um, are all, uh, based on the release bill. So, 14:14.640 --> 14:22.320 um, so, uh, we'll use the, uh, I mentioned that there are several shells provided by MySys2. 14:22.960 --> 14:33.120 The MinGW64 shell is the one that we mostly need. Um, I tested all of this as well with the MinGW32 14:33.120 --> 14:40.400 shell. Um, so that, that should work and, and see mix binaries that, that, that work for me. 14:44.080 --> 14:50.720 Uh, I, as I mentioned, I don't get into the details of installing all your prerequisites. 14:50.720 --> 14:56.560 I found that doing it in a headfirst manner wasn't, uh, wasn't difficult. And I also found 14:56.560 --> 15:00.240 that there's a number of tutorials. I didn't want to pick one to link here. 15:01.040 --> 15:10.800 Um, there, uh, here, uh, okay. So our general formula for building Emacs, irrespective of 15:10.800 --> 15:19.600 Windows, looks like, does the configure script exist if not run autogen? From a Windows build 15:19.600 --> 15:27.600 standpoint, this is, if I'm not running a release, release build, call the autogen script. 15:27.840 --> 15:32.080 Right. And this would be in the directory where we want to pack this. I'll demonstrate 15:32.080 --> 15:42.640 within three minutes if, uh, if one, if nobody's pushed upstream to Emacs. Um, so, uh, the configure, 15:42.640 --> 15:53.280 uh, and, uh, configure options are, uh, uh, the, the configure, you know, if the configure, sorry, 15:54.240 --> 16:01.520 the configure script exists, then, uh, it doesn't, doesn't exist. So the only reason, 16:01.520 --> 16:07.920 so in my process, I will always execute that step because I clean everything after every build, 16:07.920 --> 16:16.880 um, in all my contexts. Um, however, if you were, you know, had a, a checkout of emacs.get 16:16.880 --> 16:21.440 and you are building it at several releases, then maybe you've got a configure script and then you 16:21.440 --> 16:27.600 all want to know, um, the, you know, whether you have to bootstrap and the typical complexities, 16:27.600 --> 16:33.200 but otherwise you might be able to skip that in, in, in the abstract. Um, 16:36.080 --> 16:41.520 is that right? Or is it, is it the make, uh, so, and if they make file doesn't exist, 16:41.520 --> 16:46.080 make install. I know I'm looking at that in question whether it's correct. Sorry about that. 16:46.640 --> 16:55.600 Um, in any case, uh, so auto-gen configure make install is our recipe. Auto-gen creates the 16:55.600 --> 17:01.840 configure script, configure creates the make file, the make file. Um, in the case of windows, 17:01.840 --> 17:08.080 I almost always want the install, uh, and to specify some location where the installed emacs 17:08.080 --> 17:19.120 will land. This is where all of the recipes for packaging emacs go. And if I were, uh, you know, 17:19.120 --> 17:24.640 using this as a movie to upgrade, I personally would do that by, by specifying an install path, 17:24.640 --> 17:31.520 quote unquote, on top of, uh, a main installation. I don't do that. I update shortcuts mainly based 17:31.520 --> 17:37.600 on what specifically I want to try, uh, in an effort to, to, to, to notice, uh, interesting 17:37.600 --> 17:44.400 patches and confirm they work on windows, which mostly they do. There's not a lot of code in my 17:44.400 --> 17:49.760 experience that is, uh, windows specific and very, very little around the build process. 17:50.320 --> 17:57.440 All right. Huge rabbit hole zone. And I still have a minute before I have to, uh, kick off 17:57.440 --> 18:07.120 the first part of our demo. So let's, let's keep, keep diving in, um, the, those specific part 18:07.120 --> 18:11.920 windows specific parts beside the dot exe extension that we're going to find slammed 18:11.920 --> 18:17.680 onto all of our familiar, uh, executables. We're also going to have emacs client W, 18:18.400 --> 18:26.880 which is a wrapper that hides, um, how hard it is to get, uh, to, to, to get it, 18:27.600 --> 18:31.760 how bad the abstraction is between the window management layer and the GUI, 18:32.400 --> 18:37.040 and then all the different parts on windows. Essentially, it wants to create a shell window. 18:37.040 --> 18:42.960 If we just double click emacs dot exe. So emacs client W, uh, and run emacs, 18:42.960 --> 18:49.440 they're going to solve that problem. Um, uh, wrapping emacs and emacs client respectively. 18:51.600 --> 19:00.320 And, um, just, uh, all right. So let's, let's go ahead and do something. I'll, I'm going to 19:00.320 --> 19:08.080 take away the ticker here for a minute. And what you're not seeing is off stage. I am killing that 19:08.080 --> 19:19.680 so we don't get built in parallel. Um, so, um, so at this point I'm going to open up a shell and 19:19.680 --> 19:24.240 I'm going to start talking just a little bit about my local build environment, which we haven't 19:24.240 --> 19:32.640 gotten into. In fact, just to make that even easier, let's, um, let's just take a look at it 19:32.640 --> 19:40.640 a little bit. Probably the easiest spot is here. 19:47.680 --> 19:55.280 All right. So here we have the familiar windows, my computer interface. I have the G drive and the 19:55.680 --> 20:07.200 H drive, four terabyte drives, um, dedicated to my, um, really overblown emacs build process. 20:08.160 --> 20:14.000 Um, this just lets me be super lazy. There's no reason you need any massive amount of storage 20:14.000 --> 20:22.080 to do any of this. Um, inside here, and now I'll actually switch you back to the other screen. 20:23.040 --> 20:26.560 Um, we'll, we'll find, 20:37.280 --> 20:46.480 oops, sorry about that. I didn't take the time to label that one. Um, so here you can see 20:46.480 --> 20:53.760 the primary output that I'm looking at through this automated process. I come along, I look at 20:53.760 --> 20:59.840 the bug reports, or maybe I'm just restarting my computer and choosing what emacs version at random. 20:59.840 --> 21:06.240 And then in that case, I look at this modified date and I say, um, my config that I, you know, 21:06.240 --> 21:11.120 that I'm playing with right now is all set for emacs 30, or I'm testing the both and I'm 21:11.120 --> 21:16.400 relaunching both of these. Right. So for me, that starts by diving into the install folder, 21:16.400 --> 21:22.720 going into the bin folder, which looks exactly the way my automation leaves it. I then come in 21:22.720 --> 21:34.320 to run the run emacs and I create a shortcut, um, to it. So I'm a keyboard person. So that's 21:34.320 --> 21:40.400 usually done like this. And then I just know that the context menu is going to come up in the right 21:40.400 --> 21:49.120 place. So I'll come up and, um, possibly change the, change the shortcut, right. 21:53.120 --> 22:01.280 If I don't mess with it. Um, so here's where I'll add my minus Q, if that's kind of where 22:01.280 --> 22:06.800 my world was at, or it kind of depends on what I'm doing with these, which varies week to week. 22:07.440 --> 22:12.000 Um, so restarting my emacs, uh, involves doing the same thing, going to my desktop 22:12.560 --> 22:23.200 and where you'll find a number of emac shortcuts and, um, updating the shortcut in the same manner 22:23.920 --> 22:28.000 joint actually, maybe we'll just, let's go back there and just show it. 22:28.000 --> 22:31.600 So if we look at, for example, my ERC, 22:31.760 --> 22:39.040 you can see, it's going to be pointing at one of these clones and then it's going to 22:39.760 --> 22:44.720 maybe tell me that I want, it wants to be full screen. Nope, not currently. And then it might, 22:44.720 --> 22:48.720 uh, have some stuff in there about auto-loading at config and what 22:48.720 --> 22:52.560 connections I'm going to, some commands I've defined to start connections. 22:53.280 --> 22:57.680 All right. And sorry, I got a phone call. I was checking. It wasn't in an org, the org, 22:57.680 --> 23:04.160 not the other organizers giving me the hook. So, um, all right. So that's, that's probably 23:04.160 --> 23:11.440 enough on the local system. Let's get back to the, to, to building emacs. And now it hopefully makes 23:11.440 --> 23:17.440 a certain amount of sense when I say we're going to wander over to the H drive and, and, and, and, 23:17.920 --> 23:22.560 hopefully makes a certain amount of sense when I say we're going to wander over to the H drive 23:22.560 --> 23:31.520 and recreate the structure that, um, both my process sort of assumes and the scripts you'll 23:31.520 --> 23:41.440 find in the admin NT, uh, build disk folder in source used to assume. Those scripts are in need 23:41.440 --> 23:49.440 of some love. And in just a little bit, I'll be mentioning a build, uh, a, uh, a, a, a particular 23:49.440 --> 23:54.000 bug that you might want to pay attention to if you're interested in making a self-installer. 23:54.800 --> 24:04.320 All right. So, um, we're going to create, uh, an emacs build directory. 24:04.320 --> 24:16.960 And we've got a handy git clone stage, git clone command stage for ourself. That would work. Um, 24:19.360 --> 24:26.160 do not currently see anybody lobbying for that. So instead we will run the rather faster 24:27.120 --> 24:36.080 uh, W get command on Savannah, which is not pasted in here. Nice. Let's see if I can freehand it. 24:36.080 --> 24:40.000 Not going to do it. Uh, 24:40.720 --> 24:41.840 okay. 24:52.000 --> 24:56.560 I beg your pardon. I'm grabbing a URL from the internet. 25:00.080 --> 25:06.960 Uh, okay. Yeah, I can, I can honestly, I can freehand it, whatever. Okay. Sorry. I, uh, 25:07.680 --> 25:13.200 I didn't have that bookmarked in all handy. Like I thought I did. Um, so we'll just say 25:13.200 --> 25:30.480 ftp.gnu.org slash, uh, what is it? Pub emacs, emacs-29.1, uh, .org.gnu.org.exe. 25:30.480 --> 25:47.040 I really think I'd have this command sitting around. It makes me want to scrap the whole 25:47.040 --> 25:54.720 demo. I'm not going to lie. Okay. How am I doing? Um, I think at least 15 minutes. Um, 25:54.720 --> 25:58.160 but in the command that you were freehanding, should the pub be GNU instead? 25:59.120 --> 26:01.680 Oh, thanks. I'm sorry. 26:07.440 --> 26:13.360 There we go. Thank you. All right. And then we'll, 26:17.760 --> 26:20.160 and I'm not sure I provided commands for this either, 26:20.720 --> 26:29.600 but it is trivially easy to do. And while that happens, we'll get to move on a few slides. 26:31.760 --> 26:38.000 Um, the configure script I'm not talking about in a lot of detail, but I do want to mention that the 26:38.000 --> 26:44.720 GNU binaries are provided with native, uh, compilation enabled. That's the feature that 26:44.800 --> 26:55.360 uses gcc lib gcc get on windows. If available, that lib gcc get will be used. Um, but when, 26:55.360 --> 27:03.200 but, uh, if, if, uh, emacs has that feature, then it will take by compile, uh, native code and, 27:03.200 --> 27:10.880 uh, asynchronously compile that as needed, uh, with the ahead of time feature. We're going to 27:10.880 --> 27:15.360 do as much of that ahead of time. And for folks that are consuming the windows binary, the 27:15.360 --> 27:21.360 thinking goes that they might not have my assist too. They might not have lib gcc jet. They might 27:21.360 --> 27:28.560 be happy that they're enabled in a, you know, a lot of time running emacs on their local environments 27:30.400 --> 27:39.120 at all, you know, in a, maybe a lockdown, uh, corporate context. So aside that, um, there's 27:39.120 --> 27:45.120 your first glimpse at the configure, um, program that we're going to run in a moment. In fact, 27:45.120 --> 27:52.160 I'm going to go as far as putting it on the clipboard. Um, really just looking at this, 27:52.160 --> 27:57.120 the AOT flag is the one I'd call attention to, but it's worth understanding that windows doesn't 27:57.120 --> 28:02.000 provide a D bus capability. So windows native program isn't going to be able to depend on D 28:02.000 --> 28:07.600 bus. We're going to, we're going to explicitly ask that that be left out. I think that's actually 28:07.600 --> 28:12.080 optional and it's documentation. I think the configure program is smart enough to know that 28:12.080 --> 28:20.080 we don't want D bus on windows. Um, otherwise we tend to compile with things. Um, there there's 28:20.080 --> 28:26.320 missing documentation. We could say the, uh, all of the libraries are treated in the way I mentioned 28:26.320 --> 28:34.880 in that, um, JPEG support will be available as long as the JPEG is, is available in our environment 28:34.880 --> 28:40.320 and configure script certainly notices that, um, the GNU provided binaries are provided with 28:40.320 --> 28:47.280 minus O2. And that's also my default personally on windows. Um, however, and I'm going to skip 28:47.280 --> 28:59.680 this since I mentioned it, um, mentioned, uh, and, uh, um, so I guess I'll say, um, you can, 28:59.680 --> 29:06.560 um, say with the, it's worth knowing that you, if you're not one reason that, that you're building 29:06.560 --> 29:11.200 might be because you want to turn off native compilation for whatever reason. If you have 29:11.200 --> 29:16.640 low juices, you get, get, but don't want Emacs to use it. Uh, especially as that default looks like 29:16.640 --> 29:26.480 it could be changing with Emacs 30. Um, the, uh, the debug configuration, um, this is, this is the, 29:26.480 --> 29:33.200 uh, kind of, uh, what, what I'm currently using this on commentary, uh, I've seen on the next 29:33.200 --> 29:45.280 development list. Let's check on our checkout and see if we can't get a build running. Um, 29:45.280 --> 29:51.440 this is a release build, so I won't be starting with, uh, so we'll start by hopping into its 29:51.440 --> 30:14.080 directory and we, um, we have, uh, but not. Okay. So that tells us we're going to run 30:14.640 --> 30:23.440 our configure program, but we don't need to run a config IC. So, 30:31.280 --> 30:34.320 so let's get that going and, uh, 30:36.000 --> 30:41.360 hopefully that's showing through just enough to be fun, not too much to be distracting. 30:45.040 --> 30:55.760 Um, the, uh, the unoptimized, uh, uh, um, please report issues. If your Emacs is crashing, 30:55.760 --> 31:01.200 uh, to the Emacs development list, not to me personally. Um, although you are of course, 31:01.200 --> 31:06.960 welcome to copy me. Um, if you especially I'm subscribed to that list, so I get all the mail. 31:06.960 --> 31:14.000 So I don't mind being copied. Uh, and, uh, as well, if you think it's, uh, 31:15.040 --> 31:20.160 you know, related to packaging, that actually makes sense or windows related to even, and, 31:20.160 --> 31:25.120 uh, it can be tested with an extra snapshot that should be uploaded to the canoe alpha side. 31:25.120 --> 31:31.600 I could look at that if I have time. There's with the configure script to make file for 31:32.160 --> 31:39.840 Emacs is really, really complicated. If time permits, which I'm now confident it will not, 31:39.840 --> 31:44.240 we will look at, uh, make file that I tried writing that, uh, orchestrates this whole 31:44.240 --> 31:52.160 process that I'm talking about. Um, as, uh, let's see. So the build, uh, build process, 31:52.160 --> 32:03.120 I run my builds with, uh, explosively specifying the max CPU, uh, with minus J, but minus B one 32:03.120 --> 32:08.320 to get the full build, uh, full log into your recipes. That is probably the magic thing. 32:09.040 --> 32:12.560 Matt, um, shouldn't to understand what, uh, 32:16.000 --> 32:23.600 or that, uh, that, that, uh, that I'm glad that I know, uh, as I'm trying to write my automations, 32:26.960 --> 32:36.080 uh, the, um, so I call that out here, the binary, uh, releases. Um, okay. So in this section, 32:36.080 --> 32:41.120 we're going to start to get into what are all those files. And there's a bug report related to 32:41.120 --> 32:46.640 that, but I didn't get into here. So, um, that's kind of to the point about the less said about 32:46.640 --> 32:50.800 this, the better, uh, that's my explanation for stepping through some of these slides. 32:50.800 --> 32:58.240 Uh, of course we'll share them all, uh, uh, hopefully by the time that this video is published. 32:58.960 --> 33:06.640 Oh, I mentioned, um, I may have mentioned already freshly installed, but, uh, fully installed. Uh, 33:06.640 --> 33:15.200 the, the, the key distinction here is that, uh, Emacs is distributed in the binary form for Windows 33:15.200 --> 33:21.600 with some DLL files that actually come from the mysys2 project. There's an implication there to 33:21.760 --> 33:26.160 there's an implication there to GCC that I definitely want to get to it talking about. 33:28.080 --> 33:35.840 Um, so freshly installed means we haven't copied those binaries from the mysys2, uh, 33:35.840 --> 33:45.360 installation into the Emacs, uh, installation. Uh, and then, uh, when we re-archived that 33:45.360 --> 33:48.640 local Emacs installation, that's how we're going to create the full zip. 33:48.640 --> 33:54.160 So hopefully that actually is a pretty good summary of what all those files are. Um, but 33:54.160 --> 34:00.320 there are readme files, uh, on the FTP that do a pretty good job, um, if you can dig enough to find 34:00.320 --> 34:11.120 one and my apologies for, uh, tardiness getting a new version on that posted. Um, the Emacs, uh, 34:11.120 --> 34:17.040 so those dependencies, uh, are listed within Emacs itself. And as we'll just talk about in a moment, 34:17.040 --> 34:24.240 there's a way, uh, that we can use, we can access that when we collect them in order to meet, uh, 34:24.240 --> 34:31.840 the GCC requirement that is essentially to include, um, include the sources for the, 34:31.840 --> 34:41.200 for those binaries, the things that were compiled against. Um, the, uh, so, so here we go, 34:41.200 --> 34:45.280 we're, we're into the build process. Let's just take a look and see if configure it got done. 34:45.280 --> 34:52.240 It sure did. And now we can see a table of, of hopefully good, but good and bad news, um, 34:52.240 --> 34:57.840 and potential, um, where we're learning that we're using the pdumper strategy and any number of other 34:57.840 --> 35:04.320 things that we might be messing with as our motivation for, for building ourselves on Emacs. 35:04.320 --> 35:12.560 Um, again, this table represents, uh, what you'll, what, what, what it looks like for me when I'm 35:12.560 --> 35:22.720 building for the GNU distributed binaries. All right. So, um, kind of moving, moving as quickly 35:22.720 --> 35:31.200 as I can here. I'm at 40 after, I believe that's the five minute mark. So, um, having just succeeded 35:31.200 --> 35:37.040 in, in configuring Emacs, I don't think we're going to build it. Uh, uh, I don't think we're 35:37.040 --> 35:42.720 going to actually get to running make install. Um, but I have it sitting here on my keyboard 35:43.280 --> 35:54.320 or clipboard, assuming that we will, right? No. Oh, wow. I think I've managed to confuse this. 35:54.320 --> 36:06.240 All right. So for me, that looks simply like, uh, make, uh, V equals one install, uh, 36:08.160 --> 36:11.040 prefix equals, uh, 36:18.400 --> 36:19.920 and we can at least get it kicked off. 36:20.640 --> 36:27.680 And that can, that command is just, uh, just is no, no different than I showed on the slide where 36:27.680 --> 36:32.160 I, where I gave it, uh, wasn't planning to stop and explain it. I was just planning to paste it. 36:33.360 --> 36:38.640 So, so, so again, recapping the rest of the process here and maybe actually making it, 36:38.640 --> 36:44.320 if you can believe it or not, through the rest of these slides, um, we, to, to, to create the 36:44.800 --> 36:49.600 full set of binaries, we're going to need a no dependent, no depths archive. That's without the 36:49.600 --> 36:57.760 mysys2, uh, deal provided DLLs, just the things that we compile as part of making Emacs. Um, 37:00.320 --> 37:07.840 the, uh, the build depths zip script is provided with the source distribution is your tool for, 37:07.840 --> 37:11.760 uh, meeting the GPL requirements, right? Source as mentioned before, 37:12.640 --> 37:18.560 um, there is a second bug that I did, uh, include some more information on in my notes already. 37:19.680 --> 37:25.600 Um, that, uh, that gets into the details of this other feature I alluded to. 37:26.480 --> 37:35.120 Um, I'll just skip into that. Um, we, we can, with, with, uh, with a, an appropriate version 37:35.680 --> 37:42.240 of that, which you may need a patch, uh, to, to have, you can list out the dependencies 37:42.240 --> 37:47.200 and, and that version as well. Can consider the dependencies of the Emacs binary versus 37:47.200 --> 37:51.680 the hard-coded list you might find, depending on when you look at this file in the source tree. 37:53.680 --> 38:01.360 The diff, um, so I also have a hack here that, uh, works around the absolute requirement to 38:01.600 --> 38:18.320 run this with the mysys2 and not the minGW64 script. Um, once we've made that zip file that 38:18.320 --> 38:25.360 contain that's, that's our installed Emacs without the DLLs provided by mysys2, we'll then unpack 38:25.360 --> 38:30.960 the dependencies that were created by that Python script we just talked about from the Emacs source 38:30.960 --> 38:38.080 tree. At that point, once those are unpacked, we can now make what's called the full installer, 38:38.080 --> 38:42.800 or sometimes I might call it the unqualified installer, because it's just going to be called 38:42.800 --> 38:54.800 Emacs29.1.zip. Um, and that, uh, that file, which, which creates the, the, the, the, the, 38:54.800 --> 39:02.640 which creates the archive, uh, that, uh, that, that, that file is exactly the same, 39:02.640 --> 39:08.400 plus the, uh, the dependencies that we unzipped in the bin folder of the installed Emacs. 39:09.680 --> 39:14.480 The, uh, executable self-installer, which I would love to have more time to talk about. 39:14.480 --> 39:18.720 I gave a few pointers here on the hard part of running it. Most importantly, 39:19.680 --> 39:26.640 if I've installed in any kind of funny looking name, I end up renaming it to like Emacs-29.1 39:26.640 --> 39:35.200 or Emacs-29. or 30.0.50 or whatever. And I just renamed that installed Emacs folder. 39:35.200 --> 39:39.680 And then I go to the root of wherever I created that, the parent directory above it. 39:40.320 --> 39:46.560 And that's where I make my copy of the Emacs NSI, um, the, the NSIS script. 39:47.520 --> 39:55.600 And, uh, that's also where I, and then, um, then from that parent directory, I execute, 39:55.600 --> 40:02.560 uh, making sys, uh, here. I, as mentioned, um, I, I can get away with this because I have it 40:02.560 --> 40:07.520 on my path and it's my recollection. I think I tested this and couldn't reproduce the problem. 40:07.520 --> 40:11.200 So I didn't document it here, but I've had some problems with running this 40:11.200 --> 40:20.400 when, uh, when NSIS wasn't on my path. The, uh, the, the, the final step here 40:20.400 --> 40:27.600 and the last, the GPL requirement is to include all the sources, except when I'm doing a release 40:27.600 --> 40:34.320 build, I always do this. Um, and that's the new practice when making Snapchat binaries is to go 40:34.320 --> 40:39.840 ahead and include the sources, even though we might have the specific revision number, um, 40:39.840 --> 40:46.800 our thinking is we want absolute clarity, um, that, that somebody, uh, can say, okay, 40:46.800 --> 40:51.200 this binary did this thing, send me the source for it. I'm going to go take that into my own 40:51.200 --> 40:56.800 open source, or yeah, maybe they would, the jerks, um, into my own open source project. 40:56.880 --> 41:03.360 And, um, you know, off they go, uh, and that needs to be possible. 41:04.800 --> 41:12.480 Um, so, um, beyond that, the rest of this is, is really detailed that you find covered in the GNU 41:12.480 --> 41:19.520 maintainers manual. Um, this is the, the current set of Windows binaries that, um, it's busily 41:19.520 --> 41:29.040 working on creating a like for like a mirror to behind the scenes here is called a 29.1 underscore 41:29.040 --> 41:36.080 two. Um, and I have a lot of automation, uh, available on this site. So at this point, 41:36.080 --> 41:45.200 I'm just, I think I'm only a minute, 40 seconds over. I'm gonna invite my, uh, co-organizers 41:45.200 --> 41:49.760 back onto the call or any volunteers that want to jump in and anybody, if there's people on the 41:49.760 --> 41:57.440 BBB, I'd be happy to take questions. If there aren't, um, I have a screen full of, uh, the 41:57.440 --> 42:04.080 automation stuff ready to go as a kind of a second ring in my circus today. So if you're still with 42:04.080 --> 42:08.640 me, thanks a lot for joining me. And I really enjoyed this talk. Uh, if this is where we're 42:08.640 --> 42:14.560 going to close it out, I don't know where we're at for schedule today. Thanks a lot for a great 42:14.560 --> 42:20.880 talk, Corwin. Um, in terms of like schedule, yeah, you went over a little bit for the official, 42:20.880 --> 42:26.880 like, um, schedule or time of your talk, but I think, uh, we actually have maybe like six or 42:26.880 --> 42:32.640 seven more minutes, um, here on stream for, um, questions and such, if folks have questions, 42:32.640 --> 42:38.320 or if you want to like quickly maybe show one or two more things. Um, but I think the hard stuff 42:38.320 --> 42:43.520 is about like maybe 10 minutes ish for now. And then we'll have to rush over to, um, uh, for the 42:43.520 --> 42:55.520 closing remarks. So, well, that sounds awesome. Okay. So I'm looking at the, the dev chat. Uh, 42:55.520 --> 43:01.040 I see a comment on cross-compiling the emacs, but I'm sorry, I'm looking at IRC primarily, but, 43:01.040 --> 43:08.080 uh, feel free to jump in if you're on, uh, BBB with me, or, uh, uh, if, if you put something on 43:08.160 --> 43:16.400 the pad, I'm sure, uh, we'll see it between the two of us, uh, over here. Okay. So cross-compiling 43:16.400 --> 43:20.640 emacs for Serenity. I haven't tried really any cross-compiling. I think that would be very 43:20.640 --> 43:28.240 interesting. I would most likely focus on doing exactly what I do on a GNU system, completely 43:28.240 --> 43:35.760 ditching. Um, so I guess with my, my remaining time, rather than walking through code, um, for 43:35.760 --> 43:42.080 my automation, which can be another talk, if in fact there's an interest in that, um, I want to, 43:42.080 --> 43:48.480 I guess, say a couple of words about the non-free operating system that I'm using here. I did my 43:48.480 --> 43:58.880 best to use no non-free software other than the, uh, the operating system that is the context for 43:58.880 --> 44:07.920 this talk in preparing this talk for you. I personally have a lot more, uh, time and energy, 44:07.920 --> 44:15.840 I have to say, invested in proprietary tools for doing a lot of the things that, that go into this. 44:15.840 --> 44:22.000 So I really respect the work of people that pull that off. Um, I'm sorry I didn't get my pre-recorded 44:22.000 --> 44:30.320 stuff, uh, kind of in order for everybody, but I just want to stress, like, uh, it is all absolutely 44:30.320 --> 44:35.520 possible and just hats off to everybody that, that used, uh, entirely free software to get their, 44:36.240 --> 44:43.360 get their recordings done in time. Um, and what you did see, unless it was provided by the operating 44:43.360 --> 44:49.200 system in my presentation today, was all, uh, free software with the debatable exception of 44:49.200 --> 44:56.160 NSYS, which styles itself as open source, maybe for, uh, marketing reasons. 44:56.720 --> 45:00.400 Okay, uh, in any case, uh, certainly we can get all that source. 45:08.080 --> 45:14.640 Thanks for the note, Corin. It's good to know that, uh, building or, uh, yeah, doing the build of Emacs 45:14.720 --> 45:20.880 for Windows on Windows can be done, uh, using only free software. Yeah, absolutely. 45:23.440 --> 45:29.520 Probably the right closing note, right? Um, I just, uh, thanks again to the organizers for 45:29.520 --> 45:33.920 bearing with me. And like, every time I was like, you guys, I'm terrible at this. They're just like, 45:33.920 --> 45:38.240 no, you're doing fine. Keep going. You did a great job live last time. You can do it live, 45:38.240 --> 45:43.040 you know, and, and saying all the right things to just, uh, encourage me to come back, 45:43.920 --> 45:46.160 uh, this year and every year. 45:49.760 --> 45:53.520 Well, as I said before, we were very lucky to have you and the rest of the team, of course, 45:53.520 --> 45:59.520 as well. And, um, goes without saying, but all the speakers and the audience, the participants as 45:59.520 --> 46:14.240 well. So, um, so, uh, are we, we're still live over here that, you know, you know, me, I'm the 46:14.240 --> 46:22.800 Mike Hogg that I am. I can't resist, um, throwing, throwing up another screen here. And, uh, in fact, 46:22.800 --> 46:32.160 let's go ahead and go back to our, to our crawler, right? And I'll bring back our build 46:32.160 --> 46:40.480 if it finishes and maybe we'll show making the installer as well. Um, uh, but I have the CPU 46:40.480 --> 46:49.680 account turned down a little bit here. Uh, note, I didn't specify minus J here. Um, so, uh, over 46:49.680 --> 46:54.000 here is my automation. Uh, in case you do want to take a look, I can at least provide the 46:54.000 --> 46:59.760 orientation of what you're looking at. Scrape log is probably my first thing I want to show off. 46:59.760 --> 47:08.400 Um, it's not beautiful, but this works, uh, pretty well for me to get a sense of something might 47:08.400 --> 47:14.640 have changed in terms of how many warnings or errors are happening when I build Emacs. So I 47:14.720 --> 47:18.640 have this whole automation going on and I frequently want to answer the question, 47:19.280 --> 47:25.600 you know, what's the change rate in, uh, warnings or what have you. So this kind of gives me a count 47:26.400 --> 47:36.880 of that. Um, so from there, uh, accrued CI is the script we're watching run in the other pane. 47:37.840 --> 47:44.960 Um, we can see it's, uh, just starting to do its thing again. 47:48.800 --> 47:56.960 And, uh, the make file I mentioned, this is a top-down rewrite of everything else that I've done. 47:57.040 --> 48:08.640 It has some bugs right now. Um, the, uh, the build distribution is the main script that I use for my 48:08.640 --> 48:17.120 personal builds. This is what is run by the crude CI script. Uh, it has a fun tie-in to this, uh, 48:17.120 --> 48:23.200 web interface here, um, where we can, you don't need the port number when you go to it. That's 48:23.200 --> 48:33.680 just if I'm going to post. Um, the, uh, blah, blah, blah, blah, blah. This, this script is 48:33.680 --> 48:39.120 really long and complicated and probably needs some diving into, but you can see that, um, one 48:39.120 --> 48:43.760 of the complexities I have to deal with is that I'm going to need something in the format of an 48:43.840 --> 48:53.920 emacs-version for strategic, um, nsys reasons. So, uh, it takes care of kind of every complexity 48:54.480 --> 49:03.120 that I mentioned today in some respects, um, as does the make file. Build release is, um, another 49:03.120 --> 49:11.360 fairly useful incarnation of this. This is just focused on the release process, and this does 49:11.360 --> 49:18.800 work, uh, for example, to create the, the, the, you know, like, like, well, I could like, uh, 49:18.800 --> 49:25.600 for like files as far as I can tell. So what are currently posted for emacs 29.1 and the release 49:25.600 --> 49:32.400 candidate. Um, so I'll probably use that next time. And if it's still like, for like, I'll 49:32.400 --> 49:40.960 probably post the ones that came from this. Um, uh, building, uh, TreeSitter, I make some DLLs 49:40.960 --> 49:47.120 there. If you're looking for hints on how to get going or just simply, uh, a huge long list 49:47.120 --> 49:55.840 of Git repositories that make grammars, you can use that is here as well. Um, finally, I mentioned 49:55.840 --> 50:04.800 I have a, um, I have a website where I publish my own personal snapshots that I make, uh, that 50:04.800 --> 50:11.680 folder full of install directories, but all of the usual GNU style binary distributables, including 50:11.680 --> 50:22.320 the source code and the source code for the dependencies. Um, the, uh, so this program is 50:22.320 --> 50:27.680 another one of those complicated find commands and therefore potentially the most useful thing 50:27.680 --> 50:34.960 in here to take to you. Um, and here I'm deleting, uh, binaries older than 17 years. Uh, everything 50:34.960 --> 50:42.240 except the, uh, node apps file and the sources of it you'll find on my website. Currently those 50:42.240 --> 50:48.800 indefinitely, I'll probably roll out 120 days or something, um, for those eventually. 50:53.600 --> 51:00.400 Oh, uh, I can talk about this one even. Um, the, uh, so here you'll see the two branches that I'm 51:00.400 --> 51:06.560 tracking. The job of this script is, uh, this runs on the website. I call it with a, like a remote 51:06.560 --> 51:15.920 rsync, uh, type, uh, or an SSA remote, uh, SSH command. Um, and right after the rsync, 51:15.920 --> 51:26.080 rsyncing up any new Emacs that I built. And, uh, it's, uh, it's job is to update my fancy 51:26.080 --> 51:34.880 directory indexing. So let's look at Corwin's website. Here's my Emacs 29 folder. 51:37.360 --> 51:50.400 We have about two more minutes, Corwin. Yeah. It'll take that entire two minutes to, uh, 51:50.400 --> 51:56.400 load this directory because I am, because I have not yet ever pruned any of these dang binaries. 51:56.400 --> 52:02.800 So every version of, uh, Emacs 29 that I've ever made for myself is probably here. Nice. 52:03.600 --> 52:08.480 Uh, I strongly recommend that you bookmark this folder if you're using these for something and 52:08.480 --> 52:14.240 you always want the latest. Um, so here, this particular, uh, latest 29, Emacs 29 latest, 52:14.240 --> 52:22.560 or simply replace the 29 with 30 to get those. Uh, alas, no, no such luck for TreeSetter. 52:23.120 --> 52:26.320 But if we look at, uh, that, 52:36.400 --> 52:40.320 live this long without making a typo. Now look at me. 52:40.320 --> 52:46.080 Uh-oh. Oh. 52:51.520 --> 52:56.720 So here, um, you know, we can see the icon application and so on, even in the TreeSetter 52:56.720 --> 53:01.440 folder. This is all I'm talking about, about the fanciness that's set up by that other script that 53:02.400 --> 53:06.880 I'm showing over here and run after each time I run the upload. It just 53:07.840 --> 53:12.640 looks to see if anything's new and add some lines to the .htaccess file. 53:15.840 --> 53:22.400 Um, I'm particularly proud of this one. I'm not going to lie. Um, linking out to each, 53:22.400 --> 53:26.560 each, uh, project that we're using, letting us know the commit version, 53:26.560 --> 53:34.320 and then, uh, for the DLLs, quick link out to the log and the signature file for this DLL. Um, 53:36.960 --> 53:46.160 I find that a lot, just a lot more readable than, uh, listing them all out individually. And I'd 53:46.160 --> 53:53.360 love to do something like that on the GNU site. So I'm, I think we've got to be out of time by 53:53.360 --> 53:59.600 now. I've just got to say, hey, thanks again for having me, uh, for those that, uh, watch the talk 53:59.600 --> 54:04.400 either live or after the conference. Uh, appreciate everyone's support to get me to 54:04.400 --> 54:10.320 the point where I will be able to, uh, to do this, this, this cool volunteer task, 54:10.320 --> 54:14.160 uh, which is fun and easy to do and reach out to me if you're interested in helping with it. 54:18.960 --> 54:24.320 Well, awesome. Thanks a lot for the awesome talk, Corbyn. And, uh, of course, as a fellow 54:24.320 --> 54:29.920 core, uh, core organizer, uh, for all, for all that you do, um, in and around Emacs Conf 54:29.920 --> 54:33.280 and of course for, uh, GNU Emacs as well, it's much appreciated. 54:36.160 --> 54:43.200 Big, big words from coming from you, my friend. Um, thanks for the kind words. 54:45.040 --> 54:49.840 Cheers. My pleasure. All right. And with that, I think we're gonna, uh, wrap up the dev, uh, 54:49.840 --> 54:55.360 track here and, uh, we'll be with you again shortly in a few minutes on the gen stream, 54:55.360 --> 55:00.400 the gen track for the closing remarks for today, um, only for today, because we're going to be 55:00.400 --> 55:07.520 back tomorrow again as well. So don't go anywhere and, uh, see you on the gen track in a bit. 55:25.920 --> 55:32.720 Oh my God, I did it. We got done within the time. You're my hero. Um, and thank you so 55:32.720 --> 55:41.520 much for just keeping me honest there and, uh, like helping me keep my eye on the time and such. 55:41.520 --> 55:53.680 You have to look at the recording and see whether you feel like doing it again. 55:56.160 --> 55:59.520 I'm sorry. I had my sound screwed up and I'm sorry if I talked over somebody, 55:59.520 --> 56:01.680 I couldn't hear anything on mumble until this very moment. 56:03.520 --> 56:08.960 Oh, uh, because he's your webcam for it. Um, like as a, like a virtual webcam thingy, 56:09.440 --> 56:15.760 it was low res, especially when things are changing as you're scrolling around. So we'll 56:15.760 --> 56:19.920 see what kind of recording we can recover from it. And then you can decide whether you maybe 56:19.920 --> 56:26.480 want to clean it up with like screenshots. I recorded on this end too. We shouldn't have 56:26.480 --> 56:30.720 that problem with my recording. Thank you. Thank you. Thank you. I think we're still live on the 56:30.720 --> 56:42.240 dev stream. Someone could, uh, take that off. Oh, yes. Because, uh, I'll, I'll set it to rebroadcast. 56:45.520 --> 56:50.640 Yeah. I love doing that for the closing remarks. That's a fine tradition 56:52.000 --> 56:58.480 or it's a tradition now. Cause I'm pretty sure this means we've done it twice. 57:01.680 --> 57:07.360 I once heard that, you know, uh, as a fan-ish meaning like a fan-ish is a term of endearment 57:07.360 --> 57:12.240 for a science fiction fan to another. We say we're, we're fans or things we do are fan-ish and 57:12.800 --> 57:18.960 a fan-ish tradition then is if you do it three times, it's tradition, but we're on a budget here. 57:19.680 --> 57:31.600 So, all right. I think we should, um, head over to mumble and talk on mumble. Um, and just decide 57:31.600 --> 57:36.240 and see like which big blue button room we're going to be in for closing. Okay. So we're clear 57:36.240 --> 57:39.600 on BBB here? Yep. I think so.