From e9ff894e5be4c25d20a6c9df8b9b399280418293 Mon Sep 17 00:00:00 2001 From: Sacha Chua Date: Thu, 18 Dec 2025 20:22:40 -0500 Subject: updates --- 2025/info/open-mic-after.md | 1024 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 1023 insertions(+), 1 deletion(-) (limited to '2025/info/open-mic-after.md') diff --git a/2025/info/open-mic-after.md b/2025/info/open-mic-after.md index 7caff151..daa4511c 100644 --- a/2025/info/open-mic-after.md +++ b/2025/info/open-mic-after.md @@ -1,7 +1,1029 @@ -Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202023%20open-mic%3A%20Open%20session) +

Transcript (unedited)

+ +[[!template text="""All right, so yes, we have a little bit of time""" start="00:00:00.000" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""while we are waiting for the dev track to finish,""" start="00:00:03.600" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and we could just declare this as a break,""" start="00:00:05.720" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""or if anyone's got any interesting last-minute stuff,""" start="00:00:08.320" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""you can come and share it here,""" start="00:00:12.040" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""where Karthik is also hanging out.""" start="00:00:17.240" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I think every time I read one of your long blog posts,""" start="00:00:20.880" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Karthik, I'm like, mm, life goals.""" start="00:00:23.280" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Someday I want to write something with nice diagrams""" start="00:00:25.560" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and, you know, deep Emacs interestingness.""" start="00:00:28.400" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I have not yet gotten the hang of even using avy""" start="00:00:31.280" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""to nearly the extent that you do.""" start="00:00:34.920" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""But yes, I have, I have always looked""" start="00:00:38.120" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""at your diagrams very longingly""" start="00:00:40.120" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and wondered how you make them.""" start="00:00:42.320" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""With a lot of sweat and cursing, unfortunately.""" start="00:00:44.680" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""It's all very nice. Yeah.""" start="00:00:51.240" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And I, I, I've seen your interactive SVGs,""" start="00:00:54.200" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""which is just wizardry. I have no idea how you do that.""" start="00:00:58.320" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""You can hover over different elements in the SVG""" start="00:01:02.320" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and do interesting things.""" start="00:01:06.960" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Yeah, so it turns out if you just think of them as XML,""" start="00:01:08.760" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""which Emacs will let you""" start="00:01:11.800" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""because you can just control C, control C,""" start="00:01:13.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and it'll switch back to text mode, right?""" start="00:01:15.160" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Then you can be like, oh, yeah, I can work with this""" start="00:01:16.760" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""using the DOM Emacs list library.""" start="00:01:20.000" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And then you can add title elements to it to get the hovers,""" start="00:01:23.560" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""or you can add hyperlinks.""" start="00:01:28.480" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So in fact, the emacs-conf schedule""" start="00:01:31.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""is very naturally generated from emacs-lisp itself,""" start="00:01:35.040" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""because there was no way I was going to handle""" start="00:01:41.200" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""two track schedules by hand.""" start="00:01:43.400" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And that's just SVG so that you can then have the hovers.""" start="00:01:45.720" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""The important thing is that when you're exporting it to HTML,""" start="00:01:49.800" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""it has to be an inline SVG to get the fancy behaviors.""" start="00:01:53.120" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""If you're linking it in as an image, then it doesn't work.""" start="00:01:57.920" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""It has to be inline. So for example, for my org mode,""" start="00:02:02.800" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I have my exports for images checked first if it's an SVG.""" start="00:02:09.280" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And unless I have an attribute""" start="00:02:14.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""on it that says, no, just link to it because it's large and not interactive,""" start="00:02:15.960" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""it actually inlines all of that markup""" start="00:02:20.360" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""into the exported HTML, if that makes sense.""" start="00:02:22.760" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""That does, that does make sense.""" start="00:02:26.880" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""It's a little less mysterious now.""" start="00:02:34.280" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""On the plus side, once it is in there as inline HTML,""" start="00:02:36.560" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""well, inline, you know, it's an inline markup,""" start="00:02:40.320" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""you can actually play around with it""" start="00:02:42.520" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""using JavaScript or CSS. That's really neat.""" start="00:02:44.360" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I had a question about some other SVG wizardry I've seen you do.""" start="00:03:01.920" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""You have these SVGs that grow, right?""" start="00:03:07.680" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Like they accumulate elements, almost like a slideshow.""" start="00:03:09.760" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Am I remembering that correctly? Yeah, yeah, yeah.""" start="00:03:15.960" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I started using that for one""" start="00:03:20.200" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""of the EmacsConf presentations.""" start="00:03:22.400" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Well, the one EmacsConf presentation""" start="00:03:24.520" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I've done in recent history,""" start="00:03:26.560" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""because it's nice to be able to add things gradually, right?""" start="00:03:27.920" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Especially as you're giving a presentation.""" start="00:03:31.640" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And that's also done with Emacs Lisp.""" start="00:03:35.800" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""What I do is, first I make the image, and then in Inkscape,""" start="00:03:38.720" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I can group together the elements""" start="00:03:43.600" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""that I want to appear at the same time.""" start="00:03:46.520" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And then I can use Emacs to, I think I just changed the,""" start="00:03:49.640" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I just add some CSS to them to make them dimmer.""" start="00:03:54.640" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and you just iterate through the different groups in that level,""" start="00:04:01.040" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and you write out the intermediate SVG files,""" start="00:04:04.760" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and then you can use Inkscape""" start="00:04:09.840" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""to convert them into PNGs if you want,""" start="00:04:12.280" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""like images of each step""" start="00:04:14.840" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""that are in PNG format instead of SVG.""" start="00:04:16.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""But the basic idea is you group""" start="00:04:18.720" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""the elements together that you want in one step,""" start="00:04:20.360" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and then you can manipulate it""" start="00:04:24.160" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""using the Emacs DOM.EL library,""" start="00:04:25.880" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""because it's just an XML document.""" start="00:04:30.160" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So you can say, all right, hide everything or have everything visible""" start="00:04:32.880" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and then remove the last one or something like that, you know, iterated.""" start="00:04:38.720" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Show them one at a time and then write your resulting document object model""" start="00:04:43.160" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""to a new file each step. Do you have, that makes sense.""" start="00:04:50.680" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So do you just write the e-list,""" start="00:05:05.920" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""like is this on a case-by-case basis?""" start="00:05:09.160" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Like every time you need to do this,""" start="00:05:12.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""do you write fresh e-list to step through the SVG this way?""" start="00:05:13.520" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Or do you have some kind of package""" start="00:05:18.520" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""or library to do this more?""" start="00:05:22.480" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Let me go see if this is the one.""" start="00:05:27.160" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""It's probably just buried in my config.""" start="00:05:33.000" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""If I do it again, I'm sure I will find another thing""" start="00:05:39.840" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""that I've completely forgotten about""" start="00:05:46.720" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and therefore have to recode or fix or whatever.""" start="00:05:51.160" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""But let me go see. Can you see my screen? Yep. OK.""" start="00:05:56.400" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So, oh, yeah, yeah, this one. Nice, I remember that one.""" start="00:06:03.200" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""OK, so we get this SVG, and then this animateSVGPaths""" start="00:06:07.560" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""is just a function I have. It takes the file name.""" start="00:06:13.720" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""It makes an output there. It adds one path back at a time.""" start="00:06:16.960" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And it just creates a lot of these numbered frames.""" start="00:06:22.040" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So as you can see here,""" start="00:06:25.840" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I'm just saying, OK, take the whole thing.""" start="00:06:27.640" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And then I think, yeah, maybe I said it like,""" start="00:06:30.040" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""you know, take the whole thing,""" start="00:06:34.480" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""make everything transparent,""" start="00:06:37.000" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and then one at a time, make them opaque""" start="00:06:40.200" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and save that, save that to the frame, to the image.""" start="00:06:45.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So this theoretically is a somewhat reusable function""" start="00:06:50.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""that takes the SVG and just fills the directory with it.""" start="00:06:54.320" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""What's the order in which it reveals things?""" start="00:07:01.040" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Top to bottom or bottom to top, it's whatever the SVG has.""" start="00:07:03.400" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And so if you're grouping things together,""" start="00:07:12.920" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""you can rearrange things in Inkscape.""" start="00:07:15.960" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""If you've given them IDs,""" start="00:07:17.600" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""which I have another function for in Emacs list""" start="00:07:22.040" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""that just highlights something""" start="00:07:25.120" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and lets me put an ID for it,""" start="00:07:26.920" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""then you can rearrange them yourself""" start="00:07:28.440" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""by looking at the markup, I guess.""" start="00:07:30.880" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Or I think I actually have some code also""" start="00:07:32.320" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""that will rearrange the path""" start="00:07:35.320" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""based on a list of IDs that I give it.""" start="00:07:37.040" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and sequence so this one is animating""" start="00:07:39.280" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""one element at a time here""" start="00:07:42.760" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""um it's kind of like interesting effect""" start="00:07:44.320" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""but for larger things like for this one""" start="00:07:47.320" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""i can split this up into groups""" start="00:07:49.040" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""because i don't want to necessarily animate them letter by letter and that one""" start="00:07:52.040" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Oh yes, this is the function that I have""" start="00:07:59.600" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""for identifying the paths""" start="00:08:03.320" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and it highlights it and then it asks me for a name.""" start="00:08:05.320" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And this is the one that reorders it.""" start="00:08:08.960" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So I can say, this is the sequence""" start="00:08:11.360" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""that I want it animated in. And it will, yeah, good.""" start="00:08:14.560" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So you don't actually need Inkscape at all, right?""" start="00:08:19.280" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Because you have an elisp function""" start="00:08:23.400" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""that will let you assign the order interactively.""" start="00:08:25.000" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Yeah, so if you're doing just all the elements one after the other,""" start="00:08:28.400" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Inkscape is helpful for combining the different shapes,""" start="00:08:34.600" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""well, breaking it apart,""" start="00:08:39.280" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""because when I get the PDF and I convert it,""" start="00:08:41.400" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""it's like one big element that has a very complex path.""" start="00:08:44.720" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And if I want to animate it element by element,""" start="00:08:48.560" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I have to break it apart""" start="00:08:52.480" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and then recombine it so that, you know, so that this O looks like it's hollow""" start="00:08:53.960" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""instead of like a circle.""" start="00:08:59.760" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So there's a little bit of Inkscape""" start="00:09:01.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""cleaning up before then,""" start="00:09:02.960" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""but I really dislike the mouse heavy stuff of Inkscape""" start="00:09:04.880" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""for assigning IDs and things like that.""" start="00:09:08.440" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I haven't quite gotten the hang of it.""" start="00:09:12.120" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So this is what it looks like""" start="00:09:14.000" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""before you group the elements together""" start="00:09:16.120" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and you combine paths,""" start="00:09:17.920" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""which is what you have to do Inkscape for,""" start="00:09:20.040" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""because I can't make sense of the numbers in Emacs someday.""" start="00:09:22.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So just combine, combine, combine. But once it's there,""" start="00:09:24.880" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I don't like having to set the ID in this""" start="00:09:30.320" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""object properties on the right side,""" start="00:09:32.720" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""because there's a lot of clicking.""" start="00:09:34.880" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""press escape and tab and tab, it's not reliable.""" start="00:09:36.960" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So that's why I have this function""" start="00:09:40.560" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and it lets me identify the paths and animate them""" start="00:09:42.600" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""from within Emacs, because Emacs is a text editor.""" start="00:09:46.560" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Yeah, in name only, but anyway.""" start="00:09:51.000" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So the groups, if you've already assigned groups in Inkscape,""" start="00:09:55.280" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Then when you run it through this function in Emacs,""" start="00:10:02.680" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""you can assign an ordering to the groups,""" start="00:10:06.520" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""the order in which it will be revealed.""" start="00:10:09.160" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Yeah. What I did was I gave it all IDs.""" start="00:10:10.600" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So I gave each group an ID.""" start="00:10:15.040" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And then when I have the ID, I can say, you know, maybe when I group it,""" start="00:10:17.600" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I'm doing it in a bit of a haphazard way,""" start="00:10:26.000" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""not grouping the first thing first,""" start="00:10:28.320" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and then the second thing, and the third thing.""" start="00:10:30.280" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So it's a bit of a mess.""" start="00:10:32.280" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And this one just resorts it by, I think,""" start="00:10:34.400" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""just looking everything up, storing it,""" start="00:10:38.120" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and then putting it back in order.""" start="00:10:41.480" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I probably have the code for this somewhere,""" start="00:10:45.040" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and if it's not, it's in the source code.""" start="00:10:49.160" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""There should be a source.""" start="00:10:52.040" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Yes, so this is an org source for this post,""" start="00:10:53.040" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and if it's not in there, then it should be in my config,""" start="00:10:57.600" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""the definition of this function.""" start="00:11:01.280" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""We are to pass. Here we are. Yeah, there you go.""" start="00:11:03.680" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So there, it just, it takes it, it looks for it,""" start="00:11:11.440" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and it adds it to the first layer.""" start="00:11:17.640" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Okay, you've just explained the magic,""" start="00:11:19.720" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""which makes it less magical,""" start="00:11:29.400" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""but also something I could try. Yeah, this is interesting.""" start="00:11:31.160" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Yeah, S2G is surprisingly powerful. Yeah, I know.""" start="00:11:36.280" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I know it can do a lot more""" start="00:11:41.760" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""than what we typically use it for.""" start="00:11:43.680" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So you also had this feature where, I think you used CSS,""" start="00:11:46.560" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""where if you mouse over something in the SVG,""" start="00:11:53.040" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""something is highlighted in your webpage.""" start="00:11:56.600" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Oh yeah, yeah, yeah. Like in the organizer's notebook.""" start="00:11:58.840" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So I have a draft schedule here.""" start="00:12:04.800" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Yeah, we've been doing all this stuff live, that schedule,""" start="00:12:07.960" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""where if you have, let's pick someone's talk.""" start="00:12:10.680" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Oh, yeah, highlight.""" start="00:12:16.240" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I think, oh, maybe it's the other way around.""" start="00:12:22.120" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I need to put this stuff here first. Oh yeah, okay.""" start="00:12:26.160" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So you'll notice here how if I add some JavaScript,""" start="00:12:30.840" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""it takes a look at what's in the URL.""" start="00:12:33.960" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And if so, then it can highlight a specific thing""" start="00:12:36.000" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""using just, maybe CSS might be it.""" start="00:12:38.440" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Actually, I think it's JavaScript setting the CSS style on it.""" start="00:12:41.680" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""But yeah, you can play around with CSS.""" start="00:12:47.880" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""See, this one has a slightly darker,""" start="00:12:51.280" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""slightly thicker background. So SVGs are great for that.""" start="00:12:53.640" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And if you inspect it,""" start="00:12:59.520" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""which I don't think I have shared here,""" start="00:13:01.480" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""but if you inspect it, I will share my inspect.""" start="00:13:03.200" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I have too many windows open,""" start="00:13:07.560" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""so I don't want to share my whole thing.""" start="00:13:10.720" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""But one of these, oh, I don't even know which, how do I find, okay,""" start="00:13:12.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""it's the developer tools window.""" start="00:13:19.075" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Do I even have developer tools? Oh, I can't see it. OK.""" start="00:13:20.367" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""If you inspect the page on the developer thingy,""" start="00:13:25.325" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""then it will show the SVG element. Yeah.""" start="00:13:29.492" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And unfortunately, I can't share it easily right now.""" start="00:13:38.117" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Maybe just say inspect. Oh, this is actually, I think,""" start="00:13:41.241" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""how also the individual talks have current ones, right?""" start="00:13:46.617" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So I just have this image over here,""" start="00:13:55.117" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and then you just have that one,""" start="00:14:00.440" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""that specific talk styled differently.""" start="00:14:01.720" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""How did you generate this SVG,""" start="00:14:06.000" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""the one showing the schedule?""" start="00:14:13.160" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Oh, okay, okay. Emacs. Book, book, book, book.""" start="00:14:14.640" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Emacs publish, I think. Let me share it. Emacs conf pub.""" start="00:14:24.440" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""One of these windows. Okay, let's see.""" start="00:14:29.600" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Slow down, look at all the windows.""" start="00:14:36.120" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Okay, I'm just gonna share the whole screen.""" start="00:14:39.200" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Screen two, no, screen one. All right, and okay.""" start="00:14:40.640" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I think this is the one. Is it sharing my screen?""" start="00:14:50.520" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""It is not sharing my screen. I'm going to try this again.""" start="00:15:05.760" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Okay. All right. So, the schedule. The schedule.""" start="00:15:08.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""This is the actual function""" start="00:15:23.120" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""that creates the SVG rectangles for the talks.""" start="00:15:24.560" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Oops. My screen share ended. Let me do that again.""" start="00:15:28.320" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""All right, and as you can see,""" start="00:15:35.280" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""it's just a little bit of math for the X, the Y,""" start="00:15:41.240" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""we color it differently""" start="00:15:45.040" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""depending on whether I'm making the schedule for the public view.""" start="00:15:48.200" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So we just, you know, do we do developer, development talk""" start="00:15:52.840" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""or general talk as colors,""" start="00:15:58.440" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""or if I want to color it for the backstage view,""" start="00:15:59.920" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I can keep track of the talk's status.""" start="00:16:02.640" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Anyway, so SDG track takes the track""" start="00:16:04.720" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and all the talk information,""" start="00:16:07.800" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and it makes all the little rectangles.""" start="00:16:09.240" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And this is the thing that adds a little hover""" start="00:16:11.560" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""for the times and titles as well.""" start="00:16:15.600" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So, Emacs's API for dealing with this is actually pretty good.""" start="00:16:17.920" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Oh, and of course, I have a hook here that modifies it.""" start="00:16:22.640" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""You can just run through a different function,""" start="00:16:27.560" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""different functions to tweak it.""" start="00:16:30.120" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So I could say, okay, color it in case my time constraints are,""" start="00:16:32.520" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""you know, not being met.""" start="00:16:36.400" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And then I can paint about this somewhere.""" start="00:16:37.840" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And the nice thing about this""" start="00:16:40.960" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""is it's actually, it's, you can, hang on a second, let me do this carefully.""" start="00:16:51.120" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""All right, here you go.""" start="00:17:06.720" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""It's super nice to be able to refer to it within Emacs itself""" start="00:17:08.000" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""because Emacs has SVG support.""" start="00:17:13.480" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So this is, for example, the organizer view""" start="00:17:15.840" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""inside an org mode file. And it just has all those SVGs.""" start="00:17:19.680" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""It don't have the hover things,""" start="00:17:24.040" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""because it's just an image in it.""" start="00:17:25.600" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""But yeah, SVGs, Emacs, awesome. Oh, that's very cool.""" start="00:17:27.400" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""You're actually drawing the rectangles from scratch.""" start="00:17:37.760" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""It took a little bit of figuring out,""" start="00:17:40.720" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""especially since I realized""" start="00:17:45.000" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I wanted horizontal on the wiki pages""" start="00:17:46.960" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""so that it fits on people's screens,""" start="00:17:49.680" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""but I wanted vertical in my organized review""" start="00:17:51.360" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""so that I don't have to keep tilting my head sideways.""" start="00:17:56.040" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and this is the code for that.""" start="00:18:09.200" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""See, I'm just directly adding G nodes for groups""" start="00:18:12.360" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""or A nodes for the hyperlinks and rep as well.""" start="00:18:19.440" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I think the SVG library also has functions""" start="00:18:23.200" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""for adding rectangles and things like that,""" start="00:18:27.320" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""but sometimes I vaguely remember""" start="00:18:31.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""sometimes you can't return the node that I'm expecting.""" start="00:18:32.360" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So, it's okay to just use the DOM functions directly.""" start="00:18:35.000" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And then the whole thing gets SVG printed afterwards.""" start="00:18:40.560" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So I can just say SVG printed, and then it's good to go.""" start="00:18:46.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Let me see. Actually, do I have SVG?""" start="00:18:54.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Let's schedule for track SVG.""" start="00:18:57.720" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""It's a shame that you can't visually interact""" start="00:19:05.680" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""with parts of an SVG in Emacs the way you can in Emacs.""" start="00:19:08.800" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Oh, some people have some interesting experiments with that.""" start="00:19:11.560" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I haven't dug into it much,""" start="00:19:16.800" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""but people have figured out how to use the mouse events""" start="00:19:18.840" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and then figure out what the, like there's LEC draw, right?""" start="00:19:21.640" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So lecdraw is a package that lets you draw SVGs""" start="00:19:26.200" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and you can drag things and whatever. So that's very cool.""" start="00:19:30.160" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And there's also an org related package""" start="00:19:33.040" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""that lets you visualize your schedule as boxes.""" start="00:19:37.160" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I'd like, yeah, that's a thing also.""" start="00:19:43.440" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So people have experimented""" start="00:19:45.640" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""with mouse interaction and it's cool,""" start="00:19:46.920" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""but I haven't had the brain space to do that yet,""" start="00:19:49.440" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""but it would be nice. Yeah, you're right.""" start="00:19:51.920" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I remember using easy draw""" start="00:19:55.480" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and being surprised at what it can do.""" start="00:19:58.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""The only thing I think I discovered""" start="00:20:02.000" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""is that it ends up creating lots of new SVGs,""" start="00:20:05.120" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""kind of the way that you do""" start="00:20:10.280" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""when you show elements one by one,""" start="00:20:13.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""you are essentially creating one SVG for each state,""" start="00:20:14.960" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""one full SVG for each intermediate state of the presentation, let's say.""" start="00:20:19.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""That's kind of what ELEasyDraw does.""" start="00:20:24.440" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And I thought that's not good for performance.""" start="00:20:26.480" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And it is kind of on the slow side,""" start="00:20:30.840" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""if you compare it to like Inkscape or anything else.""" start="00:20:33.040" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""But yeah, what it can do is pretty amazing.""" start="00:20:37.360" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""you can dynamically modify an SVG object,""" start="00:20:40.960" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and it will automatically get updated in Emacs,""" start="00:20:44.560" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""which is a technique that I use a lot in FFNS in subbed.""" start="00:20:48.400" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So for example, if I have waveform show all in this,""" start="00:20:52.520" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""it will, like, it's very easy to just move one element, for example,""" start="00:20:57.560" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""or make an element larger or smaller.""" start="00:21:03.240" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And that's the... It might be pretty efficient, I don't know,""" start="00:21:08.520" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""but I'm certainly not like writing it to disk each time and reloading it.""" start="00:21:13.280" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Eric and I demoed in 2020 EmacsConf for Dungeon Mode Works,""" start="00:21:20.200" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""where we demonstrated, you know, showing parts of the map""" start="00:21:25.520" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and then, you know, different characters""" start="00:21:29.400" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""have different abilities that show,""" start="00:21:31.650" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""that allow you to see different dungeon features.""" start="00:21:33.840" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And then if your last character,""" start="00:21:36.600" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""you know, of that class or race dies,""" start="00:21:38.800" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""then you suddenly can't see""" start="00:21:42.720" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""secret doors or whatever anymore.""" start="00:21:44.480" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And so just make that disappear""" start="00:21:46.760" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""between one turn and the next""" start="00:21:48.720" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""is just working with just simply update the SVG""" start="00:21:50.560" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and there goes the screen. No, no, no bus, no bus.""" start="00:21:54.920" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""It's pretty awesome. So this is an example""" start="00:21:57.680" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""of how I'm using it to kind of show where we are in the, in the track.""" start="00:22:01.560" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And then here's mouse, mouse interaction, right?""" start="00:22:07.160" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I can change my timestamp right from there. Which is fine.""" start="00:22:09.640" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So, I'm curious how this works exactly.""" start="00:22:21.360" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""To effect any kind of change in the SVG,""" start="00:22:28.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""you have to use the DOM library, right? Yes.""" start="00:22:31.800" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Okay, so, but that means that it's going to be,""" start="00:22:36.240" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""anytime you make a change, it's going to read in the XML,""" start="00:22:39.320" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""convert it to an Elisp DOM, right?""" start="00:22:43.640" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And then you modify that tree.""" start="00:22:48.000" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Yeah, you keep the DOM, like, well, in this case, for example,""" start="00:22:50.920" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I'm actually constructing it using Emacs list objects directly.""" start="00:22:55.840" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""If you were working with an external SVG,""" start="00:23:00.880" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""you would parse it first, yes,""" start="00:23:02.960" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""using XML parse file or something like that.""" start="00:23:05.200" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and then you would have it in memory.""" start="00:23:07.920" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""When you insert the image,""" start="00:23:12.000" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""you insert the list document object model that you have,""" start="00:23:14.560" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and then any changes you make to that document object model""" start="00:23:18.520" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""automatically get updated in the image somehow.""" start="00:23:21.200" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Oh, that's fantastic. Yeah. Yeah. I'll show you the code. Yeah.""" start="00:23:25.520" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So I was under the impression""" start="00:23:33.560" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""that there's a round trip to XML involved""" start="00:23:38.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""to do anything like to go from displayed""" start="00:23:40.097" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""to in-memory to in-memory modified back""" start="00:23:42.299" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""to display all around trip.""" start="00:23:46.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Yeah. So let me see where's my thing that changes it.""" start="00:23:47.840" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So when it's the time.""" start="00:23:52.960" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""It's probably some kind of hook that I'm listening to here.""" start="00:23:59.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Playback position hook. Oh, it's this update current bar.""" start="00:24:07.000" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""All right, so what update current bar does""" start="00:24:12.880" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""is it moves the bar to the right place.""" start="00:24:16.000" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And you see here how this SVG,""" start="00:24:19.320" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I'm actually just reading it off the text property""" start="00:24:21.160" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""so that I know which one is the current one in the overlay.""" start="00:24:24.720" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I remove the old one, just the element.""" start="00:24:28.280" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I don't have to mess around with the image.""" start="00:24:31.400" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I removed the old one for some reason,""" start="00:24:34.280" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""just to make sure, I guess.""" start="00:24:35.600" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""You can actually just update the attribute on it.""" start="00:24:36.840" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Oh, I think this is just so that I don't have to worry""" start="00:24:38.880" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""about whether there is one or there isn't.""" start="00:24:42.920" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And then I add a bar at the right position""" start="00:24:45.520" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and then it makes that little animated sweeping thingy.""" start="00:24:47.960" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So you see how I'm not recreating the SVG at this point.""" start="00:24:52.520" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I'm just getting it from the overlay.""" start="00:24:55.960" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Yeah, that's very interesting. I wonder what it's doing.""" start="00:25:02.560" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""what it's actually doing under the hood when you run SVG removal.""" start="00:25:07.480" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Yeah, I don't know, too. I think it's RSVG is tied""" start="00:25:09.920" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""into the display engine, so to speak. Yeah, that it is.""" start="00:25:19.440" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""But RSVG, the library,""" start="00:25:32.040" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""can only deal with actual SVGs, right, like XML SVGs,""" start="00:25:33.920" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""but we're dealing with the ELISP DOM of an SVG.""" start="00:25:39.200" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So the display engine can re-enter the LISP.""" start="00:25:43.120" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I do know that the display engine""" start="00:25:47.560" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""can re-enter the LISP engine,""" start="00:25:49.520" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""so I think that may be the answer.""" start="00:25:51.840" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Yeah, you can just SVG insert image the object itself.""" start="00:25:53.600" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So here, for example, SVG create just creates,""" start="00:25:58.760" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""it actually just creates a DOM model.""" start="00:26:01.880" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So this is Lisp, and it's not,""" start="00:26:04.240" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""it doesn't get printed to string representation or anything.""" start="00:26:06.600" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And then you can SVG insert image,""" start="00:26:09.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""or you can set the display and, you know,""" start="00:26:13.240" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and use pass it like as an SVG image.""" start="00:26:15.160" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""SVG image gives you an image object""" start="00:26:20.720" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""if you want to do the like the regular""" start="00:26:22.600" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""sort of display thingy. Actually, that one says it turns it""" start="00:26:24.680" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""into a string representation.""" start="00:26:31.200" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Or at least maybe that's just how it gets retrained.""" start="00:26:34.400" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Anyhow, some kind of magic happens,""" start="00:26:36.720" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""but I don't have to worry about it.""" start="00:26:38.560" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""It just stays on my side. Yeah, but I was thinking about it""" start="00:26:39.920" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""because I expect that if it's converting to XML all the time, every time you make a change,""" start="00:26:44.120" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""then that's going to be the bottleneck""" start="00:26:49.600" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""for any kind of heavy interactive SVG editing or modification in Emacs.""" start="00:26:52.120" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""The kind that ELEasyDraw does.""" start="00:26:58.120" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""But maybe if we make it compelling enough,""" start="00:27:01.200" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""then the folks upstream can say, all right,""" start="00:27:03.840" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""like the way that JSON got a lot faster.""" start="00:27:07.280" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Who knows? Maybe we can get that to be faster too. Yeah.""" start="00:27:10.240" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I see a lot of potential for better UIs in Emacs""" start="00:27:13.360" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""with using SVGs. Yeah.""" start="00:27:19.200" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Nicolas Rougier has all those experiments, right?""" start="00:27:22.720" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Yeah, but all of those, I think, are bound by the limitations""" start="00:27:26.320" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""of how deeply SVGs are embedded in the display engine,""" start="00:27:30.160" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""because that's kind of what we're discussing.""" start="00:27:33.600" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""We want to avoid going to XML,""" start="00:27:36.360" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I mean, going from XML to Elisp DOM""" start="00:27:38.480" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""to modified Elisp DOM back to XML.""" start="00:27:41.480" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""We want to avoid that round trip. Yeah, for sure.""" start="00:27:44.840" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Or make that as fast as possible, yeah.""" start="00:27:50.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Does anyone else have anything they want to share?""" start="00:28:04.800" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I've always got stuff I can share,""" start="00:28:11.920" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""but I pretty happily defer. I've already seen what I made.""" start="00:28:13.920" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Karthik? Oh, I'm a fly on a wall here. I'm not.""" start="00:28:17.640" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Okay. I didn't come in with the intent to share anything.""" start="00:28:28.760" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Yeah. How about you, Sacha?""" start="00:28:32.200" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Do you have other stuff you haven't shown off recently?""" start="00:28:34.240" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Aside from all the panicking""" start="00:28:38.000" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""about getting EmacsConf together this year?""" start="00:28:39.840" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I just wanted to bring it up.""" start="00:28:42.600" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Yeah, let's see, what do I have in my recent, like, fiddled with?""" start="00:28:45.400" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So I have a project called...""" start="00:28:50.360" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I have a project called Ufta, which is a little bit fun.""" start="00:28:54.000" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Let me pull it up here before I share.""" start="00:28:56.880" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""You can see my messy, messy desktop. Okay, there it is.""" start="00:29:00.160" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And that's supposed to want a shell. Probably that one.""" start="00:29:08.960" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And we'll just bootroot. keeping in mind that graphics""" start="00:29:21.520" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""is going to end in about five minutes. Ooh, perfect.""" start="00:29:29.120" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""That'll keep me from from being my normal long-winded self.""" start="00:29:33.400" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Have you already made contact with Emmanuel? I was not.""" start="00:29:38.960" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Okay, I'm going to quickly do a check in.""" start="00:29:47.240" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Okay, sounds good. Did you hear back from him?""" start="00:29:50.160" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Assume that's a yes.""" start="00:30:00.120" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""All right, I'll go ahead and share screen here""" start="00:30:01.040" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and just take a look, a very brief look at this.""" start="00:30:04.400" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Assuming I can present. I had a question for Sacha.""" start="00:30:08.880" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I had a question for Sacha and you, Corbin.""" start="00:30:16.720" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Hello. Yeah, you're good. Go for it. Yeah, yeah.""" start="00:30:22.400" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So in past years, in the EmacsConf,""" start="00:30:28.760" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""there was a talk by someone,""" start="00:30:33.320" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""usually John Wheatley, or I think Philip last year,""" start="00:30:36.800" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""about new developments in Emacs.""" start="00:30:41.000" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Yes, and that is kind of at the whim""" start="00:30:44.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""of the Emacs developers,""" start="00:30:48.680" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""whether that is included in the in the conference.""" start="00:30:50.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""It's kind of up to the, you know, how busy folks are""" start="00:30:56.920" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and whether somebody can follow up the time to prepare it.""" start="00:30:59.680" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I see. Yeah, I noticed that there wasn't one for this year.""" start="00:31:02.880" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And I know of at least one improvement""" start="00:31:07.120" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""or one change to Emacs.""" start="00:31:10.000" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""It's small, but I'm guessing it's very crucial""" start="00:31:12.360" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""for a certain class of Emacs users.""" start="00:31:17.560" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And I can talk about that, just that one thing.""" start="00:31:20.360" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""But you can, you can, you can go right.""" start="00:31:24.240" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So I can't share anything and we've got about one minute.""" start="00:31:29.720" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So have that. Okay. Um, so the change is that, uh,""" start="00:31:32.600" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""in the development version of Emacs,""" start="00:31:39.720" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""sorry, child frames are now supported""" start="00:31:41.920" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""in terminal in the terminal.""" start="00:31:46.920" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And I suspect that not many people know about it yet,""" start="00:31:53.680" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""but basically this means something like Corfu is going to work fine""" start="00:31:56.520" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""when you're running Emacs in a terminal,""" start="00:32:03.840" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""as well as pause frames or anything that shows like a little pop-up window""" start="00:32:05.480" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""that previously did not work in Terminal Emacs.""" start="00:32:14.160" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""That's it. That's the update. Cool.""" start="00:32:19.160" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Okay, there I have a share screen button.""" start="00:32:27.520" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""We'll see if I think we're just about to cut away,""" start="00:32:29.360" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""but I'll go ahead and see if I can get this going.""" start="00:32:32.000" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I'll just share my whole screen""" start="00:32:34.920" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and this will be a little ugly as it comes in.""" start="00:32:36.680" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So this is a project that I think is a little bit fun.""" start="00:32:39.600" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""It's called Oopda. And basically what this does,""" start="00:32:44.360" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""you can see it on my source site,""" start="00:32:47.520" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""that's sr.ht tilde mplscorewin slash Oopda.""" start="00:32:49.760" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""O-F-D-A, and this is a very simple approach""" start="00:32:55.160" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""to using an org file as a replacement for SQLite.""" start="00:32:59.600" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""It's very simple, but it does support like a dot style path and notation.""" start="00:33:04.640" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So you can get at deeply nested data""" start="00:33:12.240" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and just gives a little,""" start="00:33:16.320" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""there's a shell script wrapper that comes with it.""" start="00:33:19.160" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""All right.""" start="00:33:24.160" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Theoretically, this is the Q&A for the graphics talk.""" start="00:33:26.320" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Oops, I have to unmute over here. Sorry.""" start="00:33:32.760" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""All right, I had a little audio bleed through,""" start="00:33:38.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""my apologies, can you still hear me?""" start="00:33:53.000" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""All right, I'm gonna guess,""" start="00:34:02.400" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""because I still see us live on the screen""" start="00:34:03.720" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""that we're still live. All right, so I'll just press on.""" start="00:34:05.760" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So what we're looking at here is a project called Upta.""" start="00:34:12.840" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Here's the Emacs Lisp source port.""" start="00:34:18.600" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""You can see it's not real impressive""" start="00:34:21.240" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""even with all of its boilerplate.""" start="00:34:23.200" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""It's under 200 lines of code.""" start="00:34:24.760" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And this is kind of a proof of concept,""" start="00:34:27.400" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""giving us the ability to use a org.org file""" start="00:34:30.600" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""as a flat file database. The intention here is to get""" start="00:34:35.000" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""a kind of transition from SQLite,""" start="00:34:38.280" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""which is using a flat text file as a database,""" start="00:34:40.440" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""to being able to have more of a literate database""" start="00:34:44.240" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""where we can intermix documentation about the data""" start="00:34:48.880" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""with the data itself,""" start="00:34:52.760" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and then by giving a path on the command line.""" start="00:34:54.120" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I'll go back to the README, just take a look at that.""" start="00:34:57.600" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And you can see there's a couple of kind of examples here""" start="00:35:02.200" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""where we're, here we would be querying a path.""" start="00:35:05.240" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""We can also provide a value""" start="00:35:11.320" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and that'll set data into the file.""" start="00:35:15.480" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""It also has an optional first parameter""" start="00:35:20.040" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""to specify the specific org file by default.""" start="00:35:23.120" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""It looks for a file called data.org.""" start="00:35:26.320" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And of course that can be used inside Emacs as well,""" start="00:35:29.400" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""although the value of that may be a little bit limited""" start="00:35:34.280" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""compared to more sophisticated""" start="00:35:37.800" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""technologies like org-element.""" start="00:35:39.800" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""This is not an implementation""" start="00:35:41.800" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""that mirrors all of org-element""" start="00:35:43.840" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""or any of the more complex functionality of org.""" start="00:35:47.160" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""It's really as simple as possible proof of concept""" start="00:35:50.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""to just to be able to kind of work""" start="00:35:52.920" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""with the data inside an org file""" start="00:35:57.680" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and get it back out on the command line.""" start="00:35:59.560" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So we'll see if we can make it work here.""" start="00:36:01.680" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Corwin, could you increase the font size?""" start="00:36:07.840" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I surely will. All right. How's that?""" start="00:36:13.480" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""That's my picture. Yeah. Okay. Cool.""" start="00:36:27.200" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So, let's see if we do have a, well, we can probably make it.""" start="00:36:31.000" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Let's do this.""" start="00:36:39.160" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""All right, and then in theory, this just works.""" start="00:37:00.840" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So we'll cut.""" start="00:37:05.160" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So we'll just create a data file called data.org.""" start="00:37:42.200" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Make sure that works. Looks reasonable.""" start="00:37:45.880" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Let's try adding some data to it. Hmm, not so happy.""" start="00:37:50.240" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Okay, let's try it the hard way.""" start="00:38:13.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I'll come back over here to my usage""" start="00:38:17.560" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and we'll just try running it.""" start="00:38:21.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Is Emacs, is finding Emacs really the issue?""" start="00:38:23.200" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""It seems to me it's not, it's not liking my path.""" start="00:38:37.320" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""It's not finding out that I do EO and PWD.""" start="00:38:41.200" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""It wants it to be on the log. I see.""" start="00:38:44.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So I may have to even mess with that further,""" start="00:38:49.520" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""but we'll just try it.""" start="00:38:54.120" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So this should retrieve the value if it works.""" start="00:38:55.360" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Oh, and let's take a take a simple""" start="00:39:04.840" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Yeah, add-to-list takes a symbol.""" start="00:39:17.120" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""We're going to have issues with bash quoting,""" start="00:39:47.320" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""so you should escape the quoting side.""" start="00:39:52.640" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Gotcha. You're kidding.""" start="00:39:58.560" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I'm not letting go. Whoa. That might work.""" start="00:40:27.720" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I got my parents right. Never demo live. How exciting. OK.""" start="00:40:36.600" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Without batch, though, we may not get our output. OK.""" start="00:41:02.160" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Well, that's as far as I'm going to take it.""" start="00:41:13.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I should have prepped a demo environment.""" start="00:41:20.400" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I wasn't really prepared to demo. No worries.""" start="00:41:21.960" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Couple of questions about this feature.""" start="00:41:26.880" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""The first question is, do you use it? I do use it, yeah.""" start="00:41:30.720" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I should have gotten onto the environment""" start="00:41:37.800" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""where I'm using it. It's a little messy.""" start="00:41:41.280" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""It gets into another project""" start="00:41:45.600" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""that's way too complicated to get into.""" start="00:41:47.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Yeah, but what kinds of things do you use it for?""" start="00:41:48.840" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""It's sort of hard to answer""" start="00:41:53.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""that without getting into my other project,""" start="00:41:57.000" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""but essentially I've got a web development tool chain""" start="00:41:59.160" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""that is kind of a web-based REPL""" start="00:42:02.920" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""that is kind of a literate compute environment, if you will,""" start="00:42:05.760" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""allowing me to use a bunch of virtual machines""" start="00:42:10.920" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""as one big computer. That project is called Ghost Wheel.""" start="00:42:13.120" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And so in order to show off the homepage,""" start="00:42:19.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So on this page, you can see the list of machines,""" start="00:42:23.720" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and then you'll also see there's these state indicators.""" start="00:42:30.360" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And right now, as a matter of fact,""" start="00:42:34.760" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""what I've been hacking on""" start="00:42:38.440" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""is trying to get support for org tables.""" start="00:42:41.240" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Right now, I support only changing all of the data""" start="00:42:44.880" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""within some heading, subheading, or whatever.""" start="00:42:48.760" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""What I'd like to be able to do is specify,""" start="00:42:51.960" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""using org table fm syntax, the particular row column.""" start="00:42:55.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So find a particular named table,""" start="00:43:01.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""find a particular row, you know,""" start="00:43:03.840" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""column one, you know, row two, column one,""" start="00:43:06.560" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and then set the value from the command.""" start="00:43:08.640" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Currently, I just use it for very simple stuff.""" start="00:43:11.920" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I don't really want to show that off.""" start="00:43:18.360" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I've got another page that lists all of the DNS names""" start="00:43:20.520" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""that are associated that are hosted on Ghostwheel.""" start="00:43:23.600" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And so I use that to add items to the list.""" start="00:43:26.160" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Does it make sense? Yeah, it sounds useful.""" start="00:43:29.320" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So one thing that I would like,""" start="00:43:40.440" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I guess it's easy enough to write,""" start="00:43:47.280" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""but is a tool exactly like this""" start="00:43:51.480" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""where I can query my org files from the command line?""" start="00:43:58.800" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Yeah, that's exactly what it says.""" start="00:44:03.840" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Yeah, but it's going to be more""" start="00:44:06.880" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""like a database query where, you know, I say select, select all headings where, you know,""" start="00:44:14.600" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""that contain this string or that have this tag, right?""" start="00:44:23.320" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""The kinds of things that you can do with org-ql from outside, from inside Emacs, right?""" start="00:44:27.280" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""To be able to do those from the command line with,""" start="00:44:38.520" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I'm going to invoke SQL here, like SQL SELECT statements,""" start="00:44:41.120" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""but it doesn't have to be that syntax, right?""" start="00:44:48.280" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Just that capability.""" start="00:44:50.520" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Yeah, I can see that being useful as a command line tool.""" start="00:44:52.520" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And I don't even care about write,""" start="00:44:57.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""like the ability to write or manipulate the file.""" start="00:44:59.400" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Just query. the command line that sounds yeah yeah exactly""" start="00:45:02.400" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""to be able to dig a piece of data out of an org file as well""" start="00:45:11.800" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""for my purpose it's very useful to be able to replace it""" start="00:45:15.160" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""because then i can deal with submit the form you know""" start="00:45:18.360" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and that might be like a sign up form""" start="00:45:21.000" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and then i just add the user add up an entry into the org file""" start="00:45:24.000" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""for that user right what it doesn't do is a relational data""" start="00:45:29.160" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So everything, it's essentially a document data store.""" start="00:45:35.240" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Like a Mongo kind of. True. So over on IRC, ScrewLisp asks,""" start="00:45:40.560" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""what does it mean to query an ARC file?""" start="00:45:53.960" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Is the data in a table? Is it in an ELISP nested list view""" start="00:45:57.280" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""of a table that has a name in ARC?""" start="00:46:01.680" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And my answer to that is that if you ever used RQL,""" start="00:46:06.560" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""written by Alpha Papa,""" start="00:46:10.640" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""then that's the kind of thing I'm talking about.""" start="00:46:14.200" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So, you query based on one of a set of attributes.""" start="00:46:18.040" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And these attributes are anything that's recognized by ARC.""" start="00:46:23.120" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""For example, the to-do status, the dates,""" start="00:46:30.600" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""the outline path, the headings, a full text search.""" start="00:46:35.240" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""There are several more.""" start="00:46:40.400" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""The presence or absence of certain properties.""" start="00:46:43.480" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""using any combination of those if you want to dig down""" start="00:46:46.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and find some data in an art file.""" start="00:46:50.880" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""That's the kind of query I'm talking about.""" start="00:46:52.760" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""It is somewhat equivalent""" start="00:46:56.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""to being able to write SQL queries""" start="00:46:58.240" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""where you match on things just for your art files.""" start="00:47:02.360" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Okay. I think we might have figured out our problem.""" start="00:47:09.720" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""It was DOS encoding. See if that works.""" start="00:47:21.200" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I switched the development track over""" start="00:47:38.840" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""to just watching the gen track since I couldn't find it.""" start="00:47:47.880" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Also, Eludo wants to mention""" start="00:47:53.560" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""the Emacs Carnival theme for December.""" start="00:47:57.360" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Yes, the people of Emacs,""" start="00:48:00.800" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""of which you are all very awesome.""" start="00:48:02.360" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Thank you so much for your patience.""" start="00:48:04.120" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Today has been very interesting.""" start="00:48:05.520" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""But yes, at some point we can show that too.""" start="00:48:08.160" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And we can basically wrap up anytime we like""" start="00:48:13.360" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""or hang out for as much time as we like also.""" start="00:48:17.200" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""okay so this is okay at least i got""" start="00:48:19.280" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""as far as a working demo here""" start="00:48:23.280" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""so now you can kind of see what's going on um""" start="00:48:24.520" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and i'll just wrap that into uh""" start="00:48:26.440" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""into a little prettier output""" start="00:48:31.600" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And you can see that it modified the value.""" start="00:48:40.960" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So it's pretty darn simple.""" start="00:48:53.160" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Again, all it's doing is completely replacing all of this content""" start="00:48:59.480" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""with whatever new value is given as its final argument""" start="00:49:06.160" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""after naming the data path.""" start="00:49:11.680" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So the one refinement we can do just to get a little more complex example going.""" start="00:49:14.880" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""We'll deepen our structure a little bit. And try that.""" start="00:49:23.440" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So here now we'll say test two.""" start="00:49:32.760" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And we can take a look at the data file""" start="00:49:38.800" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and see that it has adjusted that""" start="00:49:47.640" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""because test2 was completely unique, that worked fine.""" start="00:49:51.600" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""If that were not the case,""" start="00:49:55.960" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""we would have had to specify the path""" start="00:50:00.520" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""using dot notation like this. And that's pretty much it.""" start="00:50:02.600" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""It took me much longer to figure out""" start="00:50:17.680" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""why it wasn't just working than it did to demo it.""" start="00:50:20.760" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And again, what I really like about this program,""" start="00:50:23.760" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""besides the fact that I find it quite useful""" start="00:50:29.240" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""to just be able to stuff values into an org file""" start="00:50:31.640" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""from the command line using shell script,""" start="00:50:34.640" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""is what I really like about this""" start="00:50:36.440" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""is that it's a whopping 190 lines of code,""" start="00:50:41.280" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""including all the boilerplate.""" start="00:50:46.000" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And I will share the project into the chat.""" start="00:50:47.920" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So, Corwin, you're not using org-element for this, are you?""" start="00:50:55.760" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""No. Yeah, that's a great question.""" start="00:51:02.200" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Let's just dig a little into the code here.""" start="00:51:06.800" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Or maybe it would be more fun to actually""" start="00:51:10.840" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So the only real requires here, I do use cl-lib mostly.""" start="00:51:21.040" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I'm directly using the macros from org.""" start="00:51:26.720" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Particularly, I'm extremely fond of this function.""" start="00:51:33.160" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I'd love to see this just promoted to promoted""" start="00:51:36.880" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""somewhere deeper into Emacs proper,""" start="00:51:41.280" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""so that I don't have to load all of the org macros""" start="00:51:43.560" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""to get to this particularly useful one,""" start="00:51:47.640" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""which just tells me whether ignoring whitespace""" start="00:51:50.240" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""a string has any characters, has greater than zero length.""" start="00:51:54.680" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Isn't that just string blank B?""" start="00:51:59.640" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So this is a little different.""" start="00:52:04.440" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""This deals with... I may struggle to remember the details,""" start="00:52:09.000" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and it's possible that the non-org specific version""" start="00:52:14.800" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""has even been improved or I didn't use it correctly,""" start="00:52:21.000" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""but I believe my experience was it didn't handle new lines, for example, quite the same way.""" start="00:52:23.520" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So getting into what this actually does,""" start="00:52:29.480" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""most of the program is finding the relevant part of the file.""" start="00:52:38.520" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""You'll see that we start out by doing a depth-based search,""" start="00:52:43.880" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""capture the value that we're looking for.""" start="00:52:49.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And then finally, we widen the buffer""" start="00:52:51.960" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and keep handling the case where we might be being called""" start="00:52:58.120" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""from within Emacs in a narrowed buffer.""" start="00:53:01.800" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""This is another what should be documented at the top.""" start="00:53:05.840" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So that is obviously going to load org.""" start="00:53:11.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Just double-check that. Yeah, it is going to load org.""" start="00:53:13.920" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And we can see that because it didn't find the function.""" start="00:53:21.400" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""until I loaded Org and then it did when I did C-h f""" start="00:53:30.040" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""to get definition of a function.""" start="00:53:40.400" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So, widen the buffer and then I just start looking for the search.""" start="00:53:45.000" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""You can see I'm doing simple regular expression based searches here.""" start="00:53:51.720" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Looking for lines, ultimately, that start with a star.""" start="00:53:55.400" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""That was a little simpler format""" start="00:54:01.720" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""that didn't quite work out.""" start="00:54:05.120" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So I'm searching for, here this is a little tricky,""" start="00:54:07.760" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""but I'm searching for a number of stars""" start="00:54:25.720" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""equal to the depth that I want.""" start="00:54:28.840" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""The depth that I want being calculated""" start="00:54:30.840" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""based on the number of dots that were in the query string.""" start="00:54:33.440" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""from there, you know, kind of skipping some stuff, right?""" start="00:54:38.040" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Once we find our starting position,""" start="00:54:47.160" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""then we're going to have to find the end of that,""" start="00:54:49.600" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""the section that we're going to read or replace.""" start="00:54:53.240" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Text a tiny bit smaller. So I checked org-string nwp,""" start="00:54:57.680" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and it's the same as string blank p.""" start="00:55:12.960" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""exactly the same code or the same result?""" start="00:55:20.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""No, it's the same result. Well, it's the same check,""" start="00:55:26.320" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""but string blank p will return a match object,""" start="00:55:30.400" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""like a string match object,""" start="00:55:34.520" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""whereas the org version will return the string itself""" start="00:55:36.000" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""if it finds a match, as in if it's blank.""" start="00:55:39.120" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I don't remember that.""" start="00:55:46.160" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""As a Boolean check, they are the same.""" start="00:55:48.320" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""If you use it as, you know, is it blank or not.""" start="00:55:51.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So, um, yeah, I've talked for way longer.""" start="00:55:54.160" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I thought I literally thought""" start="00:56:02.680" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""this would be a five minute thing.""" start="00:56:04.120" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I'm not sure if there are any questions on it,""" start="00:56:05.320" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""but just to simply answer your question.""" start="00:56:08.400" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""No, it doesn't use org element.""" start="00:56:10.240" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""This is pure regex based work.""" start="00:56:11.720" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So, the advantage of not using... Right.""" start="00:56:23.760" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So, the advantage of not using arg element""" start="00:56:26.920" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""is that you don't have to load arg or arg element, right?""" start="00:56:32.680" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And so, it's going to be faster.""" start="00:56:37.440" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And it's going to be faster both because you don't have to load arg element""" start="00:56:39.040" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and because you don't have to run arg element, like the arg parser.""" start="00:56:45.360" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""But on the other hand,""" start="00:56:51.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""you end up loading all of org anyway.""" start="00:56:52.880" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So at that point, it might just be better""" start="00:56:58.440" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""to use org element because it's more robust.""" start="00:57:02.680" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""For example, if you have a bunch of leading stars""" start="00:57:05.040" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""inside a source block or something,""" start="00:57:07.920" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""you don't want to misclassify that.""" start="00:57:09.960" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Matter of fact, I believe I had to do some flossing with it""" start="00:57:11.600" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""to deal with not just that,""" start="00:57:16.640" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""but drawers and things like that.""" start="00:57:18.880" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""right yeah so at the end of the day""" start="00:57:21.440" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""that was just an extra 10 or 20 characters""" start="00:57:25.880" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""in the regular expression so i just shrugged and wrote them""" start="00:57:28.040" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""you can see there are a number of i""" start="00:57:31.040" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""i happen to like writing regular expressions""" start="00:57:36.800" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and find them relatively readable so""" start="00:57:40.280" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So it didn't bother me doing that.""" start="00:57:42.480" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I've also done a bunch of work with org-element""" start="00:57:46.720" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""with the dungeon project,""" start="00:57:49.240" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""which of course uses that extensively""" start="00:57:51.440" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""to pull data out of tables and so on.""" start="00:57:53.760" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And indeed, I think that may ultimately be my solution.""" start="00:57:57.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I've been kind of distracted on a side quest""" start="00:58:01.320" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""to improve the org-table-fm parser.""" start="00:58:06.200" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""There's a post on my blog about the work that I've done there,""" start="00:58:09.960" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and recently started talking to Ihor,""" start="00:58:14.280" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""the new org maintainer,""" start="00:58:19.360" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""who took over in the last year or so from Bastien.""" start="00:58:20.840" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Just about what it would take to pick that up,""" start="00:58:27.580" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""or at least get it to a point""" start="00:58:32.160" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""where somebody else could work on it.""" start="00:58:34.280" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""It's pretty dense right now.""" start="00:58:35.680" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So this thing is a bit of a monster,""" start="00:58:39.600" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""but at the end of the day,""" start="00:58:59.920" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""our goal is to extend the syntax,""" start="00:59:01.800" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""is to be able to use this Org Table FM syntax""" start="00:59:06.920" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""in other contexts.""" start="00:59:12.520" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So if you haven't looked at board table FM,""" start="00:59:14.440" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""these I bar or these I markers""" start="00:59:18.520" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""are telling us to look for the table separator.""" start="00:59:21.400" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So positioning based on the location of a table separator.""" start="00:59:26.040" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I find that a little bit brittle""" start="00:59:29.760" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""just because it's really easy to go in and decide,""" start="00:59:34.440" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""oh, it'll look better with an additional line separator in there.""" start="00:59:38.680" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And then all of these formulas break everywhere.""" start="00:59:42.920" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So it would be a little more fun""" start="00:59:48.040" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""to have at least variables in there.""" start="00:59:49.920" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And that's kind of part of the scope.""" start="00:59:53.400" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""If we look, and here you get kind of a hint""" start="00:59:56.160" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""of the new syntax I'd like to support,""" start="01:00:04.120" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""things like $star, $underscore.""" start="01:00:06.640" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Keyword it's it's probably a half-hour talk""" start="01:00:12.560" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""just to get into what every single one of these would do""" start="01:00:17.560" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""But this post does does give some some context of that""" start="01:00:20.880" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And more importantly there is a as a complete test program that""" start="01:00:26.320" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Worked the last time I was playing with it""" start="01:00:35.680" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And this gives you complete examples""" start="01:00:39.160" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""of all the syntax that the work in progress does currently support.""" start="01:00:43.960" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""You'll see some of these items are commented out.""" start="01:00:48.480" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Those aren't supported yet""" start="01:00:52.800" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and before I would implement them now,""" start="01:00:54.360" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""especially now that we're talking in terms of trying to take org itself this direction, you know,""" start="01:00:56.120" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""of kind of beefing up the the TableFM format parsing""" start="01:01:04.360" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""so that it could be used in other contexts besides""" start="01:01:13.540" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""specifically within a formula.""" start="01:01:17.000" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I wouldn't want to add features""" start="01:01:19.640" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""to it without discussing those.""" start="01:01:26.840" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So this is just a simple, basically a literate test file""" start="01:01:33.400" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""if you want to call it that.""" start="01:01:37.640" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""The perhaps key improvement here""" start="01:01:40.440" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""is naming all of the different capture groups.""" start="01:01:43.240" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""which just, if you're working""" start="01:01:49.800" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""with really huge regular expressions, which this is,""" start="01:01:52.120" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""let me just make sure the whole pagex is right in here""" start="01:01:55.920" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""so we can see it, yeah.""" start="01:01:58.840" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So here's the actual rewrite, scale it a little bit,""" start="01:02:00.600" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""so you can see it's kind of a monster.""" start="01:02:05.960" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And that's all using Rx.""" start="01:02:14.480" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So hopefully that looks pretty familiar.""" start="01:02:27.640" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Dollars for specifying a column, at sign to specify a row.""" start="01:02:29.520" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And we also have the keys.""" start="01:02:35.040" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Anybody else want to show and tell?""" start="01:02:43.960" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""We're going to cut over to the automated introduction""" start="01:02:58.560" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""for the Saturday closing remarks in like four minutes.""" start="01:03:01.400" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Oh, but quick, quick, quick mention of the Emacs Carnival.""" start="01:03:07.800" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So the Emacs Carnival is a shared blogging theme.""" start="01:03:15.600" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""where lots of people write about a specific theme,""" start="01:03:20.560" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and then if you write about it,""" start="01:03:25.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""you can send your link to whoever's hosting the carnival.""" start="01:03:26.120" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And it's a great way to discover other people's cool stuff.""" start="01:03:28.240" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So if I take presenter, hang on a second, take presenter.""" start="01:03:31.680" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Oh, actually, haha, I know,""" start="01:03:35.680" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I'm going to make Elladom present it.""" start="01:03:39.520" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Haha, you are now in charge. Okay, take it away.""" start="01:03:41.960" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So I've been using Emacs for like 46 years now,""" start="01:03:47.200" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""back to TECO Emacs. And as I just said in the chat,""" start="01:03:49.960" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I've found that the people who use Emacs""" start="01:03:53.360" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""tend to be interesting people in many different ways.""" start="01:03:56.320" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And so this month, I'm just saying, let's give a shout out""" start="01:03:59.440" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""to some of the interesting people we've met along the way.""" start="01:04:03.200" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And including some of the people""" start="01:04:06.400" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""that are putting on this conference""" start="01:04:09.240" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""are some of the most interesting""" start="01:04:10.160" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and helpful people I've ever met.""" start="01:04:11.960" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So thank you. You're very kind. Thank you.""" start="01:04:13.440" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I'll say more than that. Maybe I will.""" start="01:04:27.920" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I completely agree with you and I couldn't agree more.""" start="01:04:30.680" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I think that's how Sacha and Amin and Leo""" start="01:04:34.280" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""really dragged me into this,""" start="01:04:38.840" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""you know, into being a volunteer.""" start="01:04:40.560" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And I really, I'm sure we'll talk""" start="01:04:42.320" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""about this in the closing remarks,""" start="01:04:44.600" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""but I can't recommend volunteering for this project enough.""" start="01:04:46.040" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""It's just so fun to talk backstage""" start="01:04:50.200" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""with the presenters I don't know.""" start="01:04:54.320" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""It's an extremely engaging community.""" start="01:05:00.680" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""It's really thoughtful.""" start="01:05:11.440" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I like the way y'all are so patient and awesome""" start="01:05:12.760" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and I can be just quietly having my little freak out here""" start="01:05:15.040" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and everyone's fine""" start="01:05:19.440" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and will even help debug things live as needed.""" start="01:05:20.680" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So this is all good.""" start="01:05:23.880" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Anyway, so if people want to participate,""" start="01:05:45.500" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""you basically write a blog post.""" start="01:05:48.120" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""If you don't have a blog yet,""" start="01:05:49.920" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""there are any number of packages in Emacs,""" start="01:05:53.160" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""as well as web-based services,""" start="01:05:56.960" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""but really, you can get something going with Emacs.""" start="01:05:58.480" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""or exporting to HTML and maybe even figure out RSS,""" start="01:06:02.040" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""or you can use a static site generator like Hugo,""" start="01:06:05.840" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""or you can find, if you can set up WordPress,""" start="01:06:08.280" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""that's another way to do it.""" start="01:06:11.000" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Or you can email me your thing and I'll post it on my blog""" start="01:06:12.120" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and let me know how you want to be credited for it.""" start="01:06:15.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Anyway, so you can share your story""" start="01:06:20.240" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""or share your story about somebody else's story""" start="01:06:23.560" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and celebrate Emacs community.""" start="01:06:26.880" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And we can send it to George also.""" start="01:06:35.320" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""We'll then make links in that blog post.""" start="01:06:39.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And on the subject of community,""" start="01:06:48.400" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I also heartily recommend the IRC community on Emacs.""" start="01:06:50.200" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Pound Emacs is another one of those things""" start="01:06:53.440" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""that I just personally can't get enough of,""" start="01:06:55.920" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and I hear a lot of stories about just how it's helped people.""" start="01:06:58.280" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""All right, we are now having the automated introduction""" start="01:07:05.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and then it's going to rejoin over here very soon.""" start="01:07:09.120" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Hang on a second. Wow, that's going.""" start="01:07:12.760" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Saturday close and let's arrange our screen nicely.""" start="01:07:22.440" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""All right, we made it to the end of the first day! Woohoo!""" start="01:07:34.400" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Thank you for joining us""" start="01:07:38.280" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""for the first day of EmacsConf 2025.""" start="01:07:40.400" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Feel free to spread the word""" start="01:07:42.960" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""because there is still another day of fun talks tomorrow.""" start="01:07:44.920" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So hashtag EmacsConf and hashtag Emacs.""" start="01:07:48.480" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""If you do hashtag Emacs on Macedon""" start="01:07:51.400" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""or Blue Sky or other places, we'll probably find it.""" start="01:07:54.240" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Or if I don't, you can just let me know also.""" start="01:07:58.240" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""The prerecorded talks should be up""" start="01:08:01.760" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""on the talk pages already.""" start="01:08:04.040" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""The live talks, we'll probably actually get them up""" start="01:08:05.640" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""within the next week or two.""" start="01:08:09.120" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I think they've already started processing,""" start="01:08:11.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""so I just had to sit down and then work with""" start="01:08:13.360" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""our wonderful army of volunteer captioners""" start="01:08:15.480" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""to get them all nicely captioned.""" start="01:08:18.400" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""But anyway, so the prerecorded talks""" start="01:08:20.120" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""are also up on YouTube,""" start="01:08:22.440" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and I will eventually also upload them""" start="01:08:23.760" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""to TubeNix, which is a PeerTube instance.""" start="01:08:25.720" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""We will work on extracting live talks.""" start="01:08:29.240" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""If you'd like updates,""" start="01:08:31.240" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""please subscribe to the EmacsConf Discuss mailing list.""" start="01:08:32.120" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""If you've got ideas for making things better,""" start="01:08:35.320" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""we have so many ideas. I always end up with a very long""" start="01:08:37.280" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""to-do list after these things. Please add them to the pad.""" start="01:08:39.480" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I'd love to hear from you on how we can make it even smoother next year.""" start="01:08:43.360" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""There are about 100 people watching in gen""" start="01:08:46.920" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and 100 people watching in devs, which is really awesome.""" start="01:08:49.360" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""It's amazing to think that we can have""" start="01:08:52.160" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""an Emacs party for a lot of people.""" start="01:08:54.120" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And we can only do this because of all the wonderful speakers,""" start="01:08:56.960" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""volunteers, participants,""" start="01:09:00.400" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and very patient people in our lives""" start="01:09:02.280" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""who make it possible through all the time and support.""" start="01:09:04.360" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So this year, Corwin did most of the hosting.""" start="01:09:07.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I mean, also dropped by earlier, so that's great.""" start="01:09:10.040" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I hope Leo is okay. You know, we managed.""" start="01:09:13.440" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And I'm Sasha, by the way. I was running around backstage""" start="01:09:17.920" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and occasionally dropping in to go on the stream.""" start="01:09:22.440" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""There are lots of other volunteers who are not on air.""" start="01:09:26.560" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So, for example, during the proposal review process,""" start="01:09:29.360" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""we got a lot of wonderful comments""" start="01:09:32.720" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""from J.C. Hellery, Chico, and James Andrews-Howell.""" start="01:09:34.320" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""captions from Amitav and Rodion and other people""" start="01:09:37.760" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""have actually started also helping""" start="01:09:41.040" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""with the captions as well.""" start="01:09:42.880" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So jay_bird just sent in some stuff today too.""" start="01:09:45.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""We are slowly working on getting a mirror in the EU set up""" start="01:09:49.400" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""so it'll be a little faster for people.""" start="01:09:52.960" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So thanks to Yang3 for lending us a server.""" start="01:09:55.640" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Babin and Michael and Ian and Jamie""" start="01:09:58.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and Eeyore and Floyd Coulter have also helped out as well.""" start="01:10:00.880" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Thanks to the Free Software Foundation""" start="01:10:06.120" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""for the mailing list, the media server, and of course, GNU Emacs itself,""" start="01:10:08.960" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""for which an astonishing amount""" start="01:10:12.680" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""of the scripting is done in Emacs. It's great.""" start="01:10:15.440" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Thanks to Ry P for the server that we're using for OBS""" start="01:10:19.320" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""so that we can just VNC into it and I can manage two tracks""" start="01:10:23.280" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""without making my computer melt. It's great.""" start="01:10:27.640" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And of course, to all the users""" start="01:10:30.800" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and contributors and project teams""" start="01:10:32.880" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""that work on all the free software""" start="01:10:34.000" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""that this stuff is built on.""" start="01:10:36.120" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Emacs, Org Mode, ERC, Tramp, Magit, BigBlueButton,""" start="01:10:37.280" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Etherpad, IkiWiki, IceCast, OBS, The Lounge,""" start="01:10:43.640" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""LiberaChat, FFmpeg, OpenAI Whisper, WhisperX,""" start="01:10:48.240" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""the Aeneas forced alignment tool,""" start="01:10:52.960" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""PsyTransfer, SubEd, SubSeg, Mozilla Firefox, MPV, and Tampermonkey,""" start="01:10:55.040" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and other things I probably forgot to mention.""" start="01:11:00.280" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Thanks to Shoshin for the music,""" start="01:11:02.200" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and thanks to people also who've donated""" start="01:11:04.600" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""through the Working Together program,""" start="01:11:06.800" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""like Scott and Jonathan and other anonymous donors.""" start="01:11:08.680" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So that's a quick thanks. There's more tomorrow,""" start="01:11:12.560" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""but Corwin, do you have any parting words?""" start="01:11:15.920" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""You know, my parting words, Sacha are a thanks to you""" start="01:11:18.360" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and not just a thanks""" start="01:11:23.560" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""for the hundreds of hours that you put""" start="01:11:25.760" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""into preparing this conference,""" start="01:11:27.280" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""you know, over the years and probably just this year,""" start="01:11:29.400" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""but also for all that you do for the community you are.""" start="01:11:32.160" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""You are a real unsung hero,""" start="01:11:36.000" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""even though I do hear your praises sung.""" start="01:11:38.760" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""They really can't be sung enough.""" start="01:11:42.320" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""In fact, I just this last week""" start="01:11:43.760" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""recommended to two different people your blog""" start="01:11:45.880" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""as a place to get a first introduction to Emacs.""" start="01:11:48.040" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Your Emacs news is an incredible contribution,""" start="01:11:51.600" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and just I want you to hear us thanking you.""" start="01:11:54.800" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Thank you, Sacha. Emacs is a lot of fun,""" start="01:11:57.960" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and Emacs people are a lot of fun,""" start="01:12:04.880" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""so it's all very wonderful. Yeah, we can wrap up here.""" start="01:12:07.520" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""People can keep hanging out if they want.""" start="01:12:10.880" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I have a kiddo who is probably going to be back home soon""" start="01:12:15.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and will pounce on me for more hugs,""" start="01:12:21.120" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""so I will see y'all tomorrow.""" start="01:12:23.560" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""uh, for more probably the same kind of stuff.""" start="01:12:25.600" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Shut it down, save our energy for tomorrow.""" start="01:12:29.920" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Uh, we do like to run into like hours long closing tomorrow.""" start="01:12:32.680" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So we'll work on resisting that.""" start="01:12:36.320" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Um, I suggest we, we look, we go get some rest""" start="01:12:38.320" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and come, come back at it fresh tomorrow.""" start="01:12:41.560" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Anybody else, any concerns with that or shall we go for it?""" start="01:12:43.840" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Sounds good to me.""" start="01:12:47.800" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""If you've got ideas, pop them into the etherpad.""" start="01:12:50.480" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And thank you so much for sharing this time with us.""" start="01:12:53.600" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""See you tomorrow.""" start="01:12:56.640" video="mainVideo-open-mic" id="subtitle"]] + +
Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202023%20open-mic%3A%20Open%20session) -- cgit v1.2.3