summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--2022/organizers-notebook.md632
-rw-r--r--2022/organizers-notebook/index.org590
-rw-r--r--2022/watch/dev.md175
-rw-r--r--2022/watch/gen.md223
-rw-r--r--2022/watch/info.md8
5 files changed, 1048 insertions, 580 deletions
diff --git a/2022/organizers-notebook.md b/2022/organizers-notebook.md
index b65d3145..87c2f3f5 100644
--- a/2022/organizers-notebook.md
+++ b/2022/organizers-notebook.md
@@ -23,31 +23,29 @@ This file is automatically exported from [/2022/organizers-notebook/index.org](/
Time-sensitive tasks:
- [Send schedule-published email for emacsconf-discuss](#announce-program):needsowner:timesensitive:email:
-- [Prepare email for nudging speakers to send prerec, and inform on upload workflow](#mail-upload):timesensitive:needsowner:
-- [Write volunteer update 2022-10-23](#volunteer-2022-10-23)
+- [Write volunteer update 2022-10-23](#volunteer-2022-10-23):update:
Other projects:
- [Coordinate and help volunteers](#coordinate-volunteers):sachac:
- [Prepare for prerecs](#prepare-prerec-process):zaeph:
-- [Investigate streaming options, maybe OBS in the cloud](#streaming):corwin:
- [Work on the OBS scenes](#obs-scenes):zaeph:corwin:
- [Build up the ansible playbook](#ansible):sachac:opal:
-- [Make something to display between talks](#intro)
+- [Make something to display between talks](#intro):sachac:
- [Create protocol for live Q&A](#live-protocol):zaeph:
-- [Add nice-to-have stuff to prepare.md](#extra-prepare):zaeph:
- [Find volunteers for tech-checks](#tech-checks):zaeph:
+- [Smoothen captioning workflow](#caption-workflow):sachac:
- [Update viewing instructions and watch pages](#write-viewing):sachac:
- [Prepare to handle talk state changes](#publish-live):sachac:
- [Set up talks on Toobnix and YouTube](#video-platforms):sachac:
- [Set up stream events on Toobnix and YouTube](#other-streams):sachac:
- [Ask speakers for bios or support nudges to include on their talk pages](#speaker-bio)
- [Do a dry run](#dry-run)
-- [Figure out why ikiwiki is slow](#ikiwiki-regex):infra:wiki:
- [Add category tags and possibly links between talks across 2022 and all previous years](#link-pages):needsowner:wiki:
- [Turn off file upload service on media.emacsconf.org](#upload-off):sachac:infra:
- [Plan Etherpad use and hosting](#etherpad):sachac:ansible:
- [Set up BBB rooms and update conf.org](#create-bbb):sachac:
+- [Investigate streaming options, maybe OBS in the cloud](#streaming):corwin:
<a id="cadence"></a>
@@ -108,7 +106,7 @@ Other projects:
<tr>
<td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">[2022-10-23 Sun]</span></span></td>
<td class="org-left"><a href="#upload">file upload</a></td>
-<td class="org-left"><a href="#mail-upload">file upload instructions</a></td>
+<td class="org-left"><a href="#mail-upload">file upload instructions</a>, backstage</td>
<td class="org-left"><a href="#volunteer-2022-10-23">training</a></td>
<td class="org-left">&#xa0;</td>
</tr>
@@ -229,7 +227,7 @@ interests you!
<tr>
<td class="org-left"><a href="#coordinate-volunteers">volunteer coordination</a></td>
<td class="org-left">ad-hoc</td>
-<td class="org-left"><b>INPROGRESS playbook</b></td>
+<td class="org-left"><b>DONE playbook</b></td>
<td class="org-left">training meetings + recordings</td>
</tr>
@@ -237,8 +235,8 @@ interests you!
<tr>
<td class="org-left"><a href="#prepare-prerec-process">prerec</a></td>
<td class="org-left">DONE play original with captions</td>
-<td class="org-left">Z: normalize audio, reduce noise</td>
-<td class="org-left"><b>S: post as soon as talk is live</b></td>
+<td class="org-left"><b>DONE Z: normalize audio</b></td>
+<td class="org-left">reduce noise</td>
</tr>
@@ -246,7 +244,7 @@ interests you!
<td class="org-left">BBB rooms</td>
<td class="org-left">about 5 rooms that we cycle through</td>
<td class="org-left">&#xa0;</td>
-<td class="org-left"><b>S: DONE one room per speaker</b></td>
+<td class="org-left"><b>DONE S: one room per speaker</b></td>
</tr>
@@ -270,7 +268,7 @@ interests you!
<td class="org-left"><a href="#write-viewing">watch page</a></td>
<td class="org-left">tracks</td>
<td class="org-left">+ IRC</td>
-<td class="org-left"><b>S: DONE + talk info</b>, maybe even current/recent/next</td>
+<td class="org-left"><b>DONE S: + talk info</b>, maybe even current/recent/next</td>
</tr>
@@ -278,7 +276,7 @@ interests you!
<td class="org-left"><a href="#etherpad">pad</a></td>
<td class="org-left">one pad for conf</td>
<td class="org-left">one pad per talk, wikimedia</td>
-<td class="org-left"><b>S: DONE one pad per talk, self-hosted</b> so we can access API</td>
+<td class="org-left"><b>DONE S: one pad per talk, self-hosted</b> so we can access API</td>
</tr>
@@ -309,7 +307,7 @@ interests you!
<tr>
<td class="org-left"><a href="#publish-live">talk pages</a></td>
<td class="org-left">S: link to stream, pad, IRC</td>
-<td class="org-left"><b>link to prerec when live</b></td>
+<td class="org-left"><b>S: link to prerec when live</b></td>
<td class="org-left">embed stream, pad, IRC, prerec</td>
</tr>
@@ -333,7 +331,7 @@ interests you!
<tr>
<td class="org-left"><a href="#wiki-design">wiki</a></td>
<td class="org-left">plain text, markdown</td>
-<td class="org-left"><b>sachac: some JS and CSS enrichment</b></td>
+<td class="org-left"><b>S: some JS and CSS enrichment</b></td>
<td class="org-left">more JS and CSS, embeds, videoplayer</td>
</tr>
@@ -349,9 +347,17 @@ interests you!
<tr>
<td class="org-left"><a href="#ansible">ansible</a></td>
<td class="org-left">none</td>
-<td class="org-left"><b>sachac: some automation</b></td>
+<td class="org-left"><b>S: some automation</b></td>
<td class="org-left">comprehensive, can also work against containers</td>
</tr>
+
+
+<tr>
+<td class="org-left"><a href="#caption-workflow">caption workflow</a></td>
+<td class="org-left">YT autosubs</td>
+<td class="org-left"><b>DONE S: Whisper autosubs</b></td>
+<td class="org-left">Whisper + more granular timestamps</td>
+</tr>
</tbody>
</table>
@@ -363,8 +369,7 @@ interests you!
Ordered chronologically (and therefore by importance).
- [Send schedule-published email for emacsconf-discuss](#announce-program):needsowner:timesensitive:email:
-- [Prepare email for nudging speakers to send prerec, and inform on upload workflow](#mail-upload):timesensitive:needsowner:
-- [Write volunteer update 2022-10-23](#volunteer-2022-10-23)
+- [Write volunteer update 2022-10-23](#volunteer-2022-10-23):update:
<a id="announce-program"></a>
@@ -416,93 +421,26 @@ emacsconf-discuss list, so as to help avoid generating extra off-topic
chatter in the other lists cc&rsquo;d in this message; thank you.
-<a id="mail-upload"></a>
-
-## TODO Prepare email for nudging speakers to send prerec, and inform on upload workflow :timesensitive:needsowner:
-
-
-### Code
-
- (defun emacsconf-mail-upload (group &optional template)
- "Send upload instructions and reminder.
- GROUP is (email . (talk talk))"
- (interactive (list (emacsconf-mail-complete-email-group)))
- (let ((action-date (date-to-time "2022-11-04")))
- (emacsconf-mail-prepare
- (or template (emacsconf-mail-merge-get-template "upload"))
- group
- (list
- :slugs (mapconcat (lambda (o) (plist-get o :slug)) (cdr group) " or ")
- :speakers-short (plist-get (cadr group) :speakers-short)
- :plural (if (= (length (cdr group)) 1) "" "s")
- :email (plist-get (cadr group) :email)
- :year (or (plist-get (cadr group) :year) emacsconf-year)
- :prerec-note (emacsconf-surround
- (make-string 64 ?-)
- (string-join (seq-uniq (mapcar
- (lambda (o)
- (plist-get o :prerec-info))
- (cdr group)))
- "\n")
- (make-string 64 ?-)
- "")))))
-
-
-### Template
-
-Hi, ${speakers-short}!
-
-${prerec-note}Here are the instructions for uploading the video${plural} for your talk${plural}.
-You can find the latest version of the instructions at https://emacsconf.org/2022/upload/ .
-There are two ways to upload your talk${plural} this year, so you can pick the one that works best for you:${wrap}
-
-- Web-based: <https://ftp-upload.emacsconf.org> , password emacsconf
-- FTP: host: ftp-upload.emacsconf.org, port: 21, username: anonymous
- folder: upload-here
-
-If you upload slides and other resources, we can include them on the
-talk page when your talk goes live. If you happen to have a script or
-a transcript, please include them as well (it’ll speed up the
-captioning for us).
-
-Please start your filenames with the ID for the talk that it&rsquo;s for:
-${slugs}.
-
-If you&rsquo;re still working on your talk, you might find the tips at
-<https://emacsconf.org/2022/prepare> useful. In brief:
-
-- at least 1280x720 resolution
-- we recommend dark text on a light background, with enough contrast
- to make it easy to read
-- if possible, use a headset or external microphone to record audio
-- leave 5 seconds of quiet at the end of the video to facilitate noise
- reduction for us
-
-Please plan to upload your talk by November 4 (next Friday) so that we
-can get started preparing it for streaming. If you can&rsquo;t make it by
-then, we can accept later submissions, although it&rsquo;s a bit more of a
-scramble and our stress levels go up as the conference approaches. =)
-We&rsquo;d really appreciate the extra time for captioning and
-double-checking. Thank you for your help in getting ready for a smooth
-EmacsConf 2022!
-
-Sacha Chua
-
-
<a id="volunteer-2022-10-23"></a>
-## TODO Write volunteer update 2022-10-23
+## TODO Write volunteer update 2022-10-23 :update:
-- Updates:
- - dto signed up for shifts
- - created BBB rooms and added them to conf.org
- - set up web-based upload, nudging speakers
+- set up web-based upload, nudging speakers
+- Backstage area now open with three talks, info sent to speakers and captioning volunteers
+- created BBB rooms and added them to conf.org
+- dto signed up for shifts
- playbook drafts
- <https://emacsconf.org/2022/volunteer/irc>
- <https://emacsconf.org/2022/volunteer/caption>
- <https://emacsconf.org/2022/volunteer/pad>
- <https://emacsconf.org/2022/volunteer/checkin>
- <https://emacsconf.org/2022/volunteer/host>
+- tested streaming to gen and dev streams, viewing from watch pages
+
+next week:
+
+- captions
+-
<a id="projects"></a>
@@ -511,24 +449,23 @@ Sacha Chua
- [Coordinate and help volunteers](#coordinate-volunteers):sachac:
- [Prepare for prerecs](#prepare-prerec-process):zaeph:
-- [Investigate streaming options, maybe OBS in the cloud](#streaming):corwin:
- [Work on the OBS scenes](#obs-scenes):zaeph:corwin:
- [Build up the ansible playbook](#ansible):sachac:opal:
-- [Make something to display between talks](#intro)
+- [Make something to display between talks](#intro):sachac:
- [Create protocol for live Q&A](#live-protocol):zaeph:
-- [Add nice-to-have stuff to prepare.md](#extra-prepare):zaeph:
- [Find volunteers for tech-checks](#tech-checks):zaeph:
+- [Smoothen captioning workflow](#caption-workflow):sachac:
- [Update viewing instructions and watch pages](#write-viewing):sachac:
- [Prepare to handle talk state changes](#publish-live):sachac:
- [Set up talks on Toobnix and YouTube](#video-platforms):sachac:
- [Set up stream events on Toobnix and YouTube](#other-streams):sachac:
- [Ask speakers for bios or support nudges to include on their talk pages](#speaker-bio)
- [Do a dry run](#dry-run)
-- [Figure out why ikiwiki is slow](#ikiwiki-regex):infra:wiki:
- [Add category tags and possibly links between talks across 2022 and all previous years](#link-pages):needsowner:wiki:
- [Turn off file upload service on media.emacsconf.org](#upload-off):sachac:infra:
- [Plan Etherpad use and hosting](#etherpad):sachac:ansible:
- [Set up BBB rooms and update conf.org](#create-bbb):sachac:
+- [Investigate streaming options, maybe OBS in the cloud](#streaming):corwin:
Ordered by importance.
@@ -544,39 +481,6 @@ Ordered by importance.
- Encourage people to sign up for [Shifts](#shifts)
-### TODO Write playbooks
-
-
-#### DONE Host :zaeph:
-
-<https://emacsconf.org/2022/volunteer/host>
-
-
-#### BLOCKED Streamer :zaeph:
-
-Blocked by [Investigate streaming options, maybe OBS in the cloud](#streaming)
-
-
-#### DONE Check-in
-
-<https://emacsconf.org/2022/volunteer/checkin/>
-
-
-#### DONE IRC
-
-<https://emacsconf.org/2022/volunteer/irc/>
-
-
-#### DONE Pad
-
-<https://emacsconf.org/2022/volunteer/pad/>
-
-
-#### DONE Captions
-
-<https://emacsconf.org/2022/volunteer/caption/>
-
-
### TODO Plan training session(s), Q&A availability, recordings
@@ -622,6 +526,9 @@ Other considerations:
- We might want to tweak the time before keyframes (`-g`).
+### TODO Check process for posting prerecs to the talk page and media directory as soon as the talk is live :sachac:
+
+
### TODO Figure out workflow for handling submitted prerecs
We need time after the prerecs get submitted to:
@@ -634,37 +541,6 @@ We need time after the prerecs get submitted to:
Make changes in [As prerecorded talks come in](#prerec-process)
-<a id="streaming"></a>
-
-## TODO Investigate streaming options, maybe OBS in the cloud :corwin:
-
-- Issue: zaeph was dropping frames and couldn’t pay attention to as many things as he wanted
-- Issue: corwin needs assistance to not be locked in his chair for the whole conf. Premptively, zaeph can do it by broadcasting OBS scenes via the rtmp (instead of just his webcam).
-- With a long day, we may want to be able to schedule hosts/streamers/publishers in shifts
-- Ideal: Easy reproducible setup to spin up an OBS VM with scenes set up, allowing multiple users to connect to it at the same time. Maybe x2go or vnc? VMs with 8 vCPUs and a vGPU cost more, so it would be good to figure out what&rsquo;s needed, spin it down, and then spin it up maybe the day before or something like that.
-- Plus points if we can control the OBS via password-protected websocket so we can tell it to switch scenes (and even more points if we do so from Emacs, maybe via that obs-websocket.el ;) ). MPV is also controllable via IPC, so we can use the same MPV player and then switch videos around. Maybe mpvc? <https://unix.stackexchange.com/questions/664728/how-can-i-control-mpv-in-command-line>
-- Probably Linode&rsquo;s Dedicated 32 GB + RTX6000 GPU x1 at $1.50 an hour for 2-3 days + dev time, since live.emacsconf.org is in Linode as well
-- We should also look into normalization across the board, especially if we have BBB participants. pipewire + easyeffects on the box might be the easiest way to do it.
-
-Resources:
-
-- <https://blog.wirelessmoves.com/2021/07/running-obs-studio-in-the-cloud.html>
-
-- Multiple users accessing X11
- - Apache Guacamole
- - <https://askubuntu.com/questions/817970/how-to-setup-multiple-simultaneous-access-to-x11vnc-session>
- - <https://xpra.org/>
-
-
-### TODO corwin: plan an approach to use a centralized OBS/nginix &ldquo;bouncer&rdquo; :corwin:
-
-
-### TODO corwin: document such that someone else could use/fix it :corwin:
-
-
-### TODO corwin: recruit at least one more person to help operate the &ldquo;video bouncer&rdquo; :corwin:
-
-
<a id="obs-scenes"></a>
## TODO Work on the OBS scenes :zaeph:corwin:
@@ -700,7 +576,7 @@ in prod or docker container
(find-file &ldquo;/ssh:live|sudo::/etc/icecast2/icecast.xml&rdquo;)
-#### TODO Set up watch/gen/480p
+#### TODO Set up watch/gen-480p
### TODO publishing environment
@@ -714,7 +590,7 @@ in prod or docker container
<a id="intro"></a>
-## BLOCKED Make something to display between talks
+## TODO Make something to display between talks :sachac:
Goals:
@@ -726,10 +602,6 @@ What to show in between talks:
- Previous talk: title, speaker, pronouns, talk page, Q&A information (if still live)
- Next talk: title, speaker, pronouns, talk page, Q&A information, countdown
-If it&rsquo;s static, this needs to wait for the decision on how we&rsquo;re going
-to use Etherpad, or we should have friendly URLs redirect to the right
-pads
-
- Good: Static image, maybe created with LaTeX
- Better: Video with unobtrusive sound so people can doublecheck that their audio works
- Best: Emacs thing so that we can have a dynamic timer and last-minute announcements, and so that it&rsquo;s Emacs =)
@@ -752,14 +624,6 @@ Comments:
- It would be nice to have a protocol with speakers to tell us that they’re uncomfortable with a question, just so that we can find a smooth way to skip it.
-<a id="extra-prepare"></a>
-
-## STANDBY Add nice-to-have stuff to prepare.md :zaeph:
-
-- org-reveal config
-- SIL fonts choice
-
-
<a id="tech-checks"></a>
## INPROGRESS Find volunteers for tech-checks :zaeph:
@@ -789,6 +653,21 @@ From previous years:
> - Do you need help finding your way around IRC so that you can check into \`#emacsconf-org\`? What is your IRC nickname?
+<a id="caption-workflow"></a>
+
+## TODO Smoothen captioning workflow :sachac:
+
+It looks like OpenAPI needs a little less editing in terms of
+capitalization and punctuation, but it produces longer captions
+(likely a 30-second sliding window). I&rsquo;ll try to upload both YT and
+OpenAPI captions so that people can decide what they like.
+
+
+### TODO Investigate more granular timestamps for the output from OpenAPI Whisper
+
+<https://stackoverflow.com/questions/73822353/how-can-i-get-word-level-timestamps-in-openais-whisper-asr>
+
+
<a id="write-viewing"></a>
## DONE Update viewing instructions and watch pages :sachac:
@@ -932,14 +811,6 @@ zaeph is available on 2022-11-06
- [ ] Wind everything down
-<a id="ikiwiki-regex"></a>
-
-## TODO Figure out why ikiwiki is slow :infra:wiki:
-
-complex regular expression issues?
-should the captions be outside the wiki?
-
-
<a id="link-pages"></a>
## TODO Add category tags and possibly links between talks across 2022 and all previous years :needsowner:wiki:
@@ -1097,6 +968,39 @@ see conf.org for the rest of the process
### TODO Add volunteers to the BBB rooms
+<a id="streaming"></a>
+
+## TODO Investigate streaming options, maybe OBS in the cloud :corwin:
+
+- bandali doesn&rsquo;t have much cognitive bandwidth at the moment, so we can keep things simple with OBS on laptops
+
+- Issue: zaeph was dropping frames and couldn’t pay attention to as many things as he wanted
+- Issue: corwin needs assistance to not be locked in his chair for the whole conf. Premptively, zaeph can do it by broadcasting OBS scenes via the rtmp (instead of just his webcam).
+- With a long day, we may want to be able to schedule hosts/streamers/publishers in shifts
+- Ideal: Easy reproducible setup to spin up an OBS VM with scenes set up, allowing multiple users to connect to it at the same time. Maybe x2go or vnc? VMs with 8 vCPUs and a vGPU cost more, so it would be good to figure out what&rsquo;s needed, spin it down, and then spin it up maybe the day before or something like that.
+- Plus points if we can control the OBS via password-protected websocket so we can tell it to switch scenes (and even more points if we do so from Emacs, maybe via that obs-websocket.el ;) ). MPV is also controllable via IPC, so we can use the same MPV player and then switch videos around. Maybe mpvc? <https://unix.stackexchange.com/questions/664728/how-can-i-control-mpv-in-command-line>
+- Probably Linode&rsquo;s Dedicated 32 GB + RTX6000 GPU x1 at $1.50 an hour for 2-3 days + dev time, since live.emacsconf.org is in Linode as well
+- We should also look into normalization across the board, especially if we have BBB participants. pipewire + easyeffects on the box might be the easiest way to do it.
+
+Resources:
+
+- <https://blog.wirelessmoves.com/2021/07/running-obs-studio-in-the-cloud.html>
+
+- Multiple users accessing X11
+ - Apache Guacamole
+ - <https://askubuntu.com/questions/817970/how-to-setup-multiple-simultaneous-access-to-x11vnc-session>
+ - <https://xpra.org/>
+
+
+### TODO corwin: plan an approach to use a centralized OBS/nginix &ldquo;bouncer&rdquo; :corwin:
+
+
+### TODO corwin: document such that someone else could use/fix it :corwin:
+
+
+### TODO corwin: recruit at least one more person to help operate the &ldquo;video bouncer&rdquo; :corwin:
+
+
<a id="maybe-projects"></a>
# Projects to bear in mind but which are not actual
@@ -1822,6 +1726,71 @@ We tried using q56 before, but it was a little too aggressive. Q=32 is the defau
fi
+### sachac
+
+- download to local cache
+ ~/proj/emacsconf/private/sync-cache
+- upload to YouTube in case we can get autogenerated subtitles from there
+ <https://studio.youtube.com/channel/UCwuyodzTl_KdEKNuJmeo99A/videos/upload?filter=%5B%5D&sort=%7B%22columnType%22%3A%22date%22%2C%22sortOrder%22%3A%22DESCENDING%22%7D>
+- upload to res:~/2022/captions
+- caption.sh
+- sync-cache to copy the vtt
+- emacsconf-make-backstage-index
+- send confirmation e-mail
+
+
+### Confirmation e-mail
+
+
+<a id="ack-prerec"></a>
+
+#### Acknowledge pre-rec submission
+
+ (defun emacsconf-mail-acknowledge-submission (talk &optional template)
+ (interactive (list (emacsconf-complete-talk-info)))
+ (emacsconf-mail-prepare
+ (or template (emacsconf-mail-merge-get-template "ack-prerec"))
+ (plist-get talk :email)
+ (list
+ :backstage "https://media.emacsconf.org/2022/backstage/"
+ :backstage-user "emacsconf"
+ :backstage-password emacsconf-backstage-password
+ :time (plist-get talk :time)
+ :title (plist-get talk :title)
+ :email (plist-get talk :email)
+ :minutes (plist-get talk :video-time)
+ :speakers-short (plist-get talk :speakers-short)
+ :url (concat emacsconf-base-url (plist-get talk :url))
+ :year emacsconf-year)))
+
+
+#### Template
+
+Hi, ${speakers-short}!
+
+Just a quick note to let you know that I&rsquo;ve downloaded your
+submission for &ldquo;${title}&rdquo;. We&rsquo;ve added your submission to the backstage
+area at ${backstage} (username: ${backstage-user}, password:
+${backstage-password}), and we&rsquo;ll post the files on your talk page
+when the talk is public. A quick check shows that your video is about
+${minutes} minutes long (${time} minutes budgeted).${wrap}
+
+We&rsquo;ll be working on captioning it over the next few weeks. We&rsquo;ll
+e-mail again a little closer to the conference with schedule updates
+and other useful information. If you want to upload a new version, you
+can upload it the same way you did the previous one.
+
+Please feel free to e-mail us at emacsconf-submit@gnu.org if you need
+help updating the talk wiki page at ${url} or if you have other
+questions.${wrap}
+
+Thank you so much for all the work you put into preparing a talk for
+EmacsConf ${year}, and thank you for submitting the prerecorded video
+before the conference!
+
+Sacha Chua
+
+
<a id="when-captioned"></a>
## When a talk is captioned
@@ -2312,7 +2281,7 @@ Probably focus on grabbing the audio first and seeing what&rsquo;s worth keeping
Make a table of the form
-<table id="orgebfe95e" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
+<table id="org87c63bb" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<colgroup>
@@ -2780,7 +2749,7 @@ Look for the TO\_CONFIRM status in conf.org, probably include in schedule e-mail
(draft-schedule (concat emacsconf-base-url emacsconf-year "/draft-schedule/")))
(emacsconf-mail-prepare
(or template (emacsconf-mail-merge-get-template "check-sched"))
- group
+ (car group)
(list
:titles
(mapconcat (lambda (o) (format "%s: %s"
@@ -2854,7 +2823,7 @@ Look for the TO\_CONFIRM status in conf.org, probably include in schedule e-mail
(draft-schedule (concat emacsconf-base-url emacsconf-year "/draft-schedule/")))
(emacsconf-mail-prepare
(or template (emacsconf-mail-merge-get-template "check-sched"))
- group
+ (car group)
(list
:titles
(mapconcat (lambda (o) (format "%s: %s"
@@ -3246,12 +3215,208 @@ Where:
Nice if there&rsquo;s an Ansible playbook
sachac&rsquo;s notes:
- <file:///home/zaeph/code/docker/emacsconf-publish/>
+ <file:///home/sacha/code/docker/emacsconf-publish/>
- probably good to set it up on front
It&rsquo;s now on front.
+<a id="mail-upload"></a>
+
+## DONE Prepare email for nudging speakers to send prerec, and inform on upload workflow :timesensitive:needsowner:
+
+
+### Code
+
+ (defun emacsconf-mail-upload (group &optional template)
+ "Send upload instructions and reminder.
+ GROUP is (email . (talk talk))"
+ (interactive (list (emacsconf-mail-complete-email-group)))
+ (let ((action-date (date-to-time "2022-11-04")))
+ (emacsconf-mail-prepare
+ (or template (emacsconf-mail-merge-get-template "upload"))
+ (car group)
+ (list
+ :slugs (mapconcat (lambda (o) (plist-get o :slug)) (cdr group) " or ")
+ :speakers-short (plist-get (cadr group) :speakers-short)
+ :plural (if (= (length (cdr group)) 1) "" "s")
+ :email (plist-get (cadr group) :email)
+ :year (or (plist-get (cadr group) :year) emacsconf-year)
+ :prerec-note (emacsconf-surround
+ (make-string 64 ?-)
+ (string-join (seq-uniq (mapcar
+ (lambda (o)
+ (plist-get o :prerec-info))
+ (cdr group)))
+ "\n")
+ (make-string 64 ?-)
+ "")))))
+
+
+### Template
+
+Hi, ${speakers-short}!
+
+${prerec-note}Here are the instructions for uploading the video${plural} for your talk${plural}.
+You can find the latest version of the instructions at https://emacsconf.org/2022/upload/ .
+There are two ways to upload your talk${plural} this year, so you can pick the one that works best for you:${wrap}
+
+- Web-based: <https://ftp-upload.emacsconf.org> , password emacsconf
+- FTP: host: ftp-upload.emacsconf.org, port: 21, username: anonymous
+ folder: upload-here
+
+If you upload slides and other resources, we can include them on the
+talk page when your talk goes live. If you happen to have a script or
+a transcript, please include them as well (it’ll speed up the
+captioning for us).
+
+Please start your filenames with the ID for the talk that it&rsquo;s for:
+${slugs}.
+
+If you&rsquo;re still working on your talk, you might find the tips at
+<https://emacsconf.org/2022/prepare> useful. In brief:
+
+- at least 1280x720 resolution
+- we recommend dark text on a light background, with enough contrast
+ to make it easy to read
+- if possible, use a headset or external microphone to record audio
+- leave 5 seconds of quiet at the end of the video to facilitate noise
+ reduction for us
+
+Please plan to upload your talk by November 4 (next Friday) so that we
+can get started preparing it for streaming. If you can&rsquo;t make it by
+then, we can accept later submissions, although it&rsquo;s a bit more of a
+scramble and our stress levels go up as the conference approaches. =)
+We&rsquo;d really appreciate the extra time for captioning and
+double-checking. Thank you for your help in getting ready for a smooth
+EmacsConf 2022!
+
+Sacha Chua
+
+
+## DONE Send backstage email
+
+ (defun emacsconf-mail-backstage-info (group &optional template)
+ (interactive (list (emacsconf-complete-talk-info)))
+ (emacsconf-mail-prepare
+ (or template (emacsconf-mail-merge-get-template "backstage"))
+ (plist-get group :email)
+ (append group
+ (list
+ :backstage "https://media.emacsconf.org/2022/backstage/"
+ :backstage-user "emacsconf"
+ :backstage-password emacsconf-backstage-password
+ :conf-name emacsconf-name
+ :year emacsconf-year))))
+ (defun emacsconf-mail-backstage-info-to-speakers-and-captioners ()
+ (interactive)
+ (let ((template (emacsconf-mail-merge-get-template "backstage"))
+ (speaker-groups
+ (seq-uniq
+ (mapcar
+ (lambda (talk)
+ (list
+ :name (plist-get talk :speakers-short)
+ :email (plist-get talk :email)
+ :role "speaker"
+ :backstage-use
+ "As we add more talks, you can skim through any relevant ones to
+ see if there are any points you'd like to build on in your talk.
+ Also, you can get a sense of what we do behind the scenes to try
+ to get as many talks captioned for broadcast, and what you can do
+ to make it easier. (A text file with names and technical terms
+ can be helpful. No need to type out a manual transcript if you
+ don't start from a script.) After you upload your talk and we
+ process the files, you can use the backstage area to check the
+ quality of the reencoded video."))
+ (seq-filter (lambda (o) (string= (plist-get o :status) "WAITING_FOR_PREREC"))
+ (emacsconf-filter-talks (emacsconf-get-talk-info))))))
+ (volunteer-groups
+ (with-current-buffer (find-file-noselect emacsconf-org-file)
+ (org-map-entries (lambda ()
+ (list :name (org-entry-get (point) "NAME_SHORT")
+ :email (org-entry-get (point) "EMAIL")
+ :role "captioning volunteer"
+ :backstage-use "If you see a talk that you'd like to caption, you can e-mail me at sacha@sachachua.com and I can reserve it for you."))
+ "captions"))))
+ (mapcar (lambda (g) (emacsconf-mail-backstage-info g template))
+ (append
+ speaker-groups
+ (seq-remove (lambda (v) (seq-find (lambda (s) (string= (plist-get s :email)
+ (plist-get v :email)))
+ speaker-groups))
+ volunteer-groups)))))
+
+
+### Template
+
+Hi ${name}!
+
+You&rsquo;re getting this e-mail because you are a ${role} for ${conf-name}
+${year}. (Thanks!)${wrap}
+
+I&rsquo;m so excited! =) A number of speakers have uploaded their videos,
+and OpenAI Whisper looks like a promising way to get automatically
+generated captions that we can use as a starting point.
+
+We&rsquo;ve set up ${backstage} as the backstage area where you can view the
+videos and resources uploaded so far. You can access it with the
+username "${backstage-user}&ldquo; and the password &rdquo;${backstage-password}&ldquo;.
+Please keep the backstage password and other speakers&rsquo; talk resources
+secret. ${backstage-use}${wrap}
+
+Thank you!
+
+Sacha Chua
+
+
+## DONE Write playbooks
+
+
+### DONE Host :zaeph:
+
+<https://emacsconf.org/2022/volunteer/host>
+
+
+### CANCELLED Streamer :zaeph:
+
+Blocked by [Investigate streaming options, maybe OBS in the cloud](#streaming)
+
+bandali and corwin/zaeph will do the streaming, so writing the streaming playbook is a little lower priority for now
+
+
+### DONE Check-in
+
+<https://emacsconf.org/2022/volunteer/checkin/>
+
+
+### DONE IRC
+
+<https://emacsconf.org/2022/volunteer/irc/>
+
+
+### DONE Pad
+
+<https://emacsconf.org/2022/volunteer/pad/>
+
+
+### DONE Captions
+
+<https://emacsconf.org/2022/volunteer/caption/>
+
+
+## CANCELLED Figure out why ikiwiki is slow :infra:wiki:
+
+complex regular expression issues?
+should the captions be outside the wiki?
+
+
+## CANCELLED Add nice-to-have stuff to prepare.md :zaeph:
+
+- org-reveal config
+- SIL fonts choice
+
+
<a id="comms"></a>
# Communications
@@ -3355,7 +3520,7 @@ Objectives for this e-mail:
:prerec-target (format-time-string "%b %-e" prerec-target)))
(plist-get o :acceptance-comment)) 72)))
talks "\n---------------------------------------------------------------------\n"))))
- (emacsconf-mail-prepare template group attrs)))
+ (emacsconf-mail-prepare template (car group) attrs)))
(defun emacsconf-draft-all-acceptances ()
(interactive)
@@ -3425,39 +3590,6 @@ Sacha Chua
## Future
-<a id="ack-prerec"></a>
-
-### Acknowledge pre-rec submission
-
- (defun emacsconf-acknowledge-submission ()
- (interactive)
- (let ((files (directory-files "captions" t (regexp-quote (org-entry-get (point) "VIDEO_SLUG"))))
- (page (format "https://emacsconf.org/%s/talks/%s" conf-year (org-entry-get (point) "SLUG")))
- (slug (org-entry-get (point) "VIDEO_SLUG")))
- (emacsconf-mail-speaker
- "Thanks for sending us your prerecorded video for EmacsConf ${year}!"
- (concat
- "Hi! Just a quick note to let you know that I've downloaded your submission for \"" (org-entry-get (point) "ITEM") "\".\n"
- (format "\nNow we have the following file%s starting with %s:\n%s"
- (if (= (length files) 1) "" "s")
- slug
- (mapconcat (lambda (f)
- (format "- %s (%s, md5: %s)\n"
- (replace-regexp-in-string slug "" (file-name-nondirectory f))
- (file-size-human-readable (file-attribute-size (file-attributes f)))
- (string-trim (shell-command-to-string (concat "md5sum " (shell-quote-argument f) " | cut -f 1 -d ' '")))))
- files ""))
- (format "A quick check shows that it's about %d minutes long.\n"
- (ceiling
- (/ (compile-media-get-file-duration-ms
- (seq-find (lambda (o) (member (file-name-extension o) subed-video-extensions))
- files))
- 60000.0)))
- "\nWe'll be working on captioning it over the next few weeks. We'll e-mail again a little closer to the conference with schedule updates and other useful information. If you want to upload a new version, you can upload it the same way you did the previous one.\n\n"
- "Please feel free to e-mail us at emacsconf-submit@gnu.org if you need help updating the talk wiki page at " page " or if you have other questions.\n\n"
- "Thank you so much for all the work you put into preparing a talk for EmacsConf ${year}, and thank you for submitting the prerecorded video before the conference!\n\nSacha"))))
-
-
<a id="approve-captions"></a>
### Captions for approval
@@ -3912,58 +4044,6 @@ chatter in the other lists Cc&rsquo;d on this message. Thank you.
(message "Back to safety. Phew!")
-## Prerecs
-
-
-### Receive notification when new prerecs are available
-
- #!/usr/bin/env sh
-
- set -eu
-
- sleep_duration=1800
-
- data=prerec-wait-new.data
- touch "$data"
-
- plural() {
- if [ "$2" = 1 ] || [ "$2" = -1 ]; then
- echo "${1}"
- else
- case $1 in
- "is" )
- "are"
- ;;
- * )
- "${1}s"
- esac
- fi
- }
-
- notify() {
- echo "$1"
- notify-send -t 0 "EmacsConf" "$1"
- }
-
- echo "Currently waiting for prerec"
-
- prerecs_number_past=$(cat "$data")
- diff=0
-
- while true; do
- prerecs_number_current="$(TERM=xterm ssh orga@media.emacsconf.org -- ls -1 /srv/upload | wc -l)"
- diff=$((prerecs_number_current - prerecs_number_past))
- if [ $diff -gt 0 ]; then
- break
- fi
- sleep "$sleep_duration"
- done
-
- notify "Yay~, $diff new $(plural "prerec" $diff) $(plural "is" $diff) available!"
-
- echo "$prerecs_number_current" > "$data"
-
-
## Publish this page
(defun emacsconf-org-publish-this-page ()
diff --git a/2022/organizers-notebook/index.org b/2022/organizers-notebook/index.org
index f998db87..bb6d2121 100644
--- a/2022/organizers-notebook/index.org
+++ b/2022/organizers-notebook/index.org
@@ -61,7 +61,7 @@ or ~C-c \~ (~org-match-sparse-tree~) to see anything tagged with your tag.
| [2022-09-30 Fri] | | [[#acceptance][acceptance, reply to confirm]] | | |
| [2022-10-09 Sun] | | [[#check-sched][schedule, reply if not okay]] | [[#volunteer-2022-10-09][overall priorities]] | |
| [2022-10-16 Sun] | [[#etherpad][Etherpad]], [[#upload][stream]] | | infra update | |
-| [2022-10-23 Sun] | [[#upload][file upload]] | [[#mail-upload][file upload instructions]] | [[#volunteer-2022-10-23][training]] | |
+| [2022-10-23 Sun] | [[#upload][file upload]] | [[#mail-upload][file upload instructions]], backstage | [[#volunteer-2022-10-23][training]] | |
| [2022-10-30 Sun] | [[#intro][intro, exit]] | | [[#shifts][shifts]] | [[#announce-program][schedule]], posters? |
| [2022-11-06 Sun] | [[#write-viewing][watch pages]], prerecs | [[#ack-prerec][prerec confirmation]]/reminder, [[#approve-captions][caption progress]] | caption kickoff | |
| [2022-11-13 Sun] | [[#dry-run][dry run]], captions | tech check, bio, support links (ex: Liberapay)? | | |
@@ -81,28 +81,29 @@ scramble to do in order to get the conference off the ground. *bold*
is our current goal. Feel free to volunteer for anything that
interests you!
-| | Good | Better | Best |
-|------------------------+-------------------------------------+--------------------------------------+--------------------------------------------------------------|
-| [[#sched-decision][schedule]] | one track | *DONE S: two tracks* | aligned times, full roster |
-| schedule view | text table | imagemap fallback | *DONE S: interactive SVG* |
-| [[#upload][upload]] | FTP | *DONE S: web-based* | auto-encoded, preview (SReview?) |
-| [[#streaming][streaming]] | ffmpeg from computer | *DONE OBS* | ?: OBS in cloud, switchable hosts |
-| [[#coordinate-volunteers][volunteer coordination]] | ad-hoc | *INPROGRESS playbook* | training meetings + recordings |
-| [[#prepare-prerec-process][prerec]] | DONE play original with captions | Z: normalize audio, reduce noise | *S: post as soon as talk is live* |
-| BBB rooms | about 5 rooms that we cycle through | | *S: DONE one room per speaker* |
-| host | no host, speaker reads pad | *host reads pad* | host monitors IRC and helps with BBB as well |
-| BBB Q&A | none | *DONE open to community* | moderated by speaker and host |
-| [[#write-viewing][watch page]] | tracks | + IRC | *S: DONE + talk info*, maybe even current/recent/next |
-| [[#etherpad][pad]] | one pad for conf | one pad per talk, wikimedia | *S: DONE one pad per talk, self-hosted* so we can access API |
-| [[#irc][IRC]] | #emacsconf, -org | *DONE #emacsconf, -gen, -dev, -org* | IRC volunteer copying to pads; maybe even IRC bots |
-| [[#irc-announce][IRC announcements]] | *DONE S: ERC commands* | timer-based | bot commands |
-| [[#publishing-sched][sched update]] | *DONE S: publish at start* | update main sched | update talk pages |
-| [[#publish-live][talk pages]] | S: link to stream, pad, IRC | *link to prerec when live* | embed stream, pad, IRC, prerec |
-| [[#other-streams][other streams]] | 480p | + Toobnix | *S: + YouTube* |
-| [[#video-platforms][other platforms]] | *S: Toobnix & YT after event* | | S: Toobnix + YT when live |
-| [[#wiki-design][wiki]] | plain text, markdown | *sachac: some JS and CSS enrichment* | more JS and CSS, embeds, videoplayer |
-| [[#intro][intro and exit]] | *generic static image* | per-talk image | Emacs thing so we can display info, countdowns, IRC |
-| [[#ansible][ansible]] | none | *sachac: some automation* | comprehensive, can also work against containers |
+| | Good | Better | Best |
+|------------------------+-------------------------------------+-------------------------------------+--------------------------------------------------------------|
+| [[#sched-decision][schedule]] | one track | *DONE S: two tracks* | aligned times, full roster |
+| schedule view | text table | imagemap fallback | *DONE S: interactive SVG* |
+| [[#upload][upload]] | FTP | *DONE S: web-based* | auto-encoded, preview (SReview?) |
+| [[#streaming][streaming]] | ffmpeg from computer | *DONE OBS* | ?: OBS in cloud, switchable hosts |
+| [[#coordinate-volunteers][volunteer coordination]] | ad-hoc | *DONE playbook* | training meetings + recordings |
+| [[#prepare-prerec-process][prerec]] | DONE play original with captions | *DONE Z: normalize audio* | reduce noise |
+| BBB rooms | about 5 rooms that we cycle through | | *DONE S: one room per speaker* |
+| host | no host, speaker reads pad | *host reads pad* | host monitors IRC and helps with BBB as well |
+| BBB Q&A | none | *DONE open to community* | moderated by speaker and host |
+| [[#write-viewing][watch page]] | tracks | + IRC | *DONE S: + talk info*, maybe even current/recent/next |
+| [[#etherpad][pad]] | one pad for conf | one pad per talk, wikimedia | *DONE S: one pad per talk, self-hosted* so we can access API |
+| [[#irc][IRC]] | #emacsconf, -org | *DONE #emacsconf, -gen, -dev, -org* | IRC volunteer copying to pads; maybe even IRC bots |
+| [[#irc-announce][IRC announcements]] | *DONE S: ERC commands* | timer-based | bot commands |
+| [[#publishing-sched][sched update]] | *DONE S: publish at start* | update main sched | update talk pages |
+| [[#publish-live][talk pages]] | S: link to stream, pad, IRC | *S: link to prerec when live* | embed stream, pad, IRC, prerec |
+| [[#other-streams][other streams]] | 480p | + Toobnix | *S: + YouTube* |
+| [[#video-platforms][other platforms]] | *S: Toobnix & YT after event* | | S: Toobnix + YT when live |
+| [[#wiki-design][wiki]] | plain text, markdown | *S: some JS and CSS enrichment* | more JS and CSS, embeds, videoplayer |
+| [[#intro][intro and exit]] | *generic static image* | per-talk image | Emacs thing so we can display info, countdowns, IRC |
+| [[#ansible][ansible]] | none | *S: some automation* | comprehensive, can also work against containers |
+| [[#caption-workflow][caption workflow]] | YT autosubs | *DONE S: Whisper autosubs* | Whisper + more granular timestamps |
* Time-sensitive
:PROPERTIES:
@@ -162,102 +163,27 @@ P.S. please direct all replies to this post either to myself or to the
emacsconf-discuss list, so as to help avoid generating extra off-topic
chatter in the other lists cc'd in this message; thank you.
-** TODO Prepare email for nudging speakers to send prerec, and inform on upload workflow :timesensitive:needsowner:
-:PROPERTIES:
-:CUSTOM_ID: mail-upload
-:END:
-
-*** Code
-
-#+begin_src emacs-lisp
-(defun emacsconf-mail-upload (group &optional template)
- "Send upload instructions and reminder.
-GROUP is (email . (talk talk))"
- (interactive (list (emacsconf-mail-complete-email-group)))
- (let ((action-date (date-to-time "2022-11-04")))
- (emacsconf-mail-prepare
- (or template (emacsconf-mail-merge-get-template "upload"))
- group
- (list
- :slugs (mapconcat (lambda (o) (plist-get o :slug)) (cdr group) " or ")
- :speakers-short (plist-get (cadr group) :speakers-short)
- :plural (if (= (length (cdr group)) 1) "" "s")
- :email (plist-get (cadr group) :email)
- :year (or (plist-get (cadr group) :year) emacsconf-year)
- :prerec-note (emacsconf-surround
- (make-string 64 ?-)
- (string-join (seq-uniq (mapcar
- (lambda (o)
- (plist-get o :prerec-info))
- (cdr group)))
- "\n")
- (make-string 64 ?-)
- "")))))
-#+end_src
-
-*** Template
-:PROPERTIES:
-:EMAIL_ID: upload
-:FUNCTION: emacsconf-mail-upload
-:SUBJECT: EmacsConf upload instructions
-:REPLY_TO: emacsconf-submit@gnu.org, ${email}
-:MAIL_FOLLOWUP_TO: emacsconf-submit@gnu.org, ${email}
-:CC: emacsconf-submit@gnu.org
-:END:
-
-Hi, ${speakers-short}!
-
-${prerec-note}Here are the instructions for uploading the video${plural} for your talk${plural}.
-You can find the latest version of the instructions at https://emacsconf.org/2022/upload/ .
-There are two ways to upload your talk${plural} this year, so you can pick the one that works best for you:${wrap}
-
-- Web-based: https://ftp-upload.emacsconf.org , password emacsconf
-- FTP: host: ftp-upload.emacsconf.org, port: 21, username: anonymous
- folder: upload-here
-
-If you upload slides and other resources, we can include them on the
-talk page when your talk goes live. If you happen to have a script or
-a transcript, please include them as well (it’ll speed up the
-captioning for us).
-
-Please start your filenames with the ID for the talk that it's for:
-${slugs}.
-
-If you're still working on your talk, you might find the tips at
-https://emacsconf.org/2022/prepare useful. In brief:
-
-- at least 1280x720 resolution
-- we recommend dark text on a light background, with enough contrast
- to make it easy to read
-- if possible, use a headset or external microphone to record audio
-- leave 5 seconds of quiet at the end of the video to facilitate noise
- reduction for us
-
-Please plan to upload your talk by November 4 (next Friday) so that we
-can get started preparing it for streaming. If you can't make it by
-then, we can accept later submissions, although it's a bit more of a
-scramble and our stress levels go up as the conference approaches. =)
-We'd really appreciate the extra time for captioning and
-double-checking. Thank you for your help in getting ready for a smooth
-EmacsConf 2022!
-
-Sacha Chua
-** TODO Write volunteer update 2022-10-23
+** TODO Write volunteer update 2022-10-23 :update:
:PROPERTIES:
:CUSTOM_ID: volunteer-2022-10-23
:END:
-- Updates:
- - dto signed up for shifts
- - created BBB rooms and added them to conf.org
- - set up web-based upload, nudging speakers
+- set up web-based upload, nudging speakers
+- Backstage area now open with three talks, info sent to speakers and captioning volunteers
+- created BBB rooms and added them to conf.org
+- dto signed up for shifts
- playbook drafts
- https://emacsconf.org/2022/volunteer/irc
- https://emacsconf.org/2022/volunteer/caption
- https://emacsconf.org/2022/volunteer/pad
- https://emacsconf.org/2022/volunteer/checkin
- https://emacsconf.org/2022/volunteer/host
-
+- tested streaming to gen and dev streams, viewing from watch pages
+
+next week:
+- captions
+-
+
* Projects and other long-running tasks
:PROPERTIES:
:CUSTOM_ID: projects
@@ -277,34 +203,6 @@ Ordered by importance.
https://wiki.debian.org/DebConf/21/VideoVolunteering
- Encourage people to sign up for [[#shifts]]
-*** TODO Write playbooks
-**** DONE Host :zaeph:
-CLOSED: [2022-10-20 Thu 11:30]
-https://emacsconf.org/2022/volunteer/host
-
-**** BLOCKED Streamer :zaeph:
-:PROPERTIES:
-:CUSTOM_ID: inform-streamer-volunteers
-:END:
-Blocked by [[#streaming]]
-**** DONE Check-in
-CLOSED: [2022-10-16 Sun 21:26]
-[[https://emacsconf.org/2022/volunteer/checkin/]]
-**** DONE IRC
-CLOSED: [2022-10-16 Sun 21:38]
-https://emacsconf.org/2022/volunteer/irc/
-**** DONE Pad
-CLOSED: [2022-10-17 Mon 00:25]
-:PROPERTIES:
-:CUSTOM_ID: inform-pad-volunteers
-:END:
-https://emacsconf.org/2022/volunteer/pad/
-**** DONE Captions
-CLOSED: [2022-10-17 Mon 00:25]
-:PROPERTIES:
-:CUSTOM_ID: inform-pad-volunteers
-:END:
-https://emacsconf.org/2022/volunteer/caption/
*** TODO Plan training session(s), Q&A availability, recordings
*** BLOCKED Hold Q&A session with volunteers
:PROPERTIES:
@@ -325,6 +223,10 @@ ffmpeg -y -i "$1" -c:v libvpx-vp9 -b:v 0 -crf $Q -aq-mode 2 -an -tile-columns 0
ffmpeg -y -i "$1" -c:v libvpx-vp9 -b:v 0 -crf $Q -c:a copy -tile-columns 2 -tile-rows 2 -frame-parallel 0 -cpu-used -5 -auto-alt-ref 1 -lag-in-frames 25 -pass 2 -g 240 -threads 8 "$2"
#+end_src
+#+RESULTS:
+:results:
+:end:
+
**** New candidate
Changelog:
- Disable adaptive quantization by setting aq-mode to 0 (TODO: compare samples)
@@ -343,7 +245,7 @@ ffmpeg -y -i "$1" -c:v libvpx-vp9 -b:v 0 -crf $Q -an -row-mt 1 -tile-columns 2 -
Other considerations:
- We might want to tweak the time before keyframes (~-g~).
-
+*** TODO Check process for posting prerecs to the talk page and media directory as soon as the talk is live :sachac:
*** TODO Figure out workflow for handling submitted prerecs
We need time after the prerecs get submitted to:
- convert the videos and check that they've been reencoded properly by watching the re-encoded ones all the way to the end
@@ -353,32 +255,6 @@ We need time after the prerecs get submitted to:
Make changes in [[#prerec-process]]
-** TODO Investigate streaming options, maybe OBS in the cloud :corwin:
-DEADLINE: <2022-11-20 Sun>
-:PROPERTIES:
-:CUSTOM_ID: streaming
-:END:
-
-- Issue: zaeph was dropping frames and couldn’t pay attention to as many things as he wanted
-- Issue: corwin needs assistance to not be locked in his chair for the whole conf. Premptively, zaeph can do it by broadcasting OBS scenes via the rtmp (instead of just his webcam).
-- With a long day, we may want to be able to schedule hosts/streamers/publishers in shifts
-- Ideal: Easy reproducible setup to spin up an OBS VM with scenes set up, allowing multiple users to connect to it at the same time. Maybe x2go or vnc? VMs with 8 vCPUs and a vGPU cost more, so it would be good to figure out what's needed, spin it down, and then spin it up maybe the day before or something like that.
-- Plus points if we can control the OBS via password-protected websocket so we can tell it to switch scenes (and even more points if we do so from Emacs, maybe via that obs-websocket.el ;) ). MPV is also controllable via IPC, so we can use the same MPV player and then switch videos around. Maybe mpvc? https://unix.stackexchange.com/questions/664728/how-can-i-control-mpv-in-command-line
-- Probably Linode's Dedicated 32 GB + RTX6000 GPU x1 at $1.50 an hour for 2-3 days + dev time, since live.emacsconf.org is in Linode as well
-- We should also look into normalization across the board, especially if we have BBB participants. pipewire + easyeffects on the box might be the easiest way to do it.
-
-Resources:
-- https://blog.wirelessmoves.com/2021/07/running-obs-studio-in-the-cloud.html
-
-- Multiple users accessing X11
- - Apache Guacamole
- - https://askubuntu.com/questions/817970/how-to-setup-multiple-simultaneous-access-to-x11vnc-session
- - https://xpra.org/
-
-*** TODO corwin: plan an approach to use a centralized OBS/nginix "bouncer" :corwin:
-*** TODO corwin: document such that someone else could use/fix it :corwin:
-*** TODO corwin: recruit at least one more person to help operate the "video bouncer" :corwin:
-
** TODO Work on the OBS scenes :zaeph:corwin:
DEADLINE: <2022-11-11 Fri>
:PROPERTIES:
@@ -411,13 +287,15 @@ in prod or docker container
:END:
(find-file "/ssh:live|sudo::/etc/icecast2/icecast.xml")
-**** TODO Set up watch/gen/480p
+**** TODO Set up watch/gen-480p
+
+
*** TODO publishing environment
*** DONE Get ansible to run against a clean docker
CLOSED: [2022-10-11 Tue 12:20]
*** DONE Set up Etherpad with MySQL
-** BLOCKED Make something to display between talks
+** TODO Make something to display between talks :sachac:
:PROPERTIES:
:CREATED: [2022-10-03 Mon 07:50]
:CUSTOM_ID: intro
@@ -431,10 +309,6 @@ What to show in between talks:
- Previous talk: title, speaker, pronouns, talk page, Q&A information (if still live)
- Next talk: title, speaker, pronouns, talk page, Q&A information, countdown
-If it's static, this needs to wait for the decision on how we're going
-to use Etherpad, or we should have friendly URLs redirect to the right
-pads
-
- Good: Static image, maybe created with LaTeX
- Better: Video with unobtrusive sound so people can doublecheck that their audio works
- Best: Emacs thing so that we can have a dynamic timer and last-minute announcements, and so that it's Emacs =)
@@ -452,13 +326,6 @@ Objective:
Comments:
- It would be nice to have a protocol with speakers to tell us that they’re uncomfortable with a question, just so that we can find a smooth way to skip it.
-** STANDBY Add nice-to-have stuff to prepare.md :zaeph:
-:PROPERTIES:
-:CUSTOM_ID: extra-prepare
-:END:
-- org-reveal config
-- SIL fonts choice
-
** INPROGRESS Find volunteers for tech-checks :zaeph:
:PROPERTIES:
:CUSTOM_ID: tech-checks
@@ -480,6 +347,16 @@ From previous years:
- Can you share contact information (ex: phone number) so that we can get in touch with you in case of technical issues or scheduling changes?
- Do you need help finding your way around IRC so that you can check into `#emacsconf-org`? What is your IRC nickname?
#+end_quote
+** TODO Smoothen captioning workflow :sachac:
+:PROPERTIES:
+:CUSTOM_ID: caption-workflow
+:END:
+It looks like OpenAPI needs a little less editing in terms of
+capitalization and punctuation, but it produces longer captions
+(likely a 30-second sliding window). I'll try to upload both YT and
+OpenAPI captions so that people can decide what they like.
+*** TODO Investigate more granular timestamps for the output from OpenAPI Whisper
+https://stackoverflow.com/questions/73822353/how-can-i-get-word-level-timestamps-in-openais-whisper-asr
** DONE Update viewing instructions and watch pages :sachac:
CLOSED: [2022-10-14 Fri 15:02]
:PROPERTIES:
@@ -573,7 +450,6 @@ so that people on other platforms can come across EmacsConf
:END:
maybe after we get the prerecs
ex: liberapay, patreon, anyone looking for a job, etc.
-
** BLOCKED Do a dry run
SCHEDULED: <2022-11-06 Sun>
:PROPERTIES:
@@ -608,12 +484,6 @@ zaeph is available on 2022-11-06
- [ ] Message on the schedule
- [ ] Prerec live
- [ ] Wind everything down
-** TODO [#C] Figure out why ikiwiki is slow :infra:wiki:
-:PROPERTIES:
-:CUSTOM_ID: ikiwiki-regex
-:END:
-complex regular expression issues?
-should the captions be outside the wiki?
** TODO [#C] Add category tags and possibly links between talks across 2022 and all previous years :needsowner:wiki:
:PROPERTIES:
:CUSTOM_ID: link-pages
@@ -635,7 +505,6 @@ SCHEDULED: <2022-12-14 Wed>
:CUSTOM_ID: upload-off
:END:
** INPROGRESS [#C] Plan Etherpad use and hosting :sachac:ansible:
-DEADLINE: <2022-10-15 Sat>
:PROPERTIES:
:CUSTOM_ID: etherpad
:END:
@@ -775,6 +644,34 @@ console.log(JSON.stringify([...document.querySelectorAll('.delete-room')].map((o
see conf.org for the rest of the process
*** TODO Add volunteers to the BBB rooms
+** TODO [#C] Investigate streaming options, maybe OBS in the cloud :corwin:
+DEADLINE: <2022-11-20 Sun>
+:PROPERTIES:
+:CUSTOM_ID: streaming
+:END:
+
+- bandali doesn't have much cognitive bandwidth at the moment, so we can keep things simple with OBS on laptops
+
+- Issue: zaeph was dropping frames and couldn’t pay attention to as many things as he wanted
+- Issue: corwin needs assistance to not be locked in his chair for the whole conf. Premptively, zaeph can do it by broadcasting OBS scenes via the rtmp (instead of just his webcam).
+- With a long day, we may want to be able to schedule hosts/streamers/publishers in shifts
+- Ideal: Easy reproducible setup to spin up an OBS VM with scenes set up, allowing multiple users to connect to it at the same time. Maybe x2go or vnc? VMs with 8 vCPUs and a vGPU cost more, so it would be good to figure out what's needed, spin it down, and then spin it up maybe the day before or something like that.
+- Plus points if we can control the OBS via password-protected websocket so we can tell it to switch scenes (and even more points if we do so from Emacs, maybe via that obs-websocket.el ;) ). MPV is also controllable via IPC, so we can use the same MPV player and then switch videos around. Maybe mpvc? https://unix.stackexchange.com/questions/664728/how-can-i-control-mpv-in-command-line
+- Probably Linode's Dedicated 32 GB + RTX6000 GPU x1 at $1.50 an hour for 2-3 days + dev time, since live.emacsconf.org is in Linode as well
+- We should also look into normalization across the board, especially if we have BBB participants. pipewire + easyeffects on the box might be the easiest way to do it.
+
+Resources:
+- https://blog.wirelessmoves.com/2021/07/running-obs-studio-in-the-cloud.html
+
+- Multiple users accessing X11
+ - Apache Guacamole
+ - https://askubuntu.com/questions/817970/how-to-setup-multiple-simultaneous-access-to-x11vnc-session
+ - https://xpra.org/
+
+*** TODO corwin: plan an approach to use a centralized OBS/nginix "bouncer" :corwin:
+*** TODO corwin: document such that someone else could use/fix it :corwin:
+*** TODO corwin: recruit at least one more person to help operate the "video bouncer" :corwin:
+
* Projects to bear in mind but which are not actual
:PROPERTIES:
:CUSTOM_ID: maybe-projects
@@ -1311,6 +1208,77 @@ fi
#+end_src
+*** sachac
+
+- download to local cache
+ ~/proj/emacsconf/private/sync-cache
+- upload to YouTube in case we can get autogenerated subtitles from there
+ https://studio.youtube.com/channel/UCwuyodzTl_KdEKNuJmeo99A/videos/upload?filter=%5B%5D&sort=%7B%22columnType%22%3A%22date%22%2C%22sortOrder%22%3A%22DESCENDING%22%7D
+- upload to res:~/2022/captions
+- caption.sh
+- sync-cache to copy the vtt
+- emacsconf-make-backstage-index
+- send confirmation e-mail
+*** Confirmation e-mail
+:PROPERTIES:
+:CUSTOM_ID: confirm-prerec
+:END:
+**** Acknowledge pre-rec submission
+:PROPERTIES:
+:CUSTOM_ID: ack-prerec
+:END:
+
+#+begin_src emacs-lisp
+(defun emacsconf-mail-acknowledge-submission (talk &optional template)
+ (interactive (list (emacsconf-complete-talk-info)))
+ (emacsconf-mail-prepare
+ (or template (emacsconf-mail-merge-get-template "ack-prerec"))
+ (plist-get talk :email)
+ (list
+ :backstage "https://media.emacsconf.org/2022/backstage/"
+ :backstage-user "emacsconf"
+ :backstage-password emacsconf-backstage-password
+ :time (plist-get talk :time)
+ :title (plist-get talk :title)
+ :email (plist-get talk :email)
+ :minutes (plist-get talk :video-time)
+ :speakers-short (plist-get talk :speakers-short)
+ :url (concat emacsconf-base-url (plist-get talk :url))
+ :year emacsconf-year)))
+#+end_src
+**** Template
+:PROPERTIES:
+:EMAIL_ID: ack-prerec
+:TO: ${email}
+:REPLY_TO: emacsconf-submit@gnu.org, ${email}
+:MAIL_FOLLOWUP_TO: emacsconf-submit@gnu.org, ${email}
+:CC: emacsconf-submit@gnu.org
+:SUBJECT: EmacsConf ${year}: Thank you for uploading your video!
+:END:
+
+Hi, ${speakers-short}!
+
+Just a quick note to let you know that I've downloaded your
+submission for "${title}". We've added your submission to the backstage
+area at ${backstage} (username: ${backstage-user}, password:
+${backstage-password}), and we'll post the files on your talk page
+when the talk is public. A quick check shows that your video is about
+${minutes} minutes long (${time} minutes budgeted).${wrap}
+
+We'll be working on captioning it over the next few weeks. We'll
+e-mail again a little closer to the conference with schedule updates
+and other useful information. If you want to upload a new version, you
+can upload it the same way you did the previous one.
+
+Please feel free to e-mail us at emacsconf-submit@gnu.org if you need
+help updating the talk wiki page at ${url} or if you have other
+questions.${wrap}
+
+Thank you so much for all the work you put into preparing a talk for
+EmacsConf ${year}, and thank you for submitting the prerecorded video
+before the conference!
+
+Sacha Chua
** When a talk is captioned
:PROPERTIES:
:CUSTOM_ID: when-captioned
@@ -2276,7 +2244,7 @@ GROUP is (email . (talk talk))"
(draft-schedule (concat emacsconf-base-url emacsconf-year "/draft-schedule/")))
(emacsconf-mail-prepare
(or template (emacsconf-mail-merge-get-template "check-sched"))
- group
+ (car group)
(list
:titles
(mapconcat (lambda (o) (format "%s: %s"
@@ -2350,7 +2318,7 @@ GROUP is (email . (talk talk))"
(draft-schedule (concat emacsconf-base-url emacsconf-year "/draft-schedule/")))
(emacsconf-mail-prepare
(or template (emacsconf-mail-merge-get-template "check-sched"))
- group
+ (car group)
(list
:titles
(mapconcat (lambda (o) (format "%s: %s"
@@ -2667,6 +2635,219 @@ Where:
It's now on front.
+** DONE Prepare email for nudging speakers to send prerec, and inform on upload workflow :timesensitive:needsowner:
+CLOSED: [2022-10-22 Sat 08:42]
+:PROPERTIES:
+:CUSTOM_ID: mail-upload
+:END:
+
+*** Code
+
+#+begin_src emacs-lisp
+(defun emacsconf-mail-upload (group &optional template)
+ "Send upload instructions and reminder.
+GROUP is (email . (talk talk))"
+ (interactive (list (emacsconf-mail-complete-email-group)))
+ (let ((action-date (date-to-time "2022-11-04")))
+ (emacsconf-mail-prepare
+ (or template (emacsconf-mail-merge-get-template "upload"))
+ (car group)
+ (list
+ :slugs (mapconcat (lambda (o) (plist-get o :slug)) (cdr group) " or ")
+ :speakers-short (plist-get (cadr group) :speakers-short)
+ :plural (if (= (length (cdr group)) 1) "" "s")
+ :email (plist-get (cadr group) :email)
+ :year (or (plist-get (cadr group) :year) emacsconf-year)
+ :prerec-note (emacsconf-surround
+ (make-string 64 ?-)
+ (string-join (seq-uniq (mapcar
+ (lambda (o)
+ (plist-get o :prerec-info))
+ (cdr group)))
+ "\n")
+ (make-string 64 ?-)
+ "")))))
+#+end_src
+
+*** Template
+:PROPERTIES:
+:EMAIL_ID: upload
+:FUNCTION: emacsconf-mail-upload
+:SUBJECT: EmacsConf upload instructions
+:REPLY_TO: emacsconf-submit@gnu.org, ${email}
+:MAIL_FOLLOWUP_TO: emacsconf-submit@gnu.org, ${email}
+:CC: emacsconf-submit@gnu.org
+:END:
+
+Hi, ${speakers-short}!
+
+${prerec-note}Here are the instructions for uploading the video${plural} for your talk${plural}.
+You can find the latest version of the instructions at https://emacsconf.org/2022/upload/ .
+There are two ways to upload your talk${plural} this year, so you can pick the one that works best for you:${wrap}
+
+- Web-based: https://ftp-upload.emacsconf.org , password emacsconf
+- FTP: host: ftp-upload.emacsconf.org, port: 21, username: anonymous
+ folder: upload-here
+
+If you upload slides and other resources, we can include them on the
+talk page when your talk goes live. If you happen to have a script or
+a transcript, please include them as well (it’ll speed up the
+captioning for us).
+
+Please start your filenames with the ID for the talk that it's for:
+${slugs}.
+
+If you're still working on your talk, you might find the tips at
+https://emacsconf.org/2022/prepare useful. In brief:
+
+- at least 1280x720 resolution
+- we recommend dark text on a light background, with enough contrast
+ to make it easy to read
+- if possible, use a headset or external microphone to record audio
+- leave 5 seconds of quiet at the end of the video to facilitate noise
+ reduction for us
+
+Please plan to upload your talk by November 4 (next Friday) so that we
+can get started preparing it for streaming. If you can't make it by
+then, we can accept later submissions, although it's a bit more of a
+scramble and our stress levels go up as the conference approaches. =)
+We'd really appreciate the extra time for captioning and
+double-checking. Thank you for your help in getting ready for a smooth
+EmacsConf 2022!
+
+Sacha Chua
+** DONE Send backstage email
+CLOSED: [2022-10-22 Sat 09:23]
+
+#+begin_src emacs-lisp
+(defun emacsconf-mail-backstage-info (group &optional template)
+ (interactive (list (emacsconf-complete-talk-info)))
+ (emacsconf-mail-prepare
+ (or template (emacsconf-mail-merge-get-template "backstage"))
+ (plist-get group :email)
+ (append group
+ (list
+ :backstage "https://media.emacsconf.org/2022/backstage/"
+ :backstage-user "emacsconf"
+ :backstage-password emacsconf-backstage-password
+ :conf-name emacsconf-name
+ :year emacsconf-year))))
+(defun emacsconf-mail-backstage-info-to-speakers-and-captioners ()
+ (interactive)
+ (let ((template (emacsconf-mail-merge-get-template "backstage"))
+ (speaker-groups
+ (seq-uniq
+ (mapcar
+ (lambda (talk)
+ (list
+ :name (plist-get talk :speakers-short)
+ :email (plist-get talk :email)
+ :role "speaker"
+ :backstage-use
+ "As we add more talks, you can skim through any relevant ones to
+see if there are any points you'd like to build on in your talk.
+Also, you can get a sense of what we do behind the scenes to try
+to get as many talks captioned for broadcast, and what you can do
+to make it easier. (A text file with names and technical terms
+can be helpful. No need to type out a manual transcript if you
+don't start from a script.) After you upload your talk and we
+process the files, you can use the backstage area to check the
+quality of the reencoded video."))
+ (seq-filter (lambda (o) (string= (plist-get o :status) "WAITING_FOR_PREREC"))
+ (emacsconf-filter-talks (emacsconf-get-talk-info))))))
+ (volunteer-groups
+ (with-current-buffer (find-file-noselect emacsconf-org-file)
+ (org-map-entries (lambda ()
+ (list :name (org-entry-get (point) "NAME_SHORT")
+ :email (org-entry-get (point) "EMAIL")
+ :role "captioning volunteer"
+ :backstage-use "If you see a talk that you'd like to caption, you can e-mail me at sacha@sachachua.com and I can reserve it for you."))
+ "captions"))))
+ (mapcar (lambda (g) (emacsconf-mail-backstage-info g template))
+ (append
+ speaker-groups
+ (seq-remove (lambda (v) (seq-find (lambda (s) (string= (plist-get s :email)
+ (plist-get v :email)))
+ speaker-groups))
+ volunteer-groups)))))
+
+#+end_src
+
+*** Template
+:PROPERTIES:
+:SUBJECT: EmacsConf backstage area with videos and other resources
+:EMAIL_ID: backstage
+:REPLY_TO: emacsconf-submit@gnu.org, ${email}
+:MAIL_FOLLOWUP_TO: emacsconf-submit@gnu.org, ${email}
+:CC: emacsconf-submit@gnu.org
+:END:
+
+Hi ${name}!
+
+You're getting this e-mail because you are a ${role} for ${conf-name}
+${year}. (Thanks!)${wrap}
+
+I'm so excited! =) A number of speakers have uploaded their videos,
+and OpenAI Whisper looks like a promising way to get automatically
+generated captions that we can use as a starting point.
+
+We've set up ${backstage} as the backstage area where you can view the
+videos and resources uploaded so far. You can access it with the
+username "${backstage-user}" and the password "${backstage-password}".
+Please keep the backstage password and other speakers' talk resources
+secret. ${backstage-use}${wrap}
+
+Thank you!
+
+Sacha Chua
+
+** DONE Write playbooks
+CLOSED: [2022-10-22 Sat 09:25]
+*** DONE Host :zaeph:
+CLOSED: [2022-10-20 Thu 11:30]
+https://emacsconf.org/2022/volunteer/host
+
+*** CANCELLED Streamer :zaeph:
+CLOSED: [2022-10-22 Sat 09:24]
+:PROPERTIES:
+:CUSTOM_ID: inform-streamer-volunteers
+:END:
+Blocked by [[#streaming]]
+
+bandali and corwin/zaeph will do the streaming, so writing the streaming playbook is a little lower priority for now
+*** DONE Check-in
+CLOSED: [2022-10-16 Sun 21:26]
+[[https://emacsconf.org/2022/volunteer/checkin/]]
+*** DONE IRC
+CLOSED: [2022-10-16 Sun 21:38]
+https://emacsconf.org/2022/volunteer/irc/
+*** DONE Pad
+CLOSED: [2022-10-17 Mon 00:25]
+:PROPERTIES:
+:CUSTOM_ID: inform-pad-volunteers
+:END:
+https://emacsconf.org/2022/volunteer/pad/
+*** DONE Captions
+CLOSED: [2022-10-17 Mon 00:25]
+:PROPERTIES:
+:CUSTOM_ID: inform-pad-volunteers
+:END:
+https://emacsconf.org/2022/volunteer/caption/
+** CANCELLED [#C] Figure out why ikiwiki is slow :infra:wiki:
+CLOSED: [2022-10-22 Sat 09:26]
+:PROPERTIES:
+:CUSTOM_ID: ikiwiki-regex
+:END:
+complex regular expression issues?
+should the captions be outside the wiki?
+** CANCELLED Add nice-to-have stuff to prepare.md :zaeph:
+CLOSED: [2022-10-22 Sat 09:27]
+:PROPERTIES:
+:CUSTOM_ID: extra-prepare
+:END:
+- org-reveal config
+- SIL fonts choice
+
* Communications
:PROPERTIES:
:CUSTOM_ID: comms
@@ -2771,7 +2952,7 @@ Objectives for this e-mail:
:prerec-target (format-time-string "%b %-e" prerec-target)))
(plist-get o :acceptance-comment)) 72)))
talks "\n---------------------------------------------------------------------\n"))))
- (emacsconf-mail-prepare template group attrs)))
+ (emacsconf-mail-prepare template (car group) attrs)))
(defun emacsconf-draft-all-acceptances ()
(interactive)
@@ -2842,40 +3023,7 @@ Thank you so much!
Sacha Chua
** Future
-*** Acknowledge pre-rec submission
-:PROPERTIES:
-:CUSTOM_ID: ack-prerec
-:END:
-#+begin_src emacs-lisp
-(defun emacsconf-acknowledge-submission ()
- (interactive)
- (let ((files (directory-files "captions" t (regexp-quote (org-entry-get (point) "VIDEO_SLUG"))))
- (page (format "https://emacsconf.org/%s/talks/%s" conf-year (org-entry-get (point) "SLUG")))
- (slug (org-entry-get (point) "VIDEO_SLUG")))
- (emacsconf-mail-speaker
- "Thanks for sending us your prerecorded video for EmacsConf ${year}!"
- (concat
- "Hi! Just a quick note to let you know that I've downloaded your submission for \"" (org-entry-get (point) "ITEM") "\".\n"
- (format "\nNow we have the following file%s starting with %s:\n%s"
- (if (= (length files) 1) "" "s")
- slug
- (mapconcat (lambda (f)
- (format "- %s (%s, md5: %s)\n"
- (replace-regexp-in-string slug "" (file-name-nondirectory f))
- (file-size-human-readable (file-attribute-size (file-attributes f)))
- (string-trim (shell-command-to-string (concat "md5sum " (shell-quote-argument f) " | cut -f 1 -d ' '")))))
- files ""))
- (format "A quick check shows that it's about %d minutes long.\n"
- (ceiling
- (/ (compile-media-get-file-duration-ms
- (seq-find (lambda (o) (member (file-name-extension o) subed-video-extensions))
- files))
- 60000.0)))
- "\nWe'll be working on captioning it over the next few weeks. We'll e-mail again a little closer to the conference with schedule updates and other useful information. If you want to upload a new version, you can upload it the same way you did the previous one.\n\n"
- "Please feel free to e-mail us at emacsconf-submit@gnu.org if you need help updating the talk wiki page at " page " or if you have other questions.\n\n"
-"Thank you so much for all the work you put into preparing a talk for EmacsConf ${year}, and thank you for submitting the prerecorded video before the conference!\n\nSacha"))))
-#+end_src
*** Captions for approval
:PROPERTIES:
:SUBJECT: EmacsConf ${year}: Please review these captions for ${title}
diff --git a/2022/watch/dev.md b/2022/watch/dev.md
index 6905a3f1..68d4f971 100644
--- a/2022/watch/dev.md
+++ b/2022/watch/dev.md
@@ -1,45 +1,148 @@
<!-- Automatically generated by emacsconf-publish-watch-pages -->
+<!--
[[!inline pages="internal(2022/watch/announce)" raw="yes"]]
[[!meta title="Development stream"]]
-[[!sidebar content=""]]
-
-<a name="watch"></a>
-<a href="#watch">Watch</a> - <a href="#chat">Chat</a> - <a href="#sched">View schedule</a> -
-Streams: <a href="/2022/watch/gen/">General</a> - **Development**
+[[!sidebar content=""]] -->
+<h1>${title}</h1>
+<hr size="1">
+<div><a name="watch"></a><strong>Watch</strong> - <a href="#links">Pad and Q&amp;A links</a> - <a href="#chat">Chat</a> - <a href="#sched">Schedule</a> | Tracks: <a href="/2022/watch/gen/">General</a> - <strong>Development</strong></div>
<video controls><source src="https://live0.emacsconf.org/emacsconf/dev.webm" type="video/webm" /></video>
-Alternatively, load <https://live0.emacsconf.org/emacsconf/dev.webm> or <https://live0.emacsconf.org/emacsconf/dev-480p.webm> (low-res) in a streaming media player such as MPV.
+<div>Alternatively, load <a href="https://live0.emacsconf.org/emacsconf/dev.webm">https://live0.emacsconf.org/emacsconf/dev.webm</a> or <a href="https://live0.emacsconf.org/emacsconf/dev-480p.webm"></a> (low-res) in a streaming media player such as MPV.</div>
+<hr size="1"><div><a name="links"></a><a href="#watch">Watch</a> - <strong>Pad and Q&amp;A links</strong> - <a href="#chat">Chat</a> - <a href="#sched">Schedule</a> | Tracks: <a href="/2022/watch/gen/">General</a> - <strong>Development</strong></div><div><span><a href="https://emacsconf.org/2022/talks/treesitter">treesitter</a> (<a class="pad-link" href="https://pad.emacsconf.org/2022-treesitter">pad</a>, <a href="https://chat.emacsconf.org/?join=emacsconf,#emacsconf-dev">nick: meain, #emacsconf-dev</a>)</span> - <span><a href="https://emacsconf.org/2022/talks/lspbridge">lspbridge</a> (<a class="pad-link" href="https://pad.emacsconf.org/2022-lspbridge">pad</a>, <a href="https://chat.emacsconf.org/?join=emacsconf,#emacsconf-dev">nick: manateelazycat, #emacsconf-dev</a>)</span> - <span><a href="https://emacsconf.org/2022/talks/asmblox">asmblox</a> (<a class="pad-link" href="https://pad.emacsconf.org/2022-asmblox">pad</a>, <a href="https://emacsconf.org/current/asmblox/room/">live</a>)</span> - <span><a href="https://emacsconf.org/2022/talks/wayland">wayland</a> (<a class="pad-link" href="https://pad.emacsconf.org/2022-wayland">pad</a>, <a href="https://emacsconf.org/current/wayland/room/">live</a>)</span> - <span><a href="https://emacsconf.org/2022/talks/sqlite">sqlite</a> (<a class="pad-link" href="https://pad.emacsconf.org/2022-sqlite">pad</a>, <a href="https://emacsconf.org/current/sqlite/room/">live</a>)</span> - <span><a href="https://emacsconf.org/2022/talks/mail">mail</a> (<a class="pad-link" href="https://pad.emacsconf.org/2022-mail">pad</a>, <a href="https://emacsconf.org/current/mail/room/">live</a>)</span> - <span><a href="https://emacsconf.org/2022/talks/maint">maint</a> (<a class="pad-link" href="https://pad.emacsconf.org/2022-maint">pad</a>, <a href="https://emacsconf.org/current/maint/room/">live</a>)</span> - <span><a href="https://emacsconf.org/2022/talks/eev">eev</a> (<a class="pad-link" href="https://pad.emacsconf.org/2022-eev">pad</a>, <a href="https://chat.emacsconf.org/?join=emacsconf,#emacsconf-dev">#emacsconf-dev</a>)</span> - <span><a href="https://emacsconf.org/2022/talks/python">python</a> (<a class="pad-link" href="https://pad.emacsconf.org/2022-python">pad</a>, <a href="https://chat.emacsconf.org/?join=emacsconf,#emacsconf-dev">#emacsconf-dev</a>)</span> - <span><a href="https://emacsconf.org/2022/talks/haskell">haskell</a> (<a class="pad-link" href="https://pad.emacsconf.org/2022-haskell">pad</a>, <a href="https://emacsconf.org/current/haskell/room/">live</a>)</span> - <span><a href="https://emacsconf.org/2022/talks/rde">rde</a> (<a class="pad-link" href="https://pad.emacsconf.org/2022-rde">pad</a>, <a href="https://emacsconf.org/current/rde/room/">live</a>)</span> - <span><a href="https://emacsconf.org/2022/talks/justl">justl</a> (<a class="pad-link" href="https://pad.emacsconf.org/2022-justl">pad</a>, <a href="https://chat.emacsconf.org/?join=emacsconf,#emacsconf-dev">#emacsconf-dev</a>)</span> - <span><a href="https://emacsconf.org/2022/talks/tramp">tramp</a> (<a class="pad-link" href="https://pad.emacsconf.org/2022-tramp">pad</a>, <a href="https://emacsconf.org/current/tramp/room/">live</a>)</span> - <span><a href="https://emacsconf.org/2022/talks/detached">detached</a> (<a class="pad-link" href="https://pad.emacsconf.org/2022-detached">pad</a>, <a href="https://emacsconf.org/current/detached/room/">live</a>)</span> - <span><a href="https://emacsconf.org/2022/talks/eshell">eshell</a> (<a class="pad-link" href="https://pad.emacsconf.org/2022-eshell">pad</a>, <a href="https://emacsconf.org/current/eshell/room/">live</a>)</span> - <span><a href="https://emacsconf.org/2022/talks/async">async</a> (<a class="pad-link" href="https://pad.emacsconf.org/2022-async">pad</a>, <a href="https://emacsconf.org/current/async/room/">live</a>)</span> - <span><a href="https://emacsconf.org/2022/talks/dbus">dbus</a> (<a class="pad-link" href="https://pad.emacsconf.org/2022-dbus">pad</a>, <a href="https://emacsconf.org/current/dbus/room/">live</a>)</span> - <span><a href="https://emacsconf.org/2022/talks/localizing">localizing</a> (<a class="pad-link" href="https://pad.emacsconf.org/2022-localizing">pad</a>, <a href="https://emacsconf.org/current/localizing/room/">live</a>)</span></div>
+<div class="pad-output"></div>
+<hr size="1"><div><a name="chat"></a><a href="#watch">Watch</a> - <a href="#links">Pad and Q&amp;A links</a> - <strong>Chat</strong> - <a href="#sched">Schedule</a> | Tracks: <a href="/2022/watch/gen/">General</a> - <strong>Development</strong></div><div>Chat: <a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-dev">#emacsconf-dev</a> on libera.chat</div>
-<a name="chat"></a>
-<a href="#watch">Watch</a> - <a href="#chat">Chat</a> - <a href="#sched">View schedule</a> -
-Streams: <a href="/2022/watch/gen/">General</a> - **Development**
+<div class="chat-iframe" data-track="dev"></div>
+<iframe src="https://chat.emacsconf.org/?join=emacsconf,emacsconf-dev" height="600" width="100%"></iframe>
+<hr size="1"><div><a name="sched"></a><a href="#watch">Watch</a> - <a href="#links">Pad and Q&amp;A links</a> - <a href="#chat">Chat</a> - <strong>Schedule</strong> | Tracks: <a href="/2022/watch/gen/">General</a> - <strong>Development</strong></div>
+<div><svg width="800" height="300" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" background="white"> <g transform="translate(0,0)"> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="https://emacsconf.org/2022/talks/sat-open" title="Saturday opening remarks" data-slug="sat-open"> <title> 9:00- 9:05 Saturday opening remarks</title> <rect x="0" y="15" opacity="0.8" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(5,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="https://emacsconf.org/2022/talks/journalism" title="Emacs journalism (or everything's a nail if you hit it with Emacs)" data-slug="journalism"> <title> 9:05- 9:25 Emacs journalism (or everything's a nail if you hit it with Emacs)</title> <rect x="7" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(36,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> journalism</text></g></a> <a href="https://emacsconf.org/2022/talks/school" title="Back to school with Emacs" data-slug="school"> <title> 9:45-10:05 Back to school with Emacs</title> <rect x="70" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(99,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> school</text></g></a> <a href="https://emacsconf.org/2022/talks/handwritten" title="How to incorporate handwritten notes into Emacs Orgmode" data-slug="handwritten"> <title> 10:15-10:25 How to incorporate handwritten notes into Emacs Orgmode</title> <rect x="117" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(130,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> handwritten</text></g></a> <a href="https://emacsconf.org/2022/talks/science" title="Writing and organizing literature notes for scientific writing" data-slug="science"> <title> 10:55-11:15 Writing and organizing literature notes for scientific writing</title> <rect x="180" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(209,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> science</text></g></a> <a href="https://emacsconf.org/2022/talks/meetups" title="Attending and organizing Emacs meetups" data-slug="meetups"> <title> 1:00- 1:10 Attending and organizing Emacs meetups</title> <rect x="376" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(389,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> meetups</text></g></a> <a href="https://emacsconf.org/2022/talks/buddy" title="The Emacs Buddy initiative" data-slug="buddy"> <title> 1:30- 1:40 The Emacs Buddy initiative</title> <rect x="423" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(436,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buddy</text></g></a> <a href="https://emacsconf.org/2022/talks/community" title="The ship that builds itself: How we used Emacs to develop a workshop for communities" data-slug="community"> <title> 1:50- 2:20 The ship that builds itself: How we used Emacs to develop a workshop for communities</title> <rect x="454" y="15" opacity="0.8" width="47" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(499,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> community</text></g></a> <a href="https://emacsconf.org/2022/talks/realestate" title="Real estate and Org table formulas" data-slug="realestate"> <title> 2:50- 3:10 Real estate and Org table formulas</title> <rect x="549" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(578,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> realestate</text></g></a> <a href="https://emacsconf.org/2022/talks/health" title="Health data journaling and visualization with Org Mode and GNUplot" data-slug="health"> <title> 3:20- 3:40 Health data journaling and visualization with Org Mode and GNUplot</title> <rect x="596" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(625,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> health</text></g></a> <a href="https://emacsconf.org/2022/talks/jupyter" title="Edit live Jupyter notebook cells with Emacs" data-slug="jupyter"> <title> 4:00- 4:10 Edit live Jupyter notebook cells with Emacs</title> <rect x="658" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(671,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> jupyter</text></g></a> <a href="https://emacsconf.org/2022/talks/orgvm" title="orgvm: a simple HTTP server for org" data-slug="orgvm"> <title> 4:30- 4:40 orgvm: a simple HTTP server for org</title> <rect x="705" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(718,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgvm</text></g></a> <a href="https://emacsconf.org/2022/talks/sat-close" title="Saturday closing remarks" data-slug="sat-close"> <title> 5:00- 5:05 Saturday closing remarks</title> <rect x="752" y="15" opacity="0.8" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(757,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="https://emacsconf.org/2022/talks/treesitter" title="Tree-sitter beyond syntax highlighting" data-slug="treesitter"> <title> 10:00-10:10 Tree-sitter beyond syntax highlighting</title> <rect x="94" y="75" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(107,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> treesitter</text></g></a> <a href="https://emacsconf.org/2022/talks/lspbridge" title="lsp-bridge: complete asynchronous LSP client" data-slug="lspbridge"> <title> 10:20-10:40 lsp-bridge: complete asynchronous LSP client</title> <rect x="125" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(154,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> lspbridge</text></g></a> <a href="https://emacsconf.org/2022/talks/asmblox" title="asm-blox: a game based on WebAssembly that no one asked for" data-slug="asmblox"> <title> 10:50-11:00 asm-blox: a game based on WebAssembly that no one asked for</title> <rect x="172" y="75" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(185,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> asmblox</text></g></a> <a href="https://emacsconf.org/2022/talks/wayland" title="Emacs should become a Wayland compositor" data-slug="wayland"> <title> 11:25-11:35 Emacs should become a Wayland compositor</title> <rect x="227" y="75" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(240,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> wayland</text></g></a> <a href="https://emacsconf.org/2022/talks/sqlite" title="Using SQLite as a data source: a framework and an example" data-slug="sqlite"> <title> 1:00- 1:20 Using SQLite as a data source: a framework and an example</title> <rect x="376" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(405,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sqlite</text></g></a> <a href="https://emacsconf.org/2022/talks/mail" title="Revisiting the anatomy of Emacs mail user agents" data-slug="mail"> <title> 1:45- 2:15 Revisiting the anatomy of Emacs mail user agents</title> <rect x="447" y="75" opacity="0.8" width="47" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(492,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> mail</text></g></a> <a href="https://emacsconf.org/2022/talks/maint" title="Maintaining the Maintainers: Attribution as an Economic Model for Open Source" data-slug="maint"> <title> 2:50- 3:10 Maintaining the Maintainers: Attribution as an Economic Model for Open Source</title> <rect x="549" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(578,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> maint</text></g></a> <a href="https://emacsconf.org/2022/talks/eev" title="Bidirectional links with eev" data-slug="eev"> <title> 3:35- 3:40 Bidirectional links with eev</title> <rect x="619" y="75" opacity="0.8" width="7" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(624,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eev</text></g></a> <a href="https://emacsconf.org/2022/talks/python" title="Short hyperlinks to Python docs" data-slug="python"> <title> 3:50- 3:55 Short hyperlinks to Python docs</title> <rect x="643" y="75" opacity="0.8" width="7" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(648,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <a href="https://emacsconf.org/2022/talks/haskell" title="Haskell code exploration with Emacs" data-slug="haskell"> <title> 4:05- 4:35 Haskell code exploration with Emacs</title> <rect x="666" y="75" opacity="0.8" width="47" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(711,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> haskell</text></g></a> <g transform="translate(0,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 9</text></g> <g transform="translate(94,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 10</text></g> <g transform="translate(188,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 11</text></g> <g transform="translate(282,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 12</text></g> <g transform="translate(376,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 1</text></g> <g transform="translate(470,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 2</text></g> <g transform="translate(564,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 3</text></g> <g transform="translate(658,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 4</text></g> <g transform="translate(752,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 5</text></g></g> <g transform="translate(0,150)"> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="https://emacsconf.org/2022/talks/sun-open" title="Sunday opening remarks" data-slug="sun-open"> <title> 9:00- 9:05 Sunday opening remarks</title> <rect x="0" y="15" opacity="0.8" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(5,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-open</text></g></a> <a href="https://emacsconf.org/2022/talks/survey" title="Results of the 2022 Emacs Survey" data-slug="survey"> <title> 9:05- 9:25 Results of the 2022 Emacs Survey</title> <rect x="7" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(36,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> survey</text></g></a> <a href="https://emacsconf.org/2022/talks/orgyear" title="This Year in Org" data-slug="orgyear"> <title> 9:35- 9:45 This Year in Org</title> <rect x="54" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(67,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgyear</text></g></a> <a href="https://emacsconf.org/2022/talks/rolodex" title="Build a Zettelkasten with the Hyperbole Rolodex" data-slug="rolodex"> <title> 10:00-10:20 Build a Zettelkasten with the Hyperbole Rolodex</title> <rect x="94" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(123,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rolodex</text></g></a> <a href="https://emacsconf.org/2022/talks/orgsuperlinks" title="Linking headings with org-super-links (poor-man's Zettelkasten)" data-slug="orgsuperlinks"> <title> 10:40-10:50 Linking headings with org-super-links (poor-man's Zettelkasten)</title> <rect x="156" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(169,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgsuperlinks</text></g></a> <a href="https://emacsconf.org/2022/talks/hyperorg" title="Powerful productivity with Hyperbole and Org Mode" data-slug="hyperorg"> <title> 1:00- 1:30 Powerful productivity with Hyperbole and Org Mode</title> <rect x="376" y="15" opacity="0.8" width="47" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(421,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperorg</text></g></a> <a href="https://emacsconf.org/2022/talks/workflows" title="Org workflows for developers" data-slug="workflows"> <title> 1:50- 2:10 Org workflows for developers</title> <rect x="454" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(483,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> workflows</text></g></a> <a href="https://emacsconf.org/2022/talks/grail" title="GRAIL---A Generalized Representation and Aggregation of Information Layers" data-slug="grail"> <title> 2:30- 2:50 GRAIL---A Generalized Representation and Aggregation of Information Layers</title> <rect x="517" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(546,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> grail</text></g></a> <a href="https://emacsconf.org/2022/talks/indieweb" title="Putting Org Mode on the Indieweb" data-slug="indieweb"> <title> 3:20- 3:40 Putting Org Mode on the Indieweb</title> <rect x="596" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(625,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> indieweb</text></g></a> <a href="https://emacsconf.org/2022/talks/fanfare" title="Fanfare for the Common Emacs User" data-slug="fanfare"> <title> 4:00- 4:10 Fanfare for the Common Emacs User</title> <rect x="658" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(671,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> fanfare</text></g></a> <a href="https://emacsconf.org/2022/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"> <title> 5:00- 5:10 Sunday closing remarks</title> <rect x="752" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(765,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-close</text></g></a> <a href="https://emacsconf.org/2022/talks/rde" title="rde Emacs introduction" data-slug="rde"> <title> 10:00-10:20 rde Emacs introduction</title> <rect x="94" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(123,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rde</text></g></a> <a href="https://emacsconf.org/2022/talks/justl" title="justl: Driving recipes within Emacs" data-slug="justl"> <title> 10:45-10:55 justl: Driving recipes within Emacs</title> <rect x="164" y="75" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(177,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> justl</text></g></a> <a href="https://emacsconf.org/2022/talks/tramp" title="Elisp and the TRAMP: How to NOT write code you don't have to" data-slug="tramp"> <title> 11:05-11:35 Elisp and the TRAMP: How to NOT write code you don't have to</title> <rect x="196" y="75" opacity="0.8" width="47" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(241,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> tramp</text></g></a> <a href="https://emacsconf.org/2022/talks/detached" title="Getting detached from Emacs" data-slug="detached"> <title> 1:00- 1:10 Getting detached from Emacs</title> <rect x="376" y="75" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(389,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> detached</text></g></a> <a href="https://emacsconf.org/2022/talks/eshell" title="Top 10 reasons why you should be using Eshell" data-slug="eshell"> <title> 1:35- 1:45 Top 10 reasons why you should be using Eshell</title> <rect x="431" y="75" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(444,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eshell</text></g></a> <a href="https://emacsconf.org/2022/talks/async" title="Emacs was async before async was cool" data-slug="async"> <title> 2:10- 2:30 Emacs was async before async was cool</title> <rect x="486" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(515,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> async</text></g></a> <a href="https://emacsconf.org/2022/talks/dbus" title="The Wheels on D-Bus" data-slug="dbus"> <title> 3:05- 3:25 The Wheels on D-Bus</title> <rect x="572" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(601,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> dbus</text></g></a> <a href="https://emacsconf.org/2022/talks/localizing" title="Pre-localizing Emacs" data-slug="localizing"> <title> 4:00- 4:20 Pre-localizing Emacs</title> <rect x="658" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(687,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> localizing</text></g></a> <g transform="translate(0,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 9</text></g> <g transform="translate(94,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 10</text></g> <g transform="translate(188,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 11</text></g> <g transform="translate(282,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 12</text></g> <g transform="translate(376,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 1</text></g> <g transform="translate(470,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 2</text></g> <g transform="translate(564,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 3</text></g> <g transform="translate(658,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 4</text></g> <g transform="translate(752,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 5</text></g></g></svg></div>
+<div><h1>Saturday, Dec 3, 2022</h1>
+<div data-start="2022-12-03T15:00:00+0000" data-end="2022-12-03T15:10:00+0000" class="sched-entry track-Development">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">10:00</span> - <span class="sched-end">10:10</span></span> <span class="sched-track Development">Development</span> <span class="sched-q-and-a">Q&amp;A: IRC</span>; <span class="sched-slug">id:treesitter</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2022/talks/treesitter">Tree-sitter beyond syntax highlighting</a></div>
+ <div class="sched-speakers">id:Abin Simon</div>
-Chat: [#emacsconf-dev on libera.chat](https://chat.emacsconf.org/?join=emacsconf,emacsconf-dev)
+</div>
-<div class="chat-iframe" data-track="dev"></div>
+<div data-start="2022-12-03T15:20:00+0000" data-end="2022-12-03T15:40:00+0000" class="sched-entry track-Development">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">10:20</span> - <span class="sched-end">10:40</span></span> <span class="sched-track Development">Development</span> <span class="sched-q-and-a">Q&amp;A: IRC</span>; <span class="sched-slug">id:lspbridge</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2022/talks/lspbridge">lsp-bridge: complete asynchronous LSP client</a></div>
+ <div class="sched-speakers">id:Andy Stewart, Matthew Zeng</div>
+
+</div>
+
+<div data-start="2022-12-03T15:50:00+0000" data-end="2022-12-03T16:00:00+0000" class="sched-entry track-Development">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">10:50</span> - <span class="sched-end">11:00</span></span> <span class="sched-track Development">Development</span> <span class="sched-q-and-a">Q&amp;A: live</span>; <span class="sched-slug">id:asmblox</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2022/talks/asmblox">asm-blox: a game based on WebAssembly that no one asked for</a></div>
+ <div class="sched-speakers">id:Zachary Romero</div>
+
+</div>
+
+<div data-start="2022-12-03T16:25:00+0000" data-end="2022-12-03T16:35:00+0000" class="sched-entry track-Development">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">11:25</span> - <span class="sched-end">11:35</span></span> <span class="sched-track Development">Development</span> <span class="sched-q-and-a">Q&amp;A: live</span>; <span class="sched-slug">id:wayland</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2022/talks/wayland">Emacs should become a Wayland compositor</a></div>
+ <div class="sched-speakers">id:Michael Bauer</div>
+
+</div>
+
+<div data-start="2022-12-03T18:00:00+0000" data-end="2022-12-03T18:20:00+0000" class="sched-entry track-Development">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">1:00</span> - <span class="sched-end">1:20</span></span> <span class="sched-track Development">Development</span> <span class="sched-q-and-a">Q&amp;A: live</span>; <span class="sched-slug">id:sqlite</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2022/talks/sqlite">Using SQLite as a data source: a framework and an example</a></div>
+ <div class="sched-speakers">id:Andrew Hyatt</div>
+
+</div>
+
+<div data-start="2022-12-03T18:45:00+0000" data-end="2022-12-03T19:15:00+0000" class="sched-entry track-Development">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">1:45</span> - <span class="sched-end">2:15</span></span> <span class="sched-track Development">Development</span> <span class="sched-q-and-a">Q&amp;A: live</span>; <span class="sched-slug">id:mail</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2022/talks/mail">Revisiting the anatomy of Emacs mail user agents</a></div>
+ <div class="sched-speakers">id:Mohsen BANAN</div>
+
+</div>
+
+<div data-start="2022-12-03T19:50:00+0000" data-end="2022-12-03T20:10:00+0000" class="sched-entry track-Development">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">2:50</span> - <span class="sched-end">3:10</span></span> <span class="sched-track Development">Development</span> <span class="sched-q-and-a">Q&amp;A: live</span>; <span class="sched-slug">id:maint</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2022/talks/maint">Maintaining the Maintainers: Attribution as an Economic Model for Open Source</a></div>
+ <div class="sched-speakers">id:Sid Kasivajhula</div>
+
+</div>
+
+<div data-start="2022-12-03T20:35:00+0000" data-end="2022-12-03T20:40:00+0000" class="sched-entry track-Development">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">3:35</span> - <span class="sched-end">3:40</span></span> <span class="sched-track Development">Development</span> <span class="sched-q-and-a">Q&amp;A: IRC</span>; <span class="sched-slug">id:eev</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2022/talks/eev">Bidirectional links with eev</a></div>
+ <div class="sched-speakers">id:Eduardo Ochs</div>
+
+</div>
+
+<div data-start="2022-12-03T20:50:00+0000" data-end="2022-12-03T20:55:00+0000" class="sched-entry track-Development">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">3:50</span> - <span class="sched-end">3:55</span></span> <span class="sched-track Development">Development</span> <span class="sched-q-and-a">Q&amp;A: IRC</span>; <span class="sched-slug">id:python</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2022/talks/python">Short hyperlinks to Python docs</a></div>
+ <div class="sched-speakers">id:Eduardo Ochs</div>
+
+</div>
+
+<div data-start="2022-12-03T21:05:00+0000" data-end="2022-12-03T21:35:00+0000" class="sched-entry track-Development">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">4:05</span> - <span class="sched-end">4:35</span></span> <span class="sched-track Development">Development</span> <span class="sched-q-and-a">Q&amp;A: live</span>; <span class="sched-slug">id:haskell</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2022/talks/haskell">Haskell code exploration with Emacs</a></div>
+ <div class="sched-speakers">id:Yuchen Pei</div>
+
+</div>
+
+<h1>Sunday, Dec 4, 2022</h1>
+<div data-start="2022-12-04T15:00:00+0000" data-end="2022-12-04T15:20:00+0000" class="sched-entry track-Development">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">10:00</span> - <span class="sched-end">10:20</span></span> <span class="sched-track Development">Development</span> <span class="sched-q-and-a">Q&amp;A: live</span>; <span class="sched-slug">id:rde</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2022/talks/rde">rde Emacs introduction</a></div>
+ <div class="sched-speakers">id:Andrew Tropin</div>
+
+</div>
+
+<div data-start="2022-12-04T15:45:00+0000" data-end="2022-12-04T15:55:00+0000" class="sched-entry track-Development">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">10:45</span> - <span class="sched-end">10:55</span></span> <span class="sched-track Development">Development</span> <span class="sched-q-and-a">Q&amp;A: IRC</span>; <span class="sched-slug">id:justl</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2022/talks/justl">justl: Driving recipes within Emacs</a></div>
+ <div class="sched-speakers">id:Sibi Prabakaran</div>
+
+</div>
+
+<div data-start="2022-12-04T16:05:00+0000" data-end="2022-12-04T16:35:00+0000" class="sched-entry track-Development">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">11:05</span> - <span class="sched-end">11:35</span></span> <span class="sched-track Development">Development</span> <span class="sched-q-and-a">Q&amp;A: live</span>; <span class="sched-slug">id:tramp</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2022/talks/tramp">Elisp and the TRAMP: How to NOT write code you don't have to</a></div>
+ <div class="sched-speakers">id:Grant Shangreaux</div>
+
+</div>
+
+<div data-start="2022-12-04T18:00:00+0000" data-end="2022-12-04T18:10:00+0000" class="sched-entry track-Development">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">1:00</span> - <span class="sched-end">1:10</span></span> <span class="sched-track Development">Development</span> <span class="sched-q-and-a">Q&amp;A: live</span>; <span class="sched-slug">id:detached</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2022/talks/detached">Getting detached from Emacs</a></div>
+ <div class="sched-speakers">id:Niklas Eklund</div>
+
+</div>
+
+<div data-start="2022-12-04T18:35:00+0000" data-end="2022-12-04T18:45:00+0000" class="sched-entry track-Development">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">1:35</span> - <span class="sched-end">1:45</span></span> <span class="sched-track Development">Development</span> <span class="sched-q-and-a">Q&amp;A: live</span>; <span class="sched-slug">id:eshell</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2022/talks/eshell">Top 10 reasons why you should be using Eshell</a></div>
+ <div class="sched-speakers">id:Howard Abrams</div>
+
+</div>
+
+<div data-start="2022-12-04T19:10:00+0000" data-end="2022-12-04T19:30:00+0000" class="sched-entry track-Development">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">2:10</span> - <span class="sched-end">2:30</span></span> <span class="sched-track Development">Development</span> <span class="sched-q-and-a">Q&amp;A: live</span>; <span class="sched-slug">id:async</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2022/talks/async">Emacs was async before async was cool</a></div>
+ <div class="sched-speakers">id:Michael Herstine</div>
+
+</div>
+
+<div data-start="2022-12-04T20:05:00+0000" data-end="2022-12-04T20:25:00+0000" class="sched-entry track-Development">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">3:05</span> - <span class="sched-end">3:25</span></span> <span class="sched-track Development">Development</span> <span class="sched-q-and-a">Q&amp;A: live</span>; <span class="sched-slug">id:dbus</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2022/talks/dbus">The Wheels on D-Bus</a></div>
+ <div class="sched-speakers">id:Ian Eure</div>
+
+</div>
+
+<div data-start="2022-12-04T21:00:00+0000" data-end="2022-12-04T21:20:00+0000" class="sched-entry track-Development">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">4:00</span> - <span class="sched-end">4:20</span></span> <span class="sched-track Development">Development</span> <span class="sched-q-and-a">Q&amp;A: live</span>; <span class="sched-slug">id:localizing</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2022/talks/localizing">Pre-localizing Emacs</a></div>
+ <div class="sched-speakers">id:Jean-Christophe Helary</div>
+
+</div>
-<a name="sched"></a>
-<a href="#watch">Watch</a> - <a href="#chat">Chat</a> - <a href="#sched">View schedule</a> -
-Streams: <a href="/2022/watch/gen/">General</a> - **Development**
-
-[[!inline pages="internal(2022/schedule-image)" raw="yes"]]
-
-
-[[!template id=sched title="Tree-sitter beyond syntax highlighting" url="/2022/talks/treesitter" speakers="Abin Simon" q-and-a="IRC" track="Development" slug="treesitter" time="10" startutc="2022-12-03T15:00:00+0000" endutc="2022-12-03T15:10:00+0000" start="10:00" end="10:10"]]
-[[!template id=sched title="lsp-bridge: complete asynchronous LSP client" url="/2022/talks/lspbridge" speakers="Andy Stewart, Matthew Zeng" q-and-a="IRC" track="Development" slug="lspbridge" time="20" startutc="2022-12-03T15:20:00+0000" endutc="2022-12-03T15:40:00+0000" start="10:20" end="10:40"]]
-[[!template id=sched title="asm-blox: a game based on WebAssembly that no one asked for" url="/2022/talks/asmblox" speakers="Zachary Romero" q-and-a="live" track="Development" slug="asmblox" time="10" startutc="2022-12-03T15:50:00+0000" endutc="2022-12-03T16:00:00+0000" start="10:50" end="11:00"]]
-[[!template id=sched title="Emacs should become a Wayland compositor" url="/2022/talks/wayland" speakers="Michael Bauer" q-and-a="live" track="Development" slug="wayland" time="10" startutc="2022-12-03T16:25:00+0000" endutc="2022-12-03T16:35:00+0000" start="11:25" end="11:35"]]
-[[!template id=sched title="Using SQLite as a data source: a framework and an example" url="/2022/talks/sqlite" speakers="Andrew Hyatt" q-and-a="live" track="Development" slug="sqlite" time="20" startutc="2022-12-03T18:00:00+0000" endutc="2022-12-03T18:20:00+0000" start="1:00" end="1:20"]]
-[[!template id=sched title="Revisiting the anatomy of Emacs mail user agents" url="/2022/talks/mail" speakers="Mohsen BANAN" q-and-a="live" track="Development" slug="mail" time="30" startutc="2022-12-03T18:45:00+0000" endutc="2022-12-03T19:15:00+0000" start="1:45" end="2:15"]]
-[[!template id=sched title="Maintaining the Maintainers: Attribution as an Economic Model for Open Source" url="/2022/talks/maint" speakers="Sid Kasivajhula" q-and-a="live" track="Development" slug="maint" time="20" startutc="2022-12-03T19:50:00+0000" endutc="2022-12-03T20:10:00+0000" start="2:50" end="3:10"]]
-[[!template id=sched title="Bidirectional links with eev" url="/2022/talks/eev" speakers="Eduardo Ochs" q-and-a="IRC" track="Development" slug="eev" time="5" startutc="2022-12-03T20:35:00+0000" endutc="2022-12-03T20:40:00+0000" start="3:35" end="3:40"]]
-[[!template id=sched title="Short hyperlinks to Python docs" url="/2022/talks/python" speakers="Eduardo Ochs" q-and-a="IRC" track="Development" slug="python" time="5" startutc="2022-12-03T20:50:00+0000" endutc="2022-12-03T20:55:00+0000" start="3:50" end="3:55"]]
-[[!template id=sched title="Haskell code exploration with Emacs" url="/2022/talks/haskell" speakers="Yuchen Pei" q-and-a="live" track="Development" slug="haskell" time="30" startutc="2022-12-03T21:05:00+0000" endutc="2022-12-03T21:35:00+0000" start="4:05" end="4:35"]]
-[[!template id=sched title="rde Emacs introduction" url="/2022/talks/rde" speakers="Andrew Tropin" q-and-a="live" track="Development" slug="rde" time="20" startutc="2022-12-04T15:00:00+0000" endutc="2022-12-04T15:20:00+0000" start="10:00" end="10:20"]]
-[[!template id=sched title="justl: Driving recipes within Emacs" url="/2022/talks/justl" speakers="Sibi Prabakaran" q-and-a="IRC" track="Development" slug="justl" time="10" startutc="2022-12-04T15:45:00+0000" endutc="2022-12-04T15:55:00+0000" start="10:45" end="10:55"]]
-[[!template id=sched title="Elisp and the TRAMP: How to NOT write code you don't have to" url="/2022/talks/tramp" speakers="Grant Shangreaux" q-and-a="live" track="Development" slug="tramp" time="30" startutc="2022-12-04T16:05:00+0000" endutc="2022-12-04T16:35:00+0000" start="11:05" end="11:35"]]
-[[!template id=sched title="Getting detached from Emacs" url="/2022/talks/detached" speakers="Niklas Eklund" q-and-a="live" track="Development" slug="detached" time="10" startutc="2022-12-04T18:00:00+0000" endutc="2022-12-04T18:10:00+0000" start="1:00" end="1:10"]]
-[[!template id=sched title="Top 10 reasons why you should be using Eshell" url="/2022/talks/eshell" speakers="Howard Abrams" q-and-a="live" track="Development" slug="eshell" time="10" startutc="2022-12-04T18:35:00+0000" endutc="2022-12-04T18:45:00+0000" start="1:35" end="1:45"]]
-[[!template id=sched title="Emacs was async before async was cool" url="/2022/talks/async" speakers="Michael Herstine" q-and-a="live" track="Development" slug="async" time="20" startutc="2022-12-04T19:10:00+0000" endutc="2022-12-04T19:30:00+0000" start="2:10" end="2:30"]]
-[[!template id=sched title="The Wheels on D-Bus" url="/2022/talks/dbus" speakers="Ian Eure" q-and-a="live" track="Development" slug="dbus" time="20" startutc="2022-12-04T20:05:00+0000" endutc="2022-12-04T20:25:00+0000" start="3:05" end="3:25"]]
-[[!template id=sched title="Pre-localizing Emacs" url="/2022/talks/localizing" speakers="Jean-Christophe Helary" q-and-a="live" track="Development" slug="localizing" time="20" startutc="2022-12-04T21:00:00+0000" endutc="2022-12-04T21:20:00+0000" start="4:00" end="4:20"]]
+</div>
diff --git a/2022/watch/gen.md b/2022/watch/gen.md
index b043abbe..eb367db7 100644
--- a/2022/watch/gen.md
+++ b/2022/watch/gen.md
@@ -1,51 +1,190 @@
<!-- Automatically generated by emacsconf-publish-watch-pages -->
+<!--
[[!inline pages="internal(2022/watch/announce)" raw="yes"]]
[[!meta title="General stream"]]
-[[!sidebar content=""]]
-
-<a name="watch"></a>
-<a href="#watch">Watch</a> - <a href="#chat">Chat</a> - <a href="#sched">View schedule</a> -
-Streams: **General** - <a href="/2022/watch/dev/">Development</a>
+[[!sidebar content=""]] -->
+<h1>${title}</h1>
+<hr size="1">
+<div><a name="watch"></a><strong>Watch</strong> - <a href="#links">Pad and Q&amp;A links</a> - <a href="#chat">Chat</a> - <a href="#sched">Schedule</a> | Tracks: <strong>General</strong> - <a href="/2022/watch/dev/">Development</a></div>
<video controls><source src="https://live0.emacsconf.org/emacsconf/gen.webm" type="video/webm" /></video>
-Alternatively, load <https://live0.emacsconf.org/emacsconf/gen.webm> or <https://live0.emacsconf.org/emacsconf/gen-480p.webm> (low-res) in a streaming media player such as MPV.
+<div>Alternatively, load <a href="https://live0.emacsconf.org/emacsconf/gen.webm">https://live0.emacsconf.org/emacsconf/gen.webm</a> or <a href="https://live0.emacsconf.org/emacsconf/gen-480p.webm"></a> (low-res) in a streaming media player such as MPV.</div>
+<hr size="1"><div><a name="links"></a><a href="#watch">Watch</a> - <strong>Pad and Q&amp;A links</strong> - <a href="#chat">Chat</a> - <a href="#sched">Schedule</a> | Tracks: <strong>General</strong> - <a href="/2022/watch/dev/">Development</a></div><div><span><a href="https://emacsconf.org/2022/talks/sat-open">sat-open</a> (<a class="pad-link" href="https://pad.emacsconf.org/2022-sat-open">pad</a>, none)</span> - <span><a href="https://emacsconf.org/2022/talks/journalism">journalism</a> (<a class="pad-link" href="https://pad.emacsconf.org/2022-journalism">pad</a>, <a href="https://emacsconf.org/current/journalism/room/">live</a>)</span> - <span><a href="https://emacsconf.org/2022/talks/school">school</a> (<a class="pad-link" href="https://pad.emacsconf.org/2022-school">pad</a>, <a href="https://chat.emacsconf.org/?join=emacsconf,#emacsconf-gen">nick: velocitatem, #emacsconf-gen</a>)</span> - <span><a href="https://emacsconf.org/2022/talks/handwritten">handwritten</a> (<a class="pad-link" href="https://pad.emacsconf.org/2022-handwritten">pad</a>, <a href="https://emacsconf.org/current/handwritten/room/">live</a>)</span> - <span><a href="https://emacsconf.org/2022/talks/science">science</a> (<a class="pad-link" href="https://pad.emacsconf.org/2022-science">pad</a>, <a href="https://emacsconf.org/current/science/room/">live</a>)</span> - <span><a href="https://emacsconf.org/2022/talks/meetups">meetups</a> (<a class="pad-link" href="https://pad.emacsconf.org/2022-meetups">pad</a>, <a href="https://emacsconf.org/current/meetups/room/">live</a>)</span> - <span><a href="https://emacsconf.org/2022/talks/buddy">buddy</a> (<a class="pad-link" href="https://pad.emacsconf.org/2022-buddy">pad</a>, <a href="https://chat.emacsconf.org/?join=emacsconf,#emacsconf-gen">#emacsconf-gen</a>)</span> - <span><a href="https://emacsconf.org/2022/talks/community">community</a> (<a class="pad-link" href="https://pad.emacsconf.org/2022-community">pad</a>, <a href="https://emacsconf.org/current/community/room/">live</a>)</span> - <span><a href="https://emacsconf.org/2022/talks/realestate">realestate</a> (<a class="pad-link" href="https://pad.emacsconf.org/2022-realestate">pad</a>, none)</span> - <span><a href="https://emacsconf.org/2022/talks/health">health</a> (<a class="pad-link" href="https://pad.emacsconf.org/2022-health">pad</a>, <a href="https://emacsconf.org/current/health/room/">live</a>)</span> - <span><a href="https://emacsconf.org/2022/talks/jupyter">jupyter</a> (<a class="pad-link" href="https://pad.emacsconf.org/2022-jupyter">pad</a>, <a href="https://emacsconf.org/current/jupyter/room/">live</a>)</span> - <span><a href="https://emacsconf.org/2022/talks/orgvm">orgvm</a> (<a class="pad-link" href="https://pad.emacsconf.org/2022-orgvm">pad</a>, <a href="https://emacsconf.org/current/orgvm/room/">live</a>)</span> - <span><a href="https://emacsconf.org/2022/talks/sat-close">sat-close</a> (<a class="pad-link" href="https://pad.emacsconf.org/2022-sat-close">pad</a>, none)</span> - <span><a href="https://emacsconf.org/2022/talks/sun-open">sun-open</a> (<a class="pad-link" href="https://pad.emacsconf.org/2022-sun-open">pad</a>, none)</span> - <span><a href="https://emacsconf.org/2022/talks/survey">survey</a> (<a class="pad-link" href="https://pad.emacsconf.org/2022-survey">pad</a>, <a href="https://chat.emacsconf.org/?join=emacsconf,#emacsconf-gen">nick: tecosaur, #emacsconf-gen</a>)</span> - <span><a href="https://emacsconf.org/2022/talks/orgyear">orgyear</a> (<a class="pad-link" href="https://pad.emacsconf.org/2022-orgyear">pad</a>, <a href="https://chat.emacsconf.org/?join=emacsconf,#emacsconf-gen">nick: tecosaur, #emacsconf-gen</a>)</span> - <span><a href="https://emacsconf.org/2022/talks/rolodex">rolodex</a> (<a class="pad-link" href="https://pad.emacsconf.org/2022-rolodex">pad</a>, <a href="https://chat.emacsconf.org/?join=emacsconf,#emacsconf-gen">#emacsconf-gen</a>)</span> - <span><a href="https://emacsconf.org/2022/talks/orgsuperlinks">orgsuperlinks</a> (<a class="pad-link" href="https://pad.emacsconf.org/2022-orgsuperlinks">pad</a>, <a href="https://emacsconf.org/current/orgsuperlinks/room/">live</a>)</span> - <span><a href="https://emacsconf.org/2022/talks/hyperorg">hyperorg</a> (<a class="pad-link" href="https://pad.emacsconf.org/2022-hyperorg">pad</a>, <a href="https://emacsconf.org/current/hyperorg/room/">live</a>)</span> - <span><a href="https://emacsconf.org/2022/talks/workflows">workflows</a> (<a class="pad-link" href="https://pad.emacsconf.org/2022-workflows">pad</a>, <a href="https://emacsconf.org/current/workflows/room/">live</a>)</span> - <span><a href="https://emacsconf.org/2022/talks/grail">grail</a> (<a class="pad-link" href="https://pad.emacsconf.org/2022-grail">pad</a>, <a href="https://emacsconf.org/current/grail/room/">live</a>)</span> - <span><a href="https://emacsconf.org/2022/talks/indieweb">indieweb</a> (<a class="pad-link" href="https://pad.emacsconf.org/2022-indieweb">pad</a>, <a href="https://emacsconf.org/current/indieweb/room/">live</a>)</span> - <span><a href="https://emacsconf.org/2022/talks/fanfare">fanfare</a> (<a class="pad-link" href="https://pad.emacsconf.org/2022-fanfare">pad</a>, <a href="https://emacsconf.org/current/fanfare/room/">live</a>)</span> - <span><a href="https://emacsconf.org/2022/talks/sun-close">sun-close</a> (<a class="pad-link" href="https://pad.emacsconf.org/2022-sun-close">pad</a>, none)</span></div>
+<div class="pad-output"></div>
+<hr size="1"><div><a name="chat"></a><a href="#watch">Watch</a> - <a href="#links">Pad and Q&amp;A links</a> - <strong>Chat</strong> - <a href="#sched">Schedule</a> | Tracks: <strong>General</strong> - <a href="/2022/watch/dev/">Development</a></div><div>Chat: <a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen">#emacsconf-gen</a> on libera.chat</div>
+
+<div class="chat-iframe" data-track="gen"></div>
+<iframe src="https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen" height="600" width="100%"></iframe>
+<hr size="1"><div><a name="sched"></a><a href="#watch">Watch</a> - <a href="#links">Pad and Q&amp;A links</a> - <a href="#chat">Chat</a> - <strong>Schedule</strong> | Tracks: <strong>General</strong> - <a href="/2022/watch/dev/">Development</a></div>
+<div><svg width="800" height="300" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" background="white"> <g transform="translate(0,0)"> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="https://emacsconf.org/2022/talks/sat-open" title="Saturday opening remarks" data-slug="sat-open"> <title> 9:00- 9:05 Saturday opening remarks</title> <rect x="0" y="15" opacity="0.8" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(5,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="https://emacsconf.org/2022/talks/journalism" title="Emacs journalism (or everything's a nail if you hit it with Emacs)" data-slug="journalism"> <title> 9:05- 9:25 Emacs journalism (or everything's a nail if you hit it with Emacs)</title> <rect x="7" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(36,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> journalism</text></g></a> <a href="https://emacsconf.org/2022/talks/school" title="Back to school with Emacs" data-slug="school"> <title> 9:45-10:05 Back to school with Emacs</title> <rect x="70" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(99,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> school</text></g></a> <a href="https://emacsconf.org/2022/talks/handwritten" title="How to incorporate handwritten notes into Emacs Orgmode" data-slug="handwritten"> <title> 10:15-10:25 How to incorporate handwritten notes into Emacs Orgmode</title> <rect x="117" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(130,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> handwritten</text></g></a> <a href="https://emacsconf.org/2022/talks/science" title="Writing and organizing literature notes for scientific writing" data-slug="science"> <title> 10:55-11:15 Writing and organizing literature notes for scientific writing</title> <rect x="180" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(209,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> science</text></g></a> <a href="https://emacsconf.org/2022/talks/meetups" title="Attending and organizing Emacs meetups" data-slug="meetups"> <title> 1:00- 1:10 Attending and organizing Emacs meetups</title> <rect x="376" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(389,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> meetups</text></g></a> <a href="https://emacsconf.org/2022/talks/buddy" title="The Emacs Buddy initiative" data-slug="buddy"> <title> 1:30- 1:40 The Emacs Buddy initiative</title> <rect x="423" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(436,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buddy</text></g></a> <a href="https://emacsconf.org/2022/talks/community" title="The ship that builds itself: How we used Emacs to develop a workshop for communities" data-slug="community"> <title> 1:50- 2:20 The ship that builds itself: How we used Emacs to develop a workshop for communities</title> <rect x="454" y="15" opacity="0.8" width="47" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(499,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> community</text></g></a> <a href="https://emacsconf.org/2022/talks/realestate" title="Real estate and Org table formulas" data-slug="realestate"> <title> 2:50- 3:10 Real estate and Org table formulas</title> <rect x="549" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(578,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> realestate</text></g></a> <a href="https://emacsconf.org/2022/talks/health" title="Health data journaling and visualization with Org Mode and GNUplot" data-slug="health"> <title> 3:20- 3:40 Health data journaling and visualization with Org Mode and GNUplot</title> <rect x="596" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(625,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> health</text></g></a> <a href="https://emacsconf.org/2022/talks/jupyter" title="Edit live Jupyter notebook cells with Emacs" data-slug="jupyter"> <title> 4:00- 4:10 Edit live Jupyter notebook cells with Emacs</title> <rect x="658" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(671,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> jupyter</text></g></a> <a href="https://emacsconf.org/2022/talks/orgvm" title="orgvm: a simple HTTP server for org" data-slug="orgvm"> <title> 4:30- 4:40 orgvm: a simple HTTP server for org</title> <rect x="705" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(718,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgvm</text></g></a> <a href="https://emacsconf.org/2022/talks/sat-close" title="Saturday closing remarks" data-slug="sat-close"> <title> 5:00- 5:05 Saturday closing remarks</title> <rect x="752" y="15" opacity="0.8" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(757,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="https://emacsconf.org/2022/talks/treesitter" title="Tree-sitter beyond syntax highlighting" data-slug="treesitter"> <title> 10:00-10:10 Tree-sitter beyond syntax highlighting</title> <rect x="94" y="75" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(107,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> treesitter</text></g></a> <a href="https://emacsconf.org/2022/talks/lspbridge" title="lsp-bridge: complete asynchronous LSP client" data-slug="lspbridge"> <title> 10:20-10:40 lsp-bridge: complete asynchronous LSP client</title> <rect x="125" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(154,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> lspbridge</text></g></a> <a href="https://emacsconf.org/2022/talks/asmblox" title="asm-blox: a game based on WebAssembly that no one asked for" data-slug="asmblox"> <title> 10:50-11:00 asm-blox: a game based on WebAssembly that no one asked for</title> <rect x="172" y="75" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(185,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> asmblox</text></g></a> <a href="https://emacsconf.org/2022/talks/wayland" title="Emacs should become a Wayland compositor" data-slug="wayland"> <title> 11:25-11:35 Emacs should become a Wayland compositor</title> <rect x="227" y="75" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(240,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> wayland</text></g></a> <a href="https://emacsconf.org/2022/talks/sqlite" title="Using SQLite as a data source: a framework and an example" data-slug="sqlite"> <title> 1:00- 1:20 Using SQLite as a data source: a framework and an example</title> <rect x="376" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(405,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sqlite</text></g></a> <a href="https://emacsconf.org/2022/talks/mail" title="Revisiting the anatomy of Emacs mail user agents" data-slug="mail"> <title> 1:45- 2:15 Revisiting the anatomy of Emacs mail user agents</title> <rect x="447" y="75" opacity="0.8" width="47" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(492,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> mail</text></g></a> <a href="https://emacsconf.org/2022/talks/maint" title="Maintaining the Maintainers: Attribution as an Economic Model for Open Source" data-slug="maint"> <title> 2:50- 3:10 Maintaining the Maintainers: Attribution as an Economic Model for Open Source</title> <rect x="549" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(578,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> maint</text></g></a> <a href="https://emacsconf.org/2022/talks/eev" title="Bidirectional links with eev" data-slug="eev"> <title> 3:35- 3:40 Bidirectional links with eev</title> <rect x="619" y="75" opacity="0.8" width="7" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(624,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eev</text></g></a> <a href="https://emacsconf.org/2022/talks/python" title="Short hyperlinks to Python docs" data-slug="python"> <title> 3:50- 3:55 Short hyperlinks to Python docs</title> <rect x="643" y="75" opacity="0.8" width="7" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(648,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <a href="https://emacsconf.org/2022/talks/haskell" title="Haskell code exploration with Emacs" data-slug="haskell"> <title> 4:05- 4:35 Haskell code exploration with Emacs</title> <rect x="666" y="75" opacity="0.8" width="47" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(711,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> haskell</text></g></a> <g transform="translate(0,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 9</text></g> <g transform="translate(94,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 10</text></g> <g transform="translate(188,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 11</text></g> <g transform="translate(282,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 12</text></g> <g transform="translate(376,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 1</text></g> <g transform="translate(470,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 2</text></g> <g transform="translate(564,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 3</text></g> <g transform="translate(658,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 4</text></g> <g transform="translate(752,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 5</text></g></g> <g transform="translate(0,150)"> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="https://emacsconf.org/2022/talks/sun-open" title="Sunday opening remarks" data-slug="sun-open"> <title> 9:00- 9:05 Sunday opening remarks</title> <rect x="0" y="15" opacity="0.8" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(5,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-open</text></g></a> <a href="https://emacsconf.org/2022/talks/survey" title="Results of the 2022 Emacs Survey" data-slug="survey"> <title> 9:05- 9:25 Results of the 2022 Emacs Survey</title> <rect x="7" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(36,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> survey</text></g></a> <a href="https://emacsconf.org/2022/talks/orgyear" title="This Year in Org" data-slug="orgyear"> <title> 9:35- 9:45 This Year in Org</title> <rect x="54" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(67,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgyear</text></g></a> <a href="https://emacsconf.org/2022/talks/rolodex" title="Build a Zettelkasten with the Hyperbole Rolodex" data-slug="rolodex"> <title> 10:00-10:20 Build a Zettelkasten with the Hyperbole Rolodex</title> <rect x="94" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(123,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rolodex</text></g></a> <a href="https://emacsconf.org/2022/talks/orgsuperlinks" title="Linking headings with org-super-links (poor-man's Zettelkasten)" data-slug="orgsuperlinks"> <title> 10:40-10:50 Linking headings with org-super-links (poor-man's Zettelkasten)</title> <rect x="156" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(169,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgsuperlinks</text></g></a> <a href="https://emacsconf.org/2022/talks/hyperorg" title="Powerful productivity with Hyperbole and Org Mode" data-slug="hyperorg"> <title> 1:00- 1:30 Powerful productivity with Hyperbole and Org Mode</title> <rect x="376" y="15" opacity="0.8" width="47" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(421,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperorg</text></g></a> <a href="https://emacsconf.org/2022/talks/workflows" title="Org workflows for developers" data-slug="workflows"> <title> 1:50- 2:10 Org workflows for developers</title> <rect x="454" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(483,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> workflows</text></g></a> <a href="https://emacsconf.org/2022/talks/grail" title="GRAIL---A Generalized Representation and Aggregation of Information Layers" data-slug="grail"> <title> 2:30- 2:50 GRAIL---A Generalized Representation and Aggregation of Information Layers</title> <rect x="517" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(546,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> grail</text></g></a> <a href="https://emacsconf.org/2022/talks/indieweb" title="Putting Org Mode on the Indieweb" data-slug="indieweb"> <title> 3:20- 3:40 Putting Org Mode on the Indieweb</title> <rect x="596" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(625,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> indieweb</text></g></a> <a href="https://emacsconf.org/2022/talks/fanfare" title="Fanfare for the Common Emacs User" data-slug="fanfare"> <title> 4:00- 4:10 Fanfare for the Common Emacs User</title> <rect x="658" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(671,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> fanfare</text></g></a> <a href="https://emacsconf.org/2022/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"> <title> 5:00- 5:10 Sunday closing remarks</title> <rect x="752" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(765,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-close</text></g></a> <a href="https://emacsconf.org/2022/talks/rde" title="rde Emacs introduction" data-slug="rde"> <title> 10:00-10:20 rde Emacs introduction</title> <rect x="94" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(123,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rde</text></g></a> <a href="https://emacsconf.org/2022/talks/justl" title="justl: Driving recipes within Emacs" data-slug="justl"> <title> 10:45-10:55 justl: Driving recipes within Emacs</title> <rect x="164" y="75" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(177,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> justl</text></g></a> <a href="https://emacsconf.org/2022/talks/tramp" title="Elisp and the TRAMP: How to NOT write code you don't have to" data-slug="tramp"> <title> 11:05-11:35 Elisp and the TRAMP: How to NOT write code you don't have to</title> <rect x="196" y="75" opacity="0.8" width="47" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(241,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> tramp</text></g></a> <a href="https://emacsconf.org/2022/talks/detached" title="Getting detached from Emacs" data-slug="detached"> <title> 1:00- 1:10 Getting detached from Emacs</title> <rect x="376" y="75" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(389,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> detached</text></g></a> <a href="https://emacsconf.org/2022/talks/eshell" title="Top 10 reasons why you should be using Eshell" data-slug="eshell"> <title> 1:35- 1:45 Top 10 reasons why you should be using Eshell</title> <rect x="431" y="75" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(444,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eshell</text></g></a> <a href="https://emacsconf.org/2022/talks/async" title="Emacs was async before async was cool" data-slug="async"> <title> 2:10- 2:30 Emacs was async before async was cool</title> <rect x="486" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(515,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> async</text></g></a> <a href="https://emacsconf.org/2022/talks/dbus" title="The Wheels on D-Bus" data-slug="dbus"> <title> 3:05- 3:25 The Wheels on D-Bus</title> <rect x="572" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(601,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> dbus</text></g></a> <a href="https://emacsconf.org/2022/talks/localizing" title="Pre-localizing Emacs" data-slug="localizing"> <title> 4:00- 4:20 Pre-localizing Emacs</title> <rect x="658" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(687,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> localizing</text></g></a> <g transform="translate(0,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 9</text></g> <g transform="translate(94,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 10</text></g> <g transform="translate(188,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 11</text></g> <g transform="translate(282,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 12</text></g> <g transform="translate(376,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 1</text></g> <g transform="translate(470,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 2</text></g> <g transform="translate(564,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 3</text></g> <g transform="translate(658,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 4</text></g> <g transform="translate(752,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 5</text></g></g></svg></div>
+<div><h1>Saturday, Dec 3, 2022</h1>
+<div data-start="2022-12-03T14:00:00+0000" data-end="2022-12-03T14:05:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">9:00</span> - <span class="sched-end">9:05</span></span> <span class="sched-track General">General</span> <span class="sched-slug">id:sat-open</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2022/talks/sat-open">Saturday opening remarks</a></div>
-<a name="chat"></a>
-<a href="#watch">Watch</a> - <a href="#chat">Chat</a> - <a href="#sched">View schedule</a> -
-Streams: **General** - <a href="/2022/watch/dev/">Development</a>
-Chat: [#emacsconf-gen on libera.chat](https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen)
+</div>
-<div class="chat-iframe" data-track="gen"></div>
+<div data-start="2022-12-03T14:05:00+0000" data-end="2022-12-03T14:25:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">9:05</span> - <span class="sched-end">9:25</span></span> <span class="sched-track General">General</span> <span class="sched-q-and-a">Q&amp;A: live</span>; <span class="sched-slug">id:journalism</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2022/talks/journalism">Emacs journalism (or everything's a nail if you hit it with Emacs)</a></div>
+ <div class="sched-speakers">id:Alfred Zanini</div>
+
+</div>
+
+<div data-start="2022-12-03T14:45:00+0000" data-end="2022-12-03T15:05:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">9:45</span> - <span class="sched-end">10:05</span></span> <span class="sched-track General">General</span> <span class="sched-q-and-a">Q&amp;A: IRC</span>; <span class="sched-slug">id:school</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2022/talks/school">Back to school with Emacs</a></div>
+ <div class="sched-speakers">id:Daniel Rösel</div>
+
+</div>
+
+<div data-start="2022-12-03T15:15:00+0000" data-end="2022-12-03T15:25:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">10:15</span> - <span class="sched-end">10:25</span></span> <span class="sched-track General">General</span> <span class="sched-q-and-a">Q&amp;A: live</span>; <span class="sched-slug">id:handwritten</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2022/talks/handwritten">How to incorporate handwritten notes into Emacs Orgmode</a></div>
+ <div class="sched-speakers">id:Bala Ramadurai</div>
+
+</div>
+
+<div data-start="2022-12-03T15:55:00+0000" data-end="2022-12-03T16:15:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">10:55</span> - <span class="sched-end">11:15</span></span> <span class="sched-track General">General</span> <span class="sched-q-and-a">Q&amp;A: live</span>; <span class="sched-slug">id:science</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2022/talks/science">Writing and organizing literature notes for scientific writing</a></div>
+ <div class="sched-speakers">id:Vidianos</div>
+
+</div>
+
+<div data-start="2022-12-03T18:00:00+0000" data-end="2022-12-03T18:10:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">1:00</span> - <span class="sched-end">1:10</span></span> <span class="sched-track General">General</span> <span class="sched-q-and-a">Q&amp;A: live</span>; <span class="sched-slug">id:meetups</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2022/talks/meetups">Attending and organizing Emacs meetups</a></div>
+ <div class="sched-speakers">id:Bhavin Gandhi</div>
+
+</div>
+
+<div data-start="2022-12-03T18:30:00+0000" data-end="2022-12-03T18:40:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">1:30</span> - <span class="sched-end">1:40</span></span> <span class="sched-track General">General</span> <span class="sched-q-and-a">Q&amp;A: IRC</span>; <span class="sched-slug">id:buddy</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2022/talks/buddy">The Emacs Buddy initiative</a></div>
+ <div class="sched-speakers">id:Andrea</div>
+
+</div>
+
+<div data-start="2022-12-03T18:50:00+0000" data-end="2022-12-03T19:20:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">1:50</span> - <span class="sched-end">2:20</span></span> <span class="sched-track General">General</span> <span class="sched-q-and-a">Q&amp;A: live</span>; <span class="sched-slug">id:community</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2022/talks/community">The ship that builds itself: How we used Emacs to develop a workshop for communities</a></div>
+ <div class="sched-speakers">id:Noorah Alhasan, Joseph Corneli, Leo Vivier</div>
+
+</div>
+
+<div data-start="2022-12-03T19:50:00+0000" data-end="2022-12-03T20:10:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">2:50</span> - <span class="sched-end">3:10</span></span> <span class="sched-track General">General</span> <span class="sched-q-and-a">Q&amp;A: pad</span>; <span class="sched-slug">id:realestate</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2022/talks/realestate">Real estate and Org table formulas</a></div>
+ <div class="sched-speakers">id:Daniel Gopar</div>
+
+</div>
+
+<div data-start="2022-12-03T20:20:00+0000" data-end="2022-12-03T20:40:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">3:20</span> - <span class="sched-end">3:40</span></span> <span class="sched-track General">General</span> <span class="sched-q-and-a">Q&amp;A: live</span>; <span class="sched-slug">id:health</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2022/talks/health">Health data journaling and visualization with Org Mode and GNUplot</a></div>
+ <div class="sched-speakers">id:David O'Toole</div>
+
+</div>
+
+<div data-start="2022-12-03T21:00:00+0000" data-end="2022-12-03T21:10:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">4:00</span> - <span class="sched-end">4:10</span></span> <span class="sched-track General">General</span> <span class="sched-q-and-a">Q&amp;A: live</span>; <span class="sched-slug">id:jupyter</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2022/talks/jupyter">Edit live Jupyter notebook cells with Emacs</a></div>
+ <div class="sched-speakers">id:Blaine Mooers</div>
+
+</div>
+
+<div data-start="2022-12-03T21:30:00+0000" data-end="2022-12-03T21:40:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">4:30</span> - <span class="sched-end">4:40</span></span> <span class="sched-track General">General</span> <span class="sched-q-and-a">Q&amp;A: live</span>; <span class="sched-slug">id:orgvm</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2022/talks/orgvm">orgvm: a simple HTTP server for org</a></div>
+ <div class="sched-speakers">id:Corwin Brust</div>
+
+</div>
+
+<div data-start="2022-12-03T22:00:00+0000" data-end="2022-12-03T22:05:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">5:00</span> - <span class="sched-end">5:05</span></span> <span class="sched-track General">General</span> <span class="sched-slug">id:sat-close</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2022/talks/sat-close">Saturday closing remarks</a></div>
+
+
+</div>
+
+<h1>Sunday, Dec 4, 2022</h1>
+<div data-start="2022-12-04T14:00:00+0000" data-end="2022-12-04T14:05:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">9:00</span> - <span class="sched-end">9:05</span></span> <span class="sched-track General">General</span> <span class="sched-slug">id:sun-open</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2022/talks/sun-open">Sunday opening remarks</a></div>
+
+
+</div>
+
+<div data-start="2022-12-04T14:05:00+0000" data-end="2022-12-04T14:25:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">9:05</span> - <span class="sched-end">9:25</span></span> <span class="sched-track General">General</span> <span class="sched-q-and-a">Q&amp;A: IRC</span>; <span class="sched-slug">id:survey</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2022/talks/survey">Results of the 2022 Emacs Survey</a></div>
+ <div class="sched-speakers">id:Timothy</div>
+
+</div>
+
+<div data-start="2022-12-04T14:35:00+0000" data-end="2022-12-04T14:45:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">9:35</span> - <span class="sched-end">9:45</span></span> <span class="sched-track General">General</span> <span class="sched-q-and-a">Q&amp;A: IRC</span>; <span class="sched-slug">id:orgyear</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2022/talks/orgyear">This Year in Org</a></div>
+ <div class="sched-speakers">id:Timothy</div>
+
+</div>
+
+<div data-start="2022-12-04T15:00:00+0000" data-end="2022-12-04T15:20:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">10:00</span> - <span class="sched-end">10:20</span></span> <span class="sched-track General">General</span> <span class="sched-q-and-a">Q&amp;A: IRC</span>; <span class="sched-slug">id:rolodex</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2022/talks/rolodex">Build a Zettelkasten with the Hyperbole Rolodex</a></div>
+ <div class="sched-speakers">id:Ramin Honary</div>
+
+</div>
+
+<div data-start="2022-12-04T15:40:00+0000" data-end="2022-12-04T15:50:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">10:40</span> - <span class="sched-end">10:50</span></span> <span class="sched-track General">General</span> <span class="sched-q-and-a">Q&amp;A: live</span>; <span class="sched-slug">id:orgsuperlinks</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2022/talks/orgsuperlinks">Linking headings with org-super-links (poor-man's Zettelkasten)</a></div>
+ <div class="sched-speakers">id:Karl Voit</div>
+
+</div>
+
+<div data-start="2022-12-04T18:00:00+0000" data-end="2022-12-04T18:30:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">1:00</span> - <span class="sched-end">1:30</span></span> <span class="sched-track General">General</span> <span class="sched-q-and-a">Q&amp;A: live</span>; <span class="sched-slug">id:hyperorg</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2022/talks/hyperorg">Powerful productivity with Hyperbole and Org Mode</a></div>
+ <div class="sched-speakers">id:Robert Weiner</div>
+
+</div>
+
+<div data-start="2022-12-04T18:50:00+0000" data-end="2022-12-04T19:10:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">1:50</span> - <span class="sched-end">2:10</span></span> <span class="sched-track General">General</span> <span class="sched-q-and-a">Q&amp;A: live</span>; <span class="sched-slug">id:workflows</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2022/talks/workflows">Org workflows for developers</a></div>
+ <div class="sched-speakers">id:George Mauer</div>
+
+</div>
+
+<div data-start="2022-12-04T19:30:00+0000" data-end="2022-12-04T19:50:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">2:30</span> - <span class="sched-end">2:50</span></span> <span class="sched-track General">General</span> <span class="sched-q-and-a">Q&amp;A: live</span>; <span class="sched-slug">id:grail</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2022/talks/grail">GRAIL---A Generalized Representation and Aggregation of Information Layers</a></div>
+ <div class="sched-speakers">id:Sameer Pradhan</div>
+
+</div>
+
+<div data-start="2022-12-04T20:20:00+0000" data-end="2022-12-04T20:40:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">3:20</span> - <span class="sched-end">3:40</span></span> <span class="sched-track General">General</span> <span class="sched-q-and-a">Q&amp;A: live</span>; <span class="sched-slug">id:indieweb</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2022/talks/indieweb">Putting Org Mode on the Indieweb</a></div>
+ <div class="sched-speakers">id:Michael Herstine</div>
+
+</div>
+
+<div data-start="2022-12-04T21:00:00+0000" data-end="2022-12-04T21:10:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">4:00</span> - <span class="sched-end">4:10</span></span> <span class="sched-track General">General</span> <span class="sched-q-and-a">Q&amp;A: live</span>; <span class="sched-slug">id:fanfare</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2022/talks/fanfare">Fanfare for the Common Emacs User</a></div>
+ <div class="sched-speakers">id:John Cummings</div>
+
+</div>
+
+<div data-start="2022-12-04T22:00:00+0000" data-end="2022-12-04T22:10:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">5:00</span> - <span class="sched-end">5:10</span></span> <span class="sched-track General">General</span> <span class="sched-slug">id:sun-close</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2022/talks/sun-close">Sunday closing remarks</a></div>
+
+
+</div>
-<a name="sched"></a>
-<a href="#watch">Watch</a> - <a href="#chat">Chat</a> - <a href="#sched">View schedule</a> -
-Streams: **General** - <a href="/2022/watch/dev/">Development</a>
-
-[[!inline pages="internal(2022/schedule-image)" raw="yes"]]
-
-
-[[!template id=sched title="Saturday opening remarks" url="/2022/talks/sat-open" track="General" slug="sat-open" time="5" startutc="2022-12-03T14:00:00+0000" endutc="2022-12-03T14:05:00+0000" start="9:00" end="9:05"]]
-[[!template id=sched title="Emacs journalism (or everything's a nail if you hit it with Emacs)" url="/2022/talks/journalism" speakers="Alfred Zanini" q-and-a="live" track="General" slug="journalism" time="20" startutc="2022-12-03T14:05:00+0000" endutc="2022-12-03T14:25:00+0000" start="9:05" end="9:25"]]
-[[!template id=sched title="Back to school with Emacs" url="/2022/talks/school" speakers="Daniel Rösel" q-and-a="IRC" track="General" slug="school" time="20" startutc="2022-12-03T14:45:00+0000" endutc="2022-12-03T15:05:00+0000" start="9:45" end="10:05"]]
-[[!template id=sched title="How to incorporate handwritten notes into Emacs Orgmode" url="/2022/talks/handwritten" speakers="Bala Ramadurai" q-and-a="live" track="General" slug="handwritten" time="10" startutc="2022-12-03T15:15:00+0000" endutc="2022-12-03T15:25:00+0000" start="10:15" end="10:25"]]
-[[!template id=sched title="Writing and organizing literature notes for scientific writing" url="/2022/talks/science" speakers="Vidianos" q-and-a="live" track="General" slug="science" time="20" startutc="2022-12-03T15:55:00+0000" endutc="2022-12-03T16:15:00+0000" start="10:55" end="11:15"]]
-[[!template id=sched title="Attending and organizing Emacs meetups" url="/2022/talks/meetups" speakers="Bhavin Gandhi" q-and-a="live" track="General" slug="meetups" time="10" startutc="2022-12-03T18:00:00+0000" endutc="2022-12-03T18:10:00+0000" start="1:00" end="1:10"]]
-[[!template id=sched title="The Emacs Buddy initiative" url="/2022/talks/buddy" speakers="Andrea" q-and-a="IRC" track="General" slug="buddy" time="10" startutc="2022-12-03T18:30:00+0000" endutc="2022-12-03T18:40:00+0000" start="1:30" end="1:40"]]
-[[!template id=sched title="The ship that builds itself: How we used Emacs to develop a workshop for communities" url="/2022/talks/community" speakers="Noorah Alhasan, Joseph Corneli, Leo Vivier" q-and-a="live" track="General" slug="community" time="30" startutc="2022-12-03T18:50:00+0000" endutc="2022-12-03T19:20:00+0000" start="1:50" end="2:20"]]
-[[!template id=sched title="Real estate and Org table formulas" url="/2022/talks/realestate" speakers="Daniel Gopar" q-and-a="pad" track="General" slug="realestate" time="20" startutc="2022-12-03T19:50:00+0000" endutc="2022-12-03T20:10:00+0000" start="2:50" end="3:10"]]
-[[!template id=sched title="Health data journaling and visualization with Org Mode and GNUplot" url="/2022/talks/health" speakers="David O'Toole" q-and-a="live" track="General" slug="health" time="20" startutc="2022-12-03T20:20:00+0000" endutc="2022-12-03T20:40:00+0000" start="3:20" end="3:40"]]
-[[!template id=sched title="Edit live Jupyter notebook cells with Emacs" url="/2022/talks/jupyter" speakers="Blaine Mooers" q-and-a="live" track="General" slug="jupyter" time="10" startutc="2022-12-03T21:00:00+0000" endutc="2022-12-03T21:10:00+0000" start="4:00" end="4:10"]]
-[[!template id=sched title="orgvm: a simple HTTP server for org" url="/2022/talks/orgvm" speakers="Corwin Brust" q-and-a="live" track="General" slug="orgvm" time="10" startutc="2022-12-03T21:30:00+0000" endutc="2022-12-03T21:40:00+0000" start="4:30" end="4:40"]]
-[[!template id=sched title="Saturday closing remarks" url="/2022/talks/sat-close" track="General" slug="sat-close" time="5" startutc="2022-12-03T22:00:00+0000" endutc="2022-12-03T22:05:00+0000" start="5:00" end="5:05"]]
-[[!template id=sched title="Sunday opening remarks" url="/2022/talks/sun-open" track="General" slug="sun-open" time="5" startutc="2022-12-04T14:00:00+0000" endutc="2022-12-04T14:05:00+0000" start="9:00" end="9:05"]]
-[[!template id=sched title="Results of the 2022 Emacs Survey" url="/2022/talks/survey" speakers="Timothy" q-and-a="IRC" track="General" slug="survey" time="20" startutc="2022-12-04T14:05:00+0000" endutc="2022-12-04T14:25:00+0000" start="9:05" end="9:25"]]
-[[!template id=sched title="This Year in Org" url="/2022/talks/orgyear" speakers="Timothy" q-and-a="IRC" track="General" slug="orgyear" time="10" startutc="2022-12-04T14:35:00+0000" endutc="2022-12-04T14:45:00+0000" start="9:35" end="9:45"]]
-[[!template id=sched title="Build a Zettelkasten with the Hyperbole Rolodex" url="/2022/talks/rolodex" speakers="Ramin Honary" q-and-a="IRC" track="General" slug="rolodex" time="20" startutc="2022-12-04T15:00:00+0000" endutc="2022-12-04T15:20:00+0000" start="10:00" end="10:20"]]
-[[!template id=sched title="Linking headings with org-super-links (poor-man's Zettelkasten)" url="/2022/talks/orgsuperlinks" speakers="Karl Voit" q-and-a="live" track="General" slug="orgsuperlinks" time="10" startutc="2022-12-04T15:40:00+0000" endutc="2022-12-04T15:50:00+0000" start="10:40" end="10:50"]]
-[[!template id=sched title="Powerful productivity with Hyperbole and Org Mode" url="/2022/talks/hyperorg" speakers="Robert Weiner" q-and-a="live" track="General" slug="hyperorg" time="30" startutc="2022-12-04T18:00:00+0000" endutc="2022-12-04T18:30:00+0000" start="1:00" end="1:30"]]
-[[!template id=sched title="Org workflows for developers" url="/2022/talks/workflows" speakers="George Mauer" q-and-a="live" track="General" slug="workflows" time="20" startutc="2022-12-04T18:50:00+0000" endutc="2022-12-04T19:10:00+0000" start="1:50" end="2:10"]]
-[[!template id=sched title="GRAIL---A Generalized Representation and Aggregation of Information Layers" url="/2022/talks/grail" speakers="Sameer Pradhan" q-and-a="live" track="General" slug="grail" time="20" startutc="2022-12-04T19:30:00+0000" endutc="2022-12-04T19:50:00+0000" start="2:30" end="2:50"]]
-[[!template id=sched title="Putting Org Mode on the Indieweb" url="/2022/talks/indieweb" speakers="Michael Herstine" q-and-a="live" track="General" slug="indieweb" time="20" startutc="2022-12-04T20:20:00+0000" endutc="2022-12-04T20:40:00+0000" start="3:20" end="3:40"]]
-[[!template id=sched title="Fanfare for the Common Emacs User" url="/2022/talks/fanfare" speakers="John Cummings" q-and-a="live" track="General" slug="fanfare" time="10" startutc="2022-12-04T21:00:00+0000" endutc="2022-12-04T21:10:00+0000" start="4:00" end="4:10"]]
-[[!template id=sched title="Sunday closing remarks" url="/2022/talks/sun-close" track="General" slug="sun-close" time="10" startutc="2022-12-04T22:00:00+0000" endutc="2022-12-04T22:10:00+0000" start="5:00" end="5:10"]]
+</div>
diff --git a/2022/watch/info.md b/2022/watch/info.md
index 22b36009..7d9db3fb 100644
--- a/2022/watch/info.md
+++ b/2022/watch/info.md
@@ -1,9 +1,7 @@
-<!-- Automatically generated by emacsconf-publish-watch-pages -->
-[[!sidebar content=""]]
-# Tracks
+[[!sidebar content=""]]<!-- Automatically generated by emacsconf-publish-watch-pages -->
-<table width="100%"><tr><th>Watch page</th><th>IRC channel (libera.chat)</th><th>Alternative for streaming player</th><th>Low res</th></tr>
+<h1>Tracks</h1><table width="100%"><tr><th>Watch page</th><th>IRC channel (libera.chat)</th><th>Alternative for streaming player</th><th>Low res</th></tr>
<tr><td><a href="/2022/watch/gen">General</a></td><td><a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen">#emacsconf-gen</a></td><td><a href="https://live0.emacsconf.org/emacsconf/gen.webm">https://live0.emacsconf.org/emacsconf/gen.webm</a></td><td><a href="https://live0.emacsconf.org/emacsconf/gen-480p.webm">gen-480p.webm</a></tr>
<tr><td><a href="/2022/watch/dev">Development</a></td><td><a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-dev">#emacsconf-dev</a></td><td><a href="https://live0.emacsconf.org/emacsconf/dev.webm">https://live0.emacsconf.org/emacsconf/dev.webm</a></td><td><a href="https://live0.emacsconf.org/emacsconf/dev-480p.webm">dev-480p.webm</a></tr></table>
-[[!inline pages="internal(2022/schedule-image)" raw="yes"]] \ No newline at end of file
+<svg width="800" height="300" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" background="white"> <g transform="translate(0,0)"> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="https://emacsconf.org/2022/talks/sat-open" title="Saturday opening remarks" data-slug="sat-open"> <title> 9:00- 9:05 Saturday opening remarks</title> <rect x="0" y="15" opacity="0.8" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(5,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="https://emacsconf.org/2022/talks/journalism" title="Emacs journalism (or everything's a nail if you hit it with Emacs)" data-slug="journalism"> <title> 9:05- 9:25 Emacs journalism (or everything's a nail if you hit it with Emacs)</title> <rect x="7" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(36,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> journalism</text></g></a> <a href="https://emacsconf.org/2022/talks/school" title="Back to school with Emacs" data-slug="school"> <title> 9:45-10:05 Back to school with Emacs</title> <rect x="70" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(99,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> school</text></g></a> <a href="https://emacsconf.org/2022/talks/handwritten" title="How to incorporate handwritten notes into Emacs Orgmode" data-slug="handwritten"> <title> 10:15-10:25 How to incorporate handwritten notes into Emacs Orgmode</title> <rect x="117" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(130,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> handwritten</text></g></a> <a href="https://emacsconf.org/2022/talks/science" title="Writing and organizing literature notes for scientific writing" data-slug="science"> <title> 10:55-11:15 Writing and organizing literature notes for scientific writing</title> <rect x="180" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(209,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> science</text></g></a> <a href="https://emacsconf.org/2022/talks/meetups" title="Attending and organizing Emacs meetups" data-slug="meetups"> <title> 1:00- 1:10 Attending and organizing Emacs meetups</title> <rect x="376" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(389,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> meetups</text></g></a> <a href="https://emacsconf.org/2022/talks/buddy" title="The Emacs Buddy initiative" data-slug="buddy"> <title> 1:30- 1:40 The Emacs Buddy initiative</title> <rect x="423" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(436,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buddy</text></g></a> <a href="https://emacsconf.org/2022/talks/community" title="The ship that builds itself: How we used Emacs to develop a workshop for communities" data-slug="community"> <title> 1:50- 2:20 The ship that builds itself: How we used Emacs to develop a workshop for communities</title> <rect x="454" y="15" opacity="0.8" width="47" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(499,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> community</text></g></a> <a href="https://emacsconf.org/2022/talks/realestate" title="Real estate and Org table formulas" data-slug="realestate"> <title> 2:50- 3:10 Real estate and Org table formulas</title> <rect x="549" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(578,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> realestate</text></g></a> <a href="https://emacsconf.org/2022/talks/health" title="Health data journaling and visualization with Org Mode and GNUplot" data-slug="health"> <title> 3:20- 3:40 Health data journaling and visualization with Org Mode and GNUplot</title> <rect x="596" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(625,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> health</text></g></a> <a href="https://emacsconf.org/2022/talks/jupyter" title="Edit live Jupyter notebook cells with Emacs" data-slug="jupyter"> <title> 4:00- 4:10 Edit live Jupyter notebook cells with Emacs</title> <rect x="658" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(671,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> jupyter</text></g></a> <a href="https://emacsconf.org/2022/talks/orgvm" title="orgvm: a simple HTTP server for org" data-slug="orgvm"> <title> 4:30- 4:40 orgvm: a simple HTTP server for org</title> <rect x="705" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(718,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgvm</text></g></a> <a href="https://emacsconf.org/2022/talks/sat-close" title="Saturday closing remarks" data-slug="sat-close"> <title> 5:00- 5:05 Saturday closing remarks</title> <rect x="752" y="15" opacity="0.8" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(757,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="https://emacsconf.org/2022/talks/treesitter" title="Tree-sitter beyond syntax highlighting" data-slug="treesitter"> <title> 10:00-10:10 Tree-sitter beyond syntax highlighting</title> <rect x="94" y="75" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(107,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> treesitter</text></g></a> <a href="https://emacsconf.org/2022/talks/lspbridge" title="lsp-bridge: complete asynchronous LSP client" data-slug="lspbridge"> <title> 10:20-10:40 lsp-bridge: complete asynchronous LSP client</title> <rect x="125" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(154,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> lspbridge</text></g></a> <a href="https://emacsconf.org/2022/talks/asmblox" title="asm-blox: a game based on WebAssembly that no one asked for" data-slug="asmblox"> <title> 10:50-11:00 asm-blox: a game based on WebAssembly that no one asked for</title> <rect x="172" y="75" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(185,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> asmblox</text></g></a> <a href="https://emacsconf.org/2022/talks/wayland" title="Emacs should become a Wayland compositor" data-slug="wayland"> <title> 11:25-11:35 Emacs should become a Wayland compositor</title> <rect x="227" y="75" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(240,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> wayland</text></g></a> <a href="https://emacsconf.org/2022/talks/sqlite" title="Using SQLite as a data source: a framework and an example" data-slug="sqlite"> <title> 1:00- 1:20 Using SQLite as a data source: a framework and an example</title> <rect x="376" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(405,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sqlite</text></g></a> <a href="https://emacsconf.org/2022/talks/mail" title="Revisiting the anatomy of Emacs mail user agents" data-slug="mail"> <title> 1:45- 2:15 Revisiting the anatomy of Emacs mail user agents</title> <rect x="447" y="75" opacity="0.8" width="47" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(492,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> mail</text></g></a> <a href="https://emacsconf.org/2022/talks/maint" title="Maintaining the Maintainers: Attribution as an Economic Model for Open Source" data-slug="maint"> <title> 2:50- 3:10 Maintaining the Maintainers: Attribution as an Economic Model for Open Source</title> <rect x="549" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(578,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> maint</text></g></a> <a href="https://emacsconf.org/2022/talks/eev" title="Bidirectional links with eev" data-slug="eev"> <title> 3:35- 3:40 Bidirectional links with eev</title> <rect x="619" y="75" opacity="0.8" width="7" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(624,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eev</text></g></a> <a href="https://emacsconf.org/2022/talks/python" title="Short hyperlinks to Python docs" data-slug="python"> <title> 3:50- 3:55 Short hyperlinks to Python docs</title> <rect x="643" y="75" opacity="0.8" width="7" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(648,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <a href="https://emacsconf.org/2022/talks/haskell" title="Haskell code exploration with Emacs" data-slug="haskell"> <title> 4:05- 4:35 Haskell code exploration with Emacs</title> <rect x="666" y="75" opacity="0.8" width="47" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(711,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> haskell</text></g></a> <g transform="translate(0,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 9</text></g> <g transform="translate(94,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 10</text></g> <g transform="translate(188,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 11</text></g> <g transform="translate(282,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 12</text></g> <g transform="translate(376,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 1</text></g> <g transform="translate(470,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 2</text></g> <g transform="translate(564,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 3</text></g> <g transform="translate(658,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 4</text></g> <g transform="translate(752,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 5</text></g></g> <g transform="translate(0,150)"> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="https://emacsconf.org/2022/talks/sun-open" title="Sunday opening remarks" data-slug="sun-open"> <title> 9:00- 9:05 Sunday opening remarks</title> <rect x="0" y="15" opacity="0.8" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(5,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-open</text></g></a> <a href="https://emacsconf.org/2022/talks/survey" title="Results of the 2022 Emacs Survey" data-slug="survey"> <title> 9:05- 9:25 Results of the 2022 Emacs Survey</title> <rect x="7" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(36,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> survey</text></g></a> <a href="https://emacsconf.org/2022/talks/orgyear" title="This Year in Org" data-slug="orgyear"> <title> 9:35- 9:45 This Year in Org</title> <rect x="54" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(67,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgyear</text></g></a> <a href="https://emacsconf.org/2022/talks/rolodex" title="Build a Zettelkasten with the Hyperbole Rolodex" data-slug="rolodex"> <title> 10:00-10:20 Build a Zettelkasten with the Hyperbole Rolodex</title> <rect x="94" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(123,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rolodex</text></g></a> <a href="https://emacsconf.org/2022/talks/orgsuperlinks" title="Linking headings with org-super-links (poor-man's Zettelkasten)" data-slug="orgsuperlinks"> <title> 10:40-10:50 Linking headings with org-super-links (poor-man's Zettelkasten)</title> <rect x="156" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(169,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgsuperlinks</text></g></a> <a href="https://emacsconf.org/2022/talks/hyperorg" title="Powerful productivity with Hyperbole and Org Mode" data-slug="hyperorg"> <title> 1:00- 1:30 Powerful productivity with Hyperbole and Org Mode</title> <rect x="376" y="15" opacity="0.8" width="47" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(421,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperorg</text></g></a> <a href="https://emacsconf.org/2022/talks/workflows" title="Org workflows for developers" data-slug="workflows"> <title> 1:50- 2:10 Org workflows for developers</title> <rect x="454" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(483,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> workflows</text></g></a> <a href="https://emacsconf.org/2022/talks/grail" title="GRAIL---A Generalized Representation and Aggregation of Information Layers" data-slug="grail"> <title> 2:30- 2:50 GRAIL---A Generalized Representation and Aggregation of Information Layers</title> <rect x="517" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(546,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> grail</text></g></a> <a href="https://emacsconf.org/2022/talks/indieweb" title="Putting Org Mode on the Indieweb" data-slug="indieweb"> <title> 3:20- 3:40 Putting Org Mode on the Indieweb</title> <rect x="596" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(625,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> indieweb</text></g></a> <a href="https://emacsconf.org/2022/talks/fanfare" title="Fanfare for the Common Emacs User" data-slug="fanfare"> <title> 4:00- 4:10 Fanfare for the Common Emacs User</title> <rect x="658" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(671,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> fanfare</text></g></a> <a href="https://emacsconf.org/2022/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"> <title> 5:00- 5:10 Sunday closing remarks</title> <rect x="752" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(765,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-close</text></g></a> <a href="https://emacsconf.org/2022/talks/rde" title="rde Emacs introduction" data-slug="rde"> <title> 10:00-10:20 rde Emacs introduction</title> <rect x="94" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(123,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rde</text></g></a> <a href="https://emacsconf.org/2022/talks/justl" title="justl: Driving recipes within Emacs" data-slug="justl"> <title> 10:45-10:55 justl: Driving recipes within Emacs</title> <rect x="164" y="75" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(177,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> justl</text></g></a> <a href="https://emacsconf.org/2022/talks/tramp" title="Elisp and the TRAMP: How to NOT write code you don't have to" data-slug="tramp"> <title> 11:05-11:35 Elisp and the TRAMP: How to NOT write code you don't have to</title> <rect x="196" y="75" opacity="0.8" width="47" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(241,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> tramp</text></g></a> <a href="https://emacsconf.org/2022/talks/detached" title="Getting detached from Emacs" data-slug="detached"> <title> 1:00- 1:10 Getting detached from Emacs</title> <rect x="376" y="75" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(389,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> detached</text></g></a> <a href="https://emacsconf.org/2022/talks/eshell" title="Top 10 reasons why you should be using Eshell" data-slug="eshell"> <title> 1:35- 1:45 Top 10 reasons why you should be using Eshell</title> <rect x="431" y="75" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(444,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eshell</text></g></a> <a href="https://emacsconf.org/2022/talks/async" title="Emacs was async before async was cool" data-slug="async"> <title> 2:10- 2:30 Emacs was async before async was cool</title> <rect x="486" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(515,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> async</text></g></a> <a href="https://emacsconf.org/2022/talks/dbus" title="The Wheels on D-Bus" data-slug="dbus"> <title> 3:05- 3:25 The Wheels on D-Bus</title> <rect x="572" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(601,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> dbus</text></g></a> <a href="https://emacsconf.org/2022/talks/localizing" title="Pre-localizing Emacs" data-slug="localizing"> <title> 4:00- 4:20 Pre-localizing Emacs</title> <rect x="658" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(687,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> localizing</text></g></a> <g transform="translate(0,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 9</text></g> <g transform="translate(94,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 10</text></g> <g transform="translate(188,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 11</text></g> <g transform="translate(282,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 12</text></g> <g transform="translate(376,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 1</text></g> <g transform="translate(470,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 2</text></g> <g transform="translate(564,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 3</text></g> <g transform="translate(658,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 4</text></g> <g transform="translate(752,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="darkgray" x="0" y="133" font-size="10" text-anchor="middle"> 5</text></g></g></svg> \ No newline at end of file