summaryrefslogtreecommitdiffstats
path: root/2022/organizers-notebook
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--2022/organizers-notebook.md344
-rw-r--r--2022/organizers-notebook/index.org437
-rw-r--r--2022/organizers-notebook/schedule.svg2
3 files changed, 449 insertions, 334 deletions
diff --git a/2022/organizers-notebook.md b/2022/organizers-notebook.md
index 73df5ed9..2df05dea 100644
--- a/2022/organizers-notebook.md
+++ b/2022/organizers-notebook.md
@@ -140,9 +140,13 @@ Add your news and requests to this.
#### Template so far
-- <https://emacsconf.org/2022/organizers-notebook/#overall> has an overall
+Hello, EmacsConf volunteers!
+
+We're starting to gear up for EmacsConf ${year} and we would love your help!
+
+- <https://emacsconf.org/${year}/organizers-notebook/#overall> has an overall
prioritization matrix. If any of those options look interesting, you
- can volunteer to help move the needle!
+ can volunteer to help move the needle.
- sachac: Given the number of talks this year, we're going to try to
see if we can pull off two tracks. I've posted a draft schedule at
<https://emacsconf.org/2022/draft-schedule/> and will e-mail speakers
@@ -198,7 +202,7 @@ Look for the TO\_CONFIRM status in conf.org, probably include in schedule e-mail
<tr>
<td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">[2022-09-30 Fri]</span></span></td>
<td class="org-left">&#xa0;</td>
-<td class="org-left">acceptance, reply to confirm</td>
+<td class="org-left"><a href="#acceptance">acceptance, reply to confirm</a></td>
<td class="org-left">&#xa0;</td>
<td class="org-left">&#xa0;</td>
</tr>
@@ -207,8 +211,8 @@ Look for the TO\_CONFIRM status in conf.org, probably include in schedule e-mail
<tr>
<td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">[2022-10-09 Sun]</span></span></td>
<td class="org-left">&#xa0;</td>
-<td class="org-left">schedule, reply if not okay</td>
-<td class="org-left">overall priorities</td>
+<td class="org-left"><a href="#check-sched">schedule, reply if not okay</a></td>
+<td class="org-left"><a href="#volunteer-2022-10-09">overall priorities</a></td>
<td class="org-left">&#xa0;</td>
</tr>
@@ -251,7 +255,7 @@ Look for the TO\_CONFIRM status in conf.org, probably include in schedule e-mail
<tr>
<td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">[2022-11-13 Sun]</span></span></td>
-<td class="org-left">captions</td>
+<td class="org-left">dry run, captions</td>
<td class="org-left">tech check</td>
<td class="org-left">&#xa0;</td>
<td class="org-left">&#xa0;</td>
@@ -280,68 +284,81 @@ Look for the TO\_CONFIRM status in conf.org, probably include in schedule e-mail
<a id="check-sched"></a>
-### TODO Send people schedule information and doublecheck their availability/Q&A preference :sachac:email:speakers:sched:
+### DONE Send people schedule information and doublecheck their availability/Q&A preference :sachac:email:speakers:sched:
(defun emacsconf-mail-schedule (group &optional template)
"Send draft schedule.
GROUP is (email . (talk talk))"
(interactive (list (emacsconf-mail-complete-email-group)))
(require 'emacsconf-ical)
- (emacsconf-mail-prepare
- (or template (emacsconf-mail-merge-get-template "check-sched"))
- group
- (list
- :titles
- (mapconcat (lambda (o) (format "%s %s"
- (plist-get o :title)
- (format-time-string
- "%b %-e %I:%M %Z"
- (plist-get o :start-time)
- emacsconf-timezone)))
- (cdr group) " and ")
- :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)
- :coordination-note
- (if (seq-find (lambda (o) (member (plist-get o :slug) '("journalism" "rolodex" "orgsuperlinks" "buttons" "hyperorg" "science")))
- (cdr group))
- "I've changed the order slightly from the coordination e-mail I sent you. The sequence is now journalism - science - rolodex - orgsuperlinks - buttons - hyperorg. science is now second instead of last, and the first two talks are on Sat while the last four are on Sun. That probably means you don't have to coordinate as much, but you can still do so if you would like to build on other people's talks."
- "")
- :schedule
- (mapconcat
- (lambda (o) (format "\"%s\" (%s) - %s track\n%s"
- (plist-get o :title)
- (plist-get o :slug)
- (plist-get o :track)
- (string-join
- (let ((emacsconf-timezones
- (if (plist-get o :timezone)
- (seq-uniq (list emacsconf-timezone (plist-get o :timezone) "UTC"))
- emacsconf-timezones)))
- (emacsconf-timezone-strings o))
- "\n")))
- (cdr group)
- "\n----------------------------------------------------------------\n")
- :timezone-note
- (if (plist-get (cadr group) :timezone)
- (format "I've included a conversion to the %s timezone. Let me know if you'd like me to use a different timezone in future e-mails."
- (plist-get (cadr group) :timezone))
- "I can translate times into your local timezone. Let me know what timezone you'd like me to use.")
- :availability-note
- (if (seq-find (lambda (o) (string-match "yes" (or (plist-get o :availability) ""))) (cdr group))
- (format "I think you've indicated that you're available during the conference.")
- (format "I think it respects your indicated availability, which we've noted as %s. "
- (string-join
- (seq-uniq
- (mapcar
- (lambda (o) (format "\"%s\"" (plist-get o :availability)))
- (cdr group)))
- " and "))))))
+ (let ((reply-by-date (date-to-time "2022-10-14"))
+ (draft-schedule (concat emacsconf-base-url emacsconf-year "/draft-schedule/")))
+ (emacsconf-mail-prepare
+ (or template (emacsconf-mail-merge-get-template "check-sched"))
+ group
+ (list
+ :titles
+ (mapconcat (lambda (o) (format "%s: %s"
+ (plist-get o :slug)
+ (format-time-string
+ "%b %-e %-I:%M %#p %Z"
+ (plist-get o :start-time)
+ emacsconf-timezone)))
+ (cdr group) "; ")
+ :draft-schedule
+ draft-schedule
+ :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)
+ :coordination-note
+ (if (seq-find (lambda (o) (member (plist-get o :slug) '("journalism" "rolodex" "orgsuperlinks" "buttons" "hyperorg" "science")))
+ (cdr group))
+ "I've changed the order slightly from the coordination e-mail I sent you. The sequence is now journalism - science - rolodex - orgsuperlinks - buttons - hyperorg. science is now second instead of last, and the first two talks are on Sat while the last four are on Sun. That probably means you don't have to coordinate as much, but you can still do so if you would like to build on other people's talks."
+ "")
+ :schedule
+ (mapconcat
+ (lambda (o) (format "* TODO Check time for \"%s\" (%s) :emacsconf:\nDEADLINE: %s\n(Not a hard deadline, just encouragement to e-mail us before that date if you can)\nPlease e-mail [[mailto:emacsconf-submit@gnu.org]] if you need it changed\n%s track\n%s\nIn context: %s"
+ (plist-get o :title)
+ (plist-get o :slug)
+ (format-time-string (car org-time-stamp-formats) reply-by-date emacsconf-timezone)
+ (plist-get o :track)
+ (string-join
+ (let ((emacsconf-timezones
+ (if (plist-get o :timezone)
+ (seq-uniq (append (list emacsconf-timezone)
+ (split-string (plist-get o :timezone) " ")
+ (list "UTC")))
+ emacsconf-timezones)))
+ (emacsconf-timezone-strings o))
+ "\n")
+ draft-schedule))
+ (cdr group)
+ "\n----------------------------------------------------------------\n")
+ :reply-by
+ (format-time-string "%b %-e (%a)" reply-by-date emacsconf-timezone)
+ :timezone-note
+ (if (plist-get (cadr group) :timezone)
+ (format "I've included timezone conversion to %s. Let me know if you'd like me to use a different timezone in future e-mails."
+ (plist-get (cadr group) :timezone) " ")
+ "I can translate times into your local timezone. Let me know what timezone you'd like me to use.")
+ :availability-note
+ (cond
+ ((seq-find (lambda (o) (string-match "yes" (or (plist-get o :availability) ""))) (cdr group))
+ (format "I think you've indicated that you're available during the conference."))
+ ((seq-find (lambda (o) (string-match "not indicated" (or (plist-get o :availability) ""))) (cdr group))
+ (format "I think you didn't indicate any particular availability constraints in your submission."))
+ (t (format "I think it respects your indicated availability, which we've noted as %s."
+ (string-join
+ (seq-uniq
+ (mapcar
+ (lambda (o) (format "\"%s\"" (plist-get o :availability)))
+ (cdr group)))
+ " and "))))))))
#### Template
@@ -358,22 +375,21 @@ ${schedule}
---
-You'll also have time for Q&A afterwards, which can be as short or as
-long as you like. We'll send you more information about how the Q&A
-will work as the conference gets closer.
+${availability-note} You'll also have time for Q&A afterwards, which
+can be as short or as long as you like. We'll send you more
+information about how the Q&A will work as the conference gets closer.${wrap}
-If you'd like to see the other talks for context, please check out the
-draft schedule at <https://emacsconf.org/${year}/draft-schedule/> . The
-times may move around a bit as we update the schedule, so I'll check
-in with you if things change a lot. ${coordination-note} ${wrap}
+If you'd like to see the other talks for context, you can check out
+the draft schedule at <https://emacsconf.org/${year}/draft-schedule/> .
+The times may move around a bit as we update the schedule, so I'll
+check in with you if things change a lot. ${coordination-note} ${wrap}
-${availability-note} Please let us know if the times don't work for
-you or if you think your talk would go better next to a different
-talk. We're aiming to publish the schedule by **Oct 15**, so we'd love
-to hear from you by then if we need to tweak things. We can
-shuffle things around even after that date if something comes up.
-${timezone-note} Please keep emacsconf-submit@gnu.org in To or Cc when
-replying. Thanks!${wrap}
+We'd like to publish the schedule this month, so we'd love to hear
+from you by **${reply-by}** if the times don't work for you. (We can shuffle
+things around even after that date if something comes up.) Also, if
+you think your talk${plural} would go better next to a different talk, please
+let us know. ${timezone-note} Please keep emacsconf-submit@gnu.org in
+To or Cc when replying. Thanks!${wrap}
Sacha
@@ -425,14 +441,17 @@ Blocked by [Figure out web-based file upload](#upload)
- [Investigate streaming options, maybe OBS in the cloud](#streaming):corwin:zaeph:
- [Work on the OBS scenes](#obs-scenes):zaeph:corwin:
- [Build up the ansible playbook](#ansible):sachac:
-- [Make intro and exit videos](#intro)
+- [Make intro and exit sequence](#intro)
- [Move scheduling and publishing code to Emacs on a VPS so that other people can help out](#publishing-sched):sachac:
- [Add nice-to-have stuff to prepare.md](#extra-prepare):zaeph:
- [Find volunteers for tech-checks](#tech-checks):zaeph:
- [Update viewing instructions and watch pages](#write-viewing):zaeph:
- [Make talk pages easy to update when the talk is live](#publish-live):sachac:
- [Set up talks on Toobnix and YouTube](#video-platforms):sachac:
+- [Set up stream events on Toobnix and YouTube](#other-streams):sachac:
+- [Prepare to announce talks on IRC](#irc-announce)
- [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:
@@ -595,7 +614,7 @@ can currently publish
<a id="intro"></a>
-### BLOCKED Make intro and exit videos
+### BLOCKED Make intro and exit sequence
Intro:
Next: title, speaker, pronouns, talk page
@@ -607,8 +626,7 @@ Needs to wait for pad decision, or have friendly URLs redirect to the right pads
- Good: Static image, maybe created with LaTeX
- Better: Looping video with unobtrusive sound so people can doublecheck that their audio works
-- Best: Multiple versions to accommodate last-minute changes to Q&A
-- Bester? ;) : Voice-over contextualizing the talk? Pointers to related talks?
+- Best: Emacs thing so that we can have a dynamic timer and last-minute announcements, and so that it's Emacs =)
See break commercials
<https://www.collabmagazine.com/organizing-a-multi-track-virtual-conference-with-microsoft-teams-live-events-a-technical-playbook-and-lessons-learned/>
@@ -691,7 +709,32 @@ Also add to watch page
<a id="video-platforms"></a>
-### TODO Set up talks on Toobnix and YouTube :sachac:
+### BLOCKED Set up talks on Toobnix and YouTube :sachac:
+
+so that people can find the videos on other video platforms
+waiting for prerecs
+
+
+<a id="other-streams"></a>
+
+### TODO Set up stream events on Toobnix and YouTube :sachac:
+
+so that people on other platforms can come across EmacsConf
+
+ MOUNT=$1
+ while true; do ffmpeg -loglevel 24 -i http://localhost:8000/main.webm -cluster_size_limit 2M -cluster_time_limit 5100 -b:v 1M -crf 30 -g 125 -deadline good -threads 4 -vcodec libx264 -acodec libmp3lame -f flv $MOUNT; done
+
+
+<a id="irc-announce"></a>
+
+### TODO Prepare to announce talks on IRC
+
+- talks should be announced in their relevant tracks and in the hallways
+ - video starting in 5 minutes
+ - video starting now
+ - Q&A starting now & where
+- a small announcement might go into the other track as well
+- announcement can include talk page, pad, IRC nick, pronouns
<a id="speaker-bio"></a>
@@ -702,6 +745,38 @@ maybe after we get the prerecs
ex: liberapay, patreon, anyone looking for a job, etc.
+<a id="dry-run"></a>
+
+### BLOCKED Do a dry run
+
+- Streams
+ - [ ] General stream
+ - [ ] Development stream
+ - [ ] 480p streams
+ - [ ] Toobnix streams
+ - [ ] YouTube streams
+- Scenes
+ - [ ] Intro
+ - [ ] Prerec
+ - [ ] Q&A: live
+ - [ ] Q&A: IRC
+ - [ ] Q&A: pad
+- [ ] IRC channels
+ - [ ] Announce
+ - [ ] Timers
+ - [ ] Question handling
+- [ ] Watching pages
+ - [ ] Before launch
+ - [ ] Streaming
+ - [ ] Emergency announcement
+- [ ] Pads
+- [ ] Wiki
+ - [ ] Schedule update
+ - [ ] Message on the schedule
+ - [ ] Prerec live
+- [ ] Wind everything down
+
+
<a id="ikiwiki-regex"></a>
### TODO Figure out why ikiwiki is slow :infra:wiki:
@@ -828,6 +903,14 @@ so we know what we need to scramble to do.
<tr>
+<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>one room per speaker</b></td>
+</tr>
+
+
+<tr>
<td class="org-left">host</td>
<td class="org-left">no host, speaker reads pad</td>
<td class="org-left"><b>host reads pad</b></td>
@@ -868,7 +951,7 @@ so we know what we need to scramble to do.
<tr>
-<td class="org-left">IRC announcements</td>
+<td class="org-left"><a href="#irc-announce">IRC announcements</a></td>
<td class="org-left"><b>ERC commands</b></td>
<td class="org-left">timer-based</td>
<td class="org-left">&#xa0;</td>
@@ -900,7 +983,7 @@ so we know what we need to scramble to do.
<tr>
-<td class="org-left">other platforms</td>
+<td class="org-left"><a href="#video-platforms">other platforms</a></td>
<td class="org-left"><b>S: Toobnix &amp; YT after event</b></td>
<td class="org-left">&#xa0;</td>
<td class="org-left">S: Toobnix + YT when live</td>
@@ -910,23 +993,23 @@ so we know what we need to scramble to do.
<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>S: some JS enrichment</b></td>
+<td class="org-left"><b>sachac: some JS and CSS enrichment</b></td>
<td class="org-left">more JS and CSS, embeds, videoplayer</td>
</tr>
<tr>
-<td class="org-left">intro and exit</td>
+<td class="org-left"><a href="#intro">intro and exit</a></td>
<td class="org-left"><b>generic static image</b></td>
<td class="org-left">per-talk image</td>
-<td class="org-left">image variants, audio/video to help people check</td>
+<td class="org-left">Emacs thing so we can display info, countdowns, IRC</td>
</tr>
<tr>
-<td class="org-left">ansible</td>
+<td class="org-left"><a href="#ansible">ansible</a></td>
<td class="org-left">none</td>
-<td class="org-left"><b>some automation</b></td>
+<td class="org-left"><b>sachac: some automation</b></td>
<td class="org-left">comprehensive, can also work against containers</td>
</tr>
</tbody>
@@ -1460,7 +1543,7 @@ Interested in a shift? Please e-mail <mailto:emacsconf-org-private@gnu.org> and
# Other tasks and processes
-- [Giving conf.org access to a new volunteer or fake user](#org410c614)
+- [Giving conf.org access to a new volunteer or fake user](#orgfbdb10f)
- [As prerecorded talks come in](#prerec-process)
- [When a talk is captioned](#when-captioned)
- [Other tasks before the conference](#before)
@@ -1469,7 +1552,7 @@ Interested in a shift? Please e-mail <mailto:emacsconf-org-private@gnu.org> and
- [In case of](#exceptions)
-<a id="org410c614"></a>
+<a id="orgfbdb10f"></a>
## Giving conf.org access to a new volunteer or fake user
@@ -1638,8 +1721,6 @@ Links:
EmacsConf 2021 starting now: <https://emacsconf.org/2021/>
-<a id="other-streams"></a>
-
##### Stream
@@ -1997,7 +2078,7 @@ Probably focus on grabbing the audio first and seeing what's worth keeping
Make a table of the form
-<table id="org4cbfeb5" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
+<table id="org8cab286" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<colgroup>
@@ -2285,7 +2366,9 @@ Thanks!
Sacha
-## DONE Early speaker notification :sachac:
+<a id="acceptance"></a>
+
+## DONE Acceptance :sachac:
We can accept early or send people a note saying notification of acceptance will be on Oct 15, because of the extended CFP.
Right before this e-mail:
@@ -2428,79 +2511,6 @@ Sacha Chua
## Future
-### Acceptance
-
-This is a copy of the previous
-
-
-#### Code
-
- (defun emacsconf-draft-acceptance ()
- (interactive)
- (let* ((sched (org-timestamp-from-string (org-entry-get (point) "SCHEDULED")))
- (attrs
- (append (emacsconf-get-talk-info-for-subtree)
- :other-notes
- (if (org-entry-get (point) "ORG_NOTE") (concat "--- notes ---\n" (org-entry-get (point) "ORG_NOTE") "\n-----\n\n") "")))
- (avail (plist-get attrs :avail)))
- (plist-put attrs
- :availability
- (cond
- ((null avail) "I don't think you specified availability when submitting. Would this time be okay with you?")
- ((string-match "!avail" avail) "We know this isn't when you've indicated when you'd be available, but will this time be okay for presenting the talk? It's okay to follow up with questions after the event. If you happen to be available, we'd love to have you join us.")
- ((string-match "live" avail) "We've scheduled a few minutes for live questions and answers via web conference. Will you be available around this time? If there are more questions, you can also continue over Etherpad/IRC.")
- ((string-match "IRC" avail) "Will you be able to join around this time to handle questions over IRC or the pad? If not, we can forward questions to you.")
- ((string-match "pad" avail) "Will you be able to join around this time to handle questions over the pad? If not, we can forward questions to you.")
- (t avail)))
- (plist-put attrs
- :time-explanation
- (if (<= (string-to-number (plist-get attrs :time)) (string-to-number (plist-get attrs :min-time)))
- "Thank you for suggesting an awesome talk of that length!"
- "This is less time than you requested, but we've had to make some tough choices to fit all these interesting talks into the schedule. Would it be possible for you to squeeze your talk into that time?"))
- (save-excursion
- (goto-char (org-find-entry-with-id "acceptance"))
- (plist-put attrs :subject (conf-replace-plist-in-string attrs (org-entry-get (point) "ITEM")))
- (org-end-of-meta-data)
- (plist-put attrs :body (buffer-substring-no-properties (point) (org-end-of-subtree))))
- (compose-mail
- (plist-get attrs :email)
- (plist-get attrs :subject)
- '(("Reply-To" . "emacsconf-submit@gnu.org")
- ("Mail-Followup-To" . "emacsconf-submit@gnu.org"))
- nil)
- (message-goto-body)
- (save-excursion (conf-replace-plist-in-string attrs (plist-get attrs :body)))))
-
-
-#### Template
-
-Dear ${name},
-
-We would love to have your talk "${title}" as part of EmacsConf
-${year}, and we've allocated ${time} minutes for it. ${time-explanation}
-
-Your talk is tentatively scheduled for ${scheduled}. The times
-may move around a bit as we update the schedule, so we'll check in
-with you if things change a lot. ${availability}
-
-${other-notes}Please plan to prerecord your ${time}-minute
-talk(s) by Sunday ${prere-date} at the latest. If you can, please send
-it in as early as possible. Submitting your video early lets us ask
-volunteers to help caption the video, making your talk more accessible
-and searchable.
-
-You can check out <https://emacsconf.org/${year}/prepare/> for tips on
-preparing and recording your talk. If you have questions or concerns,
-please let us know.
-
-Thanks,
-
-Sacha Chua
-EmacsConf organization team
-
-P.S. Please keep emacsconf-submit@gnu.org in To or Cc when replying.
-
-
### Acknowledge pre-rec submission
(defun emacsconf-acknowledge-submission ()
diff --git a/2022/organizers-notebook/index.org b/2022/organizers-notebook/index.org
index e25c13b3..db2de204 100644
--- a/2022/organizers-notebook/index.org
+++ b/2022/organizers-notebook/index.org
@@ -90,10 +90,17 @@ SCHEDULED: <2022-10-09 Sun>
Add your news and requests to this.
**** Template so far
+:PROPERTIES:
+:SUBJECT: Getting ready for EmacsConf ${year}
+:END:
+
+Hello, EmacsConf volunteers!
-- https://emacsconf.org/2022/organizers-notebook/#overall has an overall
+We're starting to gear up for EmacsConf ${year} and we would love your help!
+
+- https://emacsconf.org/${year}/organizers-notebook/#overall has an overall
prioritization matrix. If any of those options look interesting, you
- can volunteer to help move the needle!
+ can volunteer to help move the needle.
- sachac: Given the number of talks this year, we're going to try to
see if we can pull off two tracks. I've posted a draft schedule at
https://emacsconf.org/2022/draft-schedule/ and will e-mail speakers
@@ -123,17 +130,17 @@ Look for the TO_CONFIRM status in conf.org, probably include in schedule e-mail
:END:
| | Work | Speakers | Volunteers | Public |
-| [2022-09-30 Fri] | | acceptance, reply to confirm | | |
-| [2022-10-09 Sun] | | schedule, reply if not okay | overall priorities | |
+| [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] | [[#upload][file upload]] | follow up with radio silence | infra update | |
| [2022-10-23 Sun] | [[#etherpad][Etherpad]], [[#upload][stream]] | file upload instructions, drop radio silence | training | |
| [2022-10-30 Sun] | [[#intro][intro, exit videos]] | | shifts | schedule, posters? |
| [2022-11-06 Sun] | [[#write-viewing][watch pages]] | prerec confirmation/reminder, caption progress | caption kickoff | |
-| [2022-11-13 Sun] | captions | tech check | | |
+| [2022-11-13 Sun] | dry run, captions | tech check | | |
| [2022-11-20 Sun] | captions | checkin instructions | | |
| [2022-11-27 Sun] | captions | last weekend before EmacsConf | | watching |
-*** TODO Send people schedule information and doublecheck their availability/Q&A preference :sachac:email:speakers:sched:
-SCHEDULED: <2022-10-08 Sat>
+*** DONE Send people schedule information and doublecheck their availability/Q&A preference :sachac:email:speakers:sched:
+CLOSED: [2022-10-09 Sun 09:38] SCHEDULED: <2022-10-08 Sat>
:PROPERTIES:
:CUSTOM_ID: check-sched
:END:
@@ -144,61 +151,147 @@ SCHEDULED: <2022-10-08 Sat>
GROUP is (email . (talk talk))"
(interactive (list (emacsconf-mail-complete-email-group)))
(require 'emacsconf-ical)
- (emacsconf-mail-prepare
- (or template (emacsconf-mail-merge-get-template "check-sched"))
- group
- (list
- :titles
- (mapconcat (lambda (o) (format "%s %s"
- (plist-get o :title)
- (format-time-string
- "%b %-e %I:%M %Z"
- (plist-get o :start-time)
- emacsconf-timezone)))
- (cdr group) " and ")
- :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)
- :coordination-note
- (if (seq-find (lambda (o) (member (plist-get o :slug) '("journalism" "rolodex" "orgsuperlinks" "buttons" "hyperorg" "science")))
- (cdr group))
- "I've changed the order slightly from the coordination e-mail I sent you. The sequence is now journalism - science - rolodex - orgsuperlinks - buttons - hyperorg. science is now second instead of last, and the first two talks are on Sat while the last four are on Sun. That probably means you don't have to coordinate as much, but you can still do so if you would like to build on other people's talks."
- "")
- :schedule
- (mapconcat
- (lambda (o) (format "\"%s\" (%s) - %s track\n%s"
- (plist-get o :title)
- (plist-get o :slug)
- (plist-get o :track)
- (string-join
- (let ((emacsconf-timezones
- (if (plist-get o :timezone)
- (seq-uniq (list emacsconf-timezone (plist-get o :timezone) "UTC"))
- emacsconf-timezones)))
- (emacsconf-timezone-strings o))
- "\n")))
- (cdr group)
- "\n----------------------------------------------------------------\n")
- :timezone-note
- (if (plist-get (cadr group) :timezone)
- (format "I've included a conversion to the %s timezone. Let me know if you'd like me to use a different timezone in future e-mails."
- (plist-get (cadr group) :timezone))
- "I can translate times into your local timezone. Let me know what timezone you'd like me to use.")
- :availability-note
- (if (seq-find (lambda (o) (string-match "yes" (or (plist-get o :availability) ""))) (cdr group))
- (format "I think you've indicated that you're available during the conference.")
- (format "I think it respects your indicated availability, which we've noted as %s. "
- (string-join
- (seq-uniq
- (mapcar
- (lambda (o) (format "\"%s\"" (plist-get o :availability)))
- (cdr group)))
- " and "))))))
+ (let ((reply-by-date (date-to-time "2022-10-14"))
+ (draft-schedule (concat emacsconf-base-url emacsconf-year "/draft-schedule/")))
+ (emacsconf-mail-prepare
+ (or template (emacsconf-mail-merge-get-template "check-sched"))
+ group
+ (list
+ :titles
+ (mapconcat (lambda (o) (format "%s: %s"
+ (plist-get o :slug)
+ (format-time-string
+ "%b %-e %-I:%M %#p %Z"
+ (plist-get o :start-time)
+ emacsconf-timezone)))
+ (cdr group) "; ")
+ :draft-schedule
+ draft-schedule
+ :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)
+ :coordination-note
+ (if (seq-find (lambda (o) (member (plist-get o :slug) '("journalism" "rolodex" "orgsuperlinks" "buttons" "hyperorg" "science")))
+ (cdr group))
+ "I've changed the order slightly from the coordination e-mail I sent you. The sequence is now journalism - science - rolodex - orgsuperlinks - buttons - hyperorg. science is now second instead of last, and the first two talks are on Sat while the last four are on Sun. That probably means you don't have to coordinate as much, but you can still do so if you would like to build on other people's talks."
+ "")
+ :schedule
+ (mapconcat
+ (lambda (o) (format "* TODO Check time for \"%s\" (%s) :emacsconf:\nDEADLINE: %s\n(Not a hard deadline, just encouragement to e-mail us before that date if you can)\nPlease e-mail [[mailto:emacsconf-submit@gnu.org]] if you need it changed\n%s track\n%s\nIn context: %s"
+ (plist-get o :title)
+ (plist-get o :slug)
+ (format-time-string (car org-time-stamp-formats) reply-by-date emacsconf-timezone)
+ (plist-get o :track)
+ (string-join
+ (let ((emacsconf-timezones
+ (if (plist-get o :timezone)
+ (seq-uniq (append (list emacsconf-timezone)
+ (split-string (plist-get o :timezone) " ")
+ (list "UTC")))
+ emacsconf-timezones)))
+ (emacsconf-timezone-strings o))
+ "\n")
+ draft-schedule))
+ (cdr group)
+ "\n----------------------------------------------------------------\n")
+ :reply-by
+ (format-time-string "%b %-e (%a)" reply-by-date emacsconf-timezone)
+ :timezone-note
+ (if (plist-get (cadr group) :timezone)
+ (format "I've included timezone conversion to %s. Let me know if you'd like me to use a different timezone in future e-mails."
+ (plist-get (cadr group) :timezone) " ")
+ "I can translate times into your local timezone. Let me know what timezone you'd like me to use.")
+ :availability-note
+ (cond
+ ((seq-find (lambda (o) (string-match "yes" (or (plist-get o :availability) ""))) (cdr group))
+ (format "I think you've indicated that you're available during the conference."))
+ ((seq-find (lambda (o) (string-match "not indicated" (or (plist-get o :availability) ""))) (cdr group))
+ (format "I think you didn't indicate any particular availability constraints in your submission."))
+ (t (format "I think it respects your indicated availability, which we've noted as %s."
+ (string-join
+ (seq-uniq
+ (mapcar
+ (lambda (o) (format "\"%s\"" (plist-get o :availability)))
+ (cdr group)))
+ " and "))))))))
+
+(defun emacsconf-mail-schedule-update (group &optional template)
+ "Send draft schedule update.
+GROUP is (email . (talk talk))"
+ (interactive (list (emacsconf-mail-complete-email-group)))
+ (require 'emacsconf-ical)
+ (let ((reply-by-date (date-to-time "2022-10-14"))
+ (draft-schedule (concat emacsconf-base-url emacsconf-year "/draft-schedule/")))
+ (emacsconf-mail-prepare
+ (or template (emacsconf-mail-merge-get-template "check-sched"))
+ group
+ (list
+ :titles
+ (mapconcat (lambda (o) (format "%s: %s"
+ (plist-get o :slug)
+ (format-time-string
+ "%b %-e %-I:%M %#p %Z"
+ (plist-get o :start-time)
+ emacsconf-timezone)))
+ (cdr group) "; ")
+ :draft-schedule
+ draft-schedule
+ :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)
+ :coordination-note
+ (if (seq-find (lambda (o) (member (plist-get o :slug) '("journalism" "rolodex" "orgsuperlinks" "buttons" "hyperorg" "science")))
+ (cdr group))
+ "I've changed the order slightly from the coordination e-mail I sent you. The sequence is now journalism - science - rolodex - orgsuperlinks - buttons - hyperorg. science is now second instead of last, and the first two talks are on Sat while the last four are on Sun. That probably means you don't have to coordinate as much, but you can still do so if you would like to build on other people's talks."
+ "")
+ :schedule
+ (mapconcat
+ (lambda (o) (format "\"%s\" (%s)\n%s track\n%s\nIn context: %s"
+ (plist-get o :title)
+ (plist-get o :slug)
+ (plist-get o :track)
+ (string-join
+ (let ((emacsconf-timezones
+ (if (plist-get o :timezone)
+ (seq-uniq (append (list emacsconf-timezone)
+ (split-string (plist-get o :timezone) " ")
+ (list "UTC")))
+ emacsconf-timezones)))
+ (emacsconf-timezone-strings o))
+ "\n")
+ draft-schedule))
+ (cdr group)
+ "\n----------------------------------------------------------------\n")
+ :reply-by
+ (format-time-string "%b %-e (%a)" reply-by-date emacsconf-timezone)
+ :timezone-note
+ (if (plist-get (cadr group) :timezone)
+ (format "I've included timezone conversion to %s. Let me know if you'd like me to use a different timezone in future e-mails."
+ (plist-get (cadr group) :timezone) " ")
+ "I can translate times into your local timezone. Let me know what timezone you'd like me to use.")
+ :availability-note
+ (cond
+ ((seq-find (lambda (o) (string-match "yes" (or (plist-get o :availability) ""))) (cdr group))
+ (format "I think you've indicated that you're available during the conference."))
+ ((seq-find (lambda (o) (string-match "not indicated" (or (plist-get o :availability) ""))) (cdr group))
+ (format "I think you didn't indicate any particular availability constraints in your submission."))
+ (t (format "I think it respects your indicated availability, which we've noted as %s."
+ (string-join
+ (seq-uniq
+ (mapcar
+ (lambda (o) (format "\"%s\"" (plist-get o :availability)))
+ (cdr group)))
+ " and "))))))))
#+end_src
**** Template
@@ -207,6 +300,7 @@ GROUP is (email . (talk talk))"
:SUBJECT: EmacsConf draft schedule: ${titles}
:REPLY_TO: emacsconf-submit@gnu.org, ${email}
:MAIL_FOLLOWUP_TO: emacsconf-submit@gnu.org, ${email}
+:CC: emacsconf-submit@gnu.org
:FUNCTION: emacsconf-mail-schedule
:END:
Hi, ${speakers-short}!
@@ -228,12 +322,37 @@ the draft schedule at https://emacsconf.org/${year}/draft-schedule/ .
The times may move around a bit as we update the schedule, so I'll
check in with you if things change a lot. ${coordination-note} ${wrap}
-Please let us know if the times don't work for you or if you think
-your talk would go better next to a different talk. We're aiming to
-publish the schedule by *Oct 15*, so we'd love to hear from you by
-then if we need to tweak things. We can shuffle things around even
-after that date if something comes up. ${timezone-note} Please keep
-emacsconf-submit@gnu.org in To or Cc when replying. Thanks!${wrap}
+We'd like to publish the schedule this month, so we'd love to hear
+from you by *${reply-by}* if the times don't work for you. (We can shuffle
+things around even after that date if something comes up.) Also, if
+you think your talk${plural} would go better next to a different talk, please
+let us know. ${timezone-note} Please keep emacsconf-submit@gnu.org in
+To or Cc when replying. Thanks!${wrap}
+
+Sacha
+**** Schedule change affecting dev
+:PROPERTIES:
+:SUBJECT: EmacsConf draft schedule update: ${titles}
+:REPLY_TO: emacsconf-submit@gnu.org, ${email}
+:MAIL_FOLLOWUP_TO: emacsconf-submit@gnu.org, ${email}
+:CC: emacsconf-submit@gnu.org
+:FUNCTION: emacsconf-mail-schedule-update
+:SLUGS: asmblox wayland localizing treesitter lspbridge dbus
+:EMAIL_ID: sched-change
+:END:
+
+Quick update!
+
+I tweaked the schedule to accommodate some schedule requests. Please
+check https://emacsconf.org/${year}/draft-schedule/ to see the current
+schedule for your talk. The main change is that the localizing talk is
+now on Sunday afternoon, so asmblox and wayland are on Saturday
+morning along with treesitter and lspbridge, and dbus has moved a
+little earlier on Sunday afternoon. Thanks for your patience!
+
+----------------------------------------------------------------
+${schedule}
+----------------------------------------------------------------
Sacha
@@ -399,7 +518,7 @@ can currently publish
**** TODO Get ansible to run against a clean docker
**** TODO Add ikiwiki template to ansible
-*** BLOCKED Make intro and exit videos
+*** BLOCKED Make intro and exit sequence
:PROPERTIES:
:CREATED: [2022-10-03 Mon 07:50]
:CUSTOM_ID: intro
@@ -415,8 +534,7 @@ Needs to wait for pad decision, or have friendly URLs redirect to the right pads
- Good: Static image, maybe created with LaTeX
- Better: Looping video with unobtrusive sound so people can doublecheck that their audio works
-- Best: Multiple versions to accommodate last-minute changes to Q&A
-- Bester? ;) : Voice-over contextualizing the talk? Pointers to related talks?
+- Best: Emacs thing so that we can have a dynamic timer and last-minute announcements, and so that it's Emacs =)
See break commercials
https://www.collabmagazine.com/organizing-a-multi-track-virtual-conference-with-microsoft-teams-live-events-a-technical-playbook-and-lessons-learned/
@@ -478,10 +596,35 @@ Also add to watch page
:PROPERTIES:
:CUSTOM_ID: publish-live
:END:
-*** TODO Set up talks on Toobnix and YouTube :sachac:
+*** BLOCKED Set up talks on Toobnix and YouTube :sachac:
:PROPERTIES:
:CUSTOM_ID: video-platforms
:END:
+so that people can find the videos on other video platforms
+waiting for prerecs
+*** TODO Set up stream events on Toobnix and YouTube :sachac:
+:PROPERTIES:
+:CUSTOM_ID: other-streams
+:END:
+
+so that people on other platforms can come across EmacsConf
+
+ #+begin_src sh :eval no :exports code
+ MOUNT=$1
+ while true; do ffmpeg -loglevel 24 -i http://localhost:8000/main.webm -cluster_size_limit 2M -cluster_time_limit 5100 -b:v 1M -crf 30 -g 125 -deadline good -threads 4 -vcodec libx264 -acodec libmp3lame -f flv $MOUNT; done
+ #+end_src
+*** TODO Prepare to announce talks on IRC
+:PROPERTIES:
+:CUSTOM_ID: irc-announce
+:END:
+
+- talks should be announced in their relevant tracks and in the hallways
+ - video starting in 5 minutes
+ - video starting now
+ - Q&A starting now & where
+- a small announcement might go into the other track as well
+- announcement can include talk page, pad, IRC nick, pronouns
+
*** TODO Ask speakers for bios or support nudges to include on their talk pages
:PROPERTIES:
:CUSTOM_ID: speaker-bio
@@ -489,6 +632,37 @@ Also add to watch page
maybe after we get the prerecs
ex: liberapay, patreon, anyone looking for a job, etc.
+*** BLOCKED Do a dry run
+:PROPERTIES:
+:CUSTOM_ID: dry-run
+:END:
+
+- Streams
+ - [ ] General stream
+ - [ ] Development stream
+ - [ ] 480p streams
+ - [ ] Toobnix streams
+ - [ ] YouTube streams
+- Scenes
+ - [ ] Intro
+ - [ ] Prerec
+ - [ ] Q&A: live
+ - [ ] Q&A: IRC
+ - [ ] Q&A: pad
+- [ ] IRC channels
+ - [ ] Announce
+ - [ ] Timers
+ - [ ] Question handling
+- [ ] Watching pages
+ - [ ] Before launch
+ - [ ] Streaming
+ - [ ] Emergency announcement
+- [ ] Pads
+- [ ] Wiki
+ - [ ] Schedule update
+ - [ ] Message on the schedule
+ - [ ] Prerec live
+- [ ] Wind everything down
*** TODO [#C] Figure out why ikiwiki is slow :infra:wiki:
:PROPERTIES:
:CUSTOM_ID: ikiwiki-regex
@@ -539,26 +713,27 @@ slider depending on who wants to volunteer and how much we can get
done. At some point, we'll figure out how to track our current status
so we know what we need to scramble to do.
-| | Good | Better | Best |
-|-------------------+----------------------------------+-----------------------------+------------------------------------------------------|
-| [[#sched-decision][schedule]] | one track | *DONE S: two tracks* | aligned times, full roster |
-| schedule view | text table | S: imagemap fallback | *DONE S: interactive SVG* |
-| [[#upload][upload]] | FTP | *S?: web-based* | auto-encoded, preview (SReview?) |
-| [[#streaming][streaming]] | ffmpeg from computer | DONE OBS | *Z: OBS in cloud, switchable hosts* |
-| [[#prepare-prerec-process][prerec]] | DONE play original with captions | Z: normalize audio | *S: post as soon as talk is live* |
-| 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 | *S: + IRC* | + talk info, maybe even pad |
-| [[#etherpad][pad]] | one pad for conf | one pad per talk, wikimedia | *one pad per talk, self-hosted* so we can access API |
-| [[#irc][IRC]] | #emacsconf, -org | *tracks, hallway, org* | IRC volunteer copying to pads; maybe even IRC bots |
-| IRC announcements | *ERC commands* | timer-based | |
-| [[#publishing-sched][sched update]] | *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* |
-| other platforms | *S: Toobnix & YT after event* | | S: Toobnix + YT when live |
-| [[#wiki-design][wiki]] | plain text, markdown | *S: some JS enrichment* | more JS and CSS, embeds, videoplayer |
-| intro and exit | *generic static image* | per-talk image | image variants, audio/video to help people check |
-| ansible | none | *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 | S: imagemap fallback | *DONE S: interactive SVG* |
+| [[#upload][upload]] | FTP | *S?: web-based* | auto-encoded, preview (SReview?) |
+| [[#streaming][streaming]] | ffmpeg from computer | DONE OBS | *Z: OBS in cloud, switchable hosts* |
+| [[#prepare-prerec-process][prerec]] | DONE play original with captions | Z: normalize audio | *S: post as soon as talk is live* |
+| BBB rooms | about 5 rooms that we cycle through | | *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 | *S: + IRC* | + talk info, maybe even pad |
+| [[#etherpad][pad]] | one pad for conf | one pad per talk, wikimedia | *one pad per talk, self-hosted* so we can access API |
+| [[#irc][IRC]] | #emacsconf, -org | *tracks, hallway, org* | IRC volunteer copying to pads; maybe even IRC bots |
+| [[#irc-announce][IRC announcements]] | *ERC commands* | timer-based | |
+| [[#publishing-sched][sched update]] | *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 |
** How do we want to make the full schedule more manageable?
:PROPERTIES:
@@ -1931,8 +2106,11 @@ Thanks!
Sacha
-** DONE Early speaker notification :sachac:
+** DONE Acceptance :sachac:
CLOSED: [2022-09-30 Fri 18:13] DEADLINE: <2022-09-30 Fri>
+:PROPERTIES:
+:CUSTOM_ID: acceptance
+:END:
We can accept early or send people a note saying notification of acceptance will be on Oct 15, because of the extended CFP.
Right before this e-mail:
@@ -2077,79 +2255,6 @@ Thank you so much!
Sacha Chua
** Future
-*** Acceptance
-This is a copy of the previous
-**** Code
-#+begin_src emacs-lisp
-(defun emacsconf-draft-acceptance ()
- (interactive)
- (let* ((sched (org-timestamp-from-string (org-entry-get (point) "SCHEDULED")))
- (attrs
- (append (emacsconf-get-talk-info-for-subtree)
- :other-notes
- (if (org-entry-get (point) "ORG_NOTE") (concat "--- notes ---\n" (org-entry-get (point) "ORG_NOTE") "\n-----\n\n") "")))
- (avail (plist-get attrs :avail)))
- (plist-put attrs
- :availability
- (cond
- ((null avail) "I don't think you specified availability when submitting. Would this time be okay with you?")
- ((string-match "!avail" avail) "We know this isn't when you've indicated when you'd be available, but will this time be okay for presenting the talk? It's okay to follow up with questions after the event. If you happen to be available, we'd love to have you join us.")
- ((string-match "live" avail) "We've scheduled a few minutes for live questions and answers via web conference. Will you be available around this time? If there are more questions, you can also continue over Etherpad/IRC.")
- ((string-match "IRC" avail) "Will you be able to join around this time to handle questions over IRC or the pad? If not, we can forward questions to you.")
- ((string-match "pad" avail) "Will you be able to join around this time to handle questions over the pad? If not, we can forward questions to you.")
- (t avail)))
- (plist-put attrs
- :time-explanation
- (if (<= (string-to-number (plist-get attrs :time)) (string-to-number (plist-get attrs :min-time)))
- "Thank you for suggesting an awesome talk of that length!"
- "This is less time than you requested, but we've had to make some tough choices to fit all these interesting talks into the schedule. Would it be possible for you to squeeze your talk into that time?"))
- (save-excursion
- (goto-char (org-find-entry-with-id "acceptance"))
- (plist-put attrs :subject (conf-replace-plist-in-string attrs (org-entry-get (point) "ITEM")))
- (org-end-of-meta-data)
- (plist-put attrs :body (buffer-substring-no-properties (point) (org-end-of-subtree))))
- (compose-mail
- (plist-get attrs :email)
- (plist-get attrs :subject)
- '(("Reply-To" . "emacsconf-submit@gnu.org")
- ("Mail-Followup-To" . "emacsconf-submit@gnu.org"))
- nil)
- (message-goto-body)
- (save-excursion (conf-replace-plist-in-string attrs (plist-get attrs :body)))))
-#+end_src
-
-**** Template
-:PROPERTIES:
-:ID: acceptance
-:SUBJECT: EmacsConf ${year} SUB${sub-id} accepted: ${title}
-:END:
-
-Dear ${name},
-
-We would love to have your talk "${title}" as part of EmacsConf
-${year}, and we've allocated ${time} minutes for it. ${time-explanation}
-
-Your talk is tentatively scheduled for ${scheduled}. The times
-may move around a bit as we update the schedule, so we'll check in
-with you if things change a lot. ${availability}
-
-${other-notes}Please plan to prerecord your ${time}-minute
-talk(s) by Sunday ${prere-date} at the latest. If you can, please send
-it in as early as possible. Submitting your video early lets us ask
-volunteers to help caption the video, making your talk more accessible
-and searchable.
-
-You can check out https://emacsconf.org/${year}/prepare/ for tips on
-preparing and recording your talk. If you have questions or concerns,
-please let us know.
-
-Thanks,
-
-Sacha Chua
-EmacsConf organization team
-
-P.S. Please keep emacsconf-submit@gnu.org in To or Cc when replying.
-
*** Acknowledge pre-rec submission
#+begin_src emacs-lisp
diff --git a/2022/organizers-notebook/schedule.svg b/2022/organizers-notebook/schedule.svg
index 940f4922..24030c8f 100644
--- a/2022/organizers-notebook/schedule.svg
+++ b/2022/organizers-notebook/schedule.svg
@@ -1 +1 @@
-<svg width="800" height="200" 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="100" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="/" title="GEN Saturday, December 3"> <title> GEN Saturday, December 3</title> <rect x="0" y="15" opacity="0.8" width="-119168" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(-119170,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> GEN Saturday, December 3</text></g></a> <a href="/2022/talks/" title="Saturday opening remarks"> <title> Saturday opening remarks</title> <rect x="0" y="15" opacity="0.8" width="7" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(5,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> Saturday opening remarks</text></g></a> <a href="/2022/talks/journalism" title="Emacs journalism (or everything's a nail if you hit it with Emacs)"> <title> Emacs journalism (or everything's a nail if you hit it with Emacs)</title> <rect x="7" y="15" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(34,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> journalism</text></g></a> <a href="/2022/talks/school" title="Back to school with Emacs"> <title> Back to school with Emacs</title> <rect x="66" y="15" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(93,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> school</text></g></a> <a href="/2022/talks/handwritten" title="How to incorporate handwritten notes into Emacs Orgmode"> <title> How to incorporate handwritten notes into Emacs Orgmode</title> <rect x="111" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(123,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> handwritten</text></g></a> <a href="/" title="BREAK"> <title> BREAK</title> <rect x="155" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(167,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> BREAK</text></g></a> <a href="/2022/talks/science" title="Writing and organizing literature notes for scientific writing"> <title> Writing and organizing literature notes for scientific writing</title> <rect x="170" y="15" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(197,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> science</text></g></a> <a href="/" title="LUNCH"> <title> LUNCH</title> <rect x="266" y="15" opacity="0.8" width="88" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(352,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> LUNCH</text></g></a> <a href="/2022/talks/meetups" title="Attending and organizing Emacs meetups"> <title> Attending and organizing Emacs meetups</title> <rect x="355" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(367,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> meetups</text></g></a> <a href="/2022/talks/buddy" title="The Emacs Buddy initiative"> <title> The Emacs Buddy initiative</title> <rect x="400" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(412,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buddy</text></g></a> <a href="/2022/talks/community" title="The ship that builds itself: How we used Emacs to develop a workshop for communities"> <title> The ship that builds itself: How we used Emacs to develop a workshop for communities</title> <rect x="429" y="15" opacity="0.8" width="44" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(471,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> community</text></g></a> <a href="/" title="BREAK"> <title> BREAK</title> <rect x="503" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(515,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> BREAK</text></g></a> <a href="/2022/talks/realestate" title="Real estate and Org table formulas"> <title> Real estate and Org table formulas</title> <rect x="518" y="15" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(545,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> realestate</text></g></a> <a href="/2022/talks/health" title="Health data journaling and visualization with Org Mode and GNUplot"> <title> Health data journaling and visualization with Org Mode and GNUplot</title> <rect x="562" y="15" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(589,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> health</text></g></a> <a href="/2022/talks/jupyter" title="Edit live Jupyter notebook cells with Emacs"> <title> Edit live Jupyter notebook cells with Emacs</title> <rect x="622" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(634,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> jupyter</text></g></a> <a href="/2022/talks/orgvm" title="orgvm: a simple HTTP server for org"> <title> orgvm: a simple HTTP server for org</title> <rect x="666" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(678,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgvm</text></g></a> <a href="/2022/talks/" title="Saturday closing remarks"> <title> Saturday closing remarks</title> <rect x="711" y="15" opacity="0.8" width="7" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(716,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> Saturday closing remarks</text></g></a> <a href="/" title="GEN Sunday, December 4"> <title> GEN Sunday, December 4</title> <rect x="2133" y="15" opacity="0.8" width="-121301" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(-119170,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> GEN Sunday, December 4</text></g></a> <a href="/2022/talks/" title="Sunday opening remarks"> <title> Sunday opening remarks</title> <rect x="2133" y="15" opacity="0.8" width="7" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(2138,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> Sunday opening remarks</text></g></a> <a href="/2022/talks/survey" title="Results of the 2022 Emacs Survey"> <title> Results of the 2022 Emacs Survey</title> <rect x="2140" y="15" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(2167,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> survey</text></g></a> <a href="/2022/talks/orgyear" title="This Year in Org"> <title> This Year in Org</title> <rect x="2185" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(2197,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgyear</text></g></a> <a href="/2022/talks/rolodex" title="Build a Zettelkasten with the Hyperbole Rolodex"> <title> Build a Zettelkasten with the Hyperbole Rolodex</title> <rect x="2222" y="15" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(2249,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rolodex</text></g></a> <a href="/" title="BREAK"> <title> BREAK</title> <rect x="2266" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(2278,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> BREAK</text></g></a> <a href="/2022/talks/orgsuperlinks" title="Linking headings with org-super-links (poor-man's Zettelkasten)"> <title> Linking headings with org-super-links (poor-man's Zettelkasten)</title> <rect x="2281" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(2293,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgsuperlinks</text></g></a> <a href="/2022/talks/buttons" title="Linking personal info with Hyperbole implicit buttons"> <title> Linking personal info with Hyperbole implicit buttons</title> <rect x="2325" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(2337,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buttons</text></g></a> <a href="/" title="LUNCH"> <title> LUNCH</title> <rect x="2400" y="15" opacity="0.8" width="88" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(2486,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> LUNCH</text></g></a> <a href="/2022/talks/hyperorg" title="Powerful productivity with Hyperbole and Org Mode"> <title> Powerful productivity with Hyperbole and Org Mode</title> <rect x="2488" y="15" opacity="0.8" width="44" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(2530,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperorg</text></g></a> <a href="/2022/talks/workflows" title="Org workflows for developers"> <title> Org workflows for developers</title> <rect x="2562" y="15" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(2589,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> workflows</text></g></a> <a href="/2022/talks/grail" title="GRAIL---A Generalized Representation and Aggregation of Information Layers"> <title> GRAIL---A Generalized Representation and Aggregation of Information Layers</title> <rect x="2622" y="15" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(2649,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> grail</text></g></a> <a href="/" title="BREAK"> <title> BREAK</title> <rect x="2681" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(2693,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> BREAK</text></g></a> <a href="/2022/talks/indieweb" title="Putting Org Mode on the Indieweb"> <title> Putting Org Mode on the Indieweb</title> <rect x="2696" y="15" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(2723,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> indieweb</text></g></a> <a href="/2022/talks/fanfare" title="Fanfare for the Common Emacs User"> <title> Fanfare for the Common Emacs User</title> <rect x="2755" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(2767,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> fanfare</text></g></a> <a href="/2022/talks/" title="Sunday closing remarks"> <title> Sunday closing remarks</title> <rect x="2844" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(2856,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> Sunday closing remarks</text></g></a> <a href="/" title="DEV Saturday, December 3"> <title> DEV Saturday, December 3</title> <rect x="88" y="15" opacity="0.8" width="-119257" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(-119171,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> DEV Saturday, December 3</text></g></a> <a href="/" title="DEV Sunday, December 4"> <title> DEV Sunday, December 4</title> <rect x="2222" y="15" opacity="0.8" width="-121390" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(-119170,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> DEV Sunday, December 4</text></g></a> <a href="/2022/talks/localizing" title="Pre-localizing Emacs"> <title> Pre-localizing Emacs</title> <rect x="88" y="50" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(115,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> localizing</text></g></a> <a href="/2022/talks/treesitter" title="Tree-sitter beyond syntax highlighting"> <title> Tree-sitter beyond syntax highlighting</title> <rect x="155" y="50" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(167,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> treesitter</text></g></a> <a href="/2022/talks/lspbridge" title="lsp-bridge: complete asynchronous LSP client"> <title> lsp-bridge: complete asynchronous LSP client</title> <rect x="185" y="50" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(212,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> lspbridge</text></g></a> <a href="/" title="LUNCH"> <title> LUNCH</title> <rect x="266" y="50" opacity="0.8" width="88" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(352,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> LUNCH</text></g></a> <a href="/2022/talks/sqlite" title="Using SQLite as a data source: a framework and an example"> <title> Using SQLite as a data source: a framework and an example</title> <rect x="355" y="50" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(382,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sqlite</text></g></a> <a href="/2022/talks/mail" title="Revisiting the anatomy of Emacs mail user agents"> <title> Revisiting the anatomy of Emacs mail user agents</title> <rect x="422" y="50" opacity="0.8" width="44" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(464,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> mail</text></g></a> <a href="/" title="BREAK"> <title> BREAK</title> <rect x="503" y="50" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(515,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> BREAK</text></g></a> <a href="/2022/talks/maint" title="Maintaining the Maintainers: Attribution as an Economic Model for Open Source"> <title> Maintaining the Maintainers: Attribution as an Economic Model for Open Source</title> <rect x="518" y="50" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(545,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> maint</text></g></a> <a href="/2022/talks/eev" title="Bidirectional links with eev"> <title> Bidirectional links with eev</title> <rect x="585" y="50" opacity="0.8" width="7" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(590,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eev</text></g></a> <a href="/2022/talks/python" title="Short hyperlinks to Python docs"> <title> Short hyperlinks to Python docs</title> <rect x="607" y="50" opacity="0.8" width="7" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(612,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <a href="/2022/talks/haskell" title="Haskell code exploration with Emacs"> <title> Haskell code exploration with Emacs</title> <rect x="629" y="50" opacity="0.8" width="44" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(671,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> haskell</text></g></a> <a href="/2022/talks/rde" title="rde Emacs introduction"> <title> rde Emacs introduction</title> <rect x="2222" y="50" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(2249,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rde</text></g></a> <a href="/2022/talks/tramp" title="Elisp and the TRAMP: How to NOT write code you don't have to"> <title> Elisp and the TRAMP: How to NOT write code you don't have to</title> <rect x="2288" y="50" opacity="0.8" width="44" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(2330,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> tramp</text></g></a> <a href="/2022/talks/justl" title="justl: Driving recipes within Emacs"> <title> justl: Driving recipes within Emacs</title> <rect x="2370" y="50" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(2382,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> justl</text></g></a> <a href="/" title="LUNCH"> <title> LUNCH</title> <rect x="2400" y="50" opacity="0.8" width="88" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(2486,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> LUNCH</text></g></a> <a href="/2022/talks/detached" title="Getting detached from Emacs"> <title> Getting detached from Emacs</title> <rect x="2488" y="50" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(2500,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> detached</text></g></a> <a href="/2022/talks/eshell" title="Top 10 reasons why you should be using Eshell"> <title> Top 10 reasons why you should be using Eshell</title> <rect x="2540" y="50" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(2552,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eshell</text></g></a> <a href="/2022/talks/async" title="Emacs was async before async was cool"> <title> Emacs was async before async was cool</title> <rect x="2592" y="50" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(2619,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> async</text></g></a> <a href="/" title="BREAK"> <title> BREAK</title> <rect x="2659" y="50" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(2671,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> BREAK</text></g></a> <a href="/2022/talks/wayland" title="Emacs should become a Wayland compositor"> <title> Emacs should become a Wayland compositor</title> <rect x="2674" y="50" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(2686,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> wayland</text></g></a> <a href="/2022/talks/asmblox" title="asm-blox: a game based on WebAssembly that no one asked for"> <title> asm-blox: a game based on WebAssembly that no one asked for</title> <rect x="2725" y="50" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(2737,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> asmblox</text></g></a> <a href="/2022/talks/dbus" title="The Wheels on D-Bus"> <title> The Wheels on D-Bus</title> <rect x="2777" y="50" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(2804,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> dbus</text></g></a> <g transform="translate(0,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 9</text></g> <g transform="translate(88,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 10</text></g> <g transform="translate(177,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 11</text></g> <g transform="translate(266,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 12</text></g> <g transform="translate(355,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 1</text></g> <g transform="translate(444,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 2</text></g> <g transform="translate(533,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 3</text></g> <g transform="translate(622,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 4</text></g> <g transform="translate(711,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 5</text></g></g> <g transform="translate(0,100)"> <rect width="800" height="100" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="/" title="GEN Saturday, December 3"> <title> GEN Saturday, December 3</title> <rect x="-2134" y="15" opacity="0.8" width="-119168" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(-121304,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> GEN Saturday, December 3</text></g></a> <a href="/2022/talks/" title="Saturday opening remarks"> <title> Saturday opening remarks</title> <rect x="-2134" y="15" opacity="0.8" width="7" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(-2129,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> Saturday opening remarks</text></g></a> <a href="/2022/talks/journalism" title="Emacs journalism (or everything's a nail if you hit it with Emacs)"> <title> Emacs journalism (or everything's a nail if you hit it with Emacs)</title> <rect x="-2126" y="15" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(-2099,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> journalism</text></g></a> <a href="/2022/talks/school" title="Back to school with Emacs"> <title> Back to school with Emacs</title> <rect x="-2067" y="15" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(-2040,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> school</text></g></a> <a href="/2022/talks/handwritten" title="How to incorporate handwritten notes into Emacs Orgmode"> <title> How to incorporate handwritten notes into Emacs Orgmode</title> <rect x="-2023" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(-2011,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> handwritten</text></g></a> <a href="/" title="BREAK"> <title> BREAK</title> <rect x="-1978" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(-1966,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> BREAK</text></g></a> <a href="/2022/talks/science" title="Writing and organizing literature notes for scientific writing"> <title> Writing and organizing literature notes for scientific writing</title> <rect x="-1963" y="15" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(-1936,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> science</text></g></a> <a href="/" title="LUNCH"> <title> LUNCH</title> <rect x="-1867" y="15" opacity="0.8" width="88" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(-1781,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> LUNCH</text></g></a> <a href="/2022/talks/meetups" title="Attending and organizing Emacs meetups"> <title> Attending and organizing Emacs meetups</title> <rect x="-1778" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(-1766,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> meetups</text></g></a> <a href="/2022/talks/buddy" title="The Emacs Buddy initiative"> <title> The Emacs Buddy initiative</title> <rect x="-1734" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(-1722,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buddy</text></g></a> <a href="/2022/talks/community" title="The ship that builds itself: How we used Emacs to develop a workshop for communities"> <title> The ship that builds itself: How we used Emacs to develop a workshop for communities</title> <rect x="-1704" y="15" opacity="0.8" width="44" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(-1662,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> community</text></g></a> <a href="/" title="BREAK"> <title> BREAK</title> <rect x="-1630" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(-1618,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> BREAK</text></g></a> <a href="/2022/talks/realestate" title="Real estate and Org table formulas"> <title> Real estate and Org table formulas</title> <rect x="-1615" y="15" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(-1588,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> realestate</text></g></a> <a href="/2022/talks/health" title="Health data journaling and visualization with Org Mode and GNUplot"> <title> Health data journaling and visualization with Org Mode and GNUplot</title> <rect x="-1571" y="15" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(-1544,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> health</text></g></a> <a href="/2022/talks/jupyter" title="Edit live Jupyter notebook cells with Emacs"> <title> Edit live Jupyter notebook cells with Emacs</title> <rect x="-1512" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(-1500,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> jupyter</text></g></a> <a href="/2022/talks/orgvm" title="orgvm: a simple HTTP server for org"> <title> orgvm: a simple HTTP server for org</title> <rect x="-1467" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(-1455,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgvm</text></g></a> <a href="/2022/talks/" title="Saturday closing remarks"> <title> Saturday closing remarks</title> <rect x="-1423" y="15" opacity="0.8" width="7" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(-1418,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> Saturday closing remarks</text></g></a> <a href="/" title="GEN Sunday, December 4"> <title> GEN Sunday, December 4</title> <rect x="0" y="15" opacity="0.8" width="-121301" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(-121303,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> GEN Sunday, December 4</text></g></a> <a href="/2022/talks/" title="Sunday opening remarks"> <title> Sunday opening remarks</title> <rect x="0" y="15" opacity="0.8" width="7" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(5,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> Sunday opening remarks</text></g></a> <a href="/2022/talks/survey" title="Results of the 2022 Emacs Survey"> <title> Results of the 2022 Emacs Survey</title> <rect x="7" y="15" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(34,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> survey</text></g></a> <a href="/2022/talks/orgyear" title="This Year in Org"> <title> This Year in Org</title> <rect x="51" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(63,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgyear</text></g></a> <a href="/2022/talks/rolodex" title="Build a Zettelkasten with the Hyperbole Rolodex"> <title> Build a Zettelkasten with the Hyperbole Rolodex</title> <rect x="88" y="15" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(115,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rolodex</text></g></a> <a href="/" title="BREAK"> <title> BREAK</title> <rect x="133" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(145,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> BREAK</text></g></a> <a href="/2022/talks/orgsuperlinks" title="Linking headings with org-super-links (poor-man's Zettelkasten)"> <title> Linking headings with org-super-links (poor-man's Zettelkasten)</title> <rect x="148" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(160,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgsuperlinks</text></g></a> <a href="/2022/talks/buttons" title="Linking personal info with Hyperbole implicit buttons"> <title> Linking personal info with Hyperbole implicit buttons</title> <rect x="192" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(204,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buttons</text></g></a> <a href="/" title="LUNCH"> <title> LUNCH</title> <rect x="266" y="15" opacity="0.8" width="88" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(352,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> LUNCH</text></g></a> <a href="/2022/talks/hyperorg" title="Powerful productivity with Hyperbole and Org Mode"> <title> Powerful productivity with Hyperbole and Org Mode</title> <rect x="355" y="15" opacity="0.8" width="44" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(397,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperorg</text></g></a> <a href="/2022/talks/workflows" title="Org workflows for developers"> <title> Org workflows for developers</title> <rect x="429" y="15" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(456,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> workflows</text></g></a> <a href="/2022/talks/grail" title="GRAIL---A Generalized Representation and Aggregation of Information Layers"> <title> GRAIL---A Generalized Representation and Aggregation of Information Layers</title> <rect x="488" y="15" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(515,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> grail</text></g></a> <a href="/" title="BREAK"> <title> BREAK</title> <rect x="548" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(560,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> BREAK</text></g></a> <a href="/2022/talks/indieweb" title="Putting Org Mode on the Indieweb"> <title> Putting Org Mode on the Indieweb</title> <rect x="562" y="15" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(589,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> indieweb</text></g></a> <a href="/2022/talks/fanfare" title="Fanfare for the Common Emacs User"> <title> Fanfare for the Common Emacs User</title> <rect x="622" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(634,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> fanfare</text></g></a> <a href="/2022/talks/" title="Sunday closing remarks"> <title> Sunday closing remarks</title> <rect x="711" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(723,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> Sunday closing remarks</text></g></a> <a href="/" title="DEV Saturday, December 3"> <title> DEV Saturday, December 3</title> <rect x="-2045" y="15" opacity="0.8" width="-119257" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(-121304,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> DEV Saturday, December 3</text></g></a> <a href="/" title="DEV Sunday, December 4"> <title> DEV Sunday, December 4</title> <rect x="88" y="15" opacity="0.8" width="-121390" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(-121304,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> DEV Sunday, December 4</text></g></a> <a href="/2022/talks/localizing" title="Pre-localizing Emacs"> <title> Pre-localizing Emacs</title> <rect x="-2045" y="50" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(-2018,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> localizing</text></g></a> <a href="/2022/talks/treesitter" title="Tree-sitter beyond syntax highlighting"> <title> Tree-sitter beyond syntax highlighting</title> <rect x="-1978" y="50" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(-1966,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> treesitter</text></g></a> <a href="/2022/talks/lspbridge" title="lsp-bridge: complete asynchronous LSP client"> <title> lsp-bridge: complete asynchronous LSP client</title> <rect x="-1949" y="50" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(-1922,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> lspbridge</text></g></a> <a href="/" title="LUNCH"> <title> LUNCH</title> <rect x="-1867" y="50" opacity="0.8" width="88" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(-1781,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> LUNCH</text></g></a> <a href="/2022/talks/sqlite" title="Using SQLite as a data source: a framework and an example"> <title> Using SQLite as a data source: a framework and an example</title> <rect x="-1778" y="50" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(-1751,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sqlite</text></g></a> <a href="/2022/talks/mail" title="Revisiting the anatomy of Emacs mail user agents"> <title> Revisiting the anatomy of Emacs mail user agents</title> <rect x="-1712" y="50" opacity="0.8" width="44" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(-1670,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> mail</text></g></a> <a href="/" title="BREAK"> <title> BREAK</title> <rect x="-1630" y="50" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(-1618,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> BREAK</text></g></a> <a href="/2022/talks/maint" title="Maintaining the Maintainers: Attribution as an Economic Model for Open Source"> <title> Maintaining the Maintainers: Attribution as an Economic Model for Open Source</title> <rect x="-1615" y="50" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(-1588,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> maint</text></g></a> <a href="/2022/talks/eev" title="Bidirectional links with eev"> <title> Bidirectional links with eev</title> <rect x="-1549" y="50" opacity="0.8" width="7" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(-1544,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eev</text></g></a> <a href="/2022/talks/python" title="Short hyperlinks to Python docs"> <title> Short hyperlinks to Python docs</title> <rect x="-1526" y="50" opacity="0.8" width="7" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(-1521,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <a href="/2022/talks/haskell" title="Haskell code exploration with Emacs"> <title> Haskell code exploration with Emacs</title> <rect x="-1504" y="50" opacity="0.8" width="44" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(-1462,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> haskell</text></g></a> <a href="/2022/talks/rde" title="rde Emacs introduction"> <title> rde Emacs introduction</title> <rect x="88" y="50" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(115,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rde</text></g></a> <a href="/2022/talks/tramp" title="Elisp and the TRAMP: How to NOT write code you don't have to"> <title> Elisp and the TRAMP: How to NOT write code you don't have to</title> <rect x="155" y="50" opacity="0.8" width="44" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(197,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> tramp</text></g></a> <a href="/2022/talks/justl" title="justl: Driving recipes within Emacs"> <title> justl: Driving recipes within Emacs</title> <rect x="237" y="50" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(249,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> justl</text></g></a> <a href="/" title="LUNCH"> <title> LUNCH</title> <rect x="266" y="50" opacity="0.8" width="88" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(352,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> LUNCH</text></g></a> <a href="/2022/talks/detached" title="Getting detached from Emacs"> <title> Getting detached from Emacs</title> <rect x="355" y="50" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(367,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> detached</text></g></a> <a href="/2022/talks/eshell" title="Top 10 reasons why you should be using Eshell"> <title> Top 10 reasons why you should be using Eshell</title> <rect x="407" y="50" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(419,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eshell</text></g></a> <a href="/2022/talks/async" title="Emacs was async before async was cool"> <title> Emacs was async before async was cool</title> <rect x="459" y="50" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(486,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> async</text></g></a> <a href="/" title="BREAK"> <title> BREAK</title> <rect x="525" y="50" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(537,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> BREAK</text></g></a> <a href="/2022/talks/wayland" title="Emacs should become a Wayland compositor"> <title> Emacs should become a Wayland compositor</title> <rect x="540" y="50" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(552,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> wayland</text></g></a> <a href="/2022/talks/asmblox" title="asm-blox: a game based on WebAssembly that no one asked for"> <title> asm-blox: a game based on WebAssembly that no one asked for</title> <rect x="592" y="50" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(604,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> asmblox</text></g></a> <a href="/2022/talks/dbus" title="The Wheels on D-Bus"> <title> The Wheels on D-Bus</title> <rect x="644" y="50" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(671,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> dbus</text></g></a> <g transform="translate(0,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 9</text></g> <g transform="translate(88,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 10</text></g> <g transform="translate(177,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 11</text></g> <g transform="translate(266,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 12</text></g> <g transform="translate(355,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 1</text></g> <g transform="translate(444,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 2</text></g> <g transform="translate(533,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 3</text></g> <g transform="translate(622,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 4</text></g> <g transform="translate(711,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 5</text></g></g></svg> \ No newline at end of file
+<svg width="800" height="200" 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="100" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="/" title="GEN Saturday, December 3"> <title> GEN Saturday, December 3</title> <rect x="0" y="15" opacity="0.8" width="-117306" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(-117308,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> GEN Saturday, December 3</text></g></a> <a href="/2022/talks/" title="Saturday opening remarks"> <title> Saturday opening remarks</title> <rect x="0" y="15" opacity="0.8" width="7" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(5,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> Saturday opening remarks</text></g></a> <a href="/2022/talks/journalism" title="Emacs journalism (or everything's a nail if you hit it with Emacs)"> <title> Emacs journalism (or everything's a nail if you hit it with Emacs)</title> <rect x="7" y="15" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(34,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> journalism</text></g></a> <a href="/2022/talks/school" title="Back to school with Emacs"> <title> Back to school with Emacs</title> <rect x="66" y="15" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(93,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> school</text></g></a> <a href="/2022/talks/handwritten" title="How to incorporate handwritten notes into Emacs Orgmode"> <title> How to incorporate handwritten notes into Emacs Orgmode</title> <rect x="111" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(123,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> handwritten</text></g></a> <a href="/" title="BREAK"> <title> BREAK</title> <rect x="155" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(167,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> BREAK</text></g></a> <a href="/2022/talks/science" title="Writing and organizing literature notes for scientific writing"> <title> Writing and organizing literature notes for scientific writing</title> <rect x="170" y="15" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(197,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> science</text></g></a> <a href="/" title="LUNCH"> <title> LUNCH</title> <rect x="266" y="15" opacity="0.8" width="88" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(352,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> LUNCH</text></g></a> <a href="/2022/talks/meetups" title="Attending and organizing Emacs meetups"> <title> Attending and organizing Emacs meetups</title> <rect x="355" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(367,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> meetups</text></g></a> <a href="/2022/talks/buddy" title="The Emacs Buddy initiative"> <title> The Emacs Buddy initiative</title> <rect x="400" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(412,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buddy</text></g></a> <a href="/2022/talks/community" title="The ship that builds itself: How we used Emacs to develop a workshop for communities"> <title> The ship that builds itself: How we used Emacs to develop a workshop for communities</title> <rect x="429" y="15" opacity="0.8" width="44" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(471,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> community</text></g></a> <a href="/" title="BREAK"> <title> BREAK</title> <rect x="503" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(515,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> BREAK</text></g></a> <a href="/2022/talks/realestate" title="Real estate and Org table formulas"> <title> Real estate and Org table formulas</title> <rect x="518" y="15" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(545,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> realestate</text></g></a> <a href="/2022/talks/health" title="Health data journaling and visualization with Org Mode and GNUplot"> <title> Health data journaling and visualization with Org Mode and GNUplot</title> <rect x="562" y="15" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(589,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> health</text></g></a> <a href="/2022/talks/jupyter" title="Edit live Jupyter notebook cells with Emacs"> <title> Edit live Jupyter notebook cells with Emacs</title> <rect x="622" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(634,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> jupyter</text></g></a> <a href="/2022/talks/orgvm" title="orgvm: a simple HTTP server for org"> <title> orgvm: a simple HTTP server for org</title> <rect x="666" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(678,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgvm</text></g></a> <a href="/2022/talks/" title="Saturday closing remarks"> <title> Saturday closing remarks</title> <rect x="711" y="15" opacity="0.8" width="7" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(716,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> Saturday closing remarks</text></g></a> <a href="/" title="GEN Sunday, December 4"> <title> GEN Sunday, December 4</title> <rect x="2133" y="15" opacity="0.8" width="-119439" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(-117308,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> GEN Sunday, December 4</text></g></a> <a href="/2022/talks/" title="Sunday opening remarks"> <title> Sunday opening remarks</title> <rect x="2133" y="15" opacity="0.8" width="7" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(2138,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> Sunday opening remarks</text></g></a> <a href="/2022/talks/survey" title="Results of the 2022 Emacs Survey"> <title> Results of the 2022 Emacs Survey</title> <rect x="2140" y="15" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(2167,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> survey</text></g></a> <a href="/2022/talks/orgyear" title="This Year in Org"> <title> This Year in Org</title> <rect x="2185" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(2197,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgyear</text></g></a> <a href="/2022/talks/rolodex" title="Build a Zettelkasten with the Hyperbole Rolodex"> <title> Build a Zettelkasten with the Hyperbole Rolodex</title> <rect x="2222" y="15" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(2249,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rolodex</text></g></a> <a href="/" title="BREAK"> <title> BREAK</title> <rect x="2266" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(2278,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> BREAK</text></g></a> <a href="/2022/talks/orgsuperlinks" title="Linking headings with org-super-links (poor-man's Zettelkasten)"> <title> Linking headings with org-super-links (poor-man's Zettelkasten)</title> <rect x="2281" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(2293,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgsuperlinks</text></g></a> <a href="/2022/talks/buttons" title="Linking personal info with Hyperbole implicit buttons"> <title> Linking personal info with Hyperbole implicit buttons</title> <rect x="2325" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(2337,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buttons</text></g></a> <a href="/" title="LUNCH"> <title> LUNCH</title> <rect x="2400" y="15" opacity="0.8" width="88" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(2486,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> LUNCH</text></g></a> <a href="/2022/talks/hyperorg" title="Powerful productivity with Hyperbole and Org Mode"> <title> Powerful productivity with Hyperbole and Org Mode</title> <rect x="2488" y="15" opacity="0.8" width="44" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(2530,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperorg</text></g></a> <a href="/2022/talks/workflows" title="Org workflows for developers"> <title> Org workflows for developers</title> <rect x="2562" y="15" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(2589,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> workflows</text></g></a> <a href="/2022/talks/grail" title="GRAIL---A Generalized Representation and Aggregation of Information Layers"> <title> GRAIL---A Generalized Representation and Aggregation of Information Layers</title> <rect x="2622" y="15" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(2649,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> grail</text></g></a> <a href="/" title="BREAK"> <title> BREAK</title> <rect x="2681" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(2693,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> BREAK</text></g></a> <a href="/2022/talks/indieweb" title="Putting Org Mode on the Indieweb"> <title> Putting Org Mode on the Indieweb</title> <rect x="2696" y="15" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(2723,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> indieweb</text></g></a> <a href="/2022/talks/fanfare" title="Fanfare for the Common Emacs User"> <title> Fanfare for the Common Emacs User</title> <rect x="2755" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(2767,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> fanfare</text></g></a> <a href="/2022/talks/" title="Sunday closing remarks"> <title> Sunday closing remarks</title> <rect x="2844" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(2856,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> Sunday closing remarks</text></g></a> <a href="/" title="DEV Saturday, December 3"> <title> DEV Saturday, December 3</title> <rect x="88" y="15" opacity="0.8" width="-117395" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(-117309,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> DEV Saturday, December 3</text></g></a> <a href="/" title="DEV Sunday, December 4"> <title> DEV Sunday, December 4</title> <rect x="2222" y="15" opacity="0.8" width="-119528" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(-117308,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> DEV Sunday, December 4</text></g></a> <a href="/2022/talks/asmblox" title="asm-blox: a game based on WebAssembly that no one asked for"> <title> asm-blox: a game based on WebAssembly that no one asked for</title> <rect x="88" y="50" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(100,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> asmblox</text></g></a> <a href="/2022/talks/treesitter" title="Tree-sitter beyond syntax highlighting"> <title> Tree-sitter beyond syntax highlighting</title> <rect x="140" y="50" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(152,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> treesitter</text></g></a> <a href="/2022/talks/wayland" title="Emacs should become a Wayland compositor"> <title> Emacs should become a Wayland compositor</title> <rect x="170" y="50" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(182,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> wayland</text></g></a> <a href="/2022/talks/lspbridge" title="lsp-bridge: complete asynchronous LSP client"> <title> lsp-bridge: complete asynchronous LSP client</title> <rect x="222" y="50" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(249,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> lspbridge</text></g></a> <a href="/" title="LUNCH"> <title> LUNCH</title> <rect x="266" y="50" opacity="0.8" width="88" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(352,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> LUNCH</text></g></a> <a href="/2022/talks/sqlite" title="Using SQLite as a data source: a framework and an example"> <title> Using SQLite as a data source: a framework and an example</title> <rect x="355" y="50" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(382,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sqlite</text></g></a> <a href="/2022/talks/mail" title="Revisiting the anatomy of Emacs mail user agents"> <title> Revisiting the anatomy of Emacs mail user agents</title> <rect x="422" y="50" opacity="0.8" width="44" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(464,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> mail</text></g></a> <a href="/" title="BREAK"> <title> BREAK</title> <rect x="503" y="50" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(515,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> BREAK</text></g></a> <a href="/2022/talks/maint" title="Maintaining the Maintainers: Attribution as an Economic Model for Open Source"> <title> Maintaining the Maintainers: Attribution as an Economic Model for Open Source</title> <rect x="518" y="50" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(545,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> maint</text></g></a> <a href="/2022/talks/eev" title="Bidirectional links with eev"> <title> Bidirectional links with eev</title> <rect x="585" y="50" opacity="0.8" width="7" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(590,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eev</text></g></a> <a href="/2022/talks/python" title="Short hyperlinks to Python docs"> <title> Short hyperlinks to Python docs</title> <rect x="607" y="50" opacity="0.8" width="7" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(612,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <a href="/2022/talks/haskell" title="Haskell code exploration with Emacs"> <title> Haskell code exploration with Emacs</title> <rect x="629" y="50" opacity="0.8" width="44" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(671,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> haskell</text></g></a> <a href="/2022/talks/rde" title="rde Emacs introduction"> <title> rde Emacs introduction</title> <rect x="2222" y="50" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(2249,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rde</text></g></a> <a href="/2022/talks/justl" title="justl: Driving recipes within Emacs"> <title> justl: Driving recipes within Emacs</title> <rect x="2288" y="50" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(2300,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> justl</text></g></a> <a href="/2022/talks/tramp" title="Elisp and the TRAMP: How to NOT write code you don't have to"> <title> Elisp and the TRAMP: How to NOT write code you don't have to</title> <rect x="2318" y="50" opacity="0.8" width="44" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(2360,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> tramp</text></g></a> <a href="/" title="LUNCH"> <title> LUNCH</title> <rect x="2400" y="50" opacity="0.8" width="88" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(2486,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> LUNCH</text></g></a> <a href="/2022/talks/detached" title="Getting detached from Emacs"> <title> Getting detached from Emacs</title> <rect x="2488" y="50" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(2500,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> detached</text></g></a> <a href="/2022/talks/eshell" title="Top 10 reasons why you should be using Eshell"> <title> Top 10 reasons why you should be using Eshell</title> <rect x="2540" y="50" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(2552,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eshell</text></g></a> <a href="/2022/talks/async" title="Emacs was async before async was cool"> <title> Emacs was async before async was cool</title> <rect x="2592" y="50" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(2619,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> async</text></g></a> <a href="/" title="BREAK"> <title> BREAK</title> <rect x="2659" y="50" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(2671,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> BREAK</text></g></a> <a href="/2022/talks/dbus" title="The Wheels on D-Bus"> <title> The Wheels on D-Bus</title> <rect x="2674" y="50" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(2701,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> dbus</text></g></a> <a href="/2022/talks/localizing" title="Pre-localizing Emacs"> <title> Pre-localizing Emacs</title> <rect x="2755" y="50" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(2782,83)"> <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="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 9</text></g> <g transform="translate(88,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 10</text></g> <g transform="translate(177,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 11</text></g> <g transform="translate(266,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 12</text></g> <g transform="translate(355,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 1</text></g> <g transform="translate(444,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 2</text></g> <g transform="translate(533,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 3</text></g> <g transform="translate(622,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 4</text></g> <g transform="translate(711,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 5</text></g></g> <g transform="translate(0,100)"> <rect width="800" height="100" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="/" title="GEN Saturday, December 3"> <title> GEN Saturday, December 3</title> <rect x="-2134" y="15" opacity="0.8" width="-117306" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(-119442,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> GEN Saturday, December 3</text></g></a> <a href="/2022/talks/" title="Saturday opening remarks"> <title> Saturday opening remarks</title> <rect x="-2134" y="15" opacity="0.8" width="7" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(-2129,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> Saturday opening remarks</text></g></a> <a href="/2022/talks/journalism" title="Emacs journalism (or everything's a nail if you hit it with Emacs)"> <title> Emacs journalism (or everything's a nail if you hit it with Emacs)</title> <rect x="-2126" y="15" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(-2099,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> journalism</text></g></a> <a href="/2022/talks/school" title="Back to school with Emacs"> <title> Back to school with Emacs</title> <rect x="-2067" y="15" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(-2040,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> school</text></g></a> <a href="/2022/talks/handwritten" title="How to incorporate handwritten notes into Emacs Orgmode"> <title> How to incorporate handwritten notes into Emacs Orgmode</title> <rect x="-2023" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(-2011,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> handwritten</text></g></a> <a href="/" title="BREAK"> <title> BREAK</title> <rect x="-1978" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(-1966,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> BREAK</text></g></a> <a href="/2022/talks/science" title="Writing and organizing literature notes for scientific writing"> <title> Writing and organizing literature notes for scientific writing</title> <rect x="-1963" y="15" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(-1936,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> science</text></g></a> <a href="/" title="LUNCH"> <title> LUNCH</title> <rect x="-1867" y="15" opacity="0.8" width="88" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(-1781,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> LUNCH</text></g></a> <a href="/2022/talks/meetups" title="Attending and organizing Emacs meetups"> <title> Attending and organizing Emacs meetups</title> <rect x="-1778" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(-1766,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> meetups</text></g></a> <a href="/2022/talks/buddy" title="The Emacs Buddy initiative"> <title> The Emacs Buddy initiative</title> <rect x="-1734" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(-1722,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buddy</text></g></a> <a href="/2022/talks/community" title="The ship that builds itself: How we used Emacs to develop a workshop for communities"> <title> The ship that builds itself: How we used Emacs to develop a workshop for communities</title> <rect x="-1704" y="15" opacity="0.8" width="44" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(-1662,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> community</text></g></a> <a href="/" title="BREAK"> <title> BREAK</title> <rect x="-1630" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(-1618,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> BREAK</text></g></a> <a href="/2022/talks/realestate" title="Real estate and Org table formulas"> <title> Real estate and Org table formulas</title> <rect x="-1615" y="15" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(-1588,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> realestate</text></g></a> <a href="/2022/talks/health" title="Health data journaling and visualization with Org Mode and GNUplot"> <title> Health data journaling and visualization with Org Mode and GNUplot</title> <rect x="-1571" y="15" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(-1544,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> health</text></g></a> <a href="/2022/talks/jupyter" title="Edit live Jupyter notebook cells with Emacs"> <title> Edit live Jupyter notebook cells with Emacs</title> <rect x="-1512" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(-1500,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> jupyter</text></g></a> <a href="/2022/talks/orgvm" title="orgvm: a simple HTTP server for org"> <title> orgvm: a simple HTTP server for org</title> <rect x="-1467" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(-1455,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgvm</text></g></a> <a href="/2022/talks/" title="Saturday closing remarks"> <title> Saturday closing remarks</title> <rect x="-1423" y="15" opacity="0.8" width="7" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(-1418,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> Saturday closing remarks</text></g></a> <a href="/" title="GEN Sunday, December 4"> <title> GEN Sunday, December 4</title> <rect x="0" y="15" opacity="0.8" width="-119439" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(-119441,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> GEN Sunday, December 4</text></g></a> <a href="/2022/talks/" title="Sunday opening remarks"> <title> Sunday opening remarks</title> <rect x="0" y="15" opacity="0.8" width="7" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(5,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> Sunday opening remarks</text></g></a> <a href="/2022/talks/survey" title="Results of the 2022 Emacs Survey"> <title> Results of the 2022 Emacs Survey</title> <rect x="7" y="15" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(34,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> survey</text></g></a> <a href="/2022/talks/orgyear" title="This Year in Org"> <title> This Year in Org</title> <rect x="51" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(63,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgyear</text></g></a> <a href="/2022/talks/rolodex" title="Build a Zettelkasten with the Hyperbole Rolodex"> <title> Build a Zettelkasten with the Hyperbole Rolodex</title> <rect x="88" y="15" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(115,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rolodex</text></g></a> <a href="/" title="BREAK"> <title> BREAK</title> <rect x="133" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(145,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> BREAK</text></g></a> <a href="/2022/talks/orgsuperlinks" title="Linking headings with org-super-links (poor-man's Zettelkasten)"> <title> Linking headings with org-super-links (poor-man's Zettelkasten)</title> <rect x="148" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(160,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgsuperlinks</text></g></a> <a href="/2022/talks/buttons" title="Linking personal info with Hyperbole implicit buttons"> <title> Linking personal info with Hyperbole implicit buttons</title> <rect x="192" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(204,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buttons</text></g></a> <a href="/" title="LUNCH"> <title> LUNCH</title> <rect x="266" y="15" opacity="0.8" width="88" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(352,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> LUNCH</text></g></a> <a href="/2022/talks/hyperorg" title="Powerful productivity with Hyperbole and Org Mode"> <title> Powerful productivity with Hyperbole and Org Mode</title> <rect x="355" y="15" opacity="0.8" width="44" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(397,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperorg</text></g></a> <a href="/2022/talks/workflows" title="Org workflows for developers"> <title> Org workflows for developers</title> <rect x="429" y="15" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(456,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> workflows</text></g></a> <a href="/2022/talks/grail" title="GRAIL---A Generalized Representation and Aggregation of Information Layers"> <title> GRAIL---A Generalized Representation and Aggregation of Information Layers</title> <rect x="488" y="15" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(515,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> grail</text></g></a> <a href="/" title="BREAK"> <title> BREAK</title> <rect x="548" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(560,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> BREAK</text></g></a> <a href="/2022/talks/indieweb" title="Putting Org Mode on the Indieweb"> <title> Putting Org Mode on the Indieweb</title> <rect x="562" y="15" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(589,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> indieweb</text></g></a> <a href="/2022/talks/fanfare" title="Fanfare for the Common Emacs User"> <title> Fanfare for the Common Emacs User</title> <rect x="622" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(634,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> fanfare</text></g></a> <a href="/2022/talks/" title="Sunday closing remarks"> <title> Sunday closing remarks</title> <rect x="711" y="15" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(723,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> Sunday closing remarks</text></g></a> <a href="/" title="DEV Saturday, December 3"> <title> DEV Saturday, December 3</title> <rect x="-2045" y="15" opacity="0.8" width="-117395" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(-119442,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> DEV Saturday, December 3</text></g></a> <a href="/" title="DEV Sunday, December 4"> <title> DEV Sunday, December 4</title> <rect x="88" y="15" opacity="0.8" width="-119528" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(-119442,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> DEV Sunday, December 4</text></g></a> <a href="/2022/talks/asmblox" title="asm-blox: a game based on WebAssembly that no one asked for"> <title> asm-blox: a game based on WebAssembly that no one asked for</title> <rect x="-2045" y="50" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(-2033,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> asmblox</text></g></a> <a href="/2022/talks/treesitter" title="Tree-sitter beyond syntax highlighting"> <title> Tree-sitter beyond syntax highlighting</title> <rect x="-1993" y="50" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(-1981,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> treesitter</text></g></a> <a href="/2022/talks/wayland" title="Emacs should become a Wayland compositor"> <title> Emacs should become a Wayland compositor</title> <rect x="-1963" y="50" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(-1951,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> wayland</text></g></a> <a href="/2022/talks/lspbridge" title="lsp-bridge: complete asynchronous LSP client"> <title> lsp-bridge: complete asynchronous LSP client</title> <rect x="-1912" y="50" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(-1885,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> lspbridge</text></g></a> <a href="/" title="LUNCH"> <title> LUNCH</title> <rect x="-1867" y="50" opacity="0.8" width="88" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(-1781,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> LUNCH</text></g></a> <a href="/2022/talks/sqlite" title="Using SQLite as a data source: a framework and an example"> <title> Using SQLite as a data source: a framework and an example</title> <rect x="-1778" y="50" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(-1751,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sqlite</text></g></a> <a href="/2022/talks/mail" title="Revisiting the anatomy of Emacs mail user agents"> <title> Revisiting the anatomy of Emacs mail user agents</title> <rect x="-1712" y="50" opacity="0.8" width="44" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(-1670,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> mail</text></g></a> <a href="/" title="BREAK"> <title> BREAK</title> <rect x="-1630" y="50" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(-1618,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> BREAK</text></g></a> <a href="/2022/talks/maint" title="Maintaining the Maintainers: Attribution as an Economic Model for Open Source"> <title> Maintaining the Maintainers: Attribution as an Economic Model for Open Source</title> <rect x="-1615" y="50" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(-1588,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> maint</text></g></a> <a href="/2022/talks/eev" title="Bidirectional links with eev"> <title> Bidirectional links with eev</title> <rect x="-1549" y="50" opacity="0.8" width="7" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(-1544,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eev</text></g></a> <a href="/2022/talks/python" title="Short hyperlinks to Python docs"> <title> Short hyperlinks to Python docs</title> <rect x="-1526" y="50" opacity="0.8" width="7" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(-1521,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <a href="/2022/talks/haskell" title="Haskell code exploration with Emacs"> <title> Haskell code exploration with Emacs</title> <rect x="-1504" y="50" opacity="0.8" width="44" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(-1462,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> haskell</text></g></a> <a href="/2022/talks/rde" title="rde Emacs introduction"> <title> rde Emacs introduction</title> <rect x="88" y="50" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(115,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rde</text></g></a> <a href="/2022/talks/justl" title="justl: Driving recipes within Emacs"> <title> justl: Driving recipes within Emacs</title> <rect x="155" y="50" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(167,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> justl</text></g></a> <a href="/2022/talks/tramp" title="Elisp and the TRAMP: How to NOT write code you don't have to"> <title> Elisp and the TRAMP: How to NOT write code you don't have to</title> <rect x="185" y="50" opacity="0.8" width="44" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(227,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> tramp</text></g></a> <a href="/" title="LUNCH"> <title> LUNCH</title> <rect x="266" y="50" opacity="0.8" width="88" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(352,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> LUNCH</text></g></a> <a href="/2022/talks/detached" title="Getting detached from Emacs"> <title> Getting detached from Emacs</title> <rect x="355" y="50" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(367,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> detached</text></g></a> <a href="/2022/talks/eshell" title="Top 10 reasons why you should be using Eshell"> <title> Top 10 reasons why you should be using Eshell</title> <rect x="407" y="50" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(419,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eshell</text></g></a> <a href="/2022/talks/async" title="Emacs was async before async was cool"> <title> Emacs was async before async was cool</title> <rect x="459" y="50" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(486,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> async</text></g></a> <a href="/" title="BREAK"> <title> BREAK</title> <rect x="525" y="50" opacity="0.8" width="14" height="34" stroke="black" stroke-dasharray="" fill="white"></rect> <g transform="translate(537,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> BREAK</text></g></a> <a href="/2022/talks/dbus" title="The Wheels on D-Bus"> <title> The Wheels on D-Bus</title> <rect x="540" y="50" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(567,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> dbus</text></g></a> <a href="/2022/talks/localizing" title="Pre-localizing Emacs"> <title> Pre-localizing Emacs</title> <rect x="622" y="50" opacity="0.8" width="29" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(649,83)"> <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="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 9</text></g> <g transform="translate(88,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 10</text></g> <g transform="translate(177,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 11</text></g> <g transform="translate(266,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 12</text></g> <g transform="translate(355,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 1</text></g> <g transform="translate(444,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 2</text></g> <g transform="translate(533,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 3</text></g> <g transform="translate(622,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 4</text></g> <g transform="translate(711,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 5</text></g></g></svg> \ No newline at end of file