diff options
author | EmacsConf <emacsconf-org@gnu.org> | 2023-12-01 16:22:12 -0500 |
---|---|---|
committer | EmacsConf <emacsconf-org@gnu.org> | 2023-12-01 16:22:12 -0500 |
commit | 1b4e1d429bfc28678e9f523aa83b83c935126b4a (patch) | |
tree | ac070d463ebe4cbf93e0bb4a3f7f6b1de4a479d5 /2023/captions | |
parent | d7170569bd62ae6d19ebfaa771e6eaf0390a3abd (diff) | |
parent | b6497563dd469bd03d33f5447645170401718583 (diff) | |
download | emacsconf-wiki-1b4e1d429bfc28678e9f523aa83b83c935126b4a.tar.xz emacsconf-wiki-1b4e1d429bfc28678e9f523aa83b83c935126b4a.zip |
Automated commit
Diffstat (limited to '')
2 files changed, 1068 insertions, 121 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 new file mode 100644 index 00000000..2a53cea7 --- /dev/null +++ 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 @@ -0,0 +1,53 @@ +WEBVTT + + +00:00:00.000 --> 00:00:16.579 +Intro + +00:00:16.580 --> 00:01:09.399 +Reasons + +00:01:09.400 --> 00:02:09.159 +Information + +00:02:09.160 --> 00:03:53.119 +Properties + +00:03:53.120 --> 00:04:29.719 +Timezones + +00:04:29.720 --> 00:05:41.779 +Scheduling + +00:05:41.780 --> 00:06:48.399 +Templates + +00:06:48.400 --> 00:08:04.379 +Wiki + +00:08:04.380 --> 00:08:28.199 +Etherpad + +00:08:28.200 --> 00:09:05.919 +E-mail + +00:09:05.920 --> 00:10:08.120 +BigBlueButton web conferences + +00:10:08.121 --> 00:10:36.699 +Shortcuts + +00:10:36.700 --> 00:11:03.679 +Logbook + +00:11:03.680 --> 00:12:13.219 +Captions + +00:12:13.220 --> 00:13:11.279 +Crontabs and playing the talks + +00:13:11.280 --> 00:13:49.879 +Transitions + +00:13:49.880 --> 00:15:05.200 +Wrapping up 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 5b2a69b1..cbec1bb1 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 @@ -1,182 +1,1076 @@ -WEBVTT captioned by sachac +WEBVTT captioned by sachac, checked by sachac +NOTE Intro -00:00:00.000 --> 00:00:00.999 -emacsconf 00 456789 123456789 123456789 123456789 123456789 +00:00:00.000 --> 00:00:04.839 +Hi, I'm Sacha Chua. This presentation is a quick tour -00:00:01.000 --> 00:00:00.999 -emacsconf 01 456789 123456789 123456789 123456789 123456789 +00:00:04.840 --> 00:00:07.959 +of some of the things we do to run EmacsConf. -00:00:02.000 --> 00:00:01.999 -emacsconf 02 456789 123456789 123456789 123456789 123456789 +00:00:07.960 --> 00:00:12.239 +Since 2019, we've run it as an entirely online conference, -00:00:03.000 --> 00:00:02.999 -emacsconf 03 456789 123456789 123456789 123456789 123456789 +00:00:12.240 --> 00:00:14.699 +and we do as much of the organization as possible -00:00:04.000 --> 00:00:03.999 -emacsconf 04 456789 123456789 123456789 123456789 123456789 +00:00:14.700 --> 00:00:16.579 +within Emacs itself. -00:00:05.000 --> 00:00:04.999 -emacsconf 05 456789 123456789 123456789 123456789 123456789 +NOTE Reasons -00:00:06.000 --> 00:00:05.999 -emacsconf 06 456789 123456789 123456789 123456789 123456789 +00:00:16.580 --> 00:00:19.759 +I have three reasons for making this presentation. -00:00:07.000 --> 00:00:06.999 -emacsconf 07 456789 123456789 123456789 123456789 123456789 +00:00:19.760 --> 00:00:22.759 +The first is entirely selfish: I need to figure out -00:00:08.000 --> 00:00:07.999 -emacsconf 08 456789 123456789 123456789 123456789 123456789 +00:00:22.760 --> 00:00:25.359 +all the stuff I built for last year's EmacsConf, -00:00:09.000 --> 00:00:08.999 -emacsconf 09 456789 123456789 123456789 123456789 123456789 +00:00:25.360 --> 00:00:28.079 +since it was a bit of a crazy scramble. -00:00:10.000 --> 00:00:09.999 -emacsconf 10 456789 123456789 123456789 123456789 123456789 +00:00:28.080 --> 00:00:30.159 +The second is that I want to show people -00:00:11.000 --> 00:00:10.999 -emacsconf 11 456789 123456789 123456789 123456789 123456789 +00:00:30.160 --> 00:00:33.239 +the process of thinking about a complex project, -00:00:12.000 --> 00:00:11.999 -emacsconf 12 456789 123456789 123456789 123456789 123456789 +00:00:33.240 --> 00:00:35.879 +looking for little things to automate in Emacs, -00:00:13.000 --> 00:00:12.999 -emacsconf 13 456789 123456789 123456789 123456789 123456789 +00:00:35.880 --> 00:00:38.439 +and building things up from small pieces. -00:00:14.000 --> 00:00:13.999 -emacsconf 14 456789 123456789 123456789 123456789 123456789 +00:00:38.440 --> 00:00:39.799 +Maybe you'll get some ideas -00:00:15.000 --> 00:00:14.999 -emacsconf 15 456789 123456789 123456789 123456789 123456789 +00:00:39.800 --> 00:00:42.759 +and start building tools for yourself, too. -00:00:16.000 --> 00:00:15.999 -emacsconf 16 456789 123456789 123456789 123456789 123456789 +00:00:42.760 --> 00:00:47.039 +The third is that you find any of these little tools interesting, -00:00:17.000 --> 00:00:16.999 -emacsconf 17 456789 123456789 123456789 123456789 123456789 +00:00:47.040 --> 00:00:49.439 +I want to point you to blog posts and source code -00:00:18.000 --> 00:00:17.999 -emacsconf 18 456789 123456789 123456789 123456789 123456789 +00:00:49.440 --> 00:00:51.239 +where you can find out more. -00:00:19.000 --> 00:00:18.999 -emacsconf 19 456789 123456789 123456789 123456789 123456789 +00:00:51.240 --> 00:00:52.559 +That way, you don't need to try -00:00:20.000 --> 00:00:19.999 -emacsconf 20 456789 123456789 123456789 123456789 123456789 +00:00:52.560 --> 00:00:55.399 +to read and understand everything quickly. -00:00:21.000 --> 00:00:20.999 -emacsconf 21 456789 123456789 123456789 123456789 123456789 +00:00:55.400 --> 00:00:57.719 +You can find this presentation and other links -00:00:22.000 --> 00:00:21.999 -emacsconf 22 456789 123456789 123456789 123456789 123456789 +00:00:57.720 --> 00:01:04.439 +on the talk page at emacsconf.org/2023/talks/emacsconf. -00:00:23.000 --> 00:00:22.999 -emacsconf 23 456789 123456789 123456789 123456789 123456789 +00:01:04.440 --> 00:01:06.319 +There are a lot of different parts, -00:00:24.000 --> 00:00:23.999 -emacsconf 24 456789 123456789 123456789 123456789 123456789 +00:01:06.320 --> 00:01:09.399 +so I'll try to use this map to help make sense of it all. -00:00:25.000 --> 00:00:24.999 -emacsconf 25 456789 123456789 123456789 123456789 123456789 +NOTE Information -00:00:26.000 --> 00:00:25.999 -emacsconf 26 456789 123456789 123456789 123456789 123456789 +00:01:09.400 --> 00:01:11.199 +There's so much information to work with, -00:00:27.000 --> 00:00:26.999 -emacsconf 27 456789 123456789 123456789 123456789 123456789 +00:01:11.200 --> 00:01:14.919 +so it probably doesn't surprise you that we use Org Mode a lot. -00:00:28.000 --> 00:00:27.999 -emacsconf 28 456789 123456789 123456789 123456789 123456789 +00:01:14.920 --> 00:01:17.999 +Most of the conference coordination happens over e-mail, -00:00:29.000 --> 00:00:28.999 -emacsconf 29 456789 123456789 123456789 123456789 123456789 +00:01:18.000 --> 00:01:20.639 +which I can quickly search with notmuch. -00:00:30.000 --> 00:00:29.999 -emacsconf 30 456789 123456789 123456789 123456789 123456789 +00:01:20.640 --> 00:01:22.359 +Some of the information is private, -00:00:31.000 --> 00:00:30.999 -emacsconf 31 456789 123456789 123456789 123456789 123456789 +00:01:22.360 --> 00:01:24.519 +like emergency contact numbers. -00:00:32.000 --> 00:00:31.999 -emacsconf 32 456789 123456789 123456789 123456789 123456789 +00:01:24.520 --> 00:01:28.079 +We store the talk information in a private Org file. -00:00:33.000 --> 00:00:32.999 -emacsconf 33 456789 123456789 123456789 123456789 123456789 +00:01:28.080 --> 00:01:30.079 +I try to put as much as possible -00:00:34.000 --> 00:00:33.999 -emacsconf 34 456789 123456789 123456789 123456789 123456789 +00:01:30.080 --> 00:01:32.319 +into our public organizers' notebook -00:00:35.000 --> 00:00:34.999 -emacsconf 35 456789 123456789 123456789 123456789 123456789 +00:01:32.320 --> 00:01:35.359 +so that processes and decisions are documented. -00:00:36.000 --> 00:00:35.999 -emacsconf 36 456789 123456789 123456789 123456789 123456789 +00:01:35.360 --> 00:01:36.919 +We need a public website. -00:00:37.000 --> 00:00:36.999 -emacsconf 37 456789 123456789 123456789 123456789 123456789 +00:01:36.920 --> 00:01:39.039 +We use Ikiwiki to make the webpages -00:00:38.000 --> 00:00:37.999 -emacsconf 38 456789 123456789 123456789 123456789 123456789 +00:01:39.040 --> 00:01:41.119 +because we can work with plain text files -00:00:39.000 --> 00:00:38.999 -emacsconf 39 456789 123456789 123456789 123456789 123456789 +00:01:41.120 --> 00:01:42.599 +in a Git repository. -00:00:40.000 --> 00:00:39.999 -emacsconf 40 456789 123456789 123456789 123456789 123456789 +00:01:42.600 --> 00:01:45.399 +We also make a few static HTML pages -00:00:41.000 --> 00:00:40.999 -emacsconf 41 456789 123456789 123456789 123456789 123456789 +00:01:45.400 --> 00:01:48.119 +for things where Ikiwiki is a little awkward. -00:00:42.000 --> 00:00:41.999 -emacsconf 42 456789 123456789 123456789 123456789 123456789 +00:01:48.120 --> 00:01:50.519 +We post announcements to mailing lists. -00:00:43.000 --> 00:00:42.999 -emacsconf 43 456789 123456789 123456789 123456789 123456789 +00:01:50.520 --> 00:01:53.159 +We also receive submissions in a private mailing list -00:00:44.000 --> 00:00:43.999 -emacsconf 44 456789 123456789 123456789 123456789 123456789 +00:01:53.160 --> 00:01:55.639 +so that a number of people can review them. -00:00:45.000 --> 00:00:44.999 -emacsconf 45 456789 123456789 123456789 123456789 123456789 +00:01:55.640 --> 00:01:56.839 +We have a backstage area -00:00:46.000 --> 00:00:45.999 -emacsconf 46 456789 123456789 123456789 123456789 123456789 +00:01:56.840 --> 00:01:59.959 +for sharing files with volunteers and speakers. -00:00:47.000 --> 00:00:46.999 -emacsconf 47 456789 123456789 123456789 123456789 123456789 +00:01:59.960 --> 00:02:03.119 +We share those files publicly when the talk goes live. -00:00:48.000 --> 00:00:47.999 -emacsconf 48 456789 123456789 123456789 123456789 123456789 +00:02:03.120 --> 00:02:06.319 +And there's all the other stuff that goes into running EmacsConf, -00:00:49.000 --> 00:00:48.999 -emacsconf 49 456789 123456789 123456789 123456789 123456789 +00:02:06.320 --> 00:02:09.159 +like shell scripts and configuration files. -00:00:50.000 --> 00:00:49.999 -emacsconf 50 456789 123456789 123456789 123456789 123456789 +NOTE Properties -00:00:51.000 --> 00:00:50.999 -emacsconf 51 456789 123456789 123456789 123456789 123456789 +00:02:09.160 --> 00:02:12.319 +First, speakers propose a talk by sending an e-mail. -00:00:52.000 --> 00:00:51.999 -emacsconf 52 456789 123456789 123456789 123456789 123456789 +00:02:12.320 --> 00:02:15.799 +We take the info from that e-mail and store it in Org properties -00:00:53.000 --> 00:00:52.999 -emacsconf 53 456789 123456789 123456789 123456789 123456789 +00:02:15.800 --> 00:02:18.199 +so that we can work with it later. -00:00:54.000 --> 00:00:53.999 -emacsconf 54 456789 123456789 123456789 123456789 123456789 +00:02:18.200 --> 00:02:20.599 +Every talk is identified with an ID, -00:00:55.000 --> 00:00:54.999 -emacsconf 55 456789 123456789 123456789 123456789 123456789 +00:02:20.600 --> 00:02:24.119 +but since `:ID:` and `:CUSTOM_ID:` have special meanings for Org, -00:00:56.000 --> 00:00:55.999 -emacsconf 56 456789 123456789 123456789 123456789 123456789 +00:02:24.120 --> 00:02:25.399 +I use `:SLUG:` as the keyword. -00:00:57.000 --> 00:00:56.999 -emacsconf 57 456789 123456789 123456789 123456789 123456789 +00:02:25.600 --> 00:02:27.759 +Speakers' names go into the `:NAME:` property, -00:00:58.000 --> 00:00:57.999 -emacsconf 58 456789 123456789 123456789 123456789 123456789 +00:02:27.760 --> 00:02:29.799 +and a short version goes into `:NAME_SHORT:` -00:00:59.000 --> 00:00:58.999 -emacsconf 59 456789 123456789 123456789 123456789 123456789 +00:02:29.800 --> 00:02:32.199 +so that we can include that in a greeting. + +00:02:32.200 --> 00:02:34.439 +If people follow the template closely... + +00:02:34.440 --> 00:02:38.039 +...we can even automatically fill in the Org subtree for their talk. + +00:02:38.040 --> 00:02:40.799 +We can use regular expressions to recognize the text + +00:02:40.800 --> 00:02:42.879 +and extract the properties. + +00:02:42.880 --> 00:02:45.359 +Other properties need to be set by hand. + +00:02:45.360 --> 00:02:47.559 +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:56.039 +based on the current region. I bind that to `C-c C-x p`. + +00:02:56.040 --> 00:02:58.599 +That makes it much easier to set properties + +00:02:58.600 --> 00:03:01.239 +that couldn't automatically be recognized. + +00:03:01.240 --> 00:03:04.519 +Sometimes it makes sense to dynamically generate a property + +00:03:04.520 --> 00:03:07.679 +and then edit it, like with filenames. + +00:03:07.680 --> 00:03:10.399 +We like to name all the talk files the same way, + +00:03:10.400 --> 00:03:14.439 +but sometimes special characters in talk titles or speaker names + +00:03:14.440 --> 00:03:17.839 +need a little tweaking. I'll put that in a `:FILE_PREFIX:` property + +00:03:17.840 --> 00:03:19.439 +so I can edit it. + +00:03:19.440 --> 00:03:22.799 +An Org property match can map over all the talk entries + +00:03:22.800 --> 00:03:25.439 +that don't have `:FILE_PREFIX:` defined. + +00:03:25.440 --> 00:03:29.199 +We can use that `:FILE_PREFIX:` to rename files from Emacs. + +00:03:29.200 --> 00:03:32.639 +With that property, we can then rename files using that prefix, + +00:03:32.640 --> 00:03:35.639 +some extra text, and the file extension. + +00:03:35.640 --> 00:03:38.879 +Sometimes it's easier to work with the data outside Emacs, + +00:03:38.880 --> 00:03:42.119 +like when I want to rename files with a shell script. + +00:03:42.120 --> 00:03:45.319 +If I export a subset of the data as JSON + +00:03:45.320 --> 00:03:48.959 +or JavaScript Object Notation, using `json-encode`... + +00:03:48.960 --> 00:03:51.119 +... then I can extract the data with `jq` + +00:03:51.120 --> 00:03:53.119 +and use it in shell scripts. + +NOTE Timezones + +00:03:53.120 --> 00:03:55.639 +Another example of semi-structured information + +00:03:55.640 --> 00:03:57.299 +is speaker availability. + +00:03:57.300 --> 00:03:59.619 +We have speakers from all over the world, + +00:03:59.620 --> 00:04:03.019 +so we try to schedule live Q&A sessions when they're around. + +00:04:03.020 --> 00:04:05.019 +That means working with timezones. + +00:04:05.020 --> 00:04:08.439 +Completion makes it much easier to set the timezone property + +00:04:08.440 --> 00:04:10.599 +without worrying about typos. + +00:04:10.600 --> 00:04:14.359 +We can take advantage of the timezone list from the tzc package, + +00:04:14.360 --> 00:04:17.159 +which works with Unix timezone definitions. + +00:04:17.160 --> 00:04:19.919 +Then we can convert times using Emacs. + +00:04:19.920 --> 00:04:22.639 +Using a standard format to encode the availability + +00:04:22.640 --> 00:04:24.399 +makes it easier to parse. + +00:04:24.400 --> 00:04:27.439 +I can use those availability constraints to report errors + +00:04:27.440 --> 00:04:29.719 +when I'm experimenting with the schedule. + +NOTE Scheduling + +00:04:29.720 --> 00:04:31.679 +Now that I have the availability information, + +00:04:31.680 --> 00:04:33.940 +I can think about scheduling. + +00:04:33.941 --> 00:04:38.239 +When we were planning EmacsConf 2022, the schedule was so full, + +00:04:38.240 --> 00:04:40.839 +I wanted to see if we could make it more manageable + +00:04:40.840 --> 00:04:43.039 +by splitting it up into two tracks. + +00:04:43.040 --> 00:04:45.919 +It was hard to think about times with just a table. + +00:04:45.920 --> 00:04:48.199 +I was able to turn the schedule information + +00:04:48.200 --> 00:04:51.279 +into an SVG to convince the other organizers + +00:04:51.280 --> 00:04:53.359 +to get on board with this crazy plan. + +00:04:53.360 --> 00:04:54.959 +And the nice thing about SVGs is that + +00:04:54.960 --> 00:04:57.519 +they can even be clickable on the wiki. + +00:04:57.520 --> 00:05:00.639 +Being able to quickly make SVGs of different schedules + +00:05:00.640 --> 00:05:04.199 +also helped me test scheduling ideas and think out loud. + +00:05:04.200 --> 00:05:06.879 +I could change the time between talks, the order of the talks, + +00:05:06.880 --> 00:05:08.939 +and even what tracks the talks were in. + +00:05:08.940 --> 00:05:10.719 +This was helpful when I needed to include + +00:05:10.720 --> 00:05:13.239 +some late submissions or availability changes + +00:05:13.240 --> 00:05:15.599 +and I wanted to ask speakers what they thought. + +00:05:15.600 --> 00:05:18.799 +They could see the different schedule options themselves. + +00:05:18.800 --> 00:05:22.679 +It's really nice to have Emacs Lisp support for working with SVGs. + +00:05:22.680 --> 00:05:25.399 +I also love how I can have an Emacs Lisp block + +00:05:25.400 --> 00:05:28.599 +in an Org Mode document that updates an SVG + +00:05:28.600 --> 00:05:31.999 +that I can view right there in my text editor. + +00:05:32.000 --> 00:05:34.799 +Setting the timezone lets me automatically translate times + +00:05:34.800 --> 00:05:37.819 +to the speaker's local timezone when I e-mail them. + +00:05:37.820 --> 00:05:41.779 +That's mostly a matter of using `format-time-string` with a timezone. + +NOTE Templates + +00:05:41.780 --> 00:05:43.159 +There's a lot of text to work with, + +00:05:43.160 --> 00:05:45.699 +which means templates are super handy. + +00:05:45.700 --> 00:05:48.119 +There are a number of templating functions for Emacs Lisp, + +00:05:48.120 --> 00:05:52.959 +like the built-in `tempo.el` or `s-lex-format` from `s.el`. + +00:05:52.960 --> 00:05:54.439 +I ended up writing something + +00:05:54.440 --> 00:05:58.019 +that works with property lists (plists) instead, + +00:05:58.020 --> 00:06:02.199 +since we use plists all over the emacsconf-el library. + +00:06:02.200 --> 00:06:03.999 +All it does is replace `${variable}` + +00:06:04.000 --> 00:06:05.519 +with the value from a property list. + +00:06:05.520 --> 00:06:07.559 +I use this mostly because I have a hard time + +00:06:07.560 --> 00:06:11.079 +keeping track of which `%s` is which when I use `format`, + +00:06:11.080 --> 00:06:14.299 +and it's hard to get an overall view if I just use `concat`. + +00:06:14.300 --> 00:06:17.599 +The code looks for the properties and replaces them with the values. + +00:06:17.600 --> 00:06:21.299 +I just find it a little easier to think about sometimes. + +00:06:21.300 --> 00:06:24.079 +Getting all the information is just a matter of going over + +00:06:24.080 --> 00:06:27.399 +all the talk entries using `org-map-entries`. + +00:06:27.400 --> 00:06:30.699 +This builds the talk info by running a bunch of functions. + +00:06:30.700 --> 00:06:33.819 +Some functions get the information from the Org file. + +00:06:33.820 --> 00:06:36.959 +Other functions use the info already collected. + +00:06:36.960 --> 00:06:39.259 +This can take a while to do again and again. + +00:06:39.260 --> 00:06:41.739 +It's useful to `memoize` this function + +00:06:41.740 --> 00:06:43.499 +when I know I'll be using it a lot, + +00:06:43.500 --> 00:06:45.959 +like when I export the organizers notebook. + +00:06:45.960 --> 00:06:48.399 +Memoize caches recent values. + +NOTE Wiki + +00:06:48.400 --> 00:06:50.239 +We combine this templating function + +00:06:50.240 --> 00:06:51.479 +with the talk information + +00:06:51.480 --> 00:06:53.439 +to fill in the conference wiki, + +00:06:53.440 --> 00:06:56.479 +since that's a matter of writing templated strings to files. + +00:06:56.480 --> 00:06:58.279 +The talk pages are generated once + +00:06:58.280 --> 00:07:00.279 +and then left alone for manual editing, + +00:07:00.280 --> 00:07:02.399 +while the navigation is regenerated + +00:07:02.400 --> 00:07:04.659 +every time we change the details. + +00:07:04.660 --> 00:07:05.799 +Here are some examples + +00:07:05.800 --> 00:07:07.919 +of how we fill in the conference wiki. + +00:07:07.920 --> 00:07:10.959 +We put in the format of the talk, how Q&A works, + +00:07:10.960 --> 00:07:12.319 +and what the status is. + +00:07:12.320 --> 00:07:14.959 +Once the talk is live, we include the video + +00:07:14.960 --> 00:07:17.079 +and the links to the files, too. + +00:07:17.080 --> 00:07:18.719 +The code is a little bit long, + +00:07:18.720 --> 00:07:20.079 +but the important part is that + +00:07:20.080 --> 00:07:22.879 +we fill in a plist with the values we calculate, + +00:07:22.880 --> 00:07:26.379 +and then we can use `emacsconf-replace-plist-in-string` + +00:07:26.380 --> 00:07:28.019 +to put that all together. + +00:07:28.020 --> 00:07:30.279 +The schedule is a little more complicated. + +00:07:30.280 --> 00:07:32.079 +I wrote an Ikiwiki directive + +00:07:32.080 --> 00:07:34.019 +so that the markup is more manageable, + +00:07:34.020 --> 00:07:36.519 +and the Emacs Lisp function uses that. + +00:07:36.520 --> 00:07:40.619 +The Ikiwiki directive takes all the data and turns it into HTML... + +00:07:40.620 --> 00:07:42.959 +...so we can use Emacs Lisp to iterate over + +00:07:42.960 --> 00:07:44.819 +a slightly smaller property list + +00:07:44.820 --> 00:07:47.779 +and put them into the format Ikiwiki expects. + +00:07:47.780 --> 00:07:50.079 +It's nice to be able to navigate between talks + +00:07:50.080 --> 00:07:52.839 +without going back to the schedule page each time. + +00:07:52.840 --> 00:07:55.579 +This is handled by keeping two extra copies of the list: + +00:07:55.580 --> 00:07:57.559 +one with the first talk popped off, + +00:07:57.560 --> 00:08:00.359 +and one with an extra element added to the beginning. + +00:08:00.360 --> 00:08:02.439 +Then we can use the heads of those lists + +00:08:02.440 --> 00:08:04.379 +for next/previous links. + +NOTE Etherpad + +00:08:04.380 --> 00:08:06.679 +Links to the next talks are also handy + +00:08:06.680 --> 00:08:08.639 +on the collaborative Etherpad documents + +00:08:08.640 --> 00:08:12.039 +that we use for collecting questions, answers, and notes + +00:08:12.040 --> 00:08:12.839 +during each talk. + +00:08:12.840 --> 00:08:15.299 +Etherpad has an API... + +00:08:15.300 --> 00:08:17.319 +...so I can start the pads off with a template + +00:08:17.320 --> 00:08:18.939 +before the conference. + +00:08:18.940 --> 00:08:21.239 +I don't want to accidentally overwrite a pad + +00:08:21.240 --> 00:08:22.939 +that has been manually edited. + +00:08:22.940 --> 00:08:25.719 +We can save the timestamp of the last modification + +00:08:25.720 --> 00:08:28.199 +and then compare it before overwriting. + +NOTE E-mail + +00:08:28.200 --> 00:08:31.239 +Templates are also very handy when it comes to e-mail. + +00:08:31.240 --> 00:08:33.599 +Sometimes we send e-mails one at a time, + +00:08:33.600 --> 00:08:35.199 +like when we let a speaker know + +00:08:35.200 --> 00:08:36.879 +that we've received their proposal. + +00:08:36.880 --> 00:08:39.559 +That's mostly a matter of plugging the talk's properties + +00:08:39.560 --> 00:08:41.559 +into the right places in the template. + +00:08:41.560 --> 00:08:45.019 +Sometimes we send e-mails to lots of speakers at the same time, + +00:08:45.020 --> 00:08:48.299 +like when we send them instructions for uploading their files. + +00:08:48.300 --> 00:08:51.619 +Instead of sending one e-mail and Bcc-ing everyone, + +00:08:51.620 --> 00:08:53.479 +or sending people multiple e-mails + +00:08:53.480 --> 00:08:55.139 +because they have multiple talks, + +00:08:55.140 --> 00:08:57.559 +I like to draft these as individual e-mails + +00:08:57.560 --> 00:08:59.799 +to each speaker (or group of speakers, + +00:08:59.800 --> 00:09:02.599 +if more than one person is associated with a talk). + +00:09:02.600 --> 00:09:05.919 +That gives me an opportunity to personalize it further. + +NOTE BigBlueButton web conferences + +00:09:05.920 --> 00:09:08.119 +Many speakers answer questions live + +00:09:08.120 --> 00:09:10.039 +in BigBlueButton web conference rooms. + +00:09:10.440 --> 00:09:12.639 +Setting up one room per group of speakers + +00:09:12.640 --> 00:09:15.199 +makes it easy to give the speakers the details + +00:09:15.400 --> 00:09:18.719 +and associate the recorded video with the talk afterwards. + +00:09:18.720 --> 00:09:20.599 +For EmacsConf 2023, + +00:09:20.600 --> 00:09:25.079 +I used Spookfox to control Mozilla Firefox from Emacs + +00:09:25.080 --> 00:09:27.479 +so that I could automate creating the rooms + +00:09:27.480 --> 00:09:30.919 +and adding the URLs to the talk properties in my Org file. + +00:09:30.957 --> 00:09:33.959 +Then I can use mail merge to send each speaker + +00:09:33.960 --> 00:09:36.899 +the check-in instructions for their specific room. + +00:09:36.900 --> 00:09:39.139 +Some speakers will take questions by e-mail + +00:09:39.140 --> 00:09:41.619 +after the conference instead of attending live, + +00:09:41.620 --> 00:09:43.359 +so we send them shorter instructions + +00:09:43.360 --> 00:09:45.539 +just in case they want to drop by. + +00:09:45.540 --> 00:09:47.799 +[Live Q&A sessions]: After the first rush of questions, + +00:09:47.800 --> 00:09:50.579 +we can open it up for other people to join. + +00:09:50.580 --> 00:09:53.039 +This is handled by changing the public page + +00:09:53.040 --> 00:09:55.119 +from one that just refreshes in a loop + +00:09:55.120 --> 00:09:58.820 +to one that redirects to the actual web conference room. + +00:09:58.821 --> 00:10:00.079 +Just in case, we also + +00:10:00.080 --> 00:10:02.159 +generate static copies of those redirects + +00:10:02.160 --> 00:10:04.299 +so that we can copy them if needed. + +00:10:04.300 --> 00:10:06.679 +That way, I don't have to count on Emacs being able to + +00:10:06.680 --> 00:10:08.120 +publish them over TRAMP. + +NOTE Shortcuts + +00:10:08.121 --> 00:10:11.659 +During the conference, I'm often jumping from talk to talk. + +00:10:11.660 --> 00:10:13.199 +Instead of going to the Org file + +00:10:13.200 --> 00:10:14.519 +and then searching for the talk, + +00:10:14.520 --> 00:10:17.239 +I've made a little Hydra with keyboard shortcuts. + +00:10:17.240 --> 00:10:19.079 +One of these shortcuts lets me + +00:10:19.080 --> 00:10:20.959 +jump to a talk with completion + +00:10:20.960 --> 00:10:24.259 +so that I can just type in part of the talk ID, + +00:10:24.260 --> 00:10:26.399 +title, or speaker name. + +00:10:26.400 --> 00:10:28.679 +I've also defined some Embark actions + +00:10:28.680 --> 00:10:32.079 +so that I can act on a talk right from the completion menu. + +00:10:32.080 --> 00:10:35.079 +For example, I might want to jump to the wiki page + +00:10:35.080 --> 00:10:36.699 +or e-mail the speaker. + +NOTE Logbook + +00:10:36.700 --> 00:10:40.099 +I can also add notes to a talk while looking at an email, + +00:10:40.100 --> 00:10:41.639 +like when a speaker lets me know + +00:10:41.640 --> 00:10:43.279 +that their video will be late. + +00:10:43.280 --> 00:10:45.799 +Making it easy to add a note turns Emacs into + +00:10:45.800 --> 00:10:49.959 +a very basic contact relationship management system, or CRM. + +00:10:49.960 --> 00:10:52.439 +The way this works is that we have a function + +00:10:52.440 --> 00:10:55.459 +that lists all the email addresses associated with a talk. + +00:10:55.460 --> 00:10:57.919 +We can then map that over the list of talks, + +00:10:57.920 --> 00:10:59.959 +look up the author of the current email, + +00:10:59.960 --> 00:11:03.679 +prompt the user for the talk to add the note to, and add the note. + +NOTE Captions + +00:11:03.680 --> 00:11:04.679 +On to captions. + +00:11:04.680 --> 00:11:07.239 +We've been doing captions for the last couple of years, + +00:11:07.240 --> 00:11:10.419 +and now we have a small army of volunteer captioners. + +00:11:10.420 --> 00:11:12.679 +They get early access to the recorded talks + +00:11:12.680 --> 00:11:16.159 +and fix up misrecognized words, format keyboard shortcuts + +00:11:16.160 --> 00:11:19.579 +to follow Emacs conventions, spell names correctly, + +00:11:19.580 --> 00:11:21.839 +and do all sorts of other wonderful things. + +00:11:21.840 --> 00:11:24.399 +One of our evil plans with EmacsConf + +00:11:24.400 --> 00:11:28.359 +is to get cool stuff out of people's heads into videos + +00:11:28.360 --> 00:11:32.039 +and also make captions so that those videos can be searched. + +00:11:32.040 --> 00:11:34.999 +To make that possible, we first need a backstage area + +00:11:35.000 --> 00:11:36.919 +where volunteers can get the files. + +00:11:36.920 --> 00:11:39.839 +This is just a simple password-protected directory + +00:11:39.840 --> 00:11:43.739 +with a static HTML page that lists the talks by status + +00:11:43.740 --> 00:11:46.379 +and shows the files related to each talk. + +00:11:46.380 --> 00:11:49.899 +As a talk moves through the process, I update its TODO state + +00:11:49.900 --> 00:11:51.359 +and republish this index. + +00:11:51.360 --> 00:11:54.519 +Talks that are ready to be captioned show up in that section, + +00:11:54.520 --> 00:11:58.179 +and volunteers can call dibs on the talk they're interested in. + +00:11:58.180 --> 00:12:00.979 +That's all done with a function that formats the information + +00:12:00.980 --> 00:12:04.319 +and uses TRAMP to save the file directly to the server. + +00:12:04.320 --> 00:12:06.679 +You can find more details on our captioning process + +00:12:06.680 --> 00:12:09.039 +at emacsconf.org/captioning. + +00:12:09.040 --> 00:12:13.219 +I like using subed to edit subtitles within Emacs. + +NOTE Crontabs and playing the talks + +00:12:13.220 --> 00:12:16.059 +Let's talk about actually playing the talks. + +00:12:16.060 --> 00:12:19.559 +For EmacsConf 2022, we tried using Emacs timers + +00:12:19.560 --> 00:12:20.939 +to run the talks. + +00:12:20.940 --> 00:12:24.079 +It turns out that you can't call TRAMP from a timer + +00:12:24.080 --> 00:12:26.719 +when you're already using TRAMP from another timer + +00:12:26.720 --> 00:12:27.799 +at the same time. + +00:12:27.800 --> 00:12:29.719 +I thought about just tweaking the schedule + +00:12:29.720 --> 00:12:31.799 +so that we always start things at different times, + +00:12:31.800 --> 00:12:35.119 +but I figured there's probably a more elegant way to do this. + +00:12:35.120 --> 00:12:37.519 +This year, I'm planning to experiment with using cron + +00:12:37.520 --> 00:12:39.599 +to start talks on autopilot. + +00:12:39.600 --> 00:12:42.479 +The shell scripts will take care of playing the videos... + +00:12:42.480 --> 00:12:44.839 +... figuring out the appropriate Q&A... + +00:12:44.840 --> 00:12:47.579 +... and joining the web conference if needed. + +00:12:47.580 --> 00:12:49.599 +We just need to format the information... + +00:12:49.600 --> 00:12:52.219 +...and install it as the track's crontab. + +00:12:52.220 --> 00:12:54.079 +It's useful to be able to switch tracks + +00:12:54.080 --> 00:12:55.879 +to manual mode independently, + +00:12:55.880 --> 00:12:57.899 +just in case things go haywire. + +00:12:57.900 --> 00:13:00.119 +Then we can start everything manually. + +00:13:00.120 --> 00:13:02.799 +I can also manually update a talk's status, + +00:13:02.800 --> 00:13:06.519 +like when the host tells me that it's okay to open up the Q&A. + +00:13:06.520 --> 00:13:08.719 +The shell scripts we run from the crontab + +00:13:08.720 --> 00:13:11.279 +can also update the talk status themselves. + +NOTE Transitions + +00:13:11.280 --> 00:13:14.319 +Then a bunch of things automatically happen based on + +00:13:14.320 --> 00:13:15.599 +the talk status changes. + +00:13:15.600 --> 00:13:18.959 +This uses `org-after-todo-state-change-hook`. + +00:13:18.960 --> 00:13:20.359 +We get the talk information + +00:13:20.360 --> 00:13:22.519 +and pass it to a list of functions. + +00:13:22.520 --> 00:13:26.279 +Internet Relay Chat or IRC is an easy way for people + +00:13:26.280 --> 00:13:29.139 +to join the conversation around EmacsConf. + +00:13:29.140 --> 00:13:31.799 +We announce a talk whenever it changes state. + +00:13:31.800 --> 00:13:33.599 +For example, when a talk starts, + +00:13:33.600 --> 00:13:36.039 +we post the URLs to the talk webpage + +00:13:36.040 --> 00:13:39.439 +and the Etherpad for questions. We change the topic as well, + +00:13:39.440 --> 00:13:41.879 +so anyone can see the current talk's information + +00:13:41.880 --> 00:13:43.039 +even if they're a little late. + +00:13:43.180 --> 00:13:45.799 +This is easy to do with a little bit of Emacs Lisp + +00:13:45.800 --> 00:13:48.519 +because (of course!) Emacs has an IRC client. + +00:13:48.520 --> 00:13:49.879 +In fact, it has several. + +NOTE Wrapping up + +00:13:49.880 --> 00:13:53.139 +It seems like a lot of automation and Emacs Lisp, + +00:13:53.140 --> 00:13:56.899 +but really, all of this was just built up little by little. + +00:13:56.900 --> 00:13:59.279 +And tinkering with this is *fun*, you know? + +00:13:59.280 --> 00:14:01.259 +It's like always being able to ask, + +00:14:01.260 --> 00:14:03.300 +"Hey, wouldn't it be cool if..." + +00:14:03.301 --> 00:14:05.279 +and then actually being able to go and do it. + +00:14:05.280 --> 00:14:07.999 +Sometimes it feels like EmacsConf is an excuse + +00:14:08.000 --> 00:14:10.199 +for me to play with Emacs. + +00:14:10.200 --> 00:14:11.999 +It's pretty amazing what you can do + +00:14:12.000 --> 00:14:13.799 +by combining a bunch of pieces. + +00:14:13.800 --> 00:14:16.719 +A way to store slightly-structured information. + +00:14:16.720 --> 00:14:18.879 +A way to get it out again. Templates. + +00:14:18.880 --> 00:14:20.679 +TRAMP, for working with remote files + +00:14:20.680 --> 00:14:21.919 +and running remote commands. + +00:14:21.920 --> 00:14:23.839 +A way to talk to a web browser. + +00:14:23.840 --> 00:14:25.399 +A way to work with SVGs. + +00:14:25.400 --> 00:14:27.759 +An email client. A chat client. + +00:14:27.760 --> 00:14:29.639 +You can smoosh them all together + +00:14:29.640 --> 00:14:32.699 +in a way that you couldn't if they were all separate things. + +00:14:32.700 --> 00:14:36.279 +The code is in the emacsconf-el repository. + +00:14:36.280 --> 00:14:39.119 +It's a bit of a tangle because it's accumulating organically + +00:14:39.120 --> 00:14:40.879 +and I haven't really had the brainspace + +00:14:40.880 --> 00:14:42.579 +to step back and clean it up. + +00:14:42.580 --> 00:14:45.919 +But if you spotted anything interesting in this presentation, + +00:14:45.920 --> 00:14:48.619 +you can go check it out and see what you can scavenge. + +00:14:48.620 --> 00:14:50.999 +The link and this presentation are available + +00:14:51.000 --> 00:14:59.119 +from this talk's webpage at emacsconf.org/2023/talks/emacsconf . + +00:14:59.120 --> 00:15:05.200 +Let's figure out how to make Emacsconf even awesomer next year! |