diff options
| author | Sacha Chua <sacha@sachachua.com> | 2025-12-18 20:22:40 -0500 |
|---|---|---|
| committer | Sacha Chua <sacha@sachachua.com> | 2025-12-18 20:22:40 -0500 |
| commit | e9ff894e5be4c25d20a6c9df8b9b399280418293 (patch) | |
| tree | 2f2f56b6a8a753945bdbbed2064f570c7da99bd3 /2025/captions/emacsconf-2025-open-mic--open-session--participants--main.vtt | |
| parent | eec65463925fc48780f115e32e14f5cceebfeeee (diff) | |
| download | emacsconf-wiki-e9ff894e5be4c25d20a6c9df8b9b399280418293.tar.xz emacsconf-wiki-e9ff894e5be4c25d20a6c9df8b9b399280418293.zip | |
Diffstat (limited to '2025/captions/emacsconf-2025-open-mic--open-session--participants--main.vtt')
| -rw-r--r-- | 2025/captions/emacsconf-2025-open-mic--open-session--participants--main.vtt | 3058 |
1 files changed, 3058 insertions, 0 deletions
diff --git a/2025/captions/emacsconf-2025-open-mic--open-session--participants--main.vtt b/2025/captions/emacsconf-2025-open-mic--open-session--participants--main.vtt new file mode 100644 index 00000000..ffdfe3de --- /dev/null +++ b/2025/captions/emacsconf-2025-open-mic--open-session--participants--main.vtt @@ -0,0 +1,3058 @@ +WEBVTT + +00:00:00.000 --> 00:00:03.599 +All right, so yes, we have a little bit of time + +00:00:03.600 --> 00:00:05.719 +while we are waiting for the dev track to finish, + +00:00:05.720 --> 00:00:08.319 +and we could just declare this as a break, + +00:00:08.320 --> 00:00:12.039 +or if anyone's got any interesting last-minute stuff, + +00:00:12.040 --> 00:00:17.239 +you can come and share it here, + +00:00:17.240 --> 00:00:20.879 +where Karthik is also hanging out. + +00:00:20.880 --> 00:00:23.279 +I think every time I read one of your long blog posts, + +00:00:23.280 --> 00:00:25.559 +Karthik, I'm like, mm, life goals. + +00:00:25.560 --> 00:00:28.399 +Someday I want to write something with nice diagrams + +00:00:28.400 --> 00:00:31.279 +and, you know, deep Emacs interestingness. + +00:00:31.280 --> 00:00:34.919 +I have not yet gotten the hang of even using avy + +00:00:34.920 --> 00:00:38.119 +to nearly the extent that you do. + +00:00:38.120 --> 00:00:40.119 +But yes, I have, I have always looked + +00:00:40.120 --> 00:00:42.319 +at your diagrams very longingly + +00:00:42.320 --> 00:00:44.679 +and wondered how you make them. + +00:00:44.680 --> 00:00:51.239 +With a lot of sweat and cursing, unfortunately. + +00:00:51.240 --> 00:00:54.199 +It's all very nice. Yeah. + +00:00:54.200 --> 00:00:58.319 +And I, I, I've seen your interactive SVGs, + +00:00:58.320 --> 00:01:02.319 +which is just wizardry. I have no idea how you do that. + +00:01:02.320 --> 00:01:06.959 +You can hover over different elements in the SVG + +00:01:06.960 --> 00:01:08.759 +and do interesting things. + +00:01:08.760 --> 00:01:11.799 +Yeah, so it turns out if you just think of them as XML, + +00:01:11.800 --> 00:01:13.079 +which Emacs will let you + +00:01:13.080 --> 00:01:15.159 +because you can just control C, control C, + +00:01:15.160 --> 00:01:16.759 +and it'll switch back to text mode, right? + +00:01:16.760 --> 00:01:19.999 +Then you can be like, oh, yeah, I can work with this + +00:01:20.000 --> 00:01:23.559 +using the DOM Emacs list library. + +00:01:23.560 --> 00:01:28.479 +And then you can add title elements to it to get the hovers, + +00:01:28.480 --> 00:01:31.079 +or you can add hyperlinks. + +00:01:31.080 --> 00:01:35.039 +So in fact, the emacs-conf schedule + +00:01:35.040 --> 00:01:41.199 +is very naturally generated from emacs-lisp itself, + +00:01:41.200 --> 00:01:43.399 +because there was no way I was going to handle + +00:01:43.400 --> 00:01:45.719 +two track schedules by hand. + +00:01:45.720 --> 00:01:49.799 +And that's just SVG so that you can then have the hovers. + +00:01:49.800 --> 00:01:53.119 +The important thing is that when you're exporting it to HTML, + +00:01:53.120 --> 00:01:57.919 +it has to be an inline SVG to get the fancy behaviors. + +00:01:57.920 --> 00:02:02.799 +If you're linking it in as an image, then it doesn't work. + +00:02:02.800 --> 00:02:09.279 +It has to be inline. So for example, for my org mode, + +00:02:09.280 --> 00:02:14.079 +I have my exports for images checked first if it's an SVG. + +00:02:14.080 --> 00:02:15.959 +And unless I have an attribute + +00:02:15.960 --> 00:02:20.359 +on it that says, no, just link to it because it's large and not interactive, + +00:02:20.360 --> 00:02:22.759 +it actually inlines all of that markup + +00:02:22.760 --> 00:02:26.879 +into the exported HTML, if that makes sense. + +00:02:26.880 --> 00:02:34.279 +That does, that does make sense. + +00:02:34.280 --> 00:02:36.559 +It's a little less mysterious now. + +00:02:36.560 --> 00:02:40.319 +On the plus side, once it is in there as inline HTML, + +00:02:40.320 --> 00:02:42.519 +well, inline, you know, it's an inline markup, + +00:02:42.520 --> 00:02:44.359 +you can actually play around with it + +00:02:44.360 --> 00:03:01.919 +using JavaScript or CSS. That's really neat. + +00:03:01.920 --> 00:03:07.679 +I had a question about some other SVG wizardry I've seen you do. + +00:03:07.680 --> 00:03:09.759 +You have these SVGs that grow, right? + +00:03:09.760 --> 00:03:15.959 +Like they accumulate elements, almost like a slideshow. + +00:03:15.960 --> 00:03:20.199 +Am I remembering that correctly? Yeah, yeah, yeah. + +00:03:20.200 --> 00:03:22.399 +I started using that for one + +00:03:22.400 --> 00:03:24.519 +of the EmacsConf presentations. + +00:03:24.520 --> 00:03:26.559 +Well, the one EmacsConf presentation + +00:03:26.560 --> 00:03:27.919 +I've done in recent history, + +00:03:27.920 --> 00:03:31.639 +because it's nice to be able to add things gradually, right? + +00:03:31.640 --> 00:03:35.799 +Especially as you're giving a presentation. + +00:03:35.800 --> 00:03:38.719 +And that's also done with Emacs Lisp. + +00:03:38.720 --> 00:03:43.599 +What I do is, first I make the image, and then in Inkscape, + +00:03:43.600 --> 00:03:46.519 +I can group together the elements + +00:03:46.520 --> 00:03:49.639 +that I want to appear at the same time. + +00:03:49.640 --> 00:03:54.639 +And then I can use Emacs to, I think I just changed the, + +00:03:54.640 --> 00:04:01.039 +I just add some CSS to them to make them dimmer. + +00:04:01.040 --> 00:04:04.759 +and you just iterate through the different groups in that level, + +00:04:04.760 --> 00:04:09.839 +and you write out the intermediate SVG files, + +00:04:09.840 --> 00:04:12.279 +and then you can use Inkscape + +00:04:12.280 --> 00:04:14.839 +to convert them into PNGs if you want, + +00:04:14.840 --> 00:04:16.079 +like images of each step + +00:04:16.080 --> 00:04:18.719 +that are in PNG format instead of SVG. + +00:04:18.720 --> 00:04:20.359 +But the basic idea is you group + +00:04:20.360 --> 00:04:24.159 +the elements together that you want in one step, + +00:04:24.160 --> 00:04:25.879 +and then you can manipulate it + +00:04:25.880 --> 00:04:30.159 +using the Emacs DOM.EL library, + +00:04:30.160 --> 00:04:32.879 +because it's just an XML document. + +00:04:32.880 --> 00:04:38.719 +So you can say, all right, hide everything or have everything visible + +00:04:38.720 --> 00:04:43.159 +and then remove the last one or something like that, you know, iterated. + +00:04:43.160 --> 00:04:50.679 +Show them one at a time and then write your resulting document object model + +00:04:50.680 --> 00:05:05.919 +to a new file each step. Do you have, that makes sense. + +00:05:05.920 --> 00:05:09.159 +So do you just write the e-list, + +00:05:09.160 --> 00:05:12.079 +like is this on a case-by-case basis? + +00:05:12.080 --> 00:05:13.519 +Like every time you need to do this, + +00:05:13.520 --> 00:05:18.519 +do you write fresh e-list to step through the SVG this way? + +00:05:18.520 --> 00:05:22.479 +Or do you have some kind of package + +00:05:22.480 --> 00:05:27.159 +or library to do this more? + +00:05:27.160 --> 00:05:32.999 +Let me go see if this is the one. + +00:05:33.000 --> 00:05:39.839 +It's probably just buried in my config. + +00:05:39.840 --> 00:05:46.719 +If I do it again, I'm sure I will find another thing + +00:05:46.720 --> 00:05:51.159 +that I've completely forgotten about + +00:05:51.160 --> 00:05:56.399 +and therefore have to recode or fix or whatever. + +00:05:56.400 --> 00:06:03.199 +But let me go see. Can you see my screen? Yep. OK. + +00:06:03.200 --> 00:06:07.559 +So, oh, yeah, yeah, this one. Nice, I remember that one. + +00:06:07.560 --> 00:06:13.719 +OK, so we get this SVG, and then this animateSVGPaths + +00:06:13.720 --> 00:06:16.959 +is just a function I have. It takes the file name. + +00:06:16.960 --> 00:06:22.039 +It makes an output there. It adds one path back at a time. + +00:06:22.040 --> 00:06:25.839 +And it just creates a lot of these numbered frames. + +00:06:25.840 --> 00:06:27.639 +So as you can see here, + +00:06:27.640 --> 00:06:30.039 +I'm just saying, OK, take the whole thing. + +00:06:30.040 --> 00:06:34.479 +And then I think, yeah, maybe I said it like, + +00:06:34.480 --> 00:06:36.999 +you know, take the whole thing, + +00:06:37.000 --> 00:06:40.199 +make everything transparent, + +00:06:40.200 --> 00:06:45.079 +and then one at a time, make them opaque + +00:06:45.080 --> 00:06:50.079 +and save that, save that to the frame, to the image. + +00:06:50.080 --> 00:06:54.319 +So this theoretically is a somewhat reusable function + +00:06:54.320 --> 00:07:01.039 +that takes the SVG and just fills the directory with it. + +00:07:01.040 --> 00:07:03.399 +What's the order in which it reveals things? + +00:07:03.400 --> 00:07:12.919 +Top to bottom or bottom to top, it's whatever the SVG has. + +00:07:12.920 --> 00:07:15.959 +And so if you're grouping things together, + +00:07:15.960 --> 00:07:17.599 +you can rearrange things in Inkscape. + +00:07:17.600 --> 00:07:22.039 +If you've given them IDs, + +00:07:22.040 --> 00:07:25.119 +which I have another function for in Emacs list + +00:07:25.120 --> 00:07:26.919 +that just highlights something + +00:07:26.920 --> 00:07:28.439 +and lets me put an ID for it, + +00:07:28.440 --> 00:07:30.879 +then you can rearrange them yourself + +00:07:30.880 --> 00:07:32.319 +by looking at the markup, I guess. + +00:07:32.320 --> 00:07:35.319 +Or I think I actually have some code also + +00:07:35.320 --> 00:07:37.039 +that will rearrange the path + +00:07:37.040 --> 00:07:39.279 +based on a list of IDs that I give it. + +00:07:39.280 --> 00:07:42.759 +and sequence so this one is animating + +00:07:42.760 --> 00:07:44.319 +one element at a time here + +00:07:44.320 --> 00:07:47.319 +um it's kind of like interesting effect + +00:07:47.320 --> 00:07:49.039 +but for larger things like for this one + +00:07:49.040 --> 00:07:52.039 +i can split this up into groups + +00:07:52.040 --> 00:07:59.599 +because i don't want to necessarily animate them letter by letter and that one + +00:07:59.600 --> 00:08:03.319 +Oh yes, this is the function that I have + +00:08:03.320 --> 00:08:05.319 +for identifying the paths + +00:08:05.320 --> 00:08:08.959 +and it highlights it and then it asks me for a name. + +00:08:08.960 --> 00:08:11.359 +And this is the one that reorders it. + +00:08:11.360 --> 00:08:14.559 +So I can say, this is the sequence + +00:08:14.560 --> 00:08:19.279 +that I want it animated in. And it will, yeah, good. + +00:08:19.280 --> 00:08:23.399 +So you don't actually need Inkscape at all, right? + +00:08:23.400 --> 00:08:24.999 +Because you have an elisp function + +00:08:25.000 --> 00:08:28.399 +that will let you assign the order interactively. + +00:08:28.400 --> 00:08:34.599 +Yeah, so if you're doing just all the elements one after the other, + +00:08:34.600 --> 00:08:39.279 +Inkscape is helpful for combining the different shapes, + +00:08:39.280 --> 00:08:41.399 +well, breaking it apart, + +00:08:41.400 --> 00:08:44.719 +because when I get the PDF and I convert it, + +00:08:44.720 --> 00:08:48.559 +it's like one big element that has a very complex path. + +00:08:48.560 --> 00:08:52.479 +And if I want to animate it element by element, + +00:08:52.480 --> 00:08:53.959 +I have to break it apart + +00:08:53.960 --> 00:08:59.759 +and then recombine it so that, you know, so that this O looks like it's hollow + +00:08:59.760 --> 00:09:01.079 +instead of like a circle. + +00:09:01.080 --> 00:09:02.959 +So there's a little bit of Inkscape + +00:09:02.960 --> 00:09:04.879 +cleaning up before then, + +00:09:04.880 --> 00:09:08.439 +but I really dislike the mouse heavy stuff of Inkscape + +00:09:08.440 --> 00:09:12.119 +for assigning IDs and things like that. + +00:09:12.120 --> 00:09:13.999 +I haven't quite gotten the hang of it. + +00:09:14.000 --> 00:09:16.119 +So this is what it looks like + +00:09:16.120 --> 00:09:17.919 +before you group the elements together + +00:09:17.920 --> 00:09:20.039 +and you combine paths, + +00:09:20.040 --> 00:09:22.079 +which is what you have to do Inkscape for, + +00:09:22.080 --> 00:09:24.879 +because I can't make sense of the numbers in Emacs someday. + +00:09:24.880 --> 00:09:30.319 +So just combine, combine, combine. But once it's there, + +00:09:30.320 --> 00:09:32.719 +I don't like having to set the ID in this + +00:09:32.720 --> 00:09:34.879 +object properties on the right side, + +00:09:34.880 --> 00:09:36.959 +because there's a lot of clicking. + +00:09:36.960 --> 00:09:40.559 +press escape and tab and tab, it's not reliable. + +00:09:40.560 --> 00:09:42.599 +So that's why I have this function + +00:09:42.600 --> 00:09:46.559 +and it lets me identify the paths and animate them + +00:09:46.560 --> 00:09:50.999 +from within Emacs, because Emacs is a text editor. + +00:09:51.000 --> 00:09:55.279 +Yeah, in name only, but anyway. + +00:09:55.280 --> 00:10:02.679 +So the groups, if you've already assigned groups in Inkscape, + +00:10:02.680 --> 00:10:06.519 +Then when you run it through this function in Emacs, + +00:10:06.520 --> 00:10:09.159 +you can assign an ordering to the groups, + +00:10:09.160 --> 00:10:10.599 +the order in which it will be revealed. + +00:10:10.600 --> 00:10:15.039 +Yeah. What I did was I gave it all IDs. + +00:10:15.040 --> 00:10:17.599 +So I gave each group an ID. + +00:10:17.600 --> 00:10:25.999 +And then when I have the ID, I can say, you know, maybe when I group it, + +00:10:26.000 --> 00:10:28.319 +I'm doing it in a bit of a haphazard way, + +00:10:28.320 --> 00:10:30.279 +not grouping the first thing first, + +00:10:30.280 --> 00:10:32.279 +and then the second thing, and the third thing. + +00:10:32.280 --> 00:10:34.399 +So it's a bit of a mess. + +00:10:34.400 --> 00:10:38.119 +And this one just resorts it by, I think, + +00:10:38.120 --> 00:10:41.479 +just looking everything up, storing it, + +00:10:41.480 --> 00:10:45.039 +and then putting it back in order. + +00:10:45.040 --> 00:10:49.159 +I probably have the code for this somewhere, + +00:10:49.160 --> 00:10:52.039 +and if it's not, it's in the source code. + +00:10:52.040 --> 00:10:53.039 +There should be a source. + +00:10:53.040 --> 00:10:57.599 +Yes, so this is an org source for this post, + +00:10:57.600 --> 00:11:01.279 +and if it's not in there, then it should be in my config, + +00:11:01.280 --> 00:11:03.679 +the definition of this function. + +00:11:03.680 --> 00:11:11.439 +We are to pass. Here we are. Yeah, there you go. + +00:11:11.440 --> 00:11:17.639 +So there, it just, it takes it, it looks for it, + +00:11:17.640 --> 00:11:19.719 +and it adds it to the first layer. + +00:11:19.720 --> 00:11:29.399 +Okay, you've just explained the magic, + +00:11:29.400 --> 00:11:31.159 +which makes it less magical, + +00:11:31.160 --> 00:11:36.279 +but also something I could try. Yeah, this is interesting. + +00:11:36.280 --> 00:11:41.759 +Yeah, S2G is surprisingly powerful. Yeah, I know. + +00:11:41.760 --> 00:11:43.679 +I know it can do a lot more + +00:11:43.680 --> 00:11:46.559 +than what we typically use it for. + +00:11:46.560 --> 00:11:53.039 +So you also had this feature where, I think you used CSS, + +00:11:53.040 --> 00:11:56.599 +where if you mouse over something in the SVG, + +00:11:56.600 --> 00:11:58.839 +something is highlighted in your webpage. + +00:11:58.840 --> 00:12:04.799 +Oh yeah, yeah, yeah. Like in the organizer's notebook. + +00:12:04.800 --> 00:12:07.959 +So I have a draft schedule here. + +00:12:07.960 --> 00:12:10.679 +Yeah, we've been doing all this stuff live, that schedule, + +00:12:10.680 --> 00:12:16.239 +where if you have, let's pick someone's talk. + +00:12:16.240 --> 00:12:22.119 +Oh, yeah, highlight. + +00:12:22.120 --> 00:12:26.159 +I think, oh, maybe it's the other way around. + +00:12:26.160 --> 00:12:30.839 +I need to put this stuff here first. Oh yeah, okay. + +00:12:30.840 --> 00:12:33.959 +So you'll notice here how if I add some JavaScript, + +00:12:33.960 --> 00:12:35.999 +it takes a look at what's in the URL. + +00:12:36.000 --> 00:12:38.439 +And if so, then it can highlight a specific thing + +00:12:38.440 --> 00:12:41.679 +using just, maybe CSS might be it. + +00:12:41.680 --> 00:12:47.879 +Actually, I think it's JavaScript setting the CSS style on it. + +00:12:47.880 --> 00:12:51.279 +But yeah, you can play around with CSS. + +00:12:51.280 --> 00:12:53.639 +See, this one has a slightly darker, + +00:12:53.640 --> 00:12:59.519 +slightly thicker background. So SVGs are great for that. + +00:12:59.520 --> 00:13:01.479 +And if you inspect it, + +00:13:01.480 --> 00:13:03.199 +which I don't think I have shared here, + +00:13:03.200 --> 00:13:07.559 +but if you inspect it, I will share my inspect. + +00:13:07.560 --> 00:13:10.719 +I have too many windows open, + +00:13:10.720 --> 00:13:12.079 +so I don't want to share my whole thing. + +00:13:12.080 --> 00:13:19.074 +But one of these, oh, I don't even know which, how do I find, okay, + +00:13:19.075 --> 00:13:20.366 +it's the developer tools window. + +00:13:20.367 --> 00:13:25.324 +Do I even have developer tools? Oh, I can't see it. OK. + +00:13:25.325 --> 00:13:29.491 +If you inspect the page on the developer thingy, + +00:13:29.492 --> 00:13:38.116 +then it will show the SVG element. Yeah. + +00:13:38.117 --> 00:13:41.240 +And unfortunately, I can't share it easily right now. + +00:13:41.241 --> 00:13:46.616 +Maybe just say inspect. Oh, this is actually, I think, + +00:13:46.617 --> 00:13:55.116 +how also the individual talks have current ones, right? + +00:13:55.117 --> 00:14:00.439 +So I just have this image over here, + +00:14:00.440 --> 00:14:01.719 +and then you just have that one, + +00:14:01.720 --> 00:14:05.999 +that specific talk styled differently. + +00:14:06.000 --> 00:14:13.159 +How did you generate this SVG, + +00:14:13.160 --> 00:14:14.639 +the one showing the schedule? + +00:14:14.640 --> 00:14:24.439 +Oh, okay, okay. Emacs. Book, book, book, book. + +00:14:24.440 --> 00:14:29.599 +Emacs publish, I think. Let me share it. Emacs conf pub. + +00:14:29.600 --> 00:14:36.119 +One of these windows. Okay, let's see. + +00:14:36.120 --> 00:14:39.199 +Slow down, look at all the windows. + +00:14:39.200 --> 00:14:40.639 +Okay, I'm just gonna share the whole screen. + +00:14:40.640 --> 00:14:50.519 +Screen two, no, screen one. All right, and okay. + +00:14:50.520 --> 00:15:05.759 +I think this is the one. Is it sharing my screen? + +00:15:05.760 --> 00:15:08.079 +It is not sharing my screen. I'm going to try this again. + +00:15:08.080 --> 00:15:23.119 +Okay. All right. So, the schedule. The schedule. + +00:15:23.120 --> 00:15:24.559 +This is the actual function + +00:15:24.560 --> 00:15:28.319 +that creates the SVG rectangles for the talks. + +00:15:28.320 --> 00:15:35.279 +Oops. My screen share ended. Let me do that again. + +00:15:35.280 --> 00:15:41.239 +All right, and as you can see, + +00:15:41.240 --> 00:15:45.039 +it's just a little bit of math for the X, the Y, + +00:15:45.040 --> 00:15:48.199 +we color it differently + +00:15:48.200 --> 00:15:52.839 +depending on whether I'm making the schedule for the public view. + +00:15:52.840 --> 00:15:58.439 +So we just, you know, do we do developer, development talk + +00:15:58.440 --> 00:15:59.919 +or general talk as colors, + +00:15:59.920 --> 00:16:02.639 +or if I want to color it for the backstage view, + +00:16:02.640 --> 00:16:04.719 +I can keep track of the talk's status. + +00:16:04.720 --> 00:16:07.799 +Anyway, so SDG track takes the track + +00:16:07.800 --> 00:16:09.239 +and all the talk information, + +00:16:09.240 --> 00:16:11.559 +and it makes all the little rectangles. + +00:16:11.560 --> 00:16:15.599 +And this is the thing that adds a little hover + +00:16:15.600 --> 00:16:17.919 +for the times and titles as well. + +00:16:17.920 --> 00:16:22.639 +So, Emacs's API for dealing with this is actually pretty good. + +00:16:22.640 --> 00:16:27.559 +Oh, and of course, I have a hook here that modifies it. + +00:16:27.560 --> 00:16:30.119 +You can just run through a different function, + +00:16:30.120 --> 00:16:32.519 +different functions to tweak it. + +00:16:32.520 --> 00:16:36.399 +So I could say, okay, color it in case my time constraints are, + +00:16:36.400 --> 00:16:37.839 +you know, not being met. + +00:16:37.840 --> 00:16:40.959 +And then I can paint about this somewhere. + +00:16:40.960 --> 00:16:51.119 +And the nice thing about this + +00:16:51.120 --> 00:17:06.719 +is it's actually, it's, you can, hang on a second, let me do this carefully. + +00:17:06.720 --> 00:17:07.999 +All right, here you go. + +00:17:08.000 --> 00:17:13.479 +It's super nice to be able to refer to it within Emacs itself + +00:17:13.480 --> 00:17:15.839 +because Emacs has SVG support. + +00:17:15.840 --> 00:17:19.679 +So this is, for example, the organizer view + +00:17:19.680 --> 00:17:24.039 +inside an org mode file. And it just has all those SVGs. + +00:17:24.040 --> 00:17:25.599 +It don't have the hover things, + +00:17:25.600 --> 00:17:27.399 +because it's just an image in it. + +00:17:27.400 --> 00:17:37.759 +But yeah, SVGs, Emacs, awesome. Oh, that's very cool. + +00:17:37.760 --> 00:17:40.719 +You're actually drawing the rectangles from scratch. + +00:17:40.720 --> 00:17:44.999 +It took a little bit of figuring out, + +00:17:45.000 --> 00:17:46.959 +especially since I realized + +00:17:46.960 --> 00:17:49.679 +I wanted horizontal on the wiki pages + +00:17:49.680 --> 00:17:51.359 +so that it fits on people's screens, + +00:17:51.360 --> 00:17:56.039 +but I wanted vertical in my organized review + +00:17:56.040 --> 00:18:09.199 +so that I don't have to keep tilting my head sideways. + +00:18:09.200 --> 00:18:12.359 +and this is the code for that. + +00:18:12.360 --> 00:18:19.439 +See, I'm just directly adding G nodes for groups + +00:18:19.440 --> 00:18:23.199 +or A nodes for the hyperlinks and rep as well. + +00:18:23.200 --> 00:18:27.319 +I think the SVG library also has functions + +00:18:27.320 --> 00:18:31.079 +for adding rectangles and things like that, + +00:18:31.080 --> 00:18:32.359 +but sometimes I vaguely remember + +00:18:32.360 --> 00:18:34.999 +sometimes you can't return the node that I'm expecting. + +00:18:35.000 --> 00:18:40.559 +So, it's okay to just use the DOM functions directly. + +00:18:40.560 --> 00:18:46.079 +And then the whole thing gets SVG printed afterwards. + +00:18:46.080 --> 00:18:54.079 +So I can just say SVG printed, and then it's good to go. + +00:18:54.080 --> 00:18:57.719 +Let me see. Actually, do I have SVG? + +00:18:57.720 --> 00:19:05.679 +Let's schedule for track SVG. + +00:19:05.680 --> 00:19:08.799 +It's a shame that you can't visually interact + +00:19:08.800 --> 00:19:11.559 +with parts of an SVG in Emacs the way you can in Emacs. + +00:19:11.560 --> 00:19:16.799 +Oh, some people have some interesting experiments with that. + +00:19:16.800 --> 00:19:18.839 +I haven't dug into it much, + +00:19:18.840 --> 00:19:21.639 +but people have figured out how to use the mouse events + +00:19:21.640 --> 00:19:26.199 +and then figure out what the, like there's LEC draw, right? + +00:19:26.200 --> 00:19:30.159 +So lecdraw is a package that lets you draw SVGs + +00:19:30.160 --> 00:19:33.039 +and you can drag things and whatever. So that's very cool. + +00:19:33.040 --> 00:19:37.159 +And there's also an org related package + +00:19:37.160 --> 00:19:43.439 +that lets you visualize your schedule as boxes. + +00:19:43.440 --> 00:19:45.639 +I'd like, yeah, that's a thing also. + +00:19:45.640 --> 00:19:46.919 +So people have experimented + +00:19:46.920 --> 00:19:49.439 +with mouse interaction and it's cool, + +00:19:49.440 --> 00:19:51.919 +but I haven't had the brain space to do that yet, + +00:19:51.920 --> 00:19:55.479 +but it would be nice. Yeah, you're right. + +00:19:55.480 --> 00:19:58.079 +I remember using easy draw + +00:19:58.080 --> 00:20:01.999 +and being surprised at what it can do. + +00:20:02.000 --> 00:20:05.119 +The only thing I think I discovered + +00:20:05.120 --> 00:20:10.279 +is that it ends up creating lots of new SVGs, + +00:20:10.280 --> 00:20:13.079 +kind of the way that you do + +00:20:13.080 --> 00:20:14.959 +when you show elements one by one, + +00:20:14.960 --> 00:20:19.079 +you are essentially creating one SVG for each state, + +00:20:19.080 --> 00:20:24.439 +one full SVG for each intermediate state of the presentation, let's say. + +00:20:24.440 --> 00:20:26.479 +That's kind of what ELEasyDraw does. + +00:20:26.480 --> 00:20:30.839 +And I thought that's not good for performance. + +00:20:30.840 --> 00:20:33.039 +And it is kind of on the slow side, + +00:20:33.040 --> 00:20:37.359 +if you compare it to like Inkscape or anything else. + +00:20:37.360 --> 00:20:40.959 +But yeah, what it can do is pretty amazing. + +00:20:40.960 --> 00:20:44.559 +you can dynamically modify an SVG object, + +00:20:44.560 --> 00:20:48.399 +and it will automatically get updated in Emacs, + +00:20:48.400 --> 00:20:52.519 +which is a technique that I use a lot in FFNS in subbed. + +00:20:52.520 --> 00:20:57.559 +So for example, if I have waveform show all in this, + +00:20:57.560 --> 00:21:03.239 +it will, like, it's very easy to just move one element, for example, + +00:21:03.240 --> 00:21:08.519 +or make an element larger or smaller. + +00:21:08.520 --> 00:21:13.279 +And that's the... It might be pretty efficient, I don't know, + +00:21:13.280 --> 00:21:20.199 +but I'm certainly not like writing it to disk each time and reloading it. + +00:21:20.200 --> 00:21:25.519 +Eric and I demoed in 2020 EmacsConf for Dungeon Mode Works, + +00:21:25.520 --> 00:21:29.399 +where we demonstrated, you know, showing parts of the map + +00:21:29.400 --> 00:21:31.649 +and then, you know, different characters + +00:21:31.650 --> 00:21:33.839 +have different abilities that show, + +00:21:33.840 --> 00:21:36.599 +that allow you to see different dungeon features. + +00:21:36.600 --> 00:21:38.799 +And then if your last character, + +00:21:38.800 --> 00:21:42.719 +you know, of that class or race dies, + +00:21:42.720 --> 00:21:44.479 +then you suddenly can't see + +00:21:44.480 --> 00:21:46.759 +secret doors or whatever anymore. + +00:21:46.760 --> 00:21:48.719 +And so just make that disappear + +00:21:48.720 --> 00:21:50.559 +between one turn and the next + +00:21:50.560 --> 00:21:54.919 +is just working with just simply update the SVG + +00:21:54.920 --> 00:21:57.679 +and there goes the screen. No, no, no bus, no bus. + +00:21:57.680 --> 00:22:01.559 +It's pretty awesome. So this is an example + +00:22:01.560 --> 00:22:07.159 +of how I'm using it to kind of show where we are in the, in the track. + +00:22:07.160 --> 00:22:09.639 +And then here's mouse, mouse interaction, right? + +00:22:09.640 --> 00:22:21.359 +I can change my timestamp right from there. Which is fine. + +00:22:21.360 --> 00:22:28.079 +So, I'm curious how this works exactly. + +00:22:28.080 --> 00:22:31.799 +To effect any kind of change in the SVG, + +00:22:31.800 --> 00:22:36.239 +you have to use the DOM library, right? Yes. + +00:22:36.240 --> 00:22:39.319 +Okay, so, but that means that it's going to be, + +00:22:39.320 --> 00:22:43.639 +anytime you make a change, it's going to read in the XML, + +00:22:43.640 --> 00:22:47.999 +convert it to an Elisp DOM, right? + +00:22:48.000 --> 00:22:50.919 +And then you modify that tree. + +00:22:50.920 --> 00:22:55.839 +Yeah, you keep the DOM, like, well, in this case, for example, + +00:22:55.840 --> 00:23:00.879 +I'm actually constructing it using Emacs list objects directly. + +00:23:00.880 --> 00:23:02.959 +If you were working with an external SVG, + +00:23:02.960 --> 00:23:05.199 +you would parse it first, yes, + +00:23:05.200 --> 00:23:07.919 +using XML parse file or something like that. + +00:23:07.920 --> 00:23:11.999 +and then you would have it in memory. + +00:23:12.000 --> 00:23:14.559 +When you insert the image, + +00:23:14.560 --> 00:23:18.519 +you insert the list document object model that you have, + +00:23:18.520 --> 00:23:21.199 +and then any changes you make to that document object model + +00:23:21.200 --> 00:23:25.519 +automatically get updated in the image somehow. + +00:23:25.520 --> 00:23:33.559 +Oh, that's fantastic. Yeah. Yeah. I'll show you the code. Yeah. + +00:23:33.560 --> 00:23:38.079 +So I was under the impression + +00:23:38.080 --> 00:23:40.096 +that there's a round trip to XML involved + +00:23:40.097 --> 00:23:42.298 +to do anything like to go from displayed + +00:23:42.299 --> 00:23:46.079 +to in-memory to in-memory modified back + +00:23:46.080 --> 00:23:47.839 +to display all around trip. + +00:23:47.840 --> 00:23:52.959 +Yeah. So let me see where's my thing that changes it. + +00:23:52.960 --> 00:23:59.079 +So when it's the time. + +00:23:59.080 --> 00:24:06.999 +It's probably some kind of hook that I'm listening to here. + +00:24:07.000 --> 00:24:12.879 +Playback position hook. Oh, it's this update current bar. + +00:24:12.880 --> 00:24:15.999 +All right, so what update current bar does + +00:24:16.000 --> 00:24:19.319 +is it moves the bar to the right place. + +00:24:19.320 --> 00:24:21.159 +And you see here how this SVG, + +00:24:21.160 --> 00:24:24.719 +I'm actually just reading it off the text property + +00:24:24.720 --> 00:24:28.279 +so that I know which one is the current one in the overlay. + +00:24:28.280 --> 00:24:31.399 +I remove the old one, just the element. + +00:24:31.400 --> 00:24:34.279 +I don't have to mess around with the image. + +00:24:34.280 --> 00:24:35.599 +I removed the old one for some reason, + +00:24:35.600 --> 00:24:36.839 +just to make sure, I guess. + +00:24:36.840 --> 00:24:38.879 +You can actually just update the attribute on it. + +00:24:38.880 --> 00:24:42.919 +Oh, I think this is just so that I don't have to worry + +00:24:42.920 --> 00:24:45.519 +about whether there is one or there isn't. + +00:24:45.520 --> 00:24:47.959 +And then I add a bar at the right position + +00:24:47.960 --> 00:24:52.519 +and then it makes that little animated sweeping thingy. + +00:24:52.520 --> 00:24:55.959 +So you see how I'm not recreating the SVG at this point. + +00:24:55.960 --> 00:25:02.559 +I'm just getting it from the overlay. + +00:25:02.560 --> 00:25:07.479 +Yeah, that's very interesting. I wonder what it's doing. + +00:25:07.480 --> 00:25:09.919 +what it's actually doing under the hood when you run SVG removal. + +00:25:09.920 --> 00:25:19.439 +Yeah, I don't know, too. I think it's RSVG is tied + +00:25:19.440 --> 00:25:32.039 +into the display engine, so to speak. Yeah, that it is. + +00:25:32.040 --> 00:25:33.919 +But RSVG, the library, + +00:25:33.920 --> 00:25:39.199 +can only deal with actual SVGs, right, like XML SVGs, + +00:25:39.200 --> 00:25:43.119 +but we're dealing with the ELISP DOM of an SVG. + +00:25:43.120 --> 00:25:47.559 +So the display engine can re-enter the LISP. + +00:25:47.560 --> 00:25:49.519 +I do know that the display engine + +00:25:49.520 --> 00:25:51.839 +can re-enter the LISP engine, + +00:25:51.840 --> 00:25:53.599 +so I think that may be the answer. + +00:25:53.600 --> 00:25:58.759 +Yeah, you can just SVG insert image the object itself. + +00:25:58.760 --> 00:26:01.879 +So here, for example, SVG create just creates, + +00:26:01.880 --> 00:26:04.239 +it actually just creates a DOM model. + +00:26:04.240 --> 00:26:06.599 +So this is Lisp, and it's not, + +00:26:06.600 --> 00:26:09.079 +it doesn't get printed to string representation or anything. + +00:26:09.080 --> 00:26:13.239 +And then you can SVG insert image, + +00:26:13.240 --> 00:26:15.159 +or you can set the display and, you know, + +00:26:15.160 --> 00:26:20.719 +and use pass it like as an SVG image. + +00:26:20.720 --> 00:26:22.599 +SVG image gives you an image object + +00:26:22.600 --> 00:26:24.679 +if you want to do the like the regular + +00:26:24.680 --> 00:26:31.199 +sort of display thingy. Actually, that one says it turns it + +00:26:31.200 --> 00:26:34.399 +into a string representation. + +00:26:34.400 --> 00:26:36.719 +Or at least maybe that's just how it gets retrained. + +00:26:36.720 --> 00:26:38.559 +Anyhow, some kind of magic happens, + +00:26:38.560 --> 00:26:39.919 +but I don't have to worry about it. + +00:26:39.920 --> 00:26:44.119 +It just stays on my side. Yeah, but I was thinking about it + +00:26:44.120 --> 00:26:49.599 +because I expect that if it's converting to XML all the time, every time you make a change, + +00:26:49.600 --> 00:26:52.119 +then that's going to be the bottleneck + +00:26:52.120 --> 00:26:58.119 +for any kind of heavy interactive SVG editing or modification in Emacs. + +00:26:58.120 --> 00:27:01.199 +The kind that ELEasyDraw does. + +00:27:01.200 --> 00:27:03.839 +But maybe if we make it compelling enough, + +00:27:03.840 --> 00:27:07.279 +then the folks upstream can say, all right, + +00:27:07.280 --> 00:27:10.239 +like the way that JSON got a lot faster. + +00:27:10.240 --> 00:27:13.359 +Who knows? Maybe we can get that to be faster too. Yeah. + +00:27:13.360 --> 00:27:19.199 +I see a lot of potential for better UIs in Emacs + +00:27:19.200 --> 00:27:22.719 +with using SVGs. Yeah. + +00:27:22.720 --> 00:27:26.319 +Nicolas Rougier has all those experiments, right? + +00:27:26.320 --> 00:27:30.159 +Yeah, but all of those, I think, are bound by the limitations + +00:27:30.160 --> 00:27:33.599 +of how deeply SVGs are embedded in the display engine, + +00:27:33.600 --> 00:27:36.359 +because that's kind of what we're discussing. + +00:27:36.360 --> 00:27:38.479 +We want to avoid going to XML, + +00:27:38.480 --> 00:27:41.479 +I mean, going from XML to Elisp DOM + +00:27:41.480 --> 00:27:44.839 +to modified Elisp DOM back to XML. + +00:27:44.840 --> 00:27:50.079 +We want to avoid that round trip. Yeah, for sure. + +00:27:50.080 --> 00:28:04.799 +Or make that as fast as possible, yeah. + +00:28:04.800 --> 00:28:11.919 +Does anyone else have anything they want to share? + +00:28:11.920 --> 00:28:13.919 +I've always got stuff I can share, + +00:28:13.920 --> 00:28:17.639 +but I pretty happily defer. I've already seen what I made. + +00:28:17.640 --> 00:28:28.759 +Karthik? Oh, I'm a fly on a wall here. I'm not. + +00:28:28.760 --> 00:28:32.199 +Okay. I didn't come in with the intent to share anything. + +00:28:32.200 --> 00:28:34.239 +Yeah. How about you, Sacha? + +00:28:34.240 --> 00:28:37.999 +Do you have other stuff you haven't shown off recently? + +00:28:38.000 --> 00:28:39.839 +Aside from all the panicking + +00:28:39.840 --> 00:28:42.599 +about getting EmacsConf together this year? + +00:28:42.600 --> 00:28:45.399 +I just wanted to bring it up. + +00:28:45.400 --> 00:28:50.359 +Yeah, let's see, what do I have in my recent, like, fiddled with? + +00:28:50.360 --> 00:28:53.999 +So I have a project called... + +00:28:54.000 --> 00:28:56.879 +I have a project called Ufta, which is a little bit fun. + +00:28:56.880 --> 00:29:00.159 +Let me pull it up here before I share. + +00:29:00.160 --> 00:29:08.959 +You can see my messy, messy desktop. Okay, there it is. + +00:29:08.960 --> 00:29:21.519 +And that's supposed to want a shell. Probably that one. + +00:29:21.520 --> 00:29:29.119 +And we'll just bootroot. keeping in mind that graphics + +00:29:29.120 --> 00:29:33.399 +is going to end in about five minutes. Ooh, perfect. + +00:29:33.400 --> 00:29:38.959 +That'll keep me from from being my normal long-winded self. + +00:29:38.960 --> 00:29:47.239 +Have you already made contact with Emmanuel? I was not. + +00:29:47.240 --> 00:29:50.159 +Okay, I'm going to quickly do a check in. + +00:29:50.160 --> 00:30:00.119 +Okay, sounds good. Did you hear back from him? + +00:30:00.120 --> 00:30:01.039 +Assume that's a yes. + +00:30:01.040 --> 00:30:04.399 +All right, I'll go ahead and share screen here + +00:30:04.400 --> 00:30:08.879 +and just take a look, a very brief look at this. + +00:30:08.880 --> 00:30:16.719 +Assuming I can present. I had a question for Sacha. + +00:30:16.720 --> 00:30:22.399 +I had a question for Sacha and you, Corbin. + +00:30:22.400 --> 00:30:28.759 +Hello. Yeah, you're good. Go for it. Yeah, yeah. + +00:30:28.760 --> 00:30:33.319 +So in past years, in the EmacsConf, + +00:30:33.320 --> 00:30:36.799 +there was a talk by someone, + +00:30:36.800 --> 00:30:40.999 +usually John Wheatley, or I think Philip last year, + +00:30:41.000 --> 00:30:44.079 +about new developments in Emacs. + +00:30:44.080 --> 00:30:48.679 +Yes, and that is kind of at the whim + +00:30:48.680 --> 00:30:50.079 +of the Emacs developers, + +00:30:50.080 --> 00:30:56.919 +whether that is included in the in the conference. + +00:30:56.920 --> 00:30:59.679 +It's kind of up to the, you know, how busy folks are + +00:30:59.680 --> 00:31:02.879 +and whether somebody can follow up the time to prepare it. + +00:31:02.880 --> 00:31:07.119 +I see. Yeah, I noticed that there wasn't one for this year. + +00:31:07.120 --> 00:31:09.999 +And I know of at least one improvement + +00:31:10.000 --> 00:31:12.359 +or one change to Emacs. + +00:31:12.360 --> 00:31:17.559 +It's small, but I'm guessing it's very crucial + +00:31:17.560 --> 00:31:20.359 +for a certain class of Emacs users. + +00:31:20.360 --> 00:31:24.239 +And I can talk about that, just that one thing. + +00:31:24.240 --> 00:31:29.719 +But you can, you can, you can go right. + +00:31:29.720 --> 00:31:32.599 +So I can't share anything and we've got about one minute. + +00:31:32.600 --> 00:31:39.719 +So have that. Okay. Um, so the change is that, uh, + +00:31:39.720 --> 00:31:41.919 +in the development version of Emacs, + +00:31:41.920 --> 00:31:46.919 +sorry, child frames are now supported + +00:31:46.920 --> 00:31:53.679 +in terminal in the terminal. + +00:31:53.680 --> 00:31:56.519 +And I suspect that not many people know about it yet, + +00:31:56.520 --> 00:32:03.839 +but basically this means something like Corfu is going to work fine + +00:32:03.840 --> 00:32:05.479 +when you're running Emacs in a terminal, + +00:32:05.480 --> 00:32:14.159 +as well as pause frames or anything that shows like a little pop-up window + +00:32:14.160 --> 00:32:19.159 +that previously did not work in Terminal Emacs. + +00:32:19.160 --> 00:32:27.519 +That's it. That's the update. Cool. + +00:32:27.520 --> 00:32:29.359 +Okay, there I have a share screen button. + +00:32:29.360 --> 00:32:31.999 +We'll see if I think we're just about to cut away, + +00:32:32.000 --> 00:32:34.919 +but I'll go ahead and see if I can get this going. + +00:32:34.920 --> 00:32:36.679 +I'll just share my whole screen + +00:32:36.680 --> 00:32:39.599 +and this will be a little ugly as it comes in. + +00:32:39.600 --> 00:32:44.359 +So this is a project that I think is a little bit fun. + +00:32:44.360 --> 00:32:47.519 +It's called Oopda. And basically what this does, + +00:32:47.520 --> 00:32:49.759 +you can see it on my source site, + +00:32:49.760 --> 00:32:55.159 +that's sr.ht tilde mplscorewin slash Oopda. + +00:32:55.160 --> 00:32:59.599 +O-F-D-A, and this is a very simple approach + +00:32:59.600 --> 00:33:04.639 +to using an org file as a replacement for SQLite. + +00:33:04.640 --> 00:33:12.239 +It's very simple, but it does support like a dot style path and notation. + +00:33:12.240 --> 00:33:16.319 +So you can get at deeply nested data + +00:33:16.320 --> 00:33:19.159 +and just gives a little, + +00:33:19.160 --> 00:33:24.159 +there's a shell script wrapper that comes with it. + +00:33:24.160 --> 00:33:26.319 +All right. + +00:33:26.320 --> 00:33:32.759 +Theoretically, this is the Q&A for the graphics talk. + +00:33:32.760 --> 00:33:38.079 +Oops, I have to unmute over here. Sorry. + +00:33:38.080 --> 00:33:52.999 +All right, I had a little audio bleed through, + +00:33:53.000 --> 00:34:02.399 +my apologies, can you still hear me? + +00:34:02.400 --> 00:34:03.719 +All right, I'm gonna guess, + +00:34:03.720 --> 00:34:05.759 +because I still see us live on the screen + +00:34:05.760 --> 00:34:12.839 +that we're still live. All right, so I'll just press on. + +00:34:12.840 --> 00:34:18.599 +So what we're looking at here is a project called Upta. + +00:34:18.600 --> 00:34:21.239 +Here's the Emacs Lisp source port. + +00:34:21.240 --> 00:34:23.199 +You can see it's not real impressive + +00:34:23.200 --> 00:34:24.759 +even with all of its boilerplate. + +00:34:24.760 --> 00:34:27.399 +It's under 200 lines of code. + +00:34:27.400 --> 00:34:30.599 +And this is kind of a proof of concept, + +00:34:30.600 --> 00:34:34.999 +giving us the ability to use a org.org file + +00:34:35.000 --> 00:34:38.279 +as a flat file database. The intention here is to get + +00:34:38.280 --> 00:34:40.439 +a kind of transition from SQLite, + +00:34:40.440 --> 00:34:44.239 +which is using a flat text file as a database, + +00:34:44.240 --> 00:34:48.879 +to being able to have more of a literate database + +00:34:48.880 --> 00:34:52.759 +where we can intermix documentation about the data + +00:34:52.760 --> 00:34:54.119 +with the data itself, + +00:34:54.120 --> 00:34:57.599 +and then by giving a path on the command line. + +00:34:57.600 --> 00:35:02.199 +I'll go back to the README, just take a look at that. + +00:35:02.200 --> 00:35:05.239 +And you can see there's a couple of kind of examples here + +00:35:05.240 --> 00:35:11.319 +where we're, here we would be querying a path. + +00:35:11.320 --> 00:35:15.479 +We can also provide a value + +00:35:15.480 --> 00:35:20.039 +and that'll set data into the file. + +00:35:20.040 --> 00:35:23.119 +It also has an optional first parameter + +00:35:23.120 --> 00:35:26.319 +to specify the specific org file by default. + +00:35:26.320 --> 00:35:29.399 +It looks for a file called data.org. + +00:35:29.400 --> 00:35:34.279 +And of course that can be used inside Emacs as well, + +00:35:34.280 --> 00:35:37.799 +although the value of that may be a little bit limited + +00:35:37.800 --> 00:35:39.799 +compared to more sophisticated + +00:35:39.800 --> 00:35:41.799 +technologies like org-element. + +00:35:41.800 --> 00:35:43.839 +This is not an implementation + +00:35:43.840 --> 00:35:47.159 +that mirrors all of org-element + +00:35:47.160 --> 00:35:50.079 +or any of the more complex functionality of org. + +00:35:50.080 --> 00:35:52.919 +It's really as simple as possible proof of concept + +00:35:52.920 --> 00:35:57.679 +to just to be able to kind of work + +00:35:57.680 --> 00:35:59.559 +with the data inside an org file + +00:35:59.560 --> 00:36:01.679 +and get it back out on the command line. + +00:36:01.680 --> 00:36:07.839 +So we'll see if we can make it work here. + +00:36:07.840 --> 00:36:13.479 +Corwin, could you increase the font size? + +00:36:13.480 --> 00:36:27.199 +I surely will. All right. How's that? + +00:36:27.200 --> 00:36:30.999 +That's my picture. Yeah. Okay. Cool. + +00:36:31.000 --> 00:36:39.159 +So, let's see if we do have a, well, we can probably make it. + +00:36:39.160 --> 00:37:00.839 +Let's do this. + +00:37:00.840 --> 00:37:05.159 +All right, and then in theory, this just works. + +00:37:05.160 --> 00:37:42.199 +So we'll cut. + +00:37:42.200 --> 00:37:45.840 +So we'll just create a data file called data.org. + +00:37:45.880 --> 00:37:50.239 +Make sure that works. Looks reasonable. + +00:37:50.240 --> 00:38:13.079 +Let's try adding some data to it. Hmm, not so happy. + +00:38:13.080 --> 00:38:17.559 +Okay, let's try it the hard way. + +00:38:17.560 --> 00:38:21.079 +I'll come back over here to my usage + +00:38:21.080 --> 00:38:23.199 +and we'll just try running it. + +00:38:23.200 --> 00:38:37.319 +Is Emacs, is finding Emacs really the issue? + +00:38:37.320 --> 00:38:41.199 +It seems to me it's not, it's not liking my path. + +00:38:41.200 --> 00:38:44.079 +It's not finding out that I do EO and PWD. + +00:38:44.080 --> 00:38:49.519 +It wants it to be on the log. I see. + +00:38:49.520 --> 00:38:54.119 +So I may have to even mess with that further, + +00:38:54.120 --> 00:38:55.359 +but we'll just try it. + +00:38:55.360 --> 00:39:04.839 +So this should retrieve the value if it works. + +00:39:04.840 --> 00:39:17.119 +Oh, and let's take a take a simple + +00:39:17.120 --> 00:39:47.319 +Yeah, add-to-list takes a symbol. + +00:39:47.320 --> 00:39:52.639 +We're going to have issues with bash quoting, + +00:39:52.640 --> 00:39:58.559 +so you should escape the quoting side. + +00:39:58.560 --> 00:40:27.719 +Gotcha. You're kidding. + +00:40:27.720 --> 00:40:36.560 +I'm not letting go. Whoa. That might work. + +00:40:36.600 --> 00:41:02.159 +I got my parents right. Never demo live. How exciting. OK. + +00:41:02.160 --> 00:41:13.079 +Without batch, though, we may not get our output. OK. + +00:41:13.080 --> 00:41:20.320 +Well, that's as far as I'm going to take it. + +00:41:20.400 --> 00:41:21.959 +I should have prepped a demo environment. + +00:41:21.960 --> 00:41:26.879 +I wasn't really prepared to demo. No worries. + +00:41:26.880 --> 00:41:30.719 +Couple of questions about this feature. + +00:41:30.720 --> 00:41:37.799 +The first question is, do you use it? I do use it, yeah. + +00:41:37.800 --> 00:41:41.279 +I should have gotten onto the environment + +00:41:41.280 --> 00:41:45.599 +where I'm using it. It's a little messy. + +00:41:45.600 --> 00:41:47.079 +It gets into another project + +00:41:47.080 --> 00:41:48.839 +that's way too complicated to get into. + +00:41:48.840 --> 00:41:53.079 +Yeah, but what kinds of things do you use it for? + +00:41:53.080 --> 00:41:56.999 +It's sort of hard to answer + +00:41:57.000 --> 00:41:59.159 +that without getting into my other project, + +00:41:59.160 --> 00:42:02.919 +but essentially I've got a web development tool chain + +00:42:02.920 --> 00:42:05.759 +that is kind of a web-based REPL + +00:42:05.760 --> 00:42:10.919 +that is kind of a literate compute environment, if you will, + +00:42:10.920 --> 00:42:13.119 +allowing me to use a bunch of virtual machines + +00:42:13.120 --> 00:42:19.079 +as one big computer. That project is called Ghost Wheel. + +00:42:19.080 --> 00:42:23.719 +And so in order to show off the homepage, + +00:42:23.720 --> 00:42:30.359 +So on this page, you can see the list of machines, + +00:42:30.360 --> 00:42:34.759 +and then you'll also see there's these state indicators. + +00:42:34.760 --> 00:42:38.439 +And right now, as a matter of fact, + +00:42:38.440 --> 00:42:41.239 +what I've been hacking on + +00:42:41.240 --> 00:42:44.879 +is trying to get support for org tables. + +00:42:44.880 --> 00:42:48.759 +Right now, I support only changing all of the data + +00:42:48.760 --> 00:42:51.959 +within some heading, subheading, or whatever. + +00:42:51.960 --> 00:42:55.079 +What I'd like to be able to do is specify, + +00:42:55.080 --> 00:43:01.079 +using org table fm syntax, the particular row column. + +00:43:01.080 --> 00:43:03.839 +So find a particular named table, + +00:43:03.840 --> 00:43:06.559 +find a particular row, you know, + +00:43:06.560 --> 00:43:08.639 +column one, you know, row two, column one, + +00:43:08.640 --> 00:43:11.919 +and then set the value from the command. + +00:43:11.920 --> 00:43:18.359 +Currently, I just use it for very simple stuff. + +00:43:18.360 --> 00:43:20.519 +I don't really want to show that off. + +00:43:20.520 --> 00:43:23.599 +I've got another page that lists all of the DNS names + +00:43:23.600 --> 00:43:26.159 +that are associated that are hosted on Ghostwheel. + +00:43:26.160 --> 00:43:29.319 +And so I use that to add items to the list. + +00:43:29.320 --> 00:43:40.439 +Does it make sense? Yeah, it sounds useful. + +00:43:40.440 --> 00:43:47.279 +So one thing that I would like, + +00:43:47.280 --> 00:43:51.479 +I guess it's easy enough to write, + +00:43:51.480 --> 00:43:58.799 +but is a tool exactly like this + +00:43:58.800 --> 00:44:03.839 +where I can query my org files from the command line? + +00:44:03.840 --> 00:44:06.879 +Yeah, that's exactly what it says. + +00:44:06.880 --> 00:44:14.599 +Yeah, but it's going to be more + +00:44:14.600 --> 00:44:23.319 +like a database query where, you know, I say select, select all headings where, you know, + +00:44:23.320 --> 00:44:27.279 +that contain this string or that have this tag, right? + +00:44:27.280 --> 00:44:38.519 +The kinds of things that you can do with org-ql from outside, from inside Emacs, right? + +00:44:38.520 --> 00:44:41.119 +To be able to do those from the command line with, + +00:44:41.120 --> 00:44:48.279 +I'm going to invoke SQL here, like SQL SELECT statements, + +00:44:48.280 --> 00:44:50.519 +but it doesn't have to be that syntax, right? + +00:44:50.520 --> 00:44:52.519 +Just that capability. + +00:44:52.520 --> 00:44:57.079 +Yeah, I can see that being useful as a command line tool. + +00:44:57.080 --> 00:44:59.399 +And I don't even care about write, + +00:44:59.400 --> 00:45:02.399 +like the ability to write or manipulate the file. + +00:45:02.400 --> 00:45:11.799 +Just query. the command line that sounds yeah yeah exactly + +00:45:11.800 --> 00:45:15.159 +to be able to dig a piece of data out of an org file as well + +00:45:15.160 --> 00:45:18.359 +for my purpose it's very useful to be able to replace it + +00:45:18.360 --> 00:45:20.999 +because then i can deal with submit the form you know + +00:45:21.000 --> 00:45:23.999 +and that might be like a sign up form + +00:45:24.000 --> 00:45:29.159 +and then i just add the user add up an entry into the org file + +00:45:29.160 --> 00:45:35.239 +for that user right what it doesn't do is a relational data + +00:45:35.240 --> 00:45:40.559 +So everything, it's essentially a document data store. + +00:45:40.560 --> 00:45:53.959 +Like a Mongo kind of. True. So over on IRC, ScrewLisp asks, + +00:45:53.960 --> 00:45:57.279 +what does it mean to query an ARC file? + +00:45:57.280 --> 00:46:01.679 +Is the data in a table? Is it in an ELISP nested list view + +00:46:01.680 --> 00:46:06.559 +of a table that has a name in ARC? + +00:46:06.560 --> 00:46:10.639 +And my answer to that is that if you ever used RQL, + +00:46:10.640 --> 00:46:14.199 +written by Alpha Papa, + +00:46:14.200 --> 00:46:18.039 +then that's the kind of thing I'm talking about. + +00:46:18.040 --> 00:46:23.119 +So, you query based on one of a set of attributes. + +00:46:23.120 --> 00:46:30.599 +And these attributes are anything that's recognized by ARC. + +00:46:30.600 --> 00:46:35.239 +For example, the to-do status, the dates, + +00:46:35.240 --> 00:46:40.399 +the outline path, the headings, a full text search. + +00:46:40.400 --> 00:46:43.479 +There are several more. + +00:46:43.480 --> 00:46:46.079 +The presence or absence of certain properties. + +00:46:46.080 --> 00:46:50.879 +using any combination of those if you want to dig down + +00:46:50.880 --> 00:46:52.759 +and find some data in an art file. + +00:46:52.760 --> 00:46:56.079 +That's the kind of query I'm talking about. + +00:46:56.080 --> 00:46:58.239 +It is somewhat equivalent + +00:46:58.240 --> 00:47:02.359 +to being able to write SQL queries + +00:47:02.360 --> 00:47:09.719 +where you match on things just for your art files. + +00:47:09.720 --> 00:47:21.199 +Okay. I think we might have figured out our problem. + +00:47:21.200 --> 00:47:38.839 +It was DOS encoding. See if that works. + +00:47:38.840 --> 00:47:47.879 +I switched the development track over + +00:47:47.880 --> 00:47:53.559 +to just watching the gen track since I couldn't find it. + +00:47:53.560 --> 00:47:57.359 +Also, Eludo wants to mention + +00:47:57.360 --> 00:48:00.799 +the Emacs Carnival theme for December. + +00:48:00.800 --> 00:48:02.359 +Yes, the people of Emacs, + +00:48:02.360 --> 00:48:04.119 +of which you are all very awesome. + +00:48:04.120 --> 00:48:05.519 +Thank you so much for your patience. + +00:48:05.520 --> 00:48:08.159 +Today has been very interesting. + +00:48:08.160 --> 00:48:13.359 +But yes, at some point we can show that too. + +00:48:13.360 --> 00:48:17.199 +And we can basically wrap up anytime we like + +00:48:17.200 --> 00:48:19.279 +or hang out for as much time as we like also. + +00:48:19.280 --> 00:48:23.279 +okay so this is okay at least i got + +00:48:23.280 --> 00:48:24.519 +as far as a working demo here + +00:48:24.520 --> 00:48:26.439 +so now you can kind of see what's going on um + +00:48:26.440 --> 00:48:31.599 +and i'll just wrap that into uh + +00:48:31.600 --> 00:48:40.959 +into a little prettier output + +00:48:40.960 --> 00:48:53.159 +And you can see that it modified the value. + +00:48:53.160 --> 00:48:59.479 +So it's pretty darn simple. + +00:48:59.480 --> 00:49:06.159 +Again, all it's doing is completely replacing all of this content + +00:49:06.160 --> 00:49:11.679 +with whatever new value is given as its final argument + +00:49:11.680 --> 00:49:14.879 +after naming the data path. + +00:49:14.880 --> 00:49:23.439 +So the one refinement we can do just to get a little more complex example going. + +00:49:23.440 --> 00:49:32.759 +We'll deepen our structure a little bit. And try that. + +00:49:32.760 --> 00:49:38.799 +So here now we'll say test two. + +00:49:38.800 --> 00:49:47.639 +And we can take a look at the data file + +00:49:47.640 --> 00:49:51.599 +and see that it has adjusted that + +00:49:51.600 --> 00:49:55.959 +because test2 was completely unique, that worked fine. + +00:49:55.960 --> 00:50:00.519 +If that were not the case, + +00:50:00.520 --> 00:50:02.599 +we would have had to specify the path + +00:50:02.600 --> 00:50:17.679 +using dot notation like this. And that's pretty much it. + +00:50:17.680 --> 00:50:20.759 +It took me much longer to figure out + +00:50:20.760 --> 00:50:23.759 +why it wasn't just working than it did to demo it. + +00:50:23.760 --> 00:50:29.239 +And again, what I really like about this program, + +00:50:29.240 --> 00:50:31.639 +besides the fact that I find it quite useful + +00:50:31.640 --> 00:50:34.639 +to just be able to stuff values into an org file + +00:50:34.640 --> 00:50:36.439 +from the command line using shell script, + +00:50:36.440 --> 00:50:41.279 +is what I really like about this + +00:50:41.280 --> 00:50:45.999 +is that it's a whopping 190 lines of code, + +00:50:46.000 --> 00:50:47.919 +including all the boilerplate. + +00:50:47.920 --> 00:50:55.759 +And I will share the project into the chat. + +00:50:55.760 --> 00:51:02.199 +So, Corwin, you're not using org-element for this, are you? + +00:51:02.200 --> 00:51:06.799 +No. Yeah, that's a great question. + +00:51:06.800 --> 00:51:10.839 +Let's just dig a little into the code here. + +00:51:10.840 --> 00:51:21.039 +Or maybe it would be more fun to actually + +00:51:21.040 --> 00:51:26.719 +So the only real requires here, I do use cl-lib mostly. + +00:51:26.720 --> 00:51:33.159 +I'm directly using the macros from org. + +00:51:33.160 --> 00:51:36.879 +Particularly, I'm extremely fond of this function. + +00:51:36.880 --> 00:51:41.279 +I'd love to see this just promoted to promoted + +00:51:41.280 --> 00:51:43.559 +somewhere deeper into Emacs proper, + +00:51:43.560 --> 00:51:47.639 +so that I don't have to load all of the org macros + +00:51:47.640 --> 00:51:50.239 +to get to this particularly useful one, + +00:51:50.240 --> 00:51:54.679 +which just tells me whether ignoring whitespace + +00:51:54.680 --> 00:51:59.639 +a string has any characters, has greater than zero length. + +00:51:59.640 --> 00:52:04.439 +Isn't that just string blank B? + +00:52:04.440 --> 00:52:08.999 +So this is a little different. + +00:52:09.000 --> 00:52:14.799 +This deals with... I may struggle to remember the details, + +00:52:14.800 --> 00:52:20.999 +and it's possible that the non-org specific version + +00:52:21.000 --> 00:52:23.519 +has even been improved or I didn't use it correctly, + +00:52:23.520 --> 00:52:29.479 +but I believe my experience was it didn't handle new lines, for example, quite the same way. + +00:52:29.480 --> 00:52:38.519 +So getting into what this actually does, + +00:52:38.520 --> 00:52:43.879 +most of the program is finding the relevant part of the file. + +00:52:43.880 --> 00:52:49.079 +You'll see that we start out by doing a depth-based search, + +00:52:49.080 --> 00:52:51.959 +capture the value that we're looking for. + +00:52:51.960 --> 00:52:58.119 +And then finally, we widen the buffer + +00:52:58.120 --> 00:53:01.799 +and keep handling the case where we might be being called + +00:53:01.800 --> 00:53:05.839 +from within Emacs in a narrowed buffer. + +00:53:05.840 --> 00:53:11.079 +This is another what should be documented at the top. + +00:53:11.080 --> 00:53:13.919 +So that is obviously going to load org. + +00:53:13.920 --> 00:53:21.399 +Just double-check that. Yeah, it is going to load org. + +00:53:21.400 --> 00:53:30.039 +And we can see that because it didn't find the function. + +00:53:30.040 --> 00:53:40.399 +until I loaded Org and then it did when I did C-h f + +00:53:40.400 --> 00:53:44.999 +to get definition of a function. + +00:53:45.000 --> 00:53:51.719 +So, widen the buffer and then I just start looking for the search. + +00:53:51.720 --> 00:53:55.399 +You can see I'm doing simple regular expression based searches here. + +00:53:55.400 --> 00:54:01.719 +Looking for lines, ultimately, that start with a star. + +00:54:01.720 --> 00:54:05.119 +That was a little simpler format + +00:54:05.120 --> 00:54:07.759 +that didn't quite work out. + +00:54:07.760 --> 00:54:25.719 +So I'm searching for, here this is a little tricky, + +00:54:25.720 --> 00:54:28.839 +but I'm searching for a number of stars + +00:54:28.840 --> 00:54:30.839 +equal to the depth that I want. + +00:54:30.840 --> 00:54:33.439 +The depth that I want being calculated + +00:54:33.440 --> 00:54:38.039 +based on the number of dots that were in the query string. + +00:54:38.040 --> 00:54:47.159 +from there, you know, kind of skipping some stuff, right? + +00:54:47.160 --> 00:54:49.599 +Once we find our starting position, + +00:54:49.600 --> 00:54:53.239 +then we're going to have to find the end of that, + +00:54:53.240 --> 00:54:57.679 +the section that we're going to read or replace. + +00:54:57.680 --> 00:55:12.959 +Text a tiny bit smaller. So I checked org-string nwp, + +00:55:12.960 --> 00:55:20.079 +and it's the same as string blank p. + +00:55:20.080 --> 00:55:26.319 +exactly the same code or the same result? + +00:55:26.320 --> 00:55:30.399 +No, it's the same result. Well, it's the same check, + +00:55:30.400 --> 00:55:34.519 +but string blank p will return a match object, + +00:55:34.520 --> 00:55:35.999 +like a string match object, + +00:55:36.000 --> 00:55:39.119 +whereas the org version will return the string itself + +00:55:39.120 --> 00:55:46.159 +if it finds a match, as in if it's blank. + +00:55:46.160 --> 00:55:48.319 +I don't remember that. + +00:55:48.320 --> 00:55:51.079 +As a Boolean check, they are the same. + +00:55:51.080 --> 00:55:54.159 +If you use it as, you know, is it blank or not. + +00:55:54.160 --> 00:56:02.679 +So, um, yeah, I've talked for way longer. + +00:56:02.680 --> 00:56:04.119 +I thought I literally thought + +00:56:04.120 --> 00:56:05.319 +this would be a five minute thing. + +00:56:05.320 --> 00:56:08.399 +I'm not sure if there are any questions on it, + +00:56:08.400 --> 00:56:10.239 +but just to simply answer your question. + +00:56:10.240 --> 00:56:11.719 +No, it doesn't use org element. + +00:56:11.720 --> 00:56:23.759 +This is pure regex based work. + +00:56:23.760 --> 00:56:26.919 +So, the advantage of not using... Right. + +00:56:26.920 --> 00:56:32.679 +So, the advantage of not using arg element + +00:56:32.680 --> 00:56:37.439 +is that you don't have to load arg or arg element, right? + +00:56:37.440 --> 00:56:39.039 +And so, it's going to be faster. + +00:56:39.040 --> 00:56:45.359 +And it's going to be faster both because you don't have to load arg element + +00:56:45.360 --> 00:56:51.079 +and because you don't have to run arg element, like the arg parser. + +00:56:51.080 --> 00:56:52.879 +But on the other hand, + +00:56:52.880 --> 00:56:58.439 +you end up loading all of org anyway. + +00:56:58.440 --> 00:57:02.679 +So at that point, it might just be better + +00:57:02.680 --> 00:57:05.039 +to use org element because it's more robust. + +00:57:05.040 --> 00:57:07.919 +For example, if you have a bunch of leading stars + +00:57:07.920 --> 00:57:09.959 +inside a source block or something, + +00:57:09.960 --> 00:57:11.599 +you don't want to misclassify that. + +00:57:11.600 --> 00:57:16.639 +Matter of fact, I believe I had to do some flossing with it + +00:57:16.640 --> 00:57:18.879 +to deal with not just that, + +00:57:18.880 --> 00:57:21.439 +but drawers and things like that. + +00:57:21.440 --> 00:57:25.879 +right yeah so at the end of the day + +00:57:25.880 --> 00:57:28.039 +that was just an extra 10 or 20 characters + +00:57:28.040 --> 00:57:31.039 +in the regular expression so i just shrugged and wrote them + +00:57:31.040 --> 00:57:36.799 +you can see there are a number of i + +00:57:36.800 --> 00:57:40.279 +i happen to like writing regular expressions + +00:57:40.280 --> 00:57:42.479 +and find them relatively readable so + +00:57:42.480 --> 00:57:46.719 +So it didn't bother me doing that. + +00:57:46.720 --> 00:57:49.239 +I've also done a bunch of work with org-element + +00:57:49.240 --> 00:57:51.439 +with the dungeon project, + +00:57:51.440 --> 00:57:53.759 +which of course uses that extensively + +00:57:53.760 --> 00:57:57.079 +to pull data out of tables and so on. + +00:57:57.080 --> 00:58:01.319 +And indeed, I think that may ultimately be my solution. + +00:58:01.320 --> 00:58:06.199 +I've been kind of distracted on a side quest + +00:58:06.200 --> 00:58:09.959 +to improve the org-table-fm parser. + +00:58:09.960 --> 00:58:14.279 +There's a post on my blog about the work that I've done there, + +00:58:14.280 --> 00:58:19.359 +and recently started talking to Ihor, + +00:58:19.360 --> 00:58:20.839 +the new org maintainer, + +00:58:20.840 --> 00:58:27.579 +who took over in the last year or so from Bastien. + +00:58:27.580 --> 00:58:32.159 +Just about what it would take to pick that up, + +00:58:32.160 --> 00:58:34.279 +or at least get it to a point + +00:58:34.280 --> 00:58:35.679 +where somebody else could work on it. + +00:58:35.680 --> 00:58:39.599 +It's pretty dense right now. + +00:58:39.600 --> 00:58:59.919 +So this thing is a bit of a monster, + +00:58:59.920 --> 00:59:01.799 +but at the end of the day, + +00:59:01.800 --> 00:59:06.919 +our goal is to extend the syntax, + +00:59:06.920 --> 00:59:12.519 +is to be able to use this Org Table FM syntax + +00:59:12.520 --> 00:59:14.439 +in other contexts. + +00:59:14.440 --> 00:59:18.519 +So if you haven't looked at board table FM, + +00:59:18.520 --> 00:59:21.399 +these I bar or these I markers + +00:59:21.400 --> 00:59:26.039 +are telling us to look for the table separator. + +00:59:26.040 --> 00:59:29.759 +So positioning based on the location of a table separator. + +00:59:29.760 --> 00:59:34.439 +I find that a little bit brittle + +00:59:34.440 --> 00:59:38.679 +just because it's really easy to go in and decide, + +00:59:38.680 --> 00:59:42.919 +oh, it'll look better with an additional line separator in there. + +00:59:42.920 --> 00:59:48.039 +And then all of these formulas break everywhere. + +00:59:48.040 --> 00:59:49.919 +So it would be a little more fun + +00:59:49.920 --> 00:59:53.399 +to have at least variables in there. + +00:59:53.400 --> 00:59:56.159 +And that's kind of part of the scope. + +00:59:56.160 --> 01:00:04.119 +If we look, and here you get kind of a hint + +01:00:04.120 --> 01:00:06.639 +of the new syntax I'd like to support, + +01:00:06.640 --> 01:00:12.559 +things like $star, $underscore. + +01:00:12.560 --> 01:00:17.559 +Keyword it's it's probably a half-hour talk + +01:00:17.560 --> 01:00:20.879 +just to get into what every single one of these would do + +01:00:20.880 --> 01:00:26.319 +But this post does does give some some context of that + +01:00:26.320 --> 01:00:35.679 +And more importantly there is a as a complete test program that + +01:00:35.680 --> 01:00:39.159 +Worked the last time I was playing with it + +01:00:39.160 --> 01:00:43.959 +And this gives you complete examples + +01:00:43.960 --> 01:00:48.479 +of all the syntax that the work in progress does currently support. + +01:00:48.480 --> 01:00:52.799 +You'll see some of these items are commented out. + +01:00:52.800 --> 01:00:54.359 +Those aren't supported yet + +01:00:54.360 --> 01:00:56.119 +and before I would implement them now, + +01:00:56.120 --> 01:01:04.359 +especially now that we're talking in terms of trying to take org itself this direction, you know, + +01:01:04.360 --> 01:01:13.539 +of kind of beefing up the the TableFM format parsing + +01:01:13.540 --> 01:01:16.999 +so that it could be used in other contexts besides + +01:01:17.000 --> 01:01:19.640 +specifically within a formula. + +01:01:19.640 --> 01:01:26.839 +I wouldn't want to add features + +01:01:26.840 --> 01:01:33.399 +to it without discussing those. + +01:01:33.400 --> 01:01:37.639 +So this is just a simple, basically a literate test file + +01:01:37.640 --> 01:01:40.439 +if you want to call it that. + +01:01:40.440 --> 01:01:43.239 +The perhaps key improvement here + +01:01:43.240 --> 01:01:49.799 +is naming all of the different capture groups. + +01:01:49.800 --> 01:01:52.119 +which just, if you're working + +01:01:52.120 --> 01:01:55.919 +with really huge regular expressions, which this is, + +01:01:55.920 --> 01:01:58.839 +let me just make sure the whole pagex is right in here + +01:01:58.840 --> 01:02:00.599 +so we can see it, yeah. + +01:02:00.600 --> 01:02:05.959 +So here's the actual rewrite, scale it a little bit, + +01:02:05.960 --> 01:02:14.479 +so you can see it's kind of a monster. + +01:02:14.480 --> 01:02:27.639 +And that's all using Rx. + +01:02:27.640 --> 01:02:29.519 +So hopefully that looks pretty familiar. + +01:02:29.520 --> 01:02:35.039 +Dollars for specifying a column, at sign to specify a row. + +01:02:35.040 --> 01:02:43.959 +And we also have the keys. + +01:02:43.960 --> 01:02:58.559 +Anybody else want to show and tell? + +01:02:58.560 --> 01:03:01.399 +We're going to cut over to the automated introduction + +01:03:01.400 --> 01:03:07.799 +for the Saturday closing remarks in like four minutes. + +01:03:07.800 --> 01:03:15.599 +Oh, but quick, quick, quick mention of the Emacs Carnival. + +01:03:15.600 --> 01:03:20.559 +So the Emacs Carnival is a shared blogging theme. + +01:03:20.560 --> 01:03:25.079 +where lots of people write about a specific theme, + +01:03:25.080 --> 01:03:26.119 +and then if you write about it, + +01:03:26.120 --> 01:03:28.239 +you can send your link to whoever's hosting the carnival. + +01:03:28.240 --> 01:03:31.679 +And it's a great way to discover other people's cool stuff. + +01:03:31.680 --> 01:03:35.679 +So if I take presenter, hang on a second, take presenter. + +01:03:35.680 --> 01:03:39.519 +Oh, actually, haha, I know, + +01:03:39.520 --> 01:03:41.959 +I'm going to make Elladom present it. + +01:03:41.960 --> 01:03:47.199 +Haha, you are now in charge. Okay, take it away. + +01:03:47.200 --> 01:03:49.959 +So I've been using Emacs for like 46 years now, + +01:03:49.960 --> 01:03:53.359 +back to TECO Emacs. And as I just said in the chat, + +01:03:53.360 --> 01:03:56.319 +I've found that the people who use Emacs + +01:03:56.320 --> 01:03:59.400 +tend to be interesting people in many different ways. + +01:03:59.440 --> 01:04:03.199 +And so this month, I'm just saying, let's give a shout out + +01:04:03.200 --> 01:04:06.399 +to some of the interesting people we've met along the way. + +01:04:06.400 --> 01:04:09.239 +And including some of the people + +01:04:09.240 --> 01:04:10.159 +that are putting on this conference + +01:04:10.160 --> 01:04:11.959 +are some of the most interesting + +01:04:11.960 --> 01:04:13.439 +and helpful people I've ever met. + +01:04:13.440 --> 01:04:27.919 +So thank you. You're very kind. Thank you. + +01:04:27.920 --> 01:04:30.679 +I'll say more than that. Maybe I will. + +01:04:30.680 --> 01:04:34.279 +I completely agree with you and I couldn't agree more. + +01:04:34.280 --> 01:04:38.839 +I think that's how Sacha and Amin and Leo + +01:04:38.840 --> 01:04:40.559 +really dragged me into this, + +01:04:40.560 --> 01:04:42.319 +you know, into being a volunteer. + +01:04:42.320 --> 01:04:44.599 +And I really, I'm sure we'll talk + +01:04:44.600 --> 01:04:46.039 +about this in the closing remarks, + +01:04:46.040 --> 01:04:50.199 +but I can't recommend volunteering for this project enough. + +01:04:50.200 --> 01:04:54.319 +It's just so fun to talk backstage + +01:04:54.320 --> 01:05:00.679 +with the presenters I don't know. + +01:05:00.680 --> 01:05:11.439 +It's an extremely engaging community. + +01:05:11.440 --> 01:05:12.759 +It's really thoughtful. + +01:05:12.760 --> 01:05:15.039 +I like the way y'all are so patient and awesome + +01:05:15.040 --> 01:05:19.439 +and I can be just quietly having my little freak out here + +01:05:19.440 --> 01:05:20.679 +and everyone's fine + +01:05:20.680 --> 01:05:23.879 +and will even help debug things live as needed. + +01:05:23.880 --> 01:05:45.499 +So this is all good. + +01:05:45.500 --> 01:05:48.119 +Anyway, so if people want to participate, + +01:05:48.120 --> 01:05:49.919 +you basically write a blog post. + +01:05:49.920 --> 01:05:53.159 +If you don't have a blog yet, + +01:05:53.160 --> 01:05:56.959 +there are any number of packages in Emacs, + +01:05:56.960 --> 01:05:58.479 +as well as web-based services, + +01:05:58.480 --> 01:06:02.039 +but really, you can get something going with Emacs. + +01:06:02.040 --> 01:06:05.839 +or exporting to HTML and maybe even figure out RSS, + +01:06:05.840 --> 01:06:08.279 +or you can use a static site generator like Hugo, + +01:06:08.280 --> 01:06:10.999 +or you can find, if you can set up WordPress, + +01:06:11.000 --> 01:06:12.119 +that's another way to do it. + +01:06:12.120 --> 01:06:15.079 +Or you can email me your thing and I'll post it on my blog + +01:06:15.080 --> 01:06:20.239 +and let me know how you want to be credited for it. + +01:06:20.240 --> 01:06:23.559 +Anyway, so you can share your story + +01:06:23.560 --> 01:06:26.879 +or share your story about somebody else's story + +01:06:26.880 --> 01:06:35.319 +and celebrate Emacs community. + +01:06:35.320 --> 01:06:39.079 +And we can send it to George also. + +01:06:39.080 --> 01:06:48.399 +We'll then make links in that blog post. + +01:06:48.400 --> 01:06:50.199 +And on the subject of community, + +01:06:50.200 --> 01:06:53.439 +I also heartily recommend the IRC community on Emacs. + +01:06:53.440 --> 01:06:55.919 +Pound Emacs is another one of those things + +01:06:55.920 --> 01:06:58.279 +that I just personally can't get enough of, + +01:06:58.280 --> 01:07:05.079 +and I hear a lot of stories about just how it's helped people. + +01:07:05.080 --> 01:07:09.119 +All right, we are now having the automated introduction + +01:07:09.120 --> 01:07:12.759 +and then it's going to rejoin over here very soon. + +01:07:12.760 --> 01:07:22.439 +Hang on a second. Wow, that's going. + +01:07:22.440 --> 01:07:34.399 +Saturday close and let's arrange our screen nicely. + +01:07:34.400 --> 01:07:38.279 +All right, we made it to the end of the first day! Woohoo! + +01:07:38.280 --> 01:07:40.399 +Thank you for joining us + +01:07:40.400 --> 01:07:42.959 +for the first day of EmacsConf 2025. + +01:07:42.960 --> 01:07:44.919 +Feel free to spread the word + +01:07:44.920 --> 01:07:48.479 +because there is still another day of fun talks tomorrow. + +01:07:48.480 --> 01:07:51.399 +So hashtag EmacsConf and hashtag Emacs. + +01:07:51.400 --> 01:07:54.239 +If you do hashtag Emacs on Macedon + +01:07:54.240 --> 01:07:58.239 +or Blue Sky or other places, we'll probably find it. + +01:07:58.240 --> 01:08:01.759 +Or if I don't, you can just let me know also. + +01:08:01.760 --> 01:08:04.039 +The prerecorded talks should be up + +01:08:04.040 --> 01:08:05.639 +on the talk pages already. + +01:08:05.640 --> 01:08:09.119 +The live talks, we'll probably actually get them up + +01:08:09.120 --> 01:08:11.079 +within the next week or two. + +01:08:11.080 --> 01:08:13.359 +I think they've already started processing, + +01:08:13.360 --> 01:08:15.479 +so I just had to sit down and then work with + +01:08:15.480 --> 01:08:18.399 +our wonderful army of volunteer captioners + +01:08:18.400 --> 01:08:20.119 +to get them all nicely captioned. + +01:08:20.120 --> 01:08:22.439 +But anyway, so the prerecorded talks + +01:08:22.440 --> 01:08:23.759 +are also up on YouTube, + +01:08:23.760 --> 01:08:25.719 +and I will eventually also upload them + +01:08:25.720 --> 01:08:29.239 +to TubeNix, which is a PeerTube instance. + +01:08:29.240 --> 01:08:31.239 +We will work on extracting live talks. + +01:08:31.240 --> 01:08:32.119 +If you'd like updates, + +01:08:32.120 --> 01:08:35.319 +please subscribe to the EmacsConf Discuss mailing list. + +01:08:35.320 --> 01:08:37.279 +If you've got ideas for making things better, + +01:08:37.280 --> 01:08:39.479 +we have so many ideas. I always end up with a very long + +01:08:39.480 --> 01:08:43.359 +to-do list after these things. Please add them to the pad. + +01:08:43.360 --> 01:08:46.919 +I'd love to hear from you on how we can make it even smoother next year. + +01:08:46.920 --> 01:08:49.359 +There are about 100 people watching in gen + +01:08:49.360 --> 01:08:52.159 +and 100 people watching in devs, which is really awesome. + +01:08:52.160 --> 01:08:54.119 +It's amazing to think that we can have + +01:08:54.120 --> 01:08:56.959 +an Emacs party for a lot of people. + +01:08:56.960 --> 01:09:00.399 +And we can only do this because of all the wonderful speakers, + +01:09:00.400 --> 01:09:02.279 +volunteers, participants, + +01:09:02.280 --> 01:09:04.359 +and very patient people in our lives + +01:09:04.360 --> 01:09:07.079 +who make it possible through all the time and support. + +01:09:07.080 --> 01:09:10.039 +So this year, Corwin did most of the hosting. + +01:09:10.040 --> 01:09:13.439 +I mean, also dropped by earlier, so that's great. + +01:09:13.440 --> 01:09:17.919 +I hope Leo is okay. You know, we managed. + +01:09:17.920 --> 01:09:22.439 +And I'm Sasha, by the way. I was running around backstage + +01:09:22.440 --> 01:09:26.559 +and occasionally dropping in to go on the stream. + +01:09:26.560 --> 01:09:29.359 +There are lots of other volunteers who are not on air. + +01:09:29.360 --> 01:09:32.719 +So, for example, during the proposal review process, + +01:09:32.720 --> 01:09:34.319 +we got a lot of wonderful comments + +01:09:34.320 --> 01:09:37.759 +from J.C. Hellery, Chico, and James Andrews-Howell. + +01:09:37.760 --> 01:09:41.039 +captions from Amitav and Rodion and other people + +01:09:41.040 --> 01:09:42.879 +have actually started also helping + +01:09:42.880 --> 01:09:45.079 +with the captions as well. + +01:09:45.080 --> 01:09:49.399 +So jay_bird just sent in some stuff today too. + +01:09:49.400 --> 01:09:52.959 +We are slowly working on getting a mirror in the EU set up + +01:09:52.960 --> 01:09:55.639 +so it'll be a little faster for people. + +01:09:55.640 --> 01:09:58.079 +So thanks to Yang3 for lending us a server. + +01:09:58.080 --> 01:10:00.879 +Babin and Michael and Ian and Jamie + +01:10:00.880 --> 01:10:06.119 +and Eeyore and Floyd Coulter have also helped out as well. + +01:10:06.120 --> 01:10:08.959 +Thanks to the Free Software Foundation + +01:10:08.960 --> 01:10:12.679 +for the mailing list, the media server, and of course, GNU Emacs itself, + +01:10:12.680 --> 01:10:15.439 +for which an astonishing amount + +01:10:15.440 --> 01:10:19.319 +of the scripting is done in Emacs. It's great. + +01:10:19.320 --> 01:10:23.279 +Thanks to Ry P for the server that we're using for OBS + +01:10:23.280 --> 01:10:27.639 +so that we can just VNC into it and I can manage two tracks + +01:10:27.640 --> 01:10:30.799 +without making my computer melt. It's great. + +01:10:30.800 --> 01:10:32.879 +And of course, to all the users + +01:10:32.880 --> 01:10:33.999 +and contributors and project teams + +01:10:34.000 --> 01:10:36.119 +that work on all the free software + +01:10:36.120 --> 01:10:37.279 +that this stuff is built on. + +01:10:37.280 --> 01:10:43.639 +Emacs, Org Mode, ERC, Tramp, Magit, BigBlueButton, + +01:10:43.640 --> 01:10:48.239 +Etherpad, IkiWiki, IceCast, OBS, The Lounge, + +01:10:48.240 --> 01:10:52.959 +LiberaChat, FFmpeg, OpenAI Whisper, WhisperX, + +01:10:52.960 --> 01:10:55.039 +the Aeneas forced alignment tool, + +01:10:55.040 --> 01:11:00.279 +PsyTransfer, SubEd, SubSeg, Mozilla Firefox, MPV, and Tampermonkey, + +01:11:00.280 --> 01:11:02.199 +and other things I probably forgot to mention. + +01:11:02.200 --> 01:11:04.599 +Thanks to Shoshin for the music, + +01:11:04.600 --> 01:11:06.799 +and thanks to people also who've donated + +01:11:06.800 --> 01:11:08.679 +through the Working Together program, + +01:11:08.680 --> 01:11:12.559 +like Scott and Jonathan and other anonymous donors. + +01:11:12.560 --> 01:11:15.919 +So that's a quick thanks. There's more tomorrow, + +01:11:15.920 --> 01:11:18.359 +but Corwin, do you have any parting words? + +01:11:18.360 --> 01:11:23.559 +You know, my parting words, Sacha are a thanks to you + +01:11:23.560 --> 01:11:25.759 +and not just a thanks + +01:11:25.760 --> 01:11:27.279 +for the hundreds of hours that you put + +01:11:27.280 --> 01:11:29.399 +into preparing this conference, + +01:11:29.400 --> 01:11:32.159 +you know, over the years and probably just this year, + +01:11:32.160 --> 01:11:35.999 +but also for all that you do for the community you are. + +01:11:36.000 --> 01:11:38.759 +You are a real unsung hero, + +01:11:38.760 --> 01:11:42.319 +even though I do hear your praises sung. + +01:11:42.320 --> 01:11:43.759 +They really can't be sung enough. + +01:11:43.760 --> 01:11:45.879 +In fact, I just this last week + +01:11:45.880 --> 01:11:48.039 +recommended to two different people your blog + +01:11:48.040 --> 01:11:51.599 +as a place to get a first introduction to Emacs. + +01:11:51.600 --> 01:11:54.799 +Your Emacs news is an incredible contribution, + +01:11:54.800 --> 01:11:57.959 +and just I want you to hear us thanking you. + +01:11:57.960 --> 01:12:04.879 +Thank you, Sacha. Emacs is a lot of fun, + +01:12:04.880 --> 01:12:07.519 +and Emacs people are a lot of fun, + +01:12:07.520 --> 01:12:10.879 +so it's all very wonderful. Yeah, we can wrap up here. + +01:12:10.880 --> 01:12:15.079 +People can keep hanging out if they want. + +01:12:15.080 --> 01:12:21.119 +I have a kiddo who is probably going to be back home soon + +01:12:21.120 --> 01:12:23.559 +and will pounce on me for more hugs, + +01:12:23.560 --> 01:12:25.599 +so I will see y'all tomorrow. + +01:12:25.600 --> 01:12:29.919 +uh, for more probably the same kind of stuff. + +01:12:29.920 --> 01:12:32.679 +Shut it down, save our energy for tomorrow. + +01:12:32.680 --> 01:12:36.319 +Uh, we do like to run into like hours long closing tomorrow. + +01:12:36.320 --> 01:12:38.319 +So we'll work on resisting that. + +01:12:38.320 --> 01:12:41.559 +Um, I suggest we, we look, we go get some rest + +01:12:41.560 --> 01:12:43.839 +and come, come back at it fresh tomorrow. + +01:12:43.840 --> 01:12:47.799 +Anybody else, any concerns with that or shall we go for it? + +01:12:47.800 --> 01:12:50.479 +Sounds good to me. + +01:12:50.480 --> 01:12:53.599 +If you've got ideas, pop them into the etherpad. + +01:12:53.600 --> 01:12:56.600 +And thank you so much for sharing this time with us. + +01:12:56.640 --> 01:13:23.800 +See you tomorrow. |
