diff options
29 files changed, 2403 insertions, 15 deletions
diff --git a/2026/info/emacspeak-after.md b/2026/info/emacspeak-after.md new file mode 100644 index 00000000..0ebb2bb4 --- /dev/null +++ b/2026/info/emacspeak-after.md @@ -0,0 +1,10 @@ +<!-- Automatically generated by emacsconf-publish-after-page --> + + +Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202023%20emacspeak%3A%20Multi-dimensional%20information%20processing%20with%20Emacs%20and%20Emacspeak%3A%20a%20blind%20man%27s%20perspective) + +---- +Got an idea for an EmacsConf talk or session? We'd love to hear from you! Check out the [[Call for Participation|/2026/cfp]] for details. + + +<!-- End of emacsconf-publish-after-page --> diff --git a/2026/info/emacspeak-before.md b/2026/info/emacspeak-before.md new file mode 100644 index 00000000..39b17dd1 --- /dev/null +++ b/2026/info/emacspeak-before.md @@ -0,0 +1,13 @@ +<!-- Automatically generated by emacsconf-publish-before-page --> +[[!toc ]] +Format: 30-min talk ; Q&A: IRC Etherpad: <https://pad.emacsconf.org/2026-emacspeak> +Etherpad: <https://pad.emacsconf.org/2026-emacspeak> +Status: Waiting for video from speaker + + + + + +<div class="vid mainVideo"><div></div><div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2026-emacspeak">Open Etherpad</a></li></ul></div></div> +# Description +<!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2026/info/emacspeak-nav.md b/2026/info/emacspeak-nav.md new file mode 100644 index 00000000..f3cc37ad --- /dev/null +++ b/2026/info/emacspeak-nav.md @@ -0,0 +1,7 @@ + +<div class="talk-nav"> +Back to the [[talks]] +Previous by track: <a href="/2026/talks/sun-open">Sunday opening remarks</a> +Next by track: <a href="/2026/talks/sat-close">Saturday closing remarks / open session</a> +Track: <span class="sched-track General">General</span> +</div> diff --git a/2026/info/open-mic-after.md b/2026/info/open-mic-after.md new file mode 100644 index 00000000..f63e2948 --- /dev/null +++ b/2026/info/open-mic-after.md @@ -0,0 +1,1032 @@ +<!-- Automatically generated by emacsconf-publish-after-page --> + + +<div class="transcript transcript-mainVideo"><a name="open-mic-mainVideo-transcript"></a><h1>Transcript (unedited)</h1> + +[[!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 Mastodon""" 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 ToobNix, 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. Helary, Triko, and James Endres 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="""PsiTransfer, 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"]] + +</div>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) + +---- +Got an idea for an EmacsConf talk or session? We'd love to hear from you! Check out the [[Call for Participation|/2026/cfp]] for details. + + +<!-- End of emacsconf-publish-after-page --> diff --git a/2026/info/open-mic-before.md b/2026/info/open-mic-before.md new file mode 100644 index 00000000..79f37e18 --- /dev/null +++ b/2026/info/open-mic-before.md @@ -0,0 +1,13 @@ +<!-- Automatically generated by emacsconf-publish-before-page --> +[[!toc ]] +Format: 74-min talk ; Q&A: BigBlueButton conference room Etherpad: <https://pad.emacsconf.org/2026-open-mic> +Etherpad: <https://pad.emacsconf.org/2026-open-mic> +Status: All done + + + + + +<div class="vid mainVideo"><video controls preload="none" id="mainVideo-open-mic"><source src="https://media.emacsconf.org/2026/emacsconf-2025-open-mic--open-session--participants--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2026/captions/emacsconf-2025-open-mic--open-session--participants--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 1:13:00 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2026-open-mic">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2026/emacsconf-2025-open-mic--open-session--participants--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2026/emacsconf-2025-open-mic--open-session--participants--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2026/emacsconf-2025-open-mic--open-session--participants--main.opus">Download --main.opus (23MB)</a></li><li><a href="https://media.emacsconf.org/2026/emacsconf-2025-open-mic--open-session--participants--main.png">Download --main.png</a></li><li><a href="https://media.emacsconf.org/2026/emacsconf-2025-open-mic--open-session--participants--main.vtt">Download --main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2026/emacsconf-2025-open-mic--open-session--participants--original.json">Download --original.json (1.3MB)</a></li><li><a href="https://media.emacsconf.org/2026/emacsconf-2025-open-mic--open-session--participants--original.tsv">Download --original.tsv</a></li><li><a href="https://media.emacsconf.org/2026/emacsconf-2025-open-mic--open-session--participants--original.txt">Download --original.txt</a></li><li><a href="https://media.emacsconf.org/2026/emacsconf-2025-open-mic--open-session--participants--original.vtt">Download --original.vtt</a></li><li><a href="https://toobnix.org/videos/watch/cffff616-e726-4bfc-aca4-4d3371ee96fd">View on Toobnix</a></li><li><a href="https://youtu.be/lnieSGyFRek">View on Youtube</a></li></ul></div></div> +# Description +<!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2026/info/open-mic-nav.md b/2026/info/open-mic-nav.md new file mode 100644 index 00000000..e7a12f9f --- /dev/null +++ b/2026/info/open-mic-nav.md @@ -0,0 +1,7 @@ + +<div class="talk-nav"> +Back to the [[talks]] +Previous by track: <a href="/2026/talks/sat-open">Saturday opening remarks</a> +Next by track: <a href="/2026/talks/sun-open">Sunday opening remarks</a> +Track: <span class="sched-track General">General</span> +</div> diff --git a/2026/info/sat-close-after.md b/2026/info/sat-close-after.md new file mode 100644 index 00000000..421a1bae --- /dev/null +++ b/2026/info/sat-close-after.md @@ -0,0 +1,10 @@ +<!-- Automatically generated by emacsconf-publish-after-page --> + + +Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202023%20sat-close%3A%20Saturday%20closing%20remarks%20%2F%20open%20session) + +---- +Got an idea for an EmacsConf talk or session? We'd love to hear from you! Check out the [[Call for Participation|/2026/cfp]] for details. + + +<!-- End of emacsconf-publish-after-page --> diff --git a/2026/info/sat-close-before.md b/2026/info/sat-close-before.md new file mode 100644 index 00000000..69d1c7fe --- /dev/null +++ b/2026/info/sat-close-before.md @@ -0,0 +1,13 @@ +<!-- Automatically generated by emacsconf-publish-before-page --> +[[!toc ]] +Format: 10-min talk ; Q&A: BigBlueButton conference room Etherpad: <https://pad.emacsconf.org/2026-sat-close> +Etherpad: <https://pad.emacsconf.org/2026-sat-close> +Status: Ready to stream + + + + + + +# Description +<!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2026/info/sat-close-nav.md b/2026/info/sat-close-nav.md new file mode 100644 index 00000000..57c37eff --- /dev/null +++ b/2026/info/sat-close-nav.md @@ -0,0 +1,7 @@ + +<div class="talk-nav"> +Back to the [[talks]] +Previous by track: <a href="/2026/talks/emacspeak">Multi-dimensional information processing with Emacs and Emacspeak: a blind man's perspective</a> +Next by track: <a href="/2026/talks/sun-close">Sunday closing remarks</a> +Track: <span class="sched-track General">General</span> +</div> diff --git a/2026/info/sat-open-after.md b/2026/info/sat-open-after.md new file mode 100644 index 00000000..45d9363f --- /dev/null +++ b/2026/info/sat-open-after.md @@ -0,0 +1,10 @@ +<!-- Automatically generated by emacsconf-publish-after-page --> + + +Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202023%20sat-open%3A%20Saturday%20opening%20remarks) + +---- +Got an idea for an EmacsConf talk or session? We'd love to hear from you! Check out the [[Call for Participation|/2026/cfp]] for details. + + +<!-- End of emacsconf-publish-after-page --> diff --git a/2026/info/sat-open-before.md b/2026/info/sat-open-before.md new file mode 100644 index 00000000..5efa8e55 --- /dev/null +++ b/2026/info/sat-open-before.md @@ -0,0 +1,13 @@ +<!-- Automatically generated by emacsconf-publish-before-page --> +[[!toc ]] +Format: 10-min talk ; Q&A: Etherpad +Etherpad: <https://pad.emacsconf.org/2026-sat-open> +Status: Waiting for video from speaker + + + + + + +# Description +<!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2026/info/sat-open-nav.md b/2026/info/sat-open-nav.md new file mode 100644 index 00000000..2eeefbd9 --- /dev/null +++ b/2026/info/sat-open-nav.md @@ -0,0 +1,6 @@ + +<div class="talk-nav"> +Back to the [[talks]] +Next by track: <a href="/2026/talks/open-mic">Open session</a> +Track: <span class="sched-track General">General</span> +</div> diff --git a/2026/info/sun-close-after.md b/2026/info/sun-close-after.md new file mode 100644 index 00000000..1d562979 --- /dev/null +++ b/2026/info/sun-close-after.md @@ -0,0 +1,10 @@ +<!-- Automatically generated by emacsconf-publish-after-page --> + + +Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202023%20sun-close%3A%20Sunday%20closing%20remarks) + +---- +Got an idea for an EmacsConf talk or session? We'd love to hear from you! Check out the [[Call for Participation|/2026/cfp]] for details. + + +<!-- End of emacsconf-publish-after-page --> diff --git a/2026/info/sun-close-before.md b/2026/info/sun-close-before.md new file mode 100644 index 00000000..44944f3a --- /dev/null +++ b/2026/info/sun-close-before.md @@ -0,0 +1,13 @@ +<!-- Automatically generated by emacsconf-publish-before-page --> +[[!toc ]] +Format: 10-min talk ; Q&A: BigBlueButton conference room Etherpad: <https://pad.emacsconf.org/2026-sun-close> +Etherpad: <https://pad.emacsconf.org/2026-sun-close> +Status: Ready to stream + + + + + + +# Description +<!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2026/info/sun-close-nav.md b/2026/info/sun-close-nav.md new file mode 100644 index 00000000..423413cf --- /dev/null +++ b/2026/info/sun-close-nav.md @@ -0,0 +1,6 @@ + +<div class="talk-nav"> +Back to the [[talks]] +Previous by track: <a href="/2026/talks/sat-close">Saturday closing remarks / open session</a> +Track: <span class="sched-track General">General</span> +</div> diff --git a/2026/info/sun-open-after.md b/2026/info/sun-open-after.md new file mode 100644 index 00000000..02a6db8b --- /dev/null +++ b/2026/info/sun-open-after.md @@ -0,0 +1,10 @@ +<!-- Automatically generated by emacsconf-publish-after-page --> + + +Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202023%20sun-open%3A%20Sunday%20opening%20remarks) + +---- +Got an idea for an EmacsConf talk or session? We'd love to hear from you! Check out the [[Call for Participation|/2026/cfp]] for details. + + +<!-- End of emacsconf-publish-after-page --> diff --git a/2026/info/sun-open-before.md b/2026/info/sun-open-before.md new file mode 100644 index 00000000..eae28632 --- /dev/null +++ b/2026/info/sun-open-before.md @@ -0,0 +1,13 @@ +<!-- Automatically generated by emacsconf-publish-before-page --> +[[!toc ]] +Format: 10-min talk ; Q&A: Etherpad +Etherpad: <https://pad.emacsconf.org/2026-sun-open> +Status: Waiting for video from speaker + + + + + + +# Description +<!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2026/info/sun-open-nav.md b/2026/info/sun-open-nav.md new file mode 100644 index 00000000..9cca63b6 --- /dev/null +++ b/2026/info/sun-open-nav.md @@ -0,0 +1,7 @@ + +<div class="talk-nav"> +Back to the [[talks]] +Previous by track: <a href="/2026/talks/open-mic">Open session</a> +Next by track: <a href="/2026/talks/emacspeak">Multi-dimensional information processing with Emacs and Emacspeak: a blind man's perspective</a> +Track: <span class="sched-track General">General</span> +</div> diff --git a/2026/organizers-notebook/index.org b/2026/organizers-notebook/index.org new file mode 100644 index 00000000..ce8846aa --- /dev/null +++ b/2026/organizers-notebook/index.org @@ -0,0 +1,997 @@ +# [[elisp:(progn (memoize 'emacsconf-get-talk-info "5 seconds") (condition-case nil (org-md-export-to-markdown) (error nil)) (memoize-restore 'emacsconf-get-talk-info))][Export this file to Markdown]] +#+TAGS: emacsconf +# [[elisp:(memoize 'emacsconf-get-talk-info "5 seconds")][Memoize emacsconf-get-talk-info]] - [[elisp:(memoize-restore 'emacsconf-get-talk-info)][Unmemoize]] +#+todo: TODO(t) SOMEDAY STARTED INPROGRESS(i) WAITING(w) STANDBY(s) BLOCKED(b) | DONE(x) CANCELLED(c) +#+OPTIONS: h:6 toc:nil num:nil ':t +#+PROPERTY: header-args :results silent :exports code :tangle yes +#+EXPORT_FILE_NAME: ../organizers-notebook.md +#+PROPERTY: QUANTIFIED Emacs + +#+begin_export md +<!-- organizers-notebook.md is exported from organizers-notebook/index.org, please modify that instead. --> +[[!sidebar content=""]] + +This file is automatically exported from [/2026/organizers-notebook/index.org](/2026/organizers-notebook/index.org). You might prefer to navigate this as an Org file instead. To do so, [clone the wiki repository](https://emacsconf.org/edit/). + +You might also like the [general organizers' notebook](/organizers-notebook) and [the organizers' notebook from 2025](/2025/organizers-notebook). +#+end_export + + + +#+NAME: list-headings +#+begin_src emacs-lisp :results value replace :exports results :eval never-export :var heading="Help wanted" :var match="helpwanted" +(emacsconf-surround + (concat heading ":\n\n") + (string-join + (delq nil + (org-map-entries + (lambda () + (when (and (org-entry-is-todo-p) (not (org-entry-is-done-p))) + (format "- %s %s\n" + (org-link-make-string + (concat "#" (org-entry-get (point) "CUSTOM_ID")) + (org-entry-get (point) "ITEM")) + (emacsconf-surround + "(by " + (and (org-entry-get (point) "DEADLINE") + (replace-regexp-in-string "[<>]" "" (org-entry-get (point) "DEADLINE"))) + ")" + "")))) + match nil)) + "") +"" "") +#+end_src + +#+RESULTS: list-headings +:results: +:end: + +#+CALL: list-headings(heading="Decisions to make", match="decision") + +#+RESULTS: +:results: +:end: + + +#+TOC: headlines 2 +* COMMENT Shortcuts +:PROPERTIES: +:CUSTOM_ID: shortcuts +:END: + +[[file:~/proj/emacsconf/wiki/organizers-notebook/index.org][Common notebook]] + +* TODO Timeline +:PROPERTIES: +:CUSTOM_ID: timeline +:END: + +| | | Days since previous milestone | +| CFP | [2026-06-27 Sat] | | +| CFP deadline | [2026-09-18 Fri] | 83 | +| Speaker notifications | [2026-09-25 Fri] | | +| Publish schedule | [2026-10-23 Fri] | | +| Video submission deadline | [2026-10-30 Fri] | 42 | +| EmacsConf day 1 | [2026-12-12 Sat] | 43 | +| EmacsConf | [2026-12-13 Sun] | 36 | +#+TBLFM: @3$3=@3$2-@2$2::@6$3=@6$2-@3$2::@7$3=@7$2-@6$2 + +We like to have at least a month to work on audio +normalization and transcription, and we want +speakers to have at least a month to work on their +videos (considering early submissions will already +have gotten started on processing). + +* About this document +:PROPERTIES: +:CUSTOM_ID: about-this-doc +:END: + +Tags: +- =conforg=: Requires access to private conf.org repository + +* Communications plan +:PROPERTIES: +:CUSTOM_ID: comms +:END: + +Objectives: +- keep everyone in the loop without them feeling like they're overloaded + +Everyone: +- [X] Call for participation (speakers and volunteers) +- [ ] Reminder about CFP +- [ ] Last call + +Speakers: +- [ ] Send all speakers backstage access and upload instructions +- [ ] Send all speakers check-in instructions + +Volunteers: +- [ ] Send captioning volunteers the backstage info +- [ ] Send past captioning volunteers an invitation to participate - ask when there's a lot of load +- [ ] Ask for help with audio processing + +* Good/better/best +:PROPERTIES: +:CUSTOM_ID: good-better-best +:END: + +This table makes it easier to move the slider depending on who wants +to volunteer and how much we can get done. At some point, we'll figure +out how to track our current status so we know what we need to +scramble to do in order to get the conference off the ground. *bold* +is our current goal. Feel free to volunteer for anything that +interests you! + + | | Good | Better | Best | + | Streaming | Regular stream | + alternate streams on PeerTube | + alternate streams on YouTube | + | 480p | Same on live | Separate node | Ansible setup | + | Audio normalization | Core org handling it | Other volunteer | Multiple volunteers | + | Video resolution | Usual reminders | Extra reminders | Everyone remembering to use a large font size | + | Intros | Standard, recorded | Reviewed by speakers | More details/context | + | Pad | v1.9.7 | v2.x | | + +* Phases +:PROPERTIES: +:CUSTOM_ID: phases +:END: +** DONE Set up organizers notebook +CLOSED: [2026-07-02 Thu 11:35] +:LOGBOOK: +- State "DONE" from "TODO" [2025-06-17 Tue 10:41] +:END: + +** DONE Draft CFP +CLOSED: [2026-07-02 Thu 11:35] +:PROPERTIES: +:CUSTOM_ID: cfp +:END: + +**** Draft linked pages +:PROPERTIES: +:CUSTOM_ID: phases-draft-cfp-draft-linked-pages +:END: + +- [X] cfp +- [X] submit page +- [X] year index + +**** DONE Check with other organizers +CLOSED: [2026-07-02 Thu 11:35] +:PROPERTIES: +:CUSTOM_ID: phases-draft-cfp-check-with-other-organizers +:END: +**** DONE Update dates in emacsconf.el +CLOSED: [2026-07-02 Thu 11:35] + +[[file:~/proj/emacsconf/lisp/emacsconf.el]] +[[file:~/proj/emacsconf/lisp/emacsconf-erc.el]] +**** DONE Update conf topic +CLOSED: [2026-07-02 Thu 11:35] +[[file:~/proj/emacsconf/wiki/organizers-notebook/index.org::#phases-and-lessons-learned-draft-cfp-update-the-irc-topic][Update the IRC topic]] +**** DONE Remove draft marker +CLOSED: [2026-07-02 Thu 11:35] + +- [ ] cfp +- [ ] submit + +**** DONE Post CFP in the usual places +CLOSED: [2026-07-02 Thu 11:35] +:PROPERTIES: +:CUSTOM_ID: phases-draft-cfp-post-cfp-in-the-usual-places +:END: +- [ ] emacsconf-discuss +- [ ] reddit.com/r/emacs +- [ ] Emacs News +- [ ] emacs-tangents or info-gnu-emacs +- [ ] Mastodon +- [ ] Bluesky +- [ ] X + +** TODO Draft schedule +:PROPERTIES: +:CUSTOM_ID: draft-schedule +:END: + +#+NAME: schedule +#+begin_src emacs-lisp :results value replace :exports none :eval never-export :var filename="schedule.svg" +(require 'emacsconf) +(require 'emacsconf-schedule) +(setq emacsconf-schedule-tracks + '((:label "Saturday" + :start "2026-12-12 9:00" + :end "2026-12-12 18:00" + :tracks ("General" "Development")) + (:label "Sunday" + :start "2026-12-13 9:00" + :end "2026-12-13 18:00" + :tracks ("General" "Development")))) +(let ((emacsconf-schedule-default-buffer-minutes 10) + (emacsconf-schedule-default-buffer-minutes-for-live-q-and-a 20) + (emacsconf-schedule-break-time 10) + (emacsconf-schedule-lunch-time 60) + (emacsconf-use-absolute-url t) + (emacsconf-schedule-strategies '(emacsconf-schedule-allocate-buffer-time + emacsconf-schedule-copy-previous-track)) + (emacsconf-schedule-validation-functions + '(emacsconf-schedule-validate-time-constraints + ;; emacsconf-schedule-validate-live-q-and-a-sessions-are-staggered + emacsconf-schedule-validate-no-cancelled-talks + emacsconf-schedule-validate-all-talks-present + emacsconf-schedule-validate-no-duplicates + emacsconf-schedule-validate-videos-fit-in-time + ))) + (setq emacsconf-schedule-plan + '(("GEN Saturday, Dec 6" :start "2026-12-12 09:00" :set-track "General") + sat-open + emacspeak + open-mic + (lunch :start "12:00") + sat-close + ("DEV Saturday, Dec 6" :start "2026-12-12 9:30" :set-track "Development") + (lunch :start "12:00") + ("GEN Sunday, Dec 7" :start "2026-12-13 09:00" :set-track "General") + sun-open + (lunch :start "12:00" :start "16:30") + (sun-close) + )) + (setq emacsconf-schedule-draft (emacsconf-schedule-prepare (emacsconf-schedule-inflate-sexp emacsconf-schedule-plan))) + (prog1 (string-join (emacsconf-schedule-validate emacsconf-schedule-draft) "\n") + (let ((emacsconf-schedule-svg-modify-functions + '(emacsconf-schedule-svg-color-by-availability + ;emacsconf-schedule-svg-color-by-status + ))) + (with-temp-file (expand-file-name filename (file-name-directory emacsconf-org-file)) + (svg-print (emacsconf-schedule-svg 500 700 emacsconf-schedule-draft 'vertical))) + (with-temp-file (expand-file-name filename (expand-file-name "organizers-notebook" (expand-file-name emacsconf-year emacsconf-directory))) + (svg-print (emacsconf-schedule-svg 500 700 emacsconf-schedule-draft 'vertical)))) + ;; (with-temp-file (expand-file-name filename (file-name-directory emacsconf-org-file)) + ;; (svg-print (emacsconf-schedule-svg 800 300 emacsconf-schedule-draft))) + ;; (with-temp-file (expand-file-name filename (expand-file-name "organizers-notebook" (expand-file-name emacsconf-year emacsconf-directory))) + ;; (svg-print (emacsconf-schedule-svg 800 300 emacsconf-schedule-draft)))) + (clear-image-cache))) +#+end_src + +#+RESULTS: schedule +:results: +saturday closing remarks: Starts at 13:00 before 16:30 +sunday closing remarks: Starts at 13:00 before 16:30 +open-mic: video: 74, allocated 50 +:end: + +#+ATTR_ORG: :width 500 +[[file:schedule.svg]] + +Legend: +- light blue: constraint is <= a time +- peach: constraint is >= a time +- solid line: Q&A will be through BigBlueButton web conference +- dashed line: Q&A will be IRC/Etherpad during the event or e-mail after the event + +Notes: + + +** Review rescheduled talks + +#+begin_src emacs-lisp :results table replace +(mapcar (lambda (o) + (list (plist-get o :slug) + (plist-get o :scheduled) + (plist-get o :emailed-schedule) + (emacsconf-schedule-difference-from-emailed o))) + (emacsconf-mail-rescheduled-talks)) +#+end_src + +For big changes, use emacsconf-mail-schedule-updates + + +** While speakers are working on their videos +*** TODO Send draft schedule :email: +SCHEDULED: <2026-09-25 Fri> +:PROPERTIES: +:CREATED: [2025-09-30 Tue 09:38] +:Effort: 0:30 +:END: +:LOGBOOK: +CLOCK: [2025-10-03 Fri 10:26]--[2025-10-03 Fri 11:07] => 0:41 +:END: + +*** TODO Send backstage and upload instructions :email: +:PROPERTIES: +:CREATED: [2025-09-30 Tue 09:39] +:END: +*** TODO Record pronunciations +*** TODO Post the schedule publicly +** While volunteers are working on captions +*** TODO E-mail speakers asking them to confirm the pronunciations :email: +SCHEDULED: <2026-12-01 Tue> +:PROPERTIES: +:CREATED: [2025-09-30 Tue 09:39] +:END: +*** Record intros and opening remarks +:PROPERTIES: +:CUSTOM_ID: intros +:END: + +**** TODO Record sat-open remarks :emacsconf:record: +:PROPERTIES: +:Effort: 0:30 +:CUSTOM_ID: phases-record-intros-and-opening-remarks-record-sat-open-remarks +:END: + +Welcome to EmacsConf 2025, where we have fun +exploring how much we can do with a text editor. +It's hard to give a general overview +of all the cool talks today and tomorrow, +so you can flip through the talks +and see what sparks your interests. +Don't feel limited to one track or another. +The best parts of EmacsConf are the conversations. +The wiki has a page on how to watch and participate, +and I'll give you a quick overview as well. +You can watch both streams at live.emacsconf.org +using free and open source software. +Using a streaming media player like mpv +seems to be the best way to watch in terms of performance +but there are also web-based players +just in case that's all you've got. +The schedule shows the General track on top +and the Development track on the bottom, +so you can see what else is going on. +As you're watching the talks, +you can refer to the schedule in another window. +Hover over the boxes to see the times and titles, +and click on the boxes in the schedule +to jump to the talk's page for more details. +You can also get the schedule as an iCalendar file +or as an Org file in different time zones. +Many talks will be followed by +live Q&A web conferences with the speaker, +which will be done in BigBlueButton or BBB. +These are indicated with a solid border on the schedule +and by Q&A: BBB on the schedule page. +You can join the web conference room +by clicking on the BBB link +on the schedule page or the talk's webpage. +Then you can ask your questions yourself when the Q&A starts. +To improve performance, please keep your webcam off +and stay muted until it's your turn to talk. +If you don't like Javascript, +you can still ask questions via IRC +and the hosts can read them out for you. +We're probably going to automatically switch +between talks and Q&A sessions, +so the transitions on the stream might be a little sudden. + +People in the BigBlueButton room +can continue the conversation +even after the talk moves off-stream. +and you can also reach out to the speakers +using the contact information on the talk page. + +Other talks will have Q&A via Etherpad or IRC, +depending on what the speakers prefer. +This is indicated in the schedule with a dashed border +and on the schedule page as well. +Some talks will have the Q&A after the event, +so you can add your questions to their Etherpad +or ask on IRC. +We'll e-mail the speakers afterwards +and update the talk pages when they answer. +The schedule pages and track pages have quick shortcuts +so that you can find out more about talks, open the Etherpads, +and join the Q&A sessions. The watch page has more tips +on how to make the most of Q&A. +If you can, please add notes and ask questions +in the Etherpad for the talk. That makes it easier +for everyone to share their notes, +and speakers and hosts can read the questions from there. +We'll copy the notes to the talk pages afterwards. +We have one pad for each talk, +so you can follow the links to get to the next one +or go back to the schedule and get the link from there. +If you have general feedback about +the conference itself, please put it in +pad.emacsconf.org/2025 , which is linked on each pad. +You can also use this as a general community message board +for things like Help Wanted. +Internet Relay Chat or IRC can be another great way +to be part of lots of conversations. +You can use chat.emacsconf.org to join the IRC channels +through your web browser. The tabs on the left can help you +switch between the different channels. +There's #emacsconf-gen for the General track +and #emacsconf-dev for the Development track. +If you need to reach us, you can join #emacsconf-org +or e-mail emacsconf-org-private@gnu.org. +You can use #emacsconf for hallway conversations. +Of course, you can join any of these channels +with your favourite IRC client. +You can connect to irc.libera.chat +port 6697 with TLS. +Once again, we're going to be streaming with open captions +for most of the talks this year, thanks to our speakers and +captioning volunteers. The captioned talks are indicated +on the schedule, and with any luck, we'll be posting +transcripts on talk pages shortly after the talks start. +If you need additional accommodations, +please let us know in #emacsconf-org +and we'll see if we can make things happen. +If something goes down, we'll update status.emacsconf.org. +If it doesn't look like we've noticed yet, +please let us know in the #emacsconf-org IRC channel, +where we will be quietly panicking. +In all of these conversations, please keep in mind +our guidelines for conduct. You can find them on the wiki, +They basically boil down to: please be nice. +If all goes well, the prerecorded talks and transcripts +should be available from the talk pages +shortly after they start playing, +and we'll post the recordings of live talks +and Q&A sessions within the next month or so. +If you'd like to get an update, you can subscribe to +the emacsconf-discuss mailing list. +All right, let's get going. +Leo is hosting the general track, +and Corwin hosting the development track. +The other volunteers and I will run around mostly backstage, +and you'll probably meet us in the closing remarks. +That's also where we get to thank +all the people and organizations +who make EmacsConf possible. +Thanks for coming to EmacsConf 2025. +**** TODO Record sun-open remarks +:PROPERTIES: +:CUSTOM_ID: phases-record-intros-and-opening-remarks-record-sun-open-remarks +:END: + +Welcome to the second day of EmacsConf 2025. +The best parts of EmacsConf are the conversations. +The wiki has a page on how to watch and participate, +and I'll give you a quick overview as well. +You can watch the stream at live.emacsconf.org +using free and open source software. +Using a streaming media player like mpv +seems to be the best way to watch in terms of performance +but there are also web-based players +just in case that's all you've got. +As you're watching the talks, +you can refer to the schedule in another window. +Hover over the boxes to see the times and titles, +and click on the boxes in the schedule +to jump to the talk's page for more details. +You can also get the schedule as an iCalendar file +or as an Org file in different time zones. + +Many talks will be followed by +live Q&A web conferences with the speaker, +which will be done in BigBlueButton or BBB. +These are indicated with a solid border on the schedule +and by Q&A: BBB on the schedule page. +You can join the web conference room +by clicking on the BBB link +on the schedule page or the talk's webpage. +Then you can ask your questions yourself when the Q&A starts. +To improve performance, please keep your webcam off +and stay muted until it's your turn to talk. +If you don't like Javascript, +you can still ask questions via IRC +and the hosts can read them out for you. + +We're probably going to automatically switch +between talks and Q&A sessions, +so the transitions on the stream might be a little sudden, +People in the BigBlueButton room +can continue the conversation +even after the talk moves off-stream, +and you can also reach out to the speakers +using the contact information on the talk page. + +Other talks will have Q&A via Etherpad or IRC, +depending on what the speakers prefer. +This is indicated in the schedule with a dashed border +and on the schedule page as well. +Please ask your questions in the recommended places +so that the speakers can easily see them. + +Some talks will have the Q&A after the event, +so you can add your questions to their Etherpad. +We'll e-mail the speakers afterwards +and update the talk pages when they answer. + +We're going to start Sunday morning +with more IRC/Etherpad Q&A +to try to get around +some of the bandwidth issues +that we noticed last year. + +The schedule pages and track pages have quick shortcuts +so that you can find out more about talks, open the Etherpads, +and join the Q&A sessions. The watch page has more tips +on how to make the most of Q&A. +If you can, please add notes and ask questions +in the Etherpad for the talk. That makes it easier +for everyone to share their notes, +and speakers and hosts can read the questions from there. +We'll copy the notes to the talk pages afterwards. +We have one pad for each talk, +so you can follow the links to get to the next one +or go back to the schedule and get the link from there. +If you have general feedback about +the conference itself, please put it in +pad.emacsconf.org/2025 , which is linked on each pad. +You can also use this as a general community message board +for things like Help Wanted. +Internet Relay Chat or IRC can be another great way +to be part of lots of conversations. +You can use chat.emacsconf.org to join the IRC channels +through your web browser. The tabs on the left can help you +switch between the different channels. +Most discussions will be in +#emacsconf-gen for the General track. +If you need to reach us, you can join #emacsconf-org +or e-mail emacsconf-org-private@gnu.org. +You can use #emacsconf for hallway conversations. +Of course, you can join any of these channels +with your favourite IRC client. +You can connect to irc.libera.chat +port 6697 with TLS. +Once again, we're going to be streaming with open captions +for most of the talks this year, thanks to our speakers and +captioning volunteers. The captioned talks are indicated +on the schedule, and with any luck, we'll be posting +transcripts on talk pages shortly after the talks start. +If you need additional accommodations, +please let us know in #emacsconf-org +and we'll see if we can make things happen. +If something goes down, we'll update status.emacsconf.org. +If it doesn't look like we've noticed yet, +please let us know in the #emacsconf-org IRC channel, +where we will be quietly panicking. +In all of these conversations, please keep in mind +our guidelines for conduct. You can find them on the wiki, +They basically boil down to: please be nice. +If all goes well, the prerecorded talks and transcripts +should be available from the talk pages +shortly after they start playing, +and we'll post the recordings of live talks +and Q&A sessions within the next month or so. +If you'd like to get an update, you can subscribe to +the emacsconf-discuss mailing list. +All right, let's get going. +Leo Vivier is hosting the general track again today. +The other volunteers and I will run around mostly backstage, +and you'll probably meet us in the closing remarks. +That's also where we get to thank +all the people and organizations +who make EmacsConf even possible. +Thanks for coming to EmacsConf 2025. +*** TODO Generate assets +*** TODO Send check-in details :email: +*** TODO Ask libera.chat to increase IRC limit +** After the conference +*** TODO Send thanks and follow-up questions :email: +** TODO Confirm shifts +SCHEDULED: <2026-12-01 Tue> +:PROPERTIES: +:CUSTOM_ID: shifts +:CREATED: [2025-11-15 Sat 15:20] +:END: +:LOGBOOK: +- Note taken on [2025-11-22 Sat 17:35] \\ + probably fine for this year +:END: + +#+BEGIN_EXPORT md +<a name="shifts"></a> +#+END_EXPORT + +AM: 9-12 PM EST, PM: 1-5 PM EST (plus a little extra for setup/transition) + +Saturday Dec 6 2025 + +#+NAME: saturday-shifts +| | Start | End | [[https://emacsconf.org/2023/volunteer/host/][Host]] | Streamer | [[https://emacsconf.org/2023/volunteer/checkin/][Checkin]] | [[https://emacsconf.org/2023/volunteer/irc/][IRC]] | [[https://emacsconf.org/2023/volunteer/pad/][Pad]] | Coord | +|--------+-------+-------+--------+----------+---------+-----+-----+--------| +| Gen AM | 09:00 | 12:00 | zaeph | sachac | sachac | | | sachac | +| Gen PM | 13:00 | 17:00 | zaeph | sachac | sachac | | | sachac | +| Dev AM | 10:00 | 12:00 | corwin | sachac | sachac | | | sachac | +| Dev PM | 13:00 | 17:00 | corwin | sachac | sachac | | | sachac | + +Sunday Dec 7 2025 + +#+NAME: sunday-shifts +| | Start | End | [[https://emacsconf.org/2023/volunteer/host/][Host]] | Streamer | [[https://emacsconf.org/2023/volunteer/checkin/][Checkin]] | [[https://emacsconf.org/2023/volunteer/irc/][IRC]] | [[https://emacsconf.org/2023/volunteer/pad/][Pad]] | Coord | +|--------+-------+-------+--------------+----------+---------+-----+-----+--------| +| Gen AM | 09:00 | 12:00 | zaeph/corwin | sachac | sachac | | | sachac | +| Gen PM | 13:00 | 17:00 | zaeph/corwin | sachac | sachac | | | sachac | + +Backups: +- dev host/streamer: +- gen host/streamer: +- checkin, IRC, pad: + +Interested in a shift? Please e-mail [[mailto:emacsconf-org-private@gnu.org]] and we'll help you figure out what you need to learn. + +#+begin_src emacs-lisp :var sat=saturday-shifts :var sun=sunday-shifts :rownames no :colnames no :results verbatim replace +`(setq emacsconf-shifts + (list + ,@(apply #'append + (mapcar + (lambda (day) + (let ((headers + (mapcar + (lambda (field) + (intern + (concat + ":" + (downcase + (if (string-match org-link-bracket-re field) + (match-string 2 field) + field))))) + (seq-drop (car (cadr day)) 3)))) + (mapcar + (lambda (row) + (apply #'append + (list 'list :id + (when (string-match "^\\([^ ]+\\) \\(AM\\|PM\\)" (car row)) + (format "%s-%s-%s" + (car day) + (downcase (match-string 2 (car row))) + (downcase (match-string 1 (car row))))) + :track + (if (string-match "^Gen" (car row)) "General" "Development") + :start + (format "%sT%s:00%s" + (elt day 2) + (elt row 1) + emacsconf-timezone-offset) + :end + (format "%sT%s:00%s" + (elt day 2) + (elt row 2) + emacsconf-timezone-offset)) + (seq-map-indexed + (lambda (value index) + (unless (string= value "") + (list (elt headers index) value))) + (seq-drop row 3)))) + (cdr (cadr day))) + )) + (list + (list "sat" sat "2025-12-06") + (list "sun" sun "2025-12-07")))))) + +#+end_src + +#+RESULTS: +:results: +(setq emacsconf-shifts (list (list :id "sat-am-gen" :track "General" :start "2025-12-06T09:00:00-0500" :end "2025-12-06T12:00:00-0500" :host "zaeph" :streamer "sachac" :checkin "sachac" :coord "sachac") (list :id "sat-pm-gen" :track "General" :start "2025-12-06T13:00:00-0500" :end "2025-12-06T17:00:00-0500" :host "zaeph" :streamer "sachac" :checkin "sachac" :coord "sachac") (list :id "sat-am-dev" :track "Development" :start "2025-12-06T10:00:00-0500" :end "2025-12-06T12:00:00-0500" :host "corwin" :streamer "sachac" :checkin "sachac" :coord "sachac") (list :id "sat-pm-dev" :track "Development" :start "2025-12-06T13:00:00-0500" :end "2025-12-06T17:00:00-0500" :host "corwin" :streamer "sachac" :checkin "sachac" :coord "sachac") (list :id "sun-am-gen" :track "General" :start "2025-12-07T09:00:00-0500" :end "2025-12-07T12:00:00-0500" :host "zaeph/corwin" :streamer "sachac" :checkin "sachac" :coord "sachac") (list :id "sun-pm-gen" :track "General" :start "2025-12-07T13:00:00-0500" :end "2025-12-07T17:00:00-0500" :host "zaeph/corwin" :streamer "sachac" :checkin "sachac" :coord "sachac"))) +:end: + + +* TODO [#A] Check EmacsConf infrastructure +SCHEDULED: <2026-10-01 Thu> +:PROPERTIES: +:CUSTOM_ID: check-emacsconf-infrastructure +:CREATED: [2026-05-13 Wed 11:08] +:END: + +- [ ] IRC +- [ ] Streaming assets +- [ ] Publishing to the wiki +- [ ] Web conference +- [ ] OBS +- [ ] Publishing to the media server +- [ ] Etherpad +- [ ] Streaming +- [ ] Toobnix +- [ ] YouTube +- [ ] Mumble: Can join from my phone, can speak on stream + +** BigBlueButton +:PROPERTIES: +:CREATED: [2024-11-02 Sat 11:38] +:CUSTOM_ID: check-emacsconf-infrastructure-bigbluebutton +:END: + +- Plan: Scale up the bbb.emacsverse.org on Sacha's Linode account +- [[https://emacsconf.org/2024/organizers-notebook/#check-emacsconf-infrastructure-bigbluebutton][Installation notes from last year]] + +*** TODO Create meeting rooms for each speaker +:PROPERTIES: +:CREATED: [2024-11-02 Sat 11:50] +:Effort: 0:30 +:CUSTOM_ID: create_rooms +:END: +:LOGBOOK: +CLOCK: [2024-11-28 Thu 10:00]--[2024-11-28 Thu 10:12] => 0:12 +CLOCK: [2024-11-20 Wed 10:48]--[2024-11-20 Wed 12:18] => 1:30 +:END: + +[[file:~/proj/emacsconf/wiki/organizers-notebook/index.org::#general-infrastructure-bigbluebutton-creating-talk-bbb-rooms][Creating talk BBB rooms]] + +*** TODO Back up after the conference +:PROPERTIES: +:CUSTOM_ID: check-emacsconf-infrastructure-bigbluebutton-notes-backing-up +:CREATED: [2025-06-17 Tue 10:34] +:END: + +[[file:~/proj/emacsconf/wiki/organizers-notebook/index.org::#general-infrastructure-bigbluebutton-backing-up-bbb][Backing up BBB]] + +*** TODO Set up moderator access codes for all the meeting rooms, and make it so people can start the meeting +:PROPERTIES: +:Effort: 0:30 +:CUSTOM_ID: check-emacsconf-infrastructure-bigbluebutton-set-up-moderator-access-codes-for-all-the-meeting-rooms-and-make-it-so-people-can-start-the-meeting +:END: + +[[file:~/proj/emacsconf/wiki/organizers-notebook/index.org::#general-infrastructure-bigbluebutton-setting-up-moderator-access-codes][Setting up moderator access codes]] +*** TODO Check BBB audio from my phone +:PROPERTIES: +:CUSTOM_ID: check-emacsconf-infrastructure-bigbluebutton-check-bbb-audio-from-my-phone +:END: +*** Customize BigBlueButton branding +**** TODO [#C] Change background presentation +:PROPERTIES: +:CUSTOM_ID: check-emacsconf-infrastructure-bigbluebutton-change-background-presentation +:END: +https://docs.bigbluebutton.org/3.0/administration/customize/#change-the-default-presentation +**** TODO [#C] Modify landing page +:PROPERTIES: +:CUSTOM_ID: check-emacsconf-infrastructure-bigbluebutton-modify-landing-page +:END: +/var/www/bigbluebutton-default/assets/index.html +keep backup copy as it will be overwritten when bbb-conf is called +**** TODO [#C] Change default welcome message +:PROPERTIES: +:Effort: 0:30 +:CUSTOM_ID: check-emacsconf-infrastructure-bigbluebutton-change-default-welcome-message +:END: +https://docs.bigbluebutton.org/3.0/administration/customize/#change-the-default-welcome-message +**** TODO [#C] Change html5 title +:PROPERTIES: +:CUSTOM_ID: check-emacsconf-infrastructure-bigbluebutton-change-html5-title +:END: +/usr/share/bigbluebutton/html5-client/private/config/settings.yml + +TARGET=/usr/share/bigbluebutton/html5-client/private/config/settings.yml +yq e -i ".public.app.clientTitle = \"EmacsConf\"" $TARGET +**** TODO [#C] Try live captions +:PROPERTIES: +:CUSTOM_ID: check-emacsconf-infrastructure-bigbluebutton-try-live-captions +:END: +https://docs.bigbluebutton.org/3.0/administration/customize/#enable-live-captions +**** TODO Explore meeting layout? Default to custom, hosts will need to drag people's webcam over if there's a share +:PROPERTIES: +:CUSTOM_ID: check-emacsconf-infrastructure-bigbluebutton-explore-meeting-layout-default-to-custom-hosts-will-need-to-drag-people-s-webcam-over-if-there-s-a-share +:END: + +** IRC web client +:PROPERTIES: +:CUSTOM_ID: check-emacsconf-infrastructure-irc-web-client +:END: + +On front0: +cd ~thelounge; sudo -u thelounge nohup node /usr/bin/thelounge start + +*** TODO Ask libera.chat to increase connections allowed from chat.emacsconf.org on Dec 6 and 7 +:PROPERTIES: +:CUSTOM_ID: check-emacsconf-infrastructure-irc-web-client-ask-libera-chat-to-increase-connections-allowed-from-chat-emacsconf-org-on-dec-7-and-8 +:END: +[[file:~/proj/emacsconf/wiki/organizers-notebook/index.org::#general-infrastructure-irc-web-client][IRC web client]] +** IRC announcements +:PROPERTIES: +:CUSTOM_ID: check-emacsconf-infrastructure-irc-announcements +:END: +*** TODO Confirm manual IRC announcements +:PROPERTIES: +:CUSTOM_ID: check-emacsconf-infrastructure-irc-announcements-confirm-manual-irc-announcements +:END: +*** TODO Confirm automated IRC announcements from res +:PROPERTIES: +:CUSTOM_ID: check-emacsconf-infrastructure-irc-announcements-confirm-automated-irc-announcements-from-res +:END: +** Media +:PROPERTIES: +:CUSTOM_ID: check-emacsconf-infrastructure-media +:END: + +*** TODO Switch public media to unprotected root before the conference +:PROPERTIES: +:CUSTOM_ID: check-emacsconf-infrastructure-media-switch-public-media-to-unprotected-root-before-the-conference +:END: + +1. Clear public media directory. +2. Set =media_protect_root= to false in Ansible =group_vars/all.yml=. +3. =ansible-playbook -i inventory.yml prod-playbook.yml --tags media= + +You can generate the index with =emacsconf-publish-update-media=. +** TODO Publishing resources to the wiki +:PROPERTIES: +:CUSTOM_ID: check-emacsconf-infrastructure-publishing-resources-to-the-wiki +:END: +ansible-playbook -i inventory.yml prod-playbook.yml --tags publish + + + +** TODO Publishing videos to the media server +:PROPERTIES: +:CUSTOM_ID: check-emacsconf-infrastructure-publishing-videos-to-the-media-server +:END: +** Playing videos, switching to windows +:PROPERTIES: +:CUSTOM_ID: check-emacsconf-infrastructure-playing-videos-switching-to-windows +:END: + +*** TODO Generate test videos for everything +:PROPERTIES: +:CUSTOM_ID: check-emacsconf-infrastructure-playing-videos-switching-to-windows-generate-test-videos-for-everything +:END: + +emacsconf-stream-generate-test-videos + +*** TODO Document how to get that set up again +:PROPERTIES: +:CUSTOM_ID: check-emacsconf-infrastructure-playing-videos-switching-to-windows-document-how-to-get-that-set-up-again +:END: +** Etherpad +:PROPERTIES: +:CUSTOM_ID: check-emacsconf-infrastructure-etherpad +:END: +*** TODO Try upgrading to 2.x +:PROPERTIES: +:Effort: 2:00 +:END: +:LOGBOOK: +CLOCK: [2025-09-22 Mon 12:46] +:END: + +https://galaxy.ansible.com/ui/repo/published/s3lph/pads/content/role/etherpad/ +[[emacsconf-ansible:roles/pad/tasks/main.yml]] + +nodemon -e yml -w ../../roles/pad/tasks/main.yml -x "vagrant up --provision" + +http://pad.emacsconf.org.vagrant/ + +Progress: +http://pad.emacsconf.org.vagrant:9001/p/2025-hyperboleqa works +http://pad.emacsconf.org.vagrant/p/2025-hyperboleqa works now that I passthrough .js + + +http://pad.emacsconf.org.vagrant/padbootstrap-rLLvrD2UOFI.min.js +*** Generate pads for all the talks +:PROPERTIES: +:CUSTOM_ID: check-emacsconf-infrastructure-etherpad-generate-pads-for-all-the-talks +:END: + + +*** TODO Generate the main index +:PROPERTIES: +:CUSTOM_ID: check-emacsconf-infrastructure-etherpad-generate-the-main-index +:END: +** TODO Do a dry run +:PROPERTIES: +:CUSTOM_ID: check-emacsconf-infrastructure-do-a-dry-run +:END: +*** TODO Generate all the test assets +:PROPERTIES: +:Effort: 0:15 +:CUSTOM_ID: check-emacsconf-infrastructure-do-a-dry-run-generate-all-the-test-assets +:END: +*** TODO Test connecting to VNC and streaming via OBS :emacsconf: +:PROPERTIES: +:CUSTOM_ID: check-emacsconf-infrastructure-do-a-dry-run-test-connecting-to-vnc-and-streaming-via-obs +:CREATED: [2025-11-07 Fri 13:52] +:END: +** Resizing +:PROPERTIES: +:CUSTOM_ID: check-emacsconf-infrastructure-resizing +:END: + +live0: 64GB +front0: 32GB +meet: 64GB + +*** TODO [#A] Resize nodes before production +SCHEDULED: <2026-12-11 Fri> +:PROPERTIES: +:CUSTOM_ID: check-emacsconf-infrastructure-resizing-resize-nodes-before-production +:CREATED: [2026-07-04 Sat 10:39] +:END: + +live0: 64GB +front0: 32GB +meet: 64GB + +*** TODO [#A] Resize nodes after production +SCHEDULED: <2026-12-13 Sun> +:PROPERTIES: +:CUSTOM_ID: check-emacsconf-infrastructure-resizing-resize-nodes-after-production +:CREATED: [2026-07-04 Sat 10:39] +:END: + +live0: nanode +front0: nanode +*** TODO [#A] Resize meet after production +SCHEDULED: <2026-12-13 Sun> +:PROPERTIES: +:CUSTOM_ID: check-emacsconf-infrastructure-resizing-resize-meet-after-production +:CREATED: [2026-07-04 Sat 10:39] +:END: +meet: nanode +* Processes and notes +:PROPERTIES: +:CUSTOM_ID: processes-and-notes +:END: +** Hosting +:PROPERTIES: +:CUSTOM_ID: processes-and-notes-hosting +:END: +*** TODO Finalize host for dev track +:PROPERTIES: +:CUSTOM_ID: processes-and-notes-hosting-finalize-host-for-dev-track +:END: +** ERC +:PROPERTIES: +:CUSTOM_ID: processes-and-notes-erc +:END: + +Some convenient commands are defined in emacsconf-el:emacsconf-erc.el. + +| /opall | Grant operator status in the Emacsconf channels | +| /deopall | Remove operator status in the Emacsconf channels | +| /conftopic | Set the first part of the topic | +** Uploading videos +*** YouTube + +emacsconf-publish-youtube-step-through-publishing + + +*** Toobnix + +* Decisions +:PROPERTIES: +:CUSTOM_ID: decisions +:END: +* Support code +:PROPERTIES: +:CUSTOM_ID: support-code +:END: + +#+begin_src emacs-lisp :results silent +(defun my-ox-link-path (link _ info) + (let* ((raw-path (org-element-property :path link))) + (setq raw-path + (org-export-file-uri + (org-publish-file-relative-name raw-path info))) + ;; Possibly append `:html-link-home' to relative file + ;; name. + (let ((home (and (plist-get info :html-link-home) + (org-trim (plist-get info :html-link-home))))) + (when (and home + (plist-get info :html-link-use-abs-url) + (not (file-name-absolute-p raw-path))) + (setq raw-path (concat (file-name-as-directory home) raw-path)))) + raw-path)) + +(defun my-org-md-link (link desc info) + (if (string= (org-element-property :type link) "file") + (let ((path (my-ox-link-path link desc info))) + (if (string= (file-name-extension path) "svg") + (with-temp-buffer + (insert-file-contents-literally path) + (buffer-string)) + (org-md-link link desc info))) + (org-md-link link desc info))) + +(with-eval-after-load 'ox-md + (setf + (alist-get 'link (org-export-backend-transcoders (org-export-get-backend 'md))) + 'my-org-md-link)) +#+end_src + +#+RESULTS: +:results: +my-org-md-link +:end: diff --git a/2026/organizers-notebook/schedule.svg b/2026/organizers-notebook/schedule.svg new file mode 100644 index 00000000..f3fc6c61 --- /dev/null +++ b/2026/organizers-notebook/schedule.svg @@ -0,0 +1 @@ +<svg width="500" height="700" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><title>Graphical view of the schedule</title><g transform="translate(0,0)"><title>Schedule for Saturday</title><rect width="250" height="700" x="0" y="0" fill="white"></rect><text font-size="10" fill="black" y="30" x="3">Saturday</text><a href="https://emacsconf.org/2026/talks/sat-open" title="Saturday opening remarks" data-slug="sat-open"><title> 9:00- 9:10 Saturday opening remarks</title><rect x="40" y="40" opacity="0.8" width="84" height="13" stroke="black" stroke-dasharray="5,5,5" fill="gray"></rect><g transform="translate(40,51)"><text fill="black" x="0" y="0" font-size="10" transform="nil">sat-open</text></g></a><a href="https://emacsconf.org/2026/talks/emacspeak" title="Multi-dimensional information processing with Emacs and Emacspeak: a blind man's perspective" data-slug="emacspeak"><title> 9:10- 9:40 Multi-dimensional information processing with Emacs and Emacspeak: a blind man's perspective</title><rect x="40" y="53" opacity="0.8" width="84" height="41" stroke="black" stroke-dasharray="5,5,5" fill="gray"></rect><g transform="translate(40,92)"><text fill="black" x="0" y="0" font-size="10" transform="nil">emacspeak</text></g></a><a href="https://emacsconf.org/2026/talks/open-mic" title="Open session" data-slug="open-mic"><title> 9:50-10:40 Open session</title><rect x="40" y="108" opacity="0.8" width="84" height="68" stroke="black" stroke-dasharray="" fill="gray"></rect><g transform="translate(40,174)"><text fill="black" x="0" y="0" font-size="10" transform="nil">open-mic</text></g></a><a href="https://emacsconf.org/2026/talks/sat-close" title="Saturday closing remarks / open session" data-slug="sat-close"><title> 1:00- 1:10 Saturday closing remarks / open session</title><rect x="40" y="369" opacity="0.8" width="84" height="13" stroke="black" stroke-dasharray="" fill="gray"></rect><g transform="translate(40,380)"><text fill="black" x="0" y="0" font-size="10" transform="nil">sat-close</text></g></a><g transform="translate(3,40)"><line stroke="darkgray" x1="40" y1="0" x2="210" y2="0"></line><text fill="black" x="0" y="0" font-size="10" dy=".4em">9 AM</text></g><g transform="translate(3,122)"><line stroke="darkgray" x1="40" y1="0" x2="210" y2="0"></line><text fill="black" x="0" y="0" font-size="10" dy=".4em">10 AM</text></g><g transform="translate(3,204)"><line stroke="darkgray" x1="40" y1="0" x2="210" y2="0"></line><text fill="black" x="0" y="0" font-size="10" dy=".4em">11 AM</text></g><g transform="translate(3,287)"><line stroke="darkgray" x1="40" y1="0" x2="210" y2="0"></line><text fill="black" x="0" y="0" font-size="10" dy=".4em">12 PM</text></g><g transform="translate(3,369)"><line stroke="darkgray" x1="40" y1="0" x2="210" y2="0"></line><text fill="black" x="0" y="0" font-size="10" dy=".4em">1 PM</text></g><g transform="translate(3,451)"><line stroke="darkgray" x1="40" y1="0" x2="210" y2="0"></line><text fill="black" x="0" y="0" font-size="10" dy=".4em">2 PM</text></g><g transform="translate(3,534)"><line stroke="darkgray" x1="40" y1="0" x2="210" y2="0"></line><text fill="black" x="0" y="0" font-size="10" dy=".4em">3 PM</text></g><g transform="translate(3,616)"><line stroke="darkgray" x1="40" y1="0" x2="210" y2="0"></line><text fill="black" x="0" y="0" font-size="10" dy=".4em">4 PM</text></g><g transform="translate(3,698)"><line stroke="darkgray" x1="40" y1="0" x2="210" y2="0"></line><text fill="black" x="0" y="0" font-size="10" dy=".4em">5 PM</text></g></g><g transform="translate(250,0)"><title>Schedule for Sunday</title><rect width="250" height="700" x="0" y="0" fill="white"></rect><text font-size="10" fill="black" y="30" x="3">Sunday</text><a href="https://emacsconf.org/2026/talks/sun-open" title="Sunday opening remarks" data-slug="sun-open"><title> 9:00- 9:10 Sunday opening remarks</title><rect x="40" y="40" opacity="0.8" width="84" height="13" stroke="black" stroke-dasharray="5,5,5" fill="gray"></rect><g transform="translate(40,51)"><text fill="black" x="0" y="0" font-size="10" transform="nil">sun-open</text></g></a><a href="https://emacsconf.org/2026/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"><title> 1:00- 1:10 Sunday closing remarks</title><rect x="40" y="369" opacity="0.8" width="84" height="13" stroke="black" stroke-dasharray="" fill="gray"></rect><g transform="translate(40,380)"><text fill="black" x="0" y="0" font-size="10" transform="nil">sun-close</text></g></a><g transform="translate(3,40)"><line stroke="darkgray" x1="40" y1="0" x2="210" y2="0"></line><text fill="black" x="0" y="0" font-size="10" dy=".4em">9 AM</text></g><g transform="translate(3,122)"><line stroke="darkgray" x1="40" y1="0" x2="210" y2="0"></line><text fill="black" x="0" y="0" font-size="10" dy=".4em">10 AM</text></g><g transform="translate(3,204)"><line stroke="darkgray" x1="40" y1="0" x2="210" y2="0"></line><text fill="black" x="0" y="0" font-size="10" dy=".4em">11 AM</text></g><g transform="translate(3,287)"><line stroke="darkgray" x1="40" y1="0" x2="210" y2="0"></line><text fill="black" x="0" y="0" font-size="10" dy=".4em">12 PM</text></g><g transform="translate(3,369)"><line stroke="darkgray" x1="40" y1="0" x2="210" y2="0"></line><text fill="black" x="0" y="0" font-size="10" dy=".4em">1 PM</text></g><g transform="translate(3,451)"><line stroke="darkgray" x1="40" y1="0" x2="210" y2="0"></line><text fill="black" x="0" y="0" font-size="10" dy=".4em">2 PM</text></g><g transform="translate(3,534)"><line stroke="darkgray" x1="40" y1="0" x2="210" y2="0"></line><text fill="black" x="0" y="0" font-size="10" dy=".4em">3 PM</text></g><g transform="translate(3,616)"><line stroke="darkgray" x1="40" y1="0" x2="210" y2="0"></line><text fill="black" x="0" y="0" font-size="10" dy=".4em">4 PM</text></g><g transform="translate(3,698)"><line stroke="darkgray" x1="40" y1="0" x2="210" y2="0"></line><text fill="black" x="0" y="0" font-size="10" dy=".4em">5 PM</text></g></g></svg>
\ No newline at end of file diff --git a/2026/schedule-details.md b/2026/schedule-details.md new file mode 100644 index 00000000..7fa09293 --- /dev/null +++ b/2026/schedule-details.md @@ -0,0 +1,13 @@ +Jump to: <a href="#dev">Development</a> + +<h1 id="gen" class="sched-track General">General (6 talks)</h1> +[[!template id=sched title="""Saturday opening remarks""" url="""/2026/talks/sat-open""" speakers="""Sacha Chua""" watch="""https://emacsconf.org/2026/watch/gen""" slug="""sat-open""" note=""""""]] +[[!template id=sched title="""Open session""" url="""/2026/talks/open-mic""" speakers="""Participants""" watch="""https://emacsconf.org/2026/watch/gen""" slug="""open-mic""" note="""video posted, video: 1:13:00"""]] +[[!template id=sched title="""Sunday opening remarks""" url="""/2026/talks/sun-open""" speakers="""Sacha Chua""" watch="""https://emacsconf.org/2026/watch/gen""" slug="""sun-open""" note=""""""]] +[[!template id=sched title="""Multi-dimensional information processing with Emacs and Emacspeak: a blind man's perspective""" url="""/2026/talks/emacspeak""" watch="""https://emacsconf.org/2026/watch/gen""" slug="""emacspeak""" note=""""""]] +[[!template id=sched title="""Saturday closing remarks / open session""" url="""/2026/talks/sat-close""" watch="""https://emacsconf.org/2026/watch/gen""" slug="""sat-close""" note=""""""]] +[[!template id=sched title="""Sunday closing remarks""" url="""/2026/talks/sun-close""" watch="""https://emacsconf.org/2026/watch/gen""" slug="""sun-close""" note=""""""]] + +Jump to: <a href="#gen">General</a> + +<h1 id="dev" class="sched-track Development">Development (0 talks)</h1> diff --git a/2026/talks.md b/2026/talks.md new file mode 100644 index 00000000..ab27161d --- /dev/null +++ b/2026/talks.md @@ -0,0 +1,12 @@ +We're getting ready for EmacsConf 2026. Want to propose a talk? +[[Check out our call for participation|/2026/cfp]] and submit your proposal +by Friday, September 18, 2026! + +Here are some of the talks we've accepted so far: + +[[!inline pages="internal(2026/schedule-details)" raw="yes"]] + +Want to help make EmacsConf even awesomer? [[Volunteer!|/volunteer]] + +We hope to see you all around on Dec 12-13 for EmacsConf 2026! + diff --git a/2026/talks/emacspeak.md b/2026/talks/emacspeak.md new file mode 100644 index 00000000..c96fd0b5 --- /dev/null +++ b/2026/talks/emacspeak.md @@ -0,0 +1,30 @@ +[[!meta title="Multi-dimensional information processing with Emacs and Emacspeak: a blind man's perspective"]] +[[!meta copyright="Copyright © 2026 Arkadiusz"]] +[[!inline pages="internal(2026/info/emacspeak-nav)" raw="yes"]] + +<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing --> +<!-- You can manually edit this file to update the abstract, add links, etc. ---> + + +# Multi-dimensional information processing with Emacs and Emacspeak: a blind man's perspective +Arkadiusz (Nuno) - <https://swietnicki.dev> + +[[!inline pages="internal(2026/info/emacspeak-before)" raw="yes"]] + +Emacs is a tool that is extremely suitable to be operated by a fully +blind person. In this talk I would like to demonstrate one of its +strongest features, which is audio font locking. Using this mechanism +the user can get information in two dimensions, that is: "Information +snippet" as well as its metadata, carried by the font. In this talk, I +would like to briefly compare how blind people retrieve information +versus how the sighted do it, then briefly compare Emacs to other +traditional tools. At the end I am going to showcase a couple of +practical points: messages management with Telega, file navigation with +Dired and retrieving contact data with BBDB, all while using only speech +and sounds. + +[[!inline pages="internal(2026/info/emacspeak-after)" raw="yes"]] + +[[!inline pages="internal(2026/info/emacspeak-nav)" raw="yes"]] + + diff --git a/2026/talks/open-mic.md b/2026/talks/open-mic.md new file mode 100644 index 00000000..333909f2 --- /dev/null +++ b/2026/talks/open-mic.md @@ -0,0 +1,21 @@ +[[!meta title="Open session"]] +[[!meta copyright="Copyright © 2026 Participants"]] +[[!inline pages="internal(2026/info/open-mic-nav)" raw="yes"]] + +<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing --> +<!-- You can manually edit this file to update the abstract, add links, etc. ---> + + +# Open session +Participants + +[[!inline pages="internal(2026/info/open-mic-before)" raw="yes"]] + + + + +[[!inline pages="internal(2026/info/open-mic-after)" raw="yes"]] + +[[!inline pages="internal(2026/info/open-mic-nav)" raw="yes"]] + + diff --git a/2026/talks/sat-close.md b/2026/talks/sat-close.md new file mode 100644 index 00000000..12eeb9f2 --- /dev/null +++ b/2026/talks/sat-close.md @@ -0,0 +1,21 @@ +[[!meta title="Saturday closing remarks / open session"]] +[[!meta copyright="Copyright © 2026 ${speakers}"]] +[[!inline pages="internal(2026/info/sat-close-nav)" raw="yes"]] + +<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing --> +<!-- You can manually edit this file to update the abstract, add links, etc. ---> + + +# Saturday closing remarks / open session + + +[[!inline pages="internal(2026/info/sat-close-before)" raw="yes"]] + + + + +[[!inline pages="internal(2026/info/sat-close-after)" raw="yes"]] + +[[!inline pages="internal(2026/info/sat-close-nav)" raw="yes"]] + + diff --git a/2026/talks/sat-open.md b/2026/talks/sat-open.md new file mode 100644 index 00000000..d67255b4 --- /dev/null +++ b/2026/talks/sat-open.md @@ -0,0 +1,21 @@ +[[!meta title="Saturday opening remarks"]] +[[!meta copyright="Copyright © 2026 Sacha Chua"]] +[[!inline pages="internal(2026/info/sat-open-nav)" raw="yes"]] + +<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing --> +<!-- You can manually edit this file to update the abstract, add links, etc. ---> + + +# Saturday opening remarks +Sacha Chua + +[[!inline pages="internal(2026/info/sat-open-before)" raw="yes"]] + + + + +[[!inline pages="internal(2026/info/sat-open-after)" raw="yes"]] + +[[!inline pages="internal(2026/info/sat-open-nav)" raw="yes"]] + + diff --git a/2026/talks/sun-close.md b/2026/talks/sun-close.md new file mode 100644 index 00000000..3568cf20 --- /dev/null +++ b/2026/talks/sun-close.md @@ -0,0 +1,21 @@ +[[!meta title="Sunday closing remarks"]] +[[!meta copyright="Copyright © 2026 ${speakers}"]] +[[!inline pages="internal(2026/info/sun-close-nav)" raw="yes"]] + +<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing --> +<!-- You can manually edit this file to update the abstract, add links, etc. ---> + + +# Sunday closing remarks + + +[[!inline pages="internal(2026/info/sun-close-before)" raw="yes"]] + + + + +[[!inline pages="internal(2026/info/sun-close-after)" raw="yes"]] + +[[!inline pages="internal(2026/info/sun-close-nav)" raw="yes"]] + + diff --git a/2026/talks/sun-open.md b/2026/talks/sun-open.md new file mode 100644 index 00000000..4a3dc64e --- /dev/null +++ b/2026/talks/sun-open.md @@ -0,0 +1,21 @@ +[[!meta title="Sunday opening remarks"]] +[[!meta copyright="Copyright © 2026 Sacha Chua"]] +[[!inline pages="internal(2026/info/sun-open-nav)" raw="yes"]] + +<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing --> +<!-- You can manually edit this file to update the abstract, add links, etc. ---> + + +# Sunday opening remarks +Sacha Chua + +[[!inline pages="internal(2026/info/sun-open-before)" raw="yes"]] + + + + +[[!inline pages="internal(2026/info/sun-open-after)" raw="yes"]] + +[[!inline pages="internal(2026/info/sun-open-nav)" raw="yes"]] + + diff --git a/organizers-notebook/index.org b/organizers-notebook/index.org index 35fda77c..6f0399ca 100644 --- a/organizers-notebook/index.org +++ b/organizers-notebook/index.org @@ -43,12 +43,12 @@ This repository will store submissions, contact information, etc. 1. Create the repository on ~front0~. Ex: #+begin_src sh - export YEAR=2025 - sudo su - git - cd repositories - mkdir emacsconf-$YEAR-private.git - cd emacsconf-$YEAR-private.git - git init --bare +sudo su - git +export YEAR=2026 +cd repositories +mkdir emacsconf-$YEAR-private.git +cd emacsconf-$YEAR-private.git +git init --bare #+end_src 2. In the ~gitolite-admin~ repo, edit ~conf/gitolite-conf~. Add lines for the group and the repo. Commit and push. Ex: #+begin_example @@ -56,13 +56,15 @@ This repository will store submissions, contact information, etc. repo emacsconf-2024-private RW+ = @admins @emacsconf-2024-org orga #+end_example - 3. Clone the private repository into the appropriate location. ~git clone git@git.emacsconf.org:emacsconf-2025-private private~ + +#+COMMENT: + 3. Clone the private repository into the appropriate location. ~git clone git@git.emacsconf.org:emacsconf-2026-private private~ ** Create the public organizers' notebook in the wiki :PROPERTIES: :CUSTOM_ID: starting-up-the-conference-planning-process-create-the-public-organizers-notebook-in-the-wiki :END: -Ex: file:../2024/organizers-notebook/index.org +Ex: file:../2026/organizers-notebook/index.org * Phases and lessons learned :PROPERTIES: :CUSTOM_ID: phases-and-lessons-learned @@ -73,9 +75,9 @@ Ex: file:../2024/organizers-notebook/index.org :END: Create linked pages -- [ ] year index: ex: [[file:../2024.md]] -- [ ] volunteer page: ex: [[file:../volunteer.md]] -- [ ] submit page: ex: [[file:../2024/submit.md]] +- [X] year index: ex: [[file:../2026.md]] +- [X] volunteer page: ex: [[file:../volunteer.md]] +- [X] submit page: ex: [[file:../2026/submit.md]] *** How to mark pages as drafts :PROPERTIES: @@ -159,6 +161,10 @@ Come hang out with us in the `#emacsconf` channel on `irc.libera.chat` :PROPERTIES: :CUSTOM_ID: phases-and-lessons-learned-draft-cfp-update-the-irc-topic :END: +:LOGBOOK: +- Note taken on [2026-07-02 Thu 11:42] \\ + Done for 2026 +:END: #+begin_src emacs-lisp (erc-cmd-OPALL) @@ -210,6 +216,10 @@ Come hang out with us in the `#emacsconf` channel on `irc.libera.chat` :PROPERTIES: :CUSTOM_ID: phases-and-lessons-learned-announce :END: +:LOGBOOK: +- Note taken on [2026-07-02 Thu 11:42] \\ + Done 2026-06-27 +:END: - Post CFP to emacsconf-discuss, reddit.com/r/emacs, and in Emacs News - Submit to https://foss.events/ @@ -218,6 +228,10 @@ Come hang out with us in the `#emacsconf` channel on `irc.libera.chat` :PROPERTIES: :CUSTOM_ID: phases-and-lessons-learned-announce-promote-the-conference :END: +:LOGBOOK: +- Note taken on [2026-07-02 Thu 11:46] \\ + submitted EmacsConf 2026 to foss.events +:END: Submit to https://foss.events/ @@ -258,12 +272,13 @@ When proposals come in: 2. Use ~emacsconf-mail-add-submission~ if it works, or create the entry and paste it in. ~org-toggle-item~ can help convert Org-style headings into a nested list. - 3. Set the following fields (~my/org-set-property~ + 3. Set the following fields (~sacha-org-set-property~ can be helpful): EMERGENCY, Q_AND_A, AVAILABILITY, NAME, PRONOUNS, TIME, SLUG, EMAIL, NAME_SHORT, CUSTOM_ID, TRACK, TIMEZONE, CATEGORY, DATE_SUBMITTED, PUBLIC_EMAIL + ** Accept proposals :email: :PROPERTIES: :CUSTOM_ID: phases-and-lessons-learned-accept-proposals @@ -273,13 +288,28 @@ Setup: 1. Create YYYY/talks.md. + #+begin_example +We're getting ready for EmacsConf 2026. Want to propose a talk? +[[Check out our call for participation|/2026/cfp]] and submit your proposal +by Friday, September 18, 2026! + +Here are some of the talks we've accepted so far: + +[[!inline pages="internal(2026/schedule-details)" raw="yes"]] + +Want to help make EmacsConf even awesomer? [[Volunteer!|/volunteer]] + +We hope to see you all around on Dec 12-13 for EmacsConf 2026! + #+end_example + For each talk: 1. Set up "Talk abstract" and "Talk details" sections in the conf.org talk subtree. 2. Change status to ~TO_CONFIRM~. -3. Create wiki page with ~emacsconf-publish-add-talk~. -4. Use ~emacsconf-publish-info-pages~ and ~emacsconf-publish-schedule~ as needed. -5. Send acceptance e-mail with ~emacsconf-mail-accept-talk~ +3. Use ~emacsconf-set-file-prefixes~. +4. Create wiki page with ~emacsconf-publish-add-talk~. +5. Use ~emacsconf-publish-info-pages~ and ~emacsconf-publish-schedule~ as needed. +6. Send acceptance e-mail with ~emacsconf-mail-accept-talk~ After the CFP ends: |
