diff options
Diffstat (limited to '')
10 files changed, 437 insertions, 38 deletions
diff --git a/2023/captions/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--main--chapters.vtt b/2023/captions/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--main--chapters.vtt index 939155bd..6ec32228 100644 --- a/2023/captions/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--main--chapters.vtt +++ b/2023/captions/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--main--chapters.vtt @@ -1,10 +1,10 @@ WEBVTT -00:00:00.000 --> 00:00:16.679 +00:00:00.000 --> 00:00:16.579 Intro -00:00:16.680 --> 00:01:09.399 +00:00:16.580 --> 00:01:09.399 Reasons 00:01:09.400 --> 00:02:09.159 diff --git a/2023/captions/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--main.vtt b/2023/captions/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--main.vtt index b91f97d2..d97b9aa8 100644 --- a/2023/captions/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--main.vtt +++ b/2023/captions/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--main.vtt @@ -11,15 +11,15 @@ of some of the things we do to run EmacsConf. 00:00:07.960 --> 00:00:12.239 Since 2019, we've run it as an entirely online conference, -00:00:12.240 --> 00:00:14.999 +00:00:12.240 --> 00:00:14.699 and we do as much of the organization as possible -00:00:15.000 --> 00:00:16.679 +00:00:14.700 --> 00:00:16.579 within Emacs itself. NOTE Reasons -00:00:16.680 --> 00:00:19.759 +00:00:16.580 --> 00:00:19.759 I have three reasons for making this presentation. 00:00:19.760 --> 00:00:22.759 @@ -161,16 +161,16 @@ We take the info from that e-mail and store it in Org properties 00:02:15.800 --> 00:02:18.199 so that we can work with it later. -00:02:18.200 --> 00:02:20.239 +00:02:18.200 --> 00:02:20.599 Every talk is identified with an ID, -00:02:20.240 --> 00:02:24.119 +00:02:20.600 --> 00:02:24.119 but since `:ID:` and `:CUSTOM_ID:` have special meanings for Org, 00:02:24.120 --> 00:02:25.399 I use `:SLUG:` as the keyword. -00:02:25.400 --> 00:02:27.759 +00:02:25.600 --> 00:02:27.759 Speakers' names go into the `:NAME:` property, 00:02:27.760 --> 00:02:29.799 @@ -200,10 +200,10 @@ I often mess things up when I retype them. 00:02:47.560 --> 00:02:51.039 To avoid typos, I have a function that sets a property -00:02:51.040 --> 00:02:55.079 +00:02:51.040 --> 00:02:56.039 based on the current region. I bind that to `C-c C-x p`. -00:02:55.080 --> 00:02:58.599 +00:02:56.040 --> 00:02:58.599 That makes it much easier to set properties 00:02:58.600 --> 00:03:00.639 diff --git a/2023/info/emacsconf-after.md b/2023/info/emacsconf-after.md index 3a5535ff..4898332a 100644 --- a/2023/info/emacsconf-after.md +++ b/2023/info/emacsconf-after.md @@ -1,6 +1,363 @@ <!-- Automatically generated by emacsconf-publish-after-page --> +<a name="emacsconf-mainVideo-transcript"></a> +# Transcript + +[[!template new="1" text="""Hi, I'm Sacha Chua. This presentation is a quick tour""" start="00:00:00.000" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""of some of the things we do to run EmacsConf.""" start="00:00:04.840" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""Since 2019, we've run it as an entirely online conference,""" start="00:00:07.960" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""and we do as much of the organization as possible""" start="00:00:12.240" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""within Emacs itself.""" start="00:00:14.700" video="mainVideo-emacsconf" id="subtitle"]] +[[!template new="1" text="""I have three reasons for making this presentation.""" start="00:00:16.580" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""The first is entirely selfish: I need to figure out""" start="00:00:19.760" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""all the stuff I built for last year's EmacsConf,""" start="00:00:22.760" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""since it was a bit of a crazy scramble.""" start="00:00:25.360" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""The second is that I want to show people""" start="00:00:28.080" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""the process of thinking about a complex project,""" start="00:00:30.160" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""looking for little things to automate in Emacs,""" start="00:00:33.240" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""and building things up from small pieces.""" start="00:00:35.880" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""Maybe you'll get some ideas""" start="00:00:38.440" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""and start building tools for yourself, too.""" start="00:00:39.800" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""The third is that you find any of these little tools interesting,""" start="00:00:42.760" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""I want to point you to blog posts and source code""" start="00:00:47.040" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""where you can find out more.""" start="00:00:49.440" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""That way, you don't need to try""" start="00:00:51.240" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""to read and understand everything quickly.""" start="00:00:52.560" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""You can find this presentation and other links""" start="00:00:55.400" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""on the talk page at emacsconf.org/2023/talks/emacsconf.""" start="00:00:57.720" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""There are a lot of different parts,""" start="00:01:04.440" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""so I'll try to use this map to help make sense of it all.""" start="00:01:06.320" video="mainVideo-emacsconf" id="subtitle"]] +[[!template new="1" text="""There's so much information to work with,""" start="00:01:09.400" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""so it probably doesn't surprise you that we use Org Mode a lot.""" start="00:01:11.200" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""Most of the conference coordination happens over e-mail,""" start="00:01:14.920" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""which I can quickly search with notmuch.""" start="00:01:18.000" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""Some of the information is private,""" start="00:01:20.640" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""like emergency contact numbers.""" start="00:01:22.360" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""We store the talk information in a private Org file.""" start="00:01:24.520" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""I try to put as much as possible""" start="00:01:28.080" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""into our public organizers' notebook""" start="00:01:30.080" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""so that processes and decisions are documented.""" start="00:01:32.320" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""We need a public website.""" start="00:01:35.360" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""We use Ikiwiki to make the webpages""" start="00:01:36.920" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""because we can work with plain text files""" start="00:01:39.040" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""in a Git repository.""" start="00:01:41.120" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""We also make a few static HTML pages""" start="00:01:42.600" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""for things where Ikiwiki is a little awkward.""" start="00:01:45.400" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""We post announcements to mailing lists.""" start="00:01:48.120" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""We also receive submissions in a private mailing list""" start="00:01:50.520" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""so that a number of people can review them.""" start="00:01:53.160" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""We have a backstage area""" start="00:01:55.640" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""for sharing files with volunteers and speakers.""" start="00:01:56.840" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""We share those files publicly when the talk goes live.""" start="00:01:59.960" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""And there's all the other stuff that goes into running EmacsConf,""" start="00:02:03.120" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""like shell scripts and configuration files.""" start="00:02:06.320" video="mainVideo-emacsconf" id="subtitle"]] +[[!template new="1" text="""First, speakers propose a talk by sending an e-mail.""" start="00:02:09.160" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""We take the info from that e-mail and store it in Org properties""" start="00:02:12.320" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""so that we can work with it later.""" start="00:02:15.800" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""Every talk is identified with an ID,""" start="00:02:18.200" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""but since `:ID:` and `:CUSTOM_ID:` have special meanings for Org,""" start="00:02:20.600" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""I use `:SLUG:` as the keyword.""" start="00:02:24.120" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""Speakers' names go into the `:NAME:` property,""" start="00:02:25.600" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""and a short version goes into `:NAME_SHORT:`""" start="00:02:27.760" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""so that we can include that in a greeting.""" start="00:02:29.800" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""If people follow the template closely...""" start="00:02:32.200" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""...we can even automatically fill in the Org subtree for their talk.""" start="00:02:34.440" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""We can use regular expressions to recognize the text""" start="00:02:38.040" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""and extract the properties.""" start="00:02:40.800" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""Other properties need to be set by hand.""" start="00:02:42.880" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""I often mess things up when I retype them.""" start="00:02:45.360" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""To avoid typos, I have a function that sets a property""" start="00:02:47.560" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""based on the current region. I bind that to `C-c C-x p`.""" start="00:02:51.040" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""That makes it much easier to set properties""" start="00:02:56.040" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""that couldn't automatically be recognized.""" start="00:02:58.600" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""Sometimes it makes sense to dynamically generate a property""" start="00:03:00.640" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""and then edit it, like with filenames.""" start="00:03:04.520" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""We like to name all the talk files the same way,""" start="00:03:07.680" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""but sometimes special characters in talk titles or speaker names""" start="00:03:10.400" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""need a little tweaking. I'll put that in a `:FILE_PREFIX:` property""" start="00:03:14.440" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""so I can edit it.""" start="00:03:17.840" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""An Org property match can map over all the talk entries""" start="00:03:19.440" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""that don't have `:FILE_PREFIX:` defined.""" start="00:03:22.800" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""We can use that `:FILE_PREFIX:` to rename files from Emacs.""" start="00:03:25.440" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""With that property, we can then rename files using that prefix,""" start="00:03:29.200" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""some extra text, and the file extension.""" start="00:03:32.640" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""Sometimes it's easier to work with the data outside Emacs,""" start="00:03:35.640" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""like when I want to rename files with a shell script.""" start="00:03:38.880" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""If I export a subset of the data as JSON""" start="00:03:42.120" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""or JavaScript Object Notation, using `json-encode`...""" start="00:03:45.320" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""... then I can extract the data with `jq`""" start="00:03:48.960" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""and use it in shell scripts.""" start="00:03:51.120" video="mainVideo-emacsconf" id="subtitle"]] +[[!template new="1" text="""Another example of semi-structured information""" start="00:03:53.120" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""is speaker availability.""" start="00:03:55.640" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""We have speakers from all over the world,""" start="00:03:56.760" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""so we try to schedule live Q&A sessions when they're around.""" start="00:03:59.320" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""That means working with timezones.""" start="00:04:02.600" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""Completion makes it much easier to set the timezone property""" start="00:04:04.560" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""without worrying about typos.""" start="00:04:08.440" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""We can take advantage of the timezone list from the tzc package,""" start="00:04:10.600" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""which works with Unix timezone definitions.""" start="00:04:14.360" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""Then we can convert times using Emacs.""" start="00:04:16.680" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""Using a standard format to encode the availability""" start="00:04:19.920" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""makes it easier to parse.""" start="00:04:22.640" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""I can use those availability constraints to report errors""" start="00:04:24.400" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""when I'm experimenting with the schedule.""" start="00:04:27.440" video="mainVideo-emacsconf" id="subtitle"]] +[[!template new="1" text="""Now that I have the availability information,""" start="00:04:29.120" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""I can think about scheduling.""" start="00:04:30.760" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""When we were planning EmacsConf 2022, the schedule was so full,""" start="00:04:34.480" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""I wanted to see if we could make it more manageable""" start="00:04:38.240" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""by splitting it up into two tracks.""" start="00:04:40.840" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""It was hard to think about times with just a table.""" start="00:04:43.040" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""I was able to turn the schedule information""" start="00:04:45.920" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""into an SVG to convince the other organizers""" start="00:04:48.200" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""to get on board with this crazy plan.""" start="00:04:51.280" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""And the nice thing about SVGs is that""" start="00:04:53.360" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""they can even be clickable on the wiki.""" start="00:04:54.960" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""Being able to quickly make SVGs of different schedules""" start="00:04:57.520" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""also helped me test scheduling ideas and think out loud.""" start="00:05:00.640" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""I could change the time between talks, the order of the talks,""" start="00:05:04.200" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""and even what tracks the talks were in.""" start="00:05:06.880" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""This was helpful when I needed to include""" start="00:05:08.600" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""some late submissions or availability changes""" start="00:05:10.720" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""and I wanted to ask speakers what they thought.""" start="00:05:13.240" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""They could see the different schedule options themselves.""" start="00:05:15.600" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""It's really nice to have Emacs Lisp support for working with SVGs.""" start="00:05:18.800" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""I also love how I can have an Emacs Lisp block""" start="00:05:22.680" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""in an Org Mode document that updates an SVG""" start="00:05:25.400" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""that I can view right there in my text editor.""" start="00:05:28.600" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""Setting the timezone lets me automatically translate times""" start="00:05:31.280" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""to the speaker's local timezone when I e-mail them.""" start="00:05:34.800" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""That's mostly a matter of using `format-time-string` with a timezone.""" start="00:05:36.920" video="mainVideo-emacsconf" id="subtitle"]] +[[!template new="1" text="""There's also a lot of text to work with,""" start="00:05:42.360" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""which means templates are super handy.""" start="00:05:43.160" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""There are a number of templating functions for Emacs Lisp,""" start="00:05:45.120" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""like the built-in `tempo.el` or `s-lex-format` from `s.el`.""" start="00:05:48.120" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""I ended up writing something""" start="00:05:52.960" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""that works with property lists (plists) instead,""" start="00:05:54.440" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""since we use plists all over the emacsconf-el library.""" start="00:05:57.280" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""All it does is replace `${variable}`""" start="00:06:02.200" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""with the value from a property list.""" start="00:06:04.000" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""I use this mostly because I have a hard time""" start="00:06:05.520" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""keeping track of which `%s` is which when I use `format`,""" start="00:06:07.560" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""and it's hard to get an overall view if I just use `concat`.""" start="00:06:11.080" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""The code looks for the properties and replaces them with the values.""" start="00:06:13.920" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""I just find it a little easier to think about sometimes.""" start="00:06:17.600" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""Getting all the information is just a matter of going over""" start="00:06:20.920" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""all the talk entries using `org-map-entries`.""" start="00:06:24.080" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""This builds the talk info by running a bunch of functions.""" start="00:06:27.000" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""Some functions get the information from the Org file.""" start="00:06:30.320" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""Other functions use the info already collected.""" start="00:06:33.440" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""This can take a while to do again and again.""" start="00:06:36.360" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""It's useful to `memoize` this function""" start="00:06:39.040" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""when I know I'll be using it a lot,""" start="00:06:41.480" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""like when I export the organizers notebook.""" start="00:06:43.240" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""Memoize caches recent values.""" start="00:06:45.680" video="mainVideo-emacsconf" id="subtitle"]] +[[!template new="1" text="""We combine this templating function""" start="00:06:48.120" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""with the talk information""" start="00:06:50.240" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""to fill in the conference wiki,""" start="00:06:51.480" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""since that's a matter of writing templated strings to files.""" start="00:06:53.120" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""The talk pages are generated once""" start="00:06:56.280" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""and then left alone for manual editing,""" start="00:06:58.280" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""while the navigation is regenerated""" start="00:07:00.280" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""every time we change the details.""" start="00:07:02.400" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""Here are some examples""" start="00:07:04.200" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""of how we fill in the conference wiki.""" start="00:07:05.800" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""We put in the format of the talk, how Q&A works,""" start="00:07:07.320" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""and what the status is.""" start="00:07:10.960" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""Once the talk is live, we include the video""" start="00:07:12.320" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""and the links to the files, too.""" start="00:07:14.960" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""The code is a little bit long,""" start="00:07:16.480" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""but the important part is that""" start="00:07:18.720" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""we fill in a plist with the values we calculate,""" start="00:07:20.080" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""and then we can use `emacsconf-replace-plist-in-string`""" start="00:07:22.640" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""to put that all together.""" start="00:07:26.160" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""The schedule is a little more complicated.""" start="00:07:27.720" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""I wrote an Ikiwiki directive""" start="00:07:30.080" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""so that the markup is more manageable,""" start="00:07:32.080" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""and the Emacs Lisp function uses that.""" start="00:07:33.840" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""The Ikiwiki directive takes all the data and turns it into HTML...""" start="00:07:36.160" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""...so we can use Emacs Lisp to iterate over""" start="00:07:40.400" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""a slightly smaller property list""" start="00:07:42.960" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""and put them into the format Ikiwiki expects.""" start="00:07:44.680" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""It's nice to be able to navigate between talks""" start="00:07:47.480" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""without going back to the schedule page each time.""" start="00:07:50.080" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""This is handled by keeping two extra copies of the list:""" start="00:07:52.320" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""one with the first talk popped off,""" start="00:07:55.400" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""and one with an extra element added to the beginning.""" start="00:07:57.320" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""Then we can use the heads of those lists""" start="00:08:00.160" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""for next/previous links.""" start="00:08:02.440" video="mainVideo-emacsconf" id="subtitle"]] +[[!template new="1" text="""Links to the next talks are also handy""" start="00:08:03.960" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""on the collaborative Etherpad documents""" start="00:08:06.680" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""that we use for collecting questions, answers, and notes""" start="00:08:08.640" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""during each talk.""" start="00:08:12.040" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""Etherpad has an API...""" start="00:08:12.840" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""...so I can start the pads off with a template""" start="00:08:14.680" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""before the conference.""" start="00:08:17.320" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""I don't want to accidentally overwrite a pad""" start="00:08:18.560" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""that has been manually edited.""" start="00:08:21.240" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""We can save the timestamp of the last modification""" start="00:08:22.680" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""and then compare it before overwriting.""" start="00:08:25.720" video="mainVideo-emacsconf" id="subtitle"]] +[[!template new="1" text="""Templates are also very handy when it comes to e-mail.""" start="00:08:27.680" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""Sometimes we send e-mails one at a time,""" start="00:08:30.840" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""like when we let a speaker know""" start="00:08:33.600" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""that we've received their proposal.""" start="00:08:35.200" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""That's mostly a matter of plugging the talk's properties""" start="00:08:36.600" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""into the right places in the template.""" start="00:08:39.560" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""Sometimes we send e-mails to lots of speakers at the same time,""" start="00:08:41.120" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""like when we send them instructions for uploading their files.""" start="00:08:44.800" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""Instead of sending one e-mail and Bcc-ing everyone,""" start="00:08:48.000" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""or sending people multiple e-mails""" start="00:08:51.440" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""because they have multiple talks,""" start="00:08:53.480" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""I like to draft these as individual e-mails""" start="00:08:55.000" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""to each speaker (or group of speakers,""" start="00:08:57.560" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""if more than one person is associated with a talk).""" start="00:08:59.800" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""That gives me an opportunity to personalize it further.""" start="00:09:02.600" video="mainVideo-emacsconf" id="subtitle"]] +[[!template new="1" text="""Many speakers answer questions live""" start="00:09:05.480" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""in BigBlueButton web conference rooms.""" start="00:09:08.120" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""Setting up one room per group of speakers""" start="00:09:10.040" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""makes it easy to give the speakers the details""" start="00:09:12.640" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""and associate the recorded video with the talk afterwards.""" start="00:09:15.200" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""For EmacsConf 2023,""" start="00:09:18.520" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""I used Spookfox to control Mozilla Firefox from Emacs""" start="00:09:20.600" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""so that I could automate creating the rooms""" start="00:09:24.840" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""and adding the URLs to the talk properties in my Org file.""" start="00:09:27.480" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""Then I can use mail merge to send each speaker""" start="00:09:30.920" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""the check-in instructions for their specific room.""" start="00:09:33.960" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""Some speakers will take questions by e-mail""" start="00:09:36.400" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""after the conference instead of attending live,""" start="00:09:38.680" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""so we send them shorter instructions""" start="00:09:41.400" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""just in case they want to drop by.""" start="00:09:43.360" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""Live Q&A sessions start off""" start="00:09:45.120" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""with just the speaker and the host.""" start="00:09:46.480" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""After the first rush of questions,""" start="00:09:46.920" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""we can open it up for other people to join.""" start="00:09:48.120" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""This is handled by changing the public page""" start="00:09:49.960" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""from one that just refreshes in a loop""" start="00:09:52.760" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""to one that redirects to the actual web conference room.""" start="00:09:55.120" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""Just in case, we also""" start="00:09:58.120" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""generate static copies of those redirects""" start="00:10:00.080" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""so that we can copy them if needed.""" start="00:10:02.160" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""That way, I don't have to count on Emacs being able to""" start="00:10:04.040" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""publish them over TRAMP.""" start="00:10:06.680" video="mainVideo-emacsconf" id="subtitle"]] +[[!template new="1" text="""During the conference, I'm often jumping from talk to talk.""" start="00:10:07.760" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""Instead of going to the Org file""" start="00:10:11.240" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""and then searching for the talk,""" start="00:10:13.200" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""I've made a little Hydra with keyboard shortcuts.""" start="00:10:14.520" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""One of these shortcuts lets me""" start="00:10:17.240" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""jump to a talk with completion""" start="00:10:19.080" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""so that I can just type in part of the talk ID,""" start="00:10:20.800" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""title, or speaker name.""" start="00:10:24.000" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""I've also defined some Embark actions""" start="00:10:25.680" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""so that I can act on a talk right from the completion menu.""" start="00:10:28.680" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""For example, I might want to jump to the wiki page""" start="00:10:31.720" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""or e-mail the speaker.""" start="00:10:34.720" video="mainVideo-emacsconf" id="subtitle"]] +[[!template new="1" text="""I can also add notes to a talk while looking at an email,""" start="00:10:36.200" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""like when a speaker lets me know""" start="00:10:39.840" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""that their video will be late.""" start="00:10:41.640" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""Making it easy to add a note turns Emacs into""" start="00:10:42.840" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""a very basic contact relationship management system, or CRM.""" start="00:10:45.800" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""The way this works is that we have a function""" start="00:10:49.440" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""that lists all the email addresses associated with a talk.""" start="00:10:52.440" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""We can then map that over the list of talks,""" start="00:10:55.160" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""look up the author of the current email,""" start="00:10:57.920" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""prompt the user for the talk to add the note to, and add the note.""" start="00:10:59.960" video="mainVideo-emacsconf" id="subtitle"]] +[[!template new="1" text="""On to captions.""" start="00:11:03.320" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""We've been doing captions for the last couple of years,""" start="00:11:04.680" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""and now we have a small army of volunteer captioners.""" start="00:11:07.240" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""They get early access to the recorded talks""" start="00:11:09.960" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""and fix up misrecognized words, format keyboard shortcuts""" start="00:11:12.680" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""to follow Emacs conventions, spell names correctly,""" start="00:11:16.160" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""and do all sorts of other wonderful things.""" start="00:11:19.360" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""One of our evil plans with EmacsConf""" start="00:11:21.840" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""is to get cool stuff out of people's heads into videos""" start="00:11:24.400" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""and also make captions so that those videos can be searched.""" start="00:11:28.360" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""To make that possible, we first need a backstage area""" start="00:11:31.800" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""where volunteers can get the files.""" start="00:11:35.000" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""This is just a simple password-protected directory""" start="00:11:36.640" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""with a static HTML page that lists the talks by status""" start="00:11:39.840" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""and shows the files related to each talk.""" start="00:11:43.560" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""As a talk moves through the process, I update its TODO state""" start="00:11:46.120" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""and republish this index.""" start="00:11:49.600" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""Talks that are ready to be captioned show up in that section,""" start="00:11:51.360" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""and volunteers can call dibs on the talk they're interested in.""" start="00:11:54.520" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""That's all done with a function that formats the information""" start="00:11:57.680" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""and uses TRAMP to save the file directly to the server.""" start="00:12:00.800" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""You can find more details on our captioning process""" start="00:12:03.840" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""at emacsconf.org/captioning.""" start="00:12:06.680" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""I like using subed to edit subtitles within Emacs.""" start="00:12:09.040" video="mainVideo-emacsconf" id="subtitle"]] +[[!template new="1" text="""Let's talk about actually playing the talks.""" start="00:12:12.520" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""For EmacsConf 2022, we tried using Emacs timers""" start="00:12:15.400" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""to run the talks.""" start="00:12:19.560" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""It turns out that you can't call TRAMP from a timer""" start="00:12:20.520" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""when you're already using TRAMP from another timer""" start="00:12:24.080" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""at the same time.""" start="00:12:26.720" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""I thought about just tweaking the schedule""" start="00:12:27.440" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""so that we always start things at different times,""" start="00:12:29.720" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""but I figured there's probably a more elegant way to do this.""" start="00:12:31.800" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""This year, I'm planning to experiment with using cron""" start="00:12:34.800" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""to start talks on autopilot.""" start="00:12:37.520" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""The shell scripts will take care of playing the videos...""" start="00:12:38.960" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""... figuring out the appropriate Q&A...""" start="00:12:42.120" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""... and joining the web conference if needed.""" start="00:12:44.400" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""We just need to format the information...""" start="00:12:47.120" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""...and install it as the track's crontab.""" start="00:12:49.600" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""It's useful to be able to switch tracks""" start="00:12:51.760" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""to manual mode independently,""" start="00:12:54.080" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""just in case things go haywire.""" start="00:12:55.600" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""Then we can start everything manually.""" start="00:12:57.680" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""I can also manually update a talk's status,""" start="00:12:59.720" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""like when the host tells me that it's okay to open up the Q&A.""" start="00:13:02.360" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""The shell scripts we run from the crontab""" start="00:13:05.920" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""can also update the talk status themselves.""" start="00:13:08.720" video="mainVideo-emacsconf" id="subtitle"]] +[[!template new="1" text="""Then a bunch of things happen automatically based on""" start="00:13:10.840" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""the talk status changes.""" start="00:13:14.320" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""This uses org-after-todo-state-change-hook.""" start="00:13:15.600" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""We get the talk information""" start="00:13:18.960" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""and pass it to a list of functions.""" start="00:13:20.360" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""Internet Relay Chat or IRC is an easy way for people""" start="00:13:21.960" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""to join the conversation around EmacsConf.""" start="00:13:26.280" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""We announce a talk whenever it changes state.""" start="00:13:28.720" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""For example, when a talk starts,""" start="00:13:31.240" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""we post the URLs to the talk webpage""" start="00:13:33.600" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""and the Etherpad for questions. We change the topic as well,""" start="00:13:36.040" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""so anyone can see the current talk's information""" start="00:13:39.440" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""even if they're a little late.""" start="00:13:41.880" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""This is easy to do with a little bit of Emacs Lisp""" start="00:13:43.040" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""because (of course!) Emacs has an IRC client.""" start="00:13:45.800" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""In fact, it has several.""" start="00:13:48.520" video="mainVideo-emacsconf" id="subtitle"]] +[[!template new="1" text="""It seems like a lot of automation and Emacs Lisp,""" start="00:13:49.640" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""but really, all of this was just built up little by little.""" start="00:13:52.800" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""And tinkering with this is *fun*, you know?""" start="00:13:56.440" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""It's like always being able to ask,""" start="00:13:59.280" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text=""""Hey, wouldn't it be cool if..."""" start="00:14:00.680" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""and then actually being able to go and do it.""" start="00:14:02.160" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""Sometimes it feels like EmacsConf is an excuse""" start="00:14:05.280" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""for me to play with Emacs.""" start="00:14:08.000" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""It's pretty amazing what you can do""" start="00:14:09.360" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""by combining a bunch of pieces.""" start="00:14:12.000" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""A way to store slightly-structured information.""" start="00:14:13.800" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""A way to get it out again. Templates.""" start="00:14:16.720" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""TRAMP, for working with remote files""" start="00:14:18.880" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""and running remote commands.""" start="00:14:20.680" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""A way to talk to a web browser.""" start="00:14:21.920" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""A way to work with SVGs.""" start="00:14:23.840" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""An email client. A chat client.""" start="00:14:25.400" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""You can smoosh them all together""" start="00:14:27.760" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""in a way that you couldn't if they were all separate things.""" start="00:14:29.640" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""The code is in the emacsconf-el repository.""" start="00:14:32.320" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""It's a bit of a tangle because it's accumulating organically""" start="00:14:35.880" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""and I haven't really had the brainspace""" start="00:14:39.120" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""to step back and clean it up.""" start="00:14:40.880" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""But if you spotted anything interesting in this presentation,""" start="00:14:42.360" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""you can go check it out and see what you can scavenge.""" start="00:14:45.520" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""The link and this presentation are available""" start="00:14:48.280" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""from this talk's webpage at emacsconf.org/2023/talks/emacsconf .""" start="00:14:51.000" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""Let's figure out how to make Emacsconf even awesomer next year!""" start="00:14:59.120" video="mainVideo-emacsconf" id="subtitle"]] + + + +Captioner: sachac + Questions or comments? Please e-mail [sacha@sachachua.com](mailto:sacha@sachachua.com?subject=Comment%20for%20EmacsConf%202022%20emacsconf%3A%20EmacsConf.org%3A%20How%20we%20use%20Org%20Mode%20and%20TRAMP%20to%20organize%20and%20run%20a%20multi-track%20conference) diff --git a/2023/info/emacsconf-before.md b/2023/info/emacsconf-before.md index 46df683a..ccc41d74 100644 --- a/2023/info/emacsconf-before.md +++ b/2023/info/emacsconf-before.md @@ -7,12 +7,31 @@ The following image shows where the talk is in the schedule for Sat 2023-12-02. [[!toc ]] Format: 16-min talk; Q&A: BigBlueButton conference room <https://media.emacsconf.org/2023/current/bbb-emacsconf.html> Discuss on IRC: [#emacsconf-dev](https://chat.emacsconf.org/?join=emacsconf,emacsconf-dev) -Status: TO_CHECK +Status: Quality check <div>Times in different timezones:</div><div class="times" start="2023-12-02T20:45:00Z" end="2023-12-02T21:05:00Z"><div class="conf-time">Saturday, Dec 2 2023, ~3:45 PM - 4:05 PM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Saturday, Dec 2 2023, ~2:45 PM - 3:05 PM CST (US/Central)<br />Saturday, Dec 2 2023, ~1:45 PM - 2:05 PM MST (US/Mountain)<br />Saturday, Dec 2 2023, ~12:45 PM - 1:05 PM PST (US/Pacific)<br />Saturday, Dec 2 2023, ~8:45 PM - 9:05 PM UTC <br />Saturday, Dec 2 2023, ~9:45 PM - 10:05 PM CET (Europe/Paris)<br />Saturday, Dec 2 2023, ~10:45 PM - 11:05 PM EET (Europe/Athens)<br />Sunday, Dec 3 2023, ~2:15 AM - 2:35 AM IST (Asia/Kolkata)<br />Sunday, Dec 3 2023, ~4:45 AM - 5:05 AM +08 (Asia/Singapore)<br />Sunday, Dec 3 2023, ~5:45 AM - 6:05 AM JST (Asia/Tokyo)</div></div><div><a href="/2023/watch/dev/">Find out how to watch and participate</a></div> +<div class="vid"><video controls preload="none" id="emacsconf-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="emacsconf-mainVideo" data=""" +00:00.000 Intro +00:16.580 Reasons +01:09.400 Information +02:09.160 Properties +03:53.120 Timezones +04:29.120 Scheduling +05:42.360 Templates +06:48.120 Wiki +08:03.960 Etherpad +08:27.680 E-mail +09:05.480 BigBlueButton web conferences +10:07.760 Shortcuts +10:36.200 Logbook +11:03.320 Captions +12:12.520 Crontabs and playing the talks +13:10.840 Transitions +13:49.640 Wrapping up +"""]]<div></div>Duration: 15:05 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2023-emacsconf">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2023/current/bbb-emacsconf.html">Open public Q&A</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--final.webm">Download --final.webm (37MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--main.opus">Download --main.opus (8.3MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--main.webm">Download --main.webm (37MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--normalized.opus">Download --normalized.opus (13MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--original.webm">Download --original.webm (125MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--reencoded.webm">Download --reencoded.webm (32MB)</a></li></ul></div></div> # Description <!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2023/info/hyperdrive-before.md b/2023/info/hyperdrive-before.md index 4de3af6d..aa520396 100644 --- a/2023/info/hyperdrive-before.md +++ b/2023/info/hyperdrive-before.md @@ -9,7 +9,7 @@ The following image shows where the talk is in the schedule for Sun 2023-12-03. [[!toc ]] Format: 41-min talk; Q&A: BigBlueButton conference room <https://media.emacsconf.org/2023/current/bbb-hyperdrive.html> Discuss on IRC: [#emacsconf-dev](https://chat.emacsconf.org/?join=emacsconf,emacsconf-dev) -Status: Being captioned +Status: Quality check <div>Times in different timezones:</div><div class="times" start="2023-12-03T18:35:00Z" end="2023-12-03T19:15:00Z"><div class="conf-time">Sunday, Dec 3 2023, ~1:35 PM - 2:15 PM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Sunday, Dec 3 2023, ~12:35 PM - 1:15 PM CST (US/Central)<br />Sunday, Dec 3 2023, ~11:35 AM - 12:15 PM MST (US/Mountain)<br />Sunday, Dec 3 2023, ~10:35 AM - 11:15 AM PST (US/Pacific)<br />Sunday, Dec 3 2023, ~6:35 PM - 7:15 PM UTC <br />Sunday, Dec 3 2023, ~7:35 PM - 8:15 PM CET (Europe/Paris)<br />Sunday, Dec 3 2023, ~8:35 PM - 9:15 PM EET (Europe/Athens)<br />Monday, Dec 4 2023, ~12:05 AM - 12:45 AM IST (Asia/Kolkata)<br />Monday, Dec 4 2023, ~2:35 AM - 3:15 AM +08 (Asia/Singapore)<br />Monday, Dec 4 2023, ~3:35 AM - 4:15 AM JST (Asia/Tokyo)</div></div><div><a href="/2023/watch/dev/">Find out how to watch and participate</a></div> diff --git a/2023/info/sat-open-before.md b/2023/info/sat-open-before.md index 21cc196e..c3ee4733 100644 --- a/2023/info/sat-open-before.md +++ b/2023/info/sat-open-before.md @@ -5,9 +5,9 @@ The following image shows where the talk is in the schedule for Sat 2023-12-02. </div> [[!toc ]] -Format: 10-min talk; Q&A: ask questions via Etherpad/IRC; we'll e-mail the speaker and post answers on this wiki page after the conference +Format: 6-min talk; Q&A: ask questions via Etherpad/IRC; we'll e-mail the speaker and post answers on this wiki page after the conference Discuss on IRC: [#emacsconf-gen](https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen) -Status: Waiting for video from speaker +Status: Quality check <div>Times in different timezones:</div><div class="times" start="2023-12-02T14:00:00Z" end="2023-12-02T14:10:00Z"><div class="conf-time">Saturday, Dec 2 2023, ~9:00 AM - 9:10 AM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Saturday, Dec 2 2023, ~8:00 AM - 8:10 AM CST (US/Central)<br />Saturday, Dec 2 2023, ~7:00 AM - 7:10 AM MST (US/Mountain)<br />Saturday, Dec 2 2023, ~6:00 AM - 6:10 AM PST (US/Pacific)<br />Saturday, Dec 2 2023, ~2:00 PM - 2:10 PM UTC <br />Saturday, Dec 2 2023, ~3:00 PM - 3:10 PM CET (Europe/Paris)<br />Saturday, Dec 2 2023, ~4:00 PM - 4:10 PM EET (Europe/Athens)<br />Saturday, Dec 2 2023, ~7:30 PM - 7:40 PM IST (Asia/Kolkata)<br />Saturday, Dec 2 2023, ~10:00 PM - 10:10 PM +08 (Asia/Singapore)<br />Saturday, Dec 2 2023, ~11:00 PM - 11:10 PM JST (Asia/Tokyo)</div></div><div><a href="/2023/watch/gen/">Find out how to watch and participate</a></div> diff --git a/2023/info/sharing-before.md b/2023/info/sharing-before.md index bcde5c42..5d71d8f9 100644 --- a/2023/info/sharing-before.md +++ b/2023/info/sharing-before.md @@ -7,7 +7,7 @@ The following image shows where the talk is in the schedule for Sun 2023-12-03. [[!toc ]] Format: 17-min talk; Q&A: Etherpad <https://pad.emacsconf.org/2023-sharing> Discuss on IRC: [#emacsconf-gen](https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen) -Status: Being captioned +Status: Processing uploaded video <div>Times in different timezones:</div><div class="times" start="2023-12-03T20:55:00Z" end="2023-12-03T21:15:00Z"><div class="conf-time">Sunday, Dec 3 2023, ~3:55 PM - 4:15 PM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Sunday, Dec 3 2023, ~2:55 PM - 3:15 PM CST (US/Central)<br />Sunday, Dec 3 2023, ~1:55 PM - 2:15 PM MST (US/Mountain)<br />Sunday, Dec 3 2023, ~12:55 PM - 1:15 PM PST (US/Pacific)<br />Sunday, Dec 3 2023, ~8:55 PM - 9:15 PM UTC <br />Sunday, Dec 3 2023, ~9:55 PM - 10:15 PM CET (Europe/Paris)<br />Sunday, Dec 3 2023, ~10:55 PM - 11:15 PM EET (Europe/Athens)<br />Monday, Dec 4 2023, ~2:25 AM - 2:45 AM IST (Asia/Kolkata)<br />Monday, Dec 4 2023, ~4:55 AM - 5:15 AM +08 (Asia/Singapore)<br />Monday, Dec 4 2023, ~5:55 AM - 6:15 AM JST (Asia/Tokyo)</div></div><div><a href="/2023/watch/gen/">Find out how to watch and participate</a></div> diff --git a/2023/organizers-notebook.md b/2023/organizers-notebook.md index 5bb168a7..e5af5fde 100644 --- a/2023/organizers-notebook.md +++ b/2023/organizers-notebook.md @@ -30,6 +30,7 @@ Help wanted: - [Prepare for the conference](#status) - [Get ready for production](#go-live) - [Volunteers](#coordinate-volunteers) + - [Lessons learned](#orgabf844a) - [Progress reports](#progress) - [E-mail templates](#templates) - [Review](#review) @@ -1208,6 +1209,7 @@ Creating new rooms "Create a BBB room for this group of talks. GROUP is (email . (talk talk talk)). Needs a Spookfox connection." + (interactive (list (emacsconf-mail-complete-email-group))) (let* ((bbb-name (format "%s (%s) - %s%s" (mapconcat (lambda (o) (plist-get o :slug)) (cdr group) ", ") @@ -1743,7 +1745,7 @@ AM: 9-12 PM EST, PM: 1-5 PM EST (plus a little extra for setup/transition) Saturday Dec 2 2023 -<table id="org73ca51a"> +<table id="org75f96da"> <colgroup> @@ -1776,9 +1778,9 @@ Saturday Dec 2 2023 <tbody> <tr> <td class="org-left">Gen AM</td> -<td class="org-left"> </td> +<td class="org-left">zaeph</td> <td class="org-left">sachac</td> -<td class="org-left"> </td> +<td class="org-left">FlowyCoder</td> <td class="org-left"> </td> <td class="org-left"> </td> <td class="org-left">sachac</td> @@ -1787,9 +1789,9 @@ Saturday Dec 2 2023 <tr> <td class="org-left">Gen PM</td> -<td class="org-left"> </td> +<td class="org-left">zaph</td> <td class="org-left">sachac</td> -<td class="org-left"> </td> +<td class="org-left">FlowyCoder</td> <td class="org-left"> </td> <td class="org-left"> </td> <td class="org-left">sachac</td> @@ -1798,9 +1800,9 @@ Saturday Dec 2 2023 <tr> <td class="org-left">Dev AM</td> -<td class="org-left"> </td> +<td class="org-left">bandali</td> <td class="org-left">sachac</td> -<td class="org-left"> </td> +<td class="org-left">FlowyCoder</td> <td class="org-left"> </td> <td class="org-left"> </td> <td class="org-left">sachac</td> @@ -1809,9 +1811,9 @@ Saturday Dec 2 2023 <tr> <td class="org-left">Dev PM</td> -<td class="org-left"> </td> +<td class="org-left">bandali</td> <td class="org-left">sachac</td> -<td class="org-left"> </td> +<td class="org-left">FlowyCoder</td> <td class="org-left"> </td> <td class="org-left"> </td> <td class="org-left">sachac</td> @@ -1821,7 +1823,7 @@ Saturday Dec 2 2023 Sunday Dec 3 2023 -<table id="orgbc57116"> +<table id="org7b6fbf8"> <colgroup> @@ -1854,9 +1856,9 @@ Sunday Dec 3 2023 <tbody> <tr> <td class="org-left">Gen AM</td> -<td class="org-left"> </td> +<td class="org-left">zaeph</td> <td class="org-left">sachac</td> -<td class="org-left"> </td> +<td class="org-left">FlowyCoder</td> <td class="org-left"> </td> <td class="org-left"> </td> <td class="org-left">sachac</td> @@ -1865,9 +1867,9 @@ Sunday Dec 3 2023 <tr> <td class="org-left">Gen PM</td> -<td class="org-left"> </td> +<td class="org-left">zaeph</td> <td class="org-left">sachac</td> -<td class="org-left"> </td> +<td class="org-left">FlowyCoder</td> <td class="org-left"> </td> <td class="org-left"> </td> <td class="org-left">sachac</td> @@ -1876,9 +1878,9 @@ Sunday Dec 3 2023 <tr> <td class="org-left">Dev AM</td> -<td class="org-left"> </td> +<td class="org-left">bandali</td> <td class="org-left">sachac</td> -<td class="org-left"> </td> +<td class="org-left">FlowyCoder</td> <td class="org-left"> </td> <td class="org-left"> </td> <td class="org-left">sachac</td> @@ -1887,9 +1889,9 @@ Sunday Dec 3 2023 <tr> <td class="org-left">Dev PM</td> -<td class="org-left"> </td> +<td class="org-left">bandali</td> <td class="org-left">sachac</td> -<td class="org-left"> </td> +<td class="org-left">FlowyCoder</td> <td class="org-left"> </td> <td class="org-left"> </td> <td class="org-left">sachac</td> @@ -1910,8 +1912,17 @@ Interested in a shift? Please e-mail <mailto:emacsconf-org-private@gnu.org> and ,@(apply #'append (mapcar (lambda (day) - (let ((headers (mapcar (lambda (field) (intern (concat ":" (downcase field)))) - (cdr (car (cadr day)))))) + (let ((headers + (mapcar + (lambda (field) + (intern + (concat + ":" + (downcase + (if (string-match org-link-bracket-re field) + (match-string 2 field) + field))))) + (cdr (car (cadr day)))))) (mapcar (lambda (row) (apply #'append @@ -1941,8 +1952,8 @@ Interested in a shift? Please e-mail <mailto:emacsconf-org-private@gnu.org> and (cdr (cadr day))) )) (list - (list "sat" sat "2022-12-03") - (list "sun" sun "2022-12-04")))))) + (list "sat" sat "2023-12-02") + (list "sun" sun "2023-12-03")))))) ### DONE Document volunteer roles @@ -1950,6 +1961,15 @@ Interested in a shift? Please e-mail <mailto:emacsconf-org-private@gnu.org> and Copied it over from the previous year +<a id="orgabf844a"></a> + +## Lessons learned + +- Make sure timezones are on anything that has time (schedule page, watch pages, etc.) +- Remember to publish the icals and schedule org files: `emacsconf-update-schedule`. Added to the schedule-details.md. +- For really late submissions, make sure you also create the pad (`emacsconf-pad-prepopulate-talk-pad`) and the BBB room (`emacsconf-spookfox-create-bbb`). + + <a id="progress"></a> # Progress reports diff --git a/2023/organizers-notebook/index.org b/2023/organizers-notebook/index.org index e4dcdbfe..94ce1aeb 100644 --- a/2023/organizers-notebook/index.org +++ b/2023/organizers-notebook/index.org @@ -1014,6 +1014,7 @@ Creating new rooms "Create a BBB room for this group of talks. GROUP is (email . (talk talk talk)). Needs a Spookfox connection." + (interactive (list (emacsconf-mail-complete-email-group))) (let* ((bbb-name (format "%s (%s) - %s%s" (mapconcat (lambda (o) (plist-get o :slug)) (cdr group) ", ") @@ -1720,6 +1721,8 @@ Copied it over from the previous year ** Lessons learned - Make sure timezones are on anything that has time (schedule page, watch pages, etc.) - Remember to publish the icals and schedule org files: ~emacsconf-update-schedule~. Added to the schedule-details.md. +- For really late submissions, make sure you also create the pad (~emacsconf-pad-prepopulate-talk-pad~) and the BBB room (~emacsconf-spookfox-create-bbb~). + * Progress reports :PROPERTIES: :CUSTOM_ID: progress diff --git a/2023/schedule-details.md b/2023/schedule-details.md index c5bd241b..937f2a2b 100644 --- a/2023/schedule-details.md +++ b/2023/schedule-details.md @@ -30,7 +30,7 @@ Jump to: <a href="#date-2023-12-02">Sat Dec 2</a> - <a href="#date-2023-12-03">S [[!template id=sched time="""20""" q-and-a="""<a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen">#emacsconf-gen, speaker nick: lispmacs</a>""" startutc="""2023-12-02T19:55:00+0000""" endutc="""2023-12-02T20:15:00+0000""" start="""2:55""" end="""3:15""" title="""Org-Mode workflow: informal reference tracking""" url="""/2023/talks/ref""" speakers="""Christopher Howard""" track="""General""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""ref""" note="""captioned"""]] [[!template id=sched time="""10""" q-and-a="""<a href="https://pad.emacsconf.org/2023-unentangling">Etherpad</a>""" startutc="""2023-12-02T20:25:00+0000""" endutc="""2023-12-02T20:35:00+0000""" start="""3:25""" end="""3:35""" title="""(Un)entangling projects and repos""" url="""/2023/talks/unentangling""" speakers="""Alexey Bochkarev""" track="""General""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""unentangling""" note=""""""]] [[!template id=sched time="""10""" q-and-a="""<a href="https://media.emacsconf.org/2023/current/bbb-devel.html">BBB</a>""" startutc="""2023-12-02T20:45:00+0000""" endutc="""2023-12-02T20:55:00+0000""" start="""3:45""" end="""3:55""" title="""Emacs development updates""" url="""/2023/talks/devel""" speakers="""John Wiegley""" track="""General""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""devel""" note=""""""]] -[[!template id=sched time="""20""" q-and-a="""<a href="https://media.emacsconf.org/2023/current/bbb-emacsconf.html">BBB</a>""" startutc="""2023-12-02T20:45:00+0000""" endutc="""2023-12-02T21:05:00+0000""" start="""3:45""" end="""4:05""" title="""EmacsConf.org: How we use Org Mode and TRAMP to organize and run a multi-track conference""" url="""/2023/talks/emacsconf""" speakers="""Sacha Chua""" track="""Development""" watch="""https://emacsconf.org/2023/watch/dev""" slug="""emacsconf""" note="""captioned"""]] +[[!template id=sched time="""20""" q-and-a="""<a href="https://media.emacsconf.org/2023/current/bbb-emacsconf.html">BBB</a>""" startutc="""2023-12-02T20:45:00+0000""" endutc="""2023-12-02T21:05:00+0000""" start="""3:45""" end="""4:05""" title="""EmacsConf.org: How we use Org Mode and TRAMP to organize and run a multi-track conference""" url="""/2023/talks/emacsconf""" speakers="""Sacha Chua""" track="""Development""" watch="""https://emacsconf.org/2023/watch/dev""" slug="""emacsconf""" note="""captioned, video posted"""]] [[!template id=sched time="""40""" q-and-a="""<a href="https://media.emacsconf.org/2023/current/bbb-core.html">BBB</a>""" startutc="""2023-12-02T21:10:00+0000""" endutc="""2023-12-02T21:50:00+0000""" start="""4:10""" end="""4:50""" title="""Emacs core development: how it works""" url="""/2023/talks/core""" speakers="""Stefan Kangas""" track="""General""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""core""" note=""""""]] [[!template id=sched time="""10""" q-and-a="""""" startutc="""2023-12-02T22:05:00+0000""" endutc="""2023-12-02T22:15:00+0000""" start="""5:05""" end="""5:15""" title="""Saturday closing remarks""" url="""/2023/talks/sat-close""" track="""General""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""sat-close""" note=""""""]]</div> |