summaryrefslogtreecommitdiffstats
path: root/2022/organizers-notebook
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--2022/organizers-notebook.md178
-rw-r--r--2022/organizers-notebook/index.org145
-rw-r--r--2022/organizers-notebook/schedule.svg2
3 files changed, 259 insertions, 66 deletions
diff --git a/2022/organizers-notebook.md b/2022/organizers-notebook.md
index 32849311..7b432a22 100644
--- a/2022/organizers-notebook.md
+++ b/2022/organizers-notebook.md
@@ -792,6 +792,24 @@ zaeph is available on 2022-11-06
- [ ] Wind everything down
+### Create test
+
+gst-launch-1.0 compositor name=mix sink\_1::xpos=1180 sink\_1::ypos=470 ! videoconvert ! autovideosink filesrc location=community-title.svg ! rsvgdec ! imagefreeze num\_buffers=100 ! mix. videotestsrc ! video/x-raw,width=400,height=300 ! mix. audiotestsrc freq ! autoaudiosink
+
+gst-launch-1.0 compositor name=mix sink\_1::xpos=1200 sink\_1::ypos=600 ! videoconvert ! autovideosink \\
+filesrc location=community-title.svg ! rsvgdec ! imagefreeze num\_buffers=100 ! mix. \\
+filesrc location=background.opus ! oggdemux ! opusdec ! audioconvert ! audioresample ! mix.
+videotestsrc ! video/x-raw,width=400,height=300,framerate=25/1 num\_buffers=(25 \* (4 \* 60 + 5)) ! mix.
+
+gst-launch-1.0 webmmux name=mux ! filesink location=community.webm \\
+compositor name=mix sink\_1::xpos=1200 sink\_1::ypos=600 ! videoconvert ! vp8enc ! queue ! mux.video\_0 \\
+filesrc location=community-title.svg ! rsvgdec ! imagefreeze num\_buffers=2450 ! mix. \\
+filesrc location=background.opus ! oggdemux ! opusdec ! audioconvert ! audioresample ! vorbisenc ! queue ! mux.audio\_0 \\
+videotestsrc num\_buffers=2450 ! video/x-raw,width=400,height=300,framerate=10/1 ! mix.
+
+1251,/home/sacha/proj/emacsconf/private/assets/titles% find -name community-title.svg -exec inkscape –export-type=png –export-width=1280 –export-height=720 –export-background-opacity=0 {} \\;
+
+
<a id="caption-workflow"></a>
## TODO Smoothen captioning workflow :sachac:
@@ -1174,37 +1192,137 @@ Goals:
- [X] Be able to start a VNC server with OBS, MPV, and Firefox, connect to it, and stream
- [X] Have another session with the sound isolated
-- [ ] Share the window instead of the desktop?
- [X] Split the audio so that we can join the Q&A room before the MPV ends - handled by automatic scene switcher detecting mpv
- [X] Control MPV from the commandline: track-mpv appears in the correct display, and it can also be controlled via the socket like this:
echo &rsquo;{ &ldquo;command&rdquo;: [&ldquo;loadfile&rdquo;, &ldquo;test2.webm&rdquo;] }&rsquo; | socat - ~/mpv-socket-emacsconf-dev
+- [ ] Share the window instead of the desktop?
+
+
+### Set up connection to the track
+
+1. Set up your local environment
+
+ gen: export TRACK=gen; export TRACK\_PORT=5905
+ dev: export TRACK=dev; export TRACK\_PORT=5906
+
+2. Copy the vnc password file
+
+ scp emacsconf-$TRACK@res:~/.vnc/passwd vnc-passwd-$TRACK
+
+3. Start up the VNC server if it&rsquo;s not already running
+
+ ssh emacsconf-$TRACK@res.emacsconf.org -L $TRACK\_PORT:127.0.0.1:$TRACK\_PORT &ldquo;~/bin/track-vnc; sleep infinity&rdquo;
+
+4. Connect via VNC viewer to the appropriate forwarded port from your laptop
+
+ xvncviewer 127.0.0.1:$TRACK\_PORT -shared -geometry 1280x720 -passwd vnc-passwd-$TRACK
+
+5. Set up a viewer so that you can monitor the stream
+
+ mpv <https://live0.emacsconf.org/emacsconf/$TRACK.webm>
+
+
+### Connect to the conf file on res.emacsconf.org
+
+ssh orga@res.emacsconf.org
+emacsclient -a -c -nw
-Process on res:
-1. Copy the vnc password file
- - scp emacsconf-gen@res:~/.vnc/passwd vnc-passwd-gen
- - scp emacsconf-dev@res:~/.vnc/passwd vnc-passwd-dev
-2. Start up the VNC server if it&rsquo;s not already running
- - Gen: ssh emacsconf-gen@res.emacsconf.org -L 5905:127.0.0.1:5905 -L 6005:127.0.0.1:6005 &ldquo;~/bin/track-vnc; sleep infinity&rdquo;
- - Dev: ssh emacsconf-dev@res.emacsconf.org -L 5906:127.0.0.1:5906 -L 6006:127.0.0.1:6006 &ldquo;~/bin/track-vnc; sleep infinity&rdquo;
-3. Connect via VNC viewer to the appropriate forwarded port from your laptop
- - Gen: xvncviewer 127.0.0.1:5905 -shared -geometry 1280x720 -passwd vnc-passwd-gen
- - Dev: xvncviewer 127.0.0.1:5906 -shared -geometry 1280x720 -passwd vnc-passwd-dev
-4. Load something with audio in Firefox, and start playing it.
-5. Use pavucontrol to make sure the Firefox process is going into the $track-qa sink.
+### Play a talk
-To play an MPV file, ssh to the appropriate account and:
+Shortcuts for navigating to a talk
+
+- **C-c e a a:** agenda
+- **C-c e a g:** gen agenda
+- **C-c e a d:** dev agenda
+- **C-c e t:** emacsconf-go-to-talk
+
+From the agenda, you can use `C-c C-t` to set the talk status:
+
+<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
-~/bin/track-mpv files
-To change the displayed text, echo text to ~/url.txt, ~/news.txt, or ~/bottom.txt like this:
+<colgroup>
+<col class="org-left" />
-ssh emacsconf-dev@res.emacsconf.org &ldquo;echo emacsconf.org/2021/talks/project > ~/url.txt&rdquo;
+<col class="org-left" />
-or use `emacsconf-stream-set-talk-info` or `emacsconf-stream-write-news`,
-or use the TODO state change hook set up with `emacsconf-add-org-after-todo-state-change-hook`.
+<col class="org-left" />
+</colgroup>
+<tbody>
+<tr>
+<td class="org-left">m (mpv)</td>
+<td class="org-left">PLAYING</td>
+<td class="org-left">emacsconf-stream-play-video, emacsconf-stream-set-talk-info</td>
+</tr>
-To kill the VNC server:
+
+<tr>
+<td class="org-left">q</td>
+<td class="org-left">CLOSED_Q</td>
+<td class="org-left">&#xa0;</td>
+</tr>
+
+
+<tr>
+<td class="org-left">o</td>
+<td class="org-left">OPEN_Q</td>
+<td class="org-left">update the BBB redirect URLs to let people into the room</td>
+</tr>
+</tbody>
+</table>
+
+If the video doesn&rsquo;t play automatically when the talk changes to PLAYING, you can play it manually with:
+
+ ssh emacsconf-$TRACK@res.emacsconf.org
+ cd /data/emacsconf/2022/stream
+ ~/bin/track-mpv file
+
+
+### Do Q&A
+
+From the emacsclient on orga@res.emacsconf.org, you can open various talk-related things:
+
+- emacsconf-stream-open-pad
+- emacsconf-stream-join-qa
+- emacsconf-stream-join-chat
+
+Alternatively, you can switch to the VNC viewer and use the links in
+<file:///data/emacsconf/2022/index-gen.html> or
+<file:///data/emacsconf/2022/index-dev.html> .
+
+i3 cheat sheet:
+
+- Alt-e toggles horizontal/vertical split
+- Alt-f toggles full-screen
+- Alt-w switches to tabbed view
+- Alt-1 switches to workspace 1, Alt-2 switches to workspace 2
+- Alt-Shift-2 moves things to workspace 2
+- Alt-Shift-Left moves the current window to the left
+- Alt-Shift-Right moves the current window to the right
+- Alt-Enter creates a terminal
+
+For Q&A, you may want to have the Etherpad on the left, the BBB Q&A or
+IRC chat on the right, and the terminal and OBS windows on
+workspace 2.
+
+
+### Other tasks as needed
+
+
+#### Display emergency news / announcements
+
+M-x emacsconf-stream-broadcast to send a message to both streams
+or M-x emacsconf-stream-set-news to send a message to one stream.
+
+If that doesn&rsquo;t work, edit the news file directly with:
+`ssh emacsconf-$TRACK@res.emacsconf.org > ~/news.txt`
+
+If that doesn&rsquo;t work, use the VNC session to switch to an Emacs window
+and type your message in.
+
+
+#### Kill the VNC server:
ssh emacsconf-gen@res.emacsconf.org &ldquo;vncserver -kill&rdquo;
ssh emacsconf-dev@res.emacsconf.org &ldquo;vncserver -kill&rdquo;
@@ -1231,26 +1349,22 @@ ssh emacsconf-dev@res.emacsconf.org &ldquo;vncserver -kill&rdquo;
</tbody>
</table>
+
+### Other notes
+
There are sockets in the home directory for MPV control if you want to keep that process.
echo &rsquo;{ &ldquo;command&rdquo;: [&ldquo;loadfile&rdquo;, &ldquo;test2.webm&rdquo;] }&rsquo; | socat - ~/mpv-socket-emacsconf-dev
-After you start recording in OBS,
-watch at <https://live.emacsconf.org/2022/watch/dev/> or <https://live.emacsconf.org/2022/watch/gen/>
-i3 cheat sheet:
+### DONE Move my conf.org setup to res so that we can control everything from there
-- M-RET: terminal
-- M-f: toggle full-screen
-- M-w: switch to tabbed view
-- M-j: go to next window
-- M-shift-SPC: toggle floating
-- to resize a window, right-click-drag on its title bar
+### TODO Set timers for echoing text into the appropriate places and starting videos
-### TODO Move my conf.org setup to res so that we can control everything from there
+### TODO Figure out how to work with the layout
-### TODO Set timers for echoing text into the appropriate places and starting videos
+<https://i3wm.org/docs/layout-saving.html>
### TODO Use xdotool to automate joining BBB in Firefox (signing in, clicking on listen only)
@@ -2838,7 +2952,7 @@ Probably focus on grabbing the audio first and seeing what&rsquo;s worth keeping
Make a table of the form
-<table id="orgfe5543e" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
+<table id="org2207b7a" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<colgroup>
diff --git a/2022/organizers-notebook/index.org b/2022/organizers-notebook/index.org
index 60303abd..f7edc169 100644
--- a/2022/organizers-notebook/index.org
+++ b/2022/organizers-notebook/index.org
@@ -471,6 +471,25 @@ zaeph is available on 2022-11-06
- [ ] Message on the schedule
- [ ] Prerec live
- [ ] Wind everything down
+
+*** Create test
+
+gst-launch-1.0 compositor name=mix sink_1::xpos=1180 sink_1::ypos=470 ! videoconvert ! autovideosink filesrc location=community-title.svg ! rsvgdec ! imagefreeze num_buffers=100 ! mix. videotestsrc ! video/x-raw,width=400,height=300 ! mix. audiotestsrc freq ! autoaudiosink
+
+gst-launch-1.0 compositor name=mix sink_1::xpos=1200 sink_1::ypos=600 ! videoconvert ! autovideosink \
+filesrc location=community-title.svg ! rsvgdec ! imagefreeze num_buffers=100 ! mix. \
+filesrc location=background.opus ! oggdemux ! opusdec ! audioconvert ! audioresample ! mix.
+videotestsrc ! video/x-raw,width=400,height=300,framerate=25/1 num_buffers=(25 * (4 * 60 + 5)) ! mix.
+
+gst-launch-1.0 webmmux name=mux ! filesink location=community.webm \
+compositor name=mix sink_1::xpos=1200 sink_1::ypos=600 ! videoconvert ! vp8enc ! queue ! mux.video_0 \
+filesrc location=community-title.svg ! rsvgdec ! imagefreeze num_buffers=2450 ! mix. \
+filesrc location=background.opus ! oggdemux ! opusdec ! audioconvert ! audioresample ! vorbisenc ! queue ! mux.audio_0 \
+videotestsrc num_buffers=2450 ! video/x-raw,width=400,height=300,framerate=10/1 ! mix.
+
+1251,/home/sacha/proj/emacsconf/private/assets/titles% find -name community-title.svg -exec inkscape --export-type=png --export-width=1280 --export-height=720 --export-background-opacity=0 {} \;
+
+
** TODO [#C] Smoothen captioning workflow :sachac:
:PROPERTIES:
:CUSTOM_ID: caption-workflow
@@ -829,60 +848,120 @@ Goals:
- [X] Be able to start a VNC server with OBS, MPV, and Firefox, connect to it, and stream
- [X] Have another session with the sound isolated
-- [ ] Share the window instead of the desktop?
- [X] Split the audio so that we can join the Q&A room before the MPV ends - handled by automatic scene switcher detecting mpv
- [X] Control MPV from the commandline: track-mpv appears in the correct display, and it can also be controlled via the socket like this:
echo '{ "command": ["loadfile", "test2.webm"] }' | socat - ~/mpv-socket-emacsconf-dev
-
-Process on res:
+- [ ] Share the window instead of the desktop?
+
+*** Set up connection to the track
-1. Copy the vnc password file
- - scp emacsconf-gen@res:~/.vnc/passwd vnc-passwd-gen
- - scp emacsconf-dev@res:~/.vnc/passwd vnc-passwd-dev
-1. Start up the VNC server if it's not already running
- - Gen: ssh emacsconf-gen@res.emacsconf.org -L 5905:127.0.0.1:5905 -L 6005:127.0.0.1:6005 "~/bin/track-vnc; sleep infinity"
- - Dev: ssh emacsconf-dev@res.emacsconf.org -L 5906:127.0.0.1:5906 -L 6006:127.0.0.1:6006 "~/bin/track-vnc; sleep infinity"
-2. Connect via VNC viewer to the appropriate forwarded port from your laptop
- - Gen: xvncviewer 127.0.0.1:5905 -shared -geometry 1280x720 -passwd vnc-passwd-gen
- - Dev: xvncviewer 127.0.0.1:5906 -shared -geometry 1280x720 -passwd vnc-passwd-dev
-3. Load something with audio in Firefox, and start playing it.
-4. Use pavucontrol to make sure the Firefox process is going into the $track-qa sink.
+1. Set up your local environment
+
+ gen: export TRACK=gen; export TRACK_PORT=5905
+ dev: export TRACK=dev; export TRACK_PORT=5906
+
+2. Copy the vnc password file
+
+ scp emacsconf-$TRACK@res:~/.vnc/passwd vnc-passwd-$TRACK
+
+3. Start up the VNC server if it's not already running
+
+ ssh emacsconf-$TRACK@res.emacsconf.org -L $TRACK_PORT:127.0.0.1:$TRACK_PORT "~/bin/track-vnc; sleep infinity"
+
+4. Connect via VNC viewer to the appropriate forwarded port from your laptop
+
+ xvncviewer 127.0.0.1:$TRACK_PORT -shared -geometry 1280x720 -passwd vnc-passwd-$TRACK
+
+5. Set up a viewer so that you can monitor the stream
+
+ mpv https://live0.emacsconf.org/emacsconf/$TRACK.webm
+
+*** Connect to the conf file on res.emacsconf.org
-To play an MPV file, ssh to the appropriate account and:
+ssh orga@res.emacsconf.org
+emacsclient -a -c -nw
-~/bin/track-mpv files
+*** Play a talk
-To change the displayed text, echo text to ~/url.txt, ~/news.txt, or ~/bottom.txt like this:
+Shortcuts for navigating to a talk
+- C-c e a a :: agenda
+- C-c e a g :: gen agenda
+- C-c e a d :: dev agenda
+- C-c e t :: emacsconf-go-to-talk
-ssh emacsconf-dev@res.emacsconf.org "echo emacsconf.org/2021/talks/project > ~/url.txt"
+From the agenda, you can use ~C-c C-t~ to set the talk status:
-or use ~emacsconf-stream-set-talk-info~ or ~emacsconf-stream-write-news~,
-or use the TODO state change hook set up with ~emacsconf-add-org-after-todo-state-change-hook~.
+| m (mpv) | PLAYING | emacsconf-stream-play-video, emacsconf-stream-set-talk-info |
+| q | CLOSED_Q | |
+| o | OPEN_Q | update the BBB redirect URLs to let people into the room |
-To kill the VNC server:
+If the video doesn't play automatically when the talk changes to PLAYING, you can play it manually with:
+
+#+begin_src sh :eval no
+ssh emacsconf-$TRACK@res.emacsconf.org
+cd /data/emacsconf/2022/stream
+~/bin/track-mpv file
+#+end_src
+
+*** Do Q&A
+
+From the emacsclient on orga@res.emacsconf.org, you can open various talk-related things:
+- emacsconf-stream-open-pad
+- emacsconf-stream-join-qa
+- emacsconf-stream-join-chat
+
+Alternatively, you can switch to the VNC viewer and use the links in
+file:///data/emacsconf/2022/index-gen.html or
+file:///data/emacsconf/2022/index-dev.html .
+
+i3 cheat sheet:
+
+- Alt-e toggles horizontal/vertical split
+- Alt-f toggles full-screen
+- Alt-w switches to tabbed view
+- Alt-1 switches to workspace 1, Alt-2 switches to workspace 2
+- Alt-Shift-2 moves things to workspace 2
+- Alt-Shift-Left moves the current window to the left
+- Alt-Shift-Right moves the current window to the right
+- Alt-Enter creates a terminal
+
+For Q&A, you may want to have the Etherpad on the left, the BBB Q&A or
+IRC chat on the right, and the terminal and OBS windows on
+workspace 2.
+
+*** Other tasks as needed
+
+**** Display emergency news / announcements
+
+M-x emacsconf-stream-broadcast to send a message to both streams
+or M-x emacsconf-stream-set-news to send a message to one stream.
+
+If that doesn't work, edit the news file directly with:
+~ssh emacsconf-$TRACK@res.emacsconf.org > ~/news.txt~
+
+If that doesn't work, use the VNC session to switch to an Emacs window
+and type your message in.
+**** Kill the VNC server:
ssh emacsconf-gen@res.emacsconf.org "vncserver -kill"
ssh emacsconf-dev@res.emacsconf.org "vncserver -kill"
| ~/bin/track-obs | start OBS with the track's profile and scene collection |
| ~/bin/track-mpv file.webm | play the file using the track's sink |
-
+*** Other notes
There are sockets in the home directory for MPV control if you want to keep that process.
echo '{ "command": ["loadfile", "test2.webm"] }' | socat - ~/mpv-socket-emacsconf-dev
-After you start recording in OBS,
-watch at https://live.emacsconf.org/2022/watch/dev/ or https://live.emacsconf.org/2022/watch/gen/
-i3 cheat sheet:
-- M-RET: terminal
-- M-f: toggle full-screen
-- M-w: switch to tabbed view
-- M-j: go to next window
-- M-shift-SPC: toggle floating
-- to resize a window, right-click-drag on its title bar
-*** TODO Move my conf.org setup to res so that we can control everything from there
+*** DONE Move my conf.org setup to res so that we can control everything from there
+CLOSED: [2022-11-03 Thu 14:10]
*** TODO Set timers for echoing text into the appropriate places and starting videos
-*** TODO Use xdotool to automate joining BBB in Firefox (signing in, clicking on listen only)
+*** TODO Figure out how to work with the layout
+https://i3wm.org/docs/layout-saving.html
+
+
+
+*** TODO [#C] Use xdotool to automate joining BBB in Firefox (signing in, clicking on listen only)
*** TODO [#C] Experiment with sharing part of the screen so that there's space for us to work a little off-screen
We might just have to rely on xdotool to move windows the way we want them
diff --git a/2022/organizers-notebook/schedule.svg b/2022/organizers-notebook/schedule.svg
index a10187cc..2724bdeb 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="/2022/talks/sat-open" title="Saturday opening remarks" data-slug="sat-open"> <title> 9:00- 9:05 Saturday opening remarks</title> <rect x="0" y="15" opacity="0.8" width="7" height="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)"> sat-open</text></g></a> <a href="/2022/talks/journalism" title="Emacs journalism (or everything's a nail if you hit it with Emacs)" data-slug="journalism"> <title> 9:05- 9:25 Emacs journalism (or everything's a nail if you hit it with Emacs)</title> <rect x="7" y="15" opacity="0.8" width="31" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(36,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" data-slug="school"> <title> 9:45-10:05 Back to school with Emacs</title> <rect x="70" y="15" opacity="0.8" width="31" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(99,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" data-slug="handwritten"> <title> 10:15-10:25 How to incorporate handwritten notes into Emacs Orgmode</title> <rect x="117" y="15" opacity="0.8" width="15" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(130,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> handwritten</text></g></a> <a href="/2022/talks/science" title="Writing and organizing literature notes for scientific writing" data-slug="science"> <title> 10:55-11:15 Writing and organizing literature notes for scientific writing</title> <rect x="180" y="15" opacity="0.8" width="31" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(209,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> science</text></g></a> <a href="/2022/talks/buddy" title="The Emacs Buddy initiative" data-slug="buddy"> <title> 11:35-11:45 The Emacs Buddy initiative</title> <rect x="243" y="15" opacity="0.8" width="15" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(256,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buddy</text></g></a> <a href="/2022/talks/meetups" title="Attending and organizing Emacs meetups" data-slug="meetups"> <title> 1:05- 1:25 Attending and organizing Emacs meetups</title> <rect x="384" y="15" opacity="0.8" width="31" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(413,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> meetups</text></g></a> <a href="/2022/talks/community" title="The ship that builds itself: How we used Emacs to develop a workshop for communities" data-slug="community"> <title> 1:50- 2:20 The ship that builds itself: How we used Emacs to develop a workshop for communities</title> <rect x="454" y="15" opacity="0.8" width="47" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(499,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> community</text></g></a> <a href="/2022/talks/realestate" title="Real estate and Org table formulas" data-slug="realestate"> <title> 2:50- 3:10 Real estate and Org table formulas</title> <rect x="549" y="15" opacity="0.8" width="31" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(578,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" data-slug="health"> <title> 3:20- 3:40 Health data journaling and visualization with Org Mode and GNUplot</title> <rect x="596" y="15" opacity="0.8" width="31" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(625,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" data-slug="jupyter"> <title> 4:00- 4:10 Edit live Jupyter notebook cells with Emacs</title> <rect x="658" y="15" opacity="0.8" width="15" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(671,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" data-slug="orgvm"> <title> 4:30- 4:40 orgvm: a simple HTTP server for org</title> <rect x="705" y="15" opacity="0.8" width="15" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(718,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgvm</text></g></a> <a href="/2022/talks/sat-close" title="Saturday closing remarks" data-slug="sat-close"> <title> 5:00- 5:05 Saturday closing remarks</title> <rect x="752" y="15" opacity="0.8" width="7" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(757,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="/2022/talks/treesitter" title="Tree-sitter beyond syntax highlighting" data-slug="treesitter"> <title> 10:00-10:10 Tree-sitter beyond syntax highlighting</title> <rect x="94" y="50" opacity="0.8" width="15" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(107,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" data-slug="lspbridge"> <title> 10:20-10:40 lsp-bridge: complete asynchronous LSP client</title> <rect x="125" y="50" opacity="0.8" width="31" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(154,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> lspbridge</text></g></a> <a href="/2022/talks/asmblox" title="asm-blox: a game based on WebAssembly that no one asked for" data-slug="asmblox"> <title> 10:50-11:00 asm-blox: a game based on WebAssembly that no one asked for</title> <rect x="172" y="50" opacity="0.8" width="15" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(185,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> asmblox</text></g></a> <a href="/2022/talks/wayland" title="Emacs should become a Wayland compositor" data-slug="wayland"> <title> 11:25-11:35 Emacs should become a Wayland compositor</title> <rect x="227" y="50" opacity="0.8" width="15" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(240,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> wayland</text></g></a> <a href="/2022/talks/sqlite" title="Using SQLite as a data source: a framework and an example" data-slug="sqlite"> <title> 1:00- 1:20 Using SQLite as a data source: a framework and an example</title> <rect x="376" y="50" opacity="0.8" width="31" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(405,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" data-slug="mail"> <title> 1:45- 2:15 Revisiting the anatomy of Emacs mail user agents</title> <rect x="447" y="50" opacity="0.8" width="47" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(492,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> mail</text></g></a> <a href="/2022/talks/maint" title="Maintaining the Maintainers: Attribution as an Economic Model for Open Source" data-slug="maint"> <title> 2:50- 3:10 Maintaining the Maintainers: Attribution as an Economic Model for Open Source</title> <rect x="549" y="50" opacity="0.8" width="31" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(578,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" data-slug="eev"> <title> 3:35- 3:40 Bidirectional links with eev</title> <rect x="619" y="50" opacity="0.8" width="7" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(624,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" data-slug="python"> <title> 3:50- 3:55 Short hyperlinks to Python docs</title> <rect x="643" y="50" opacity="0.8" width="7" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(648,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" data-slug="haskell"> <title> 4:05- 4:35 Haskell code exploration with Emacs</title> <rect x="666" y="50" opacity="0.8" width="47" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(711,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> haskell</text></g></a> <g transform="translate(0,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 9</text></g> <g transform="translate(94,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(188,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(282,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(376,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(470,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(564,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(658,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(752,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="/2022/talks/sun-open" title="Sunday opening remarks" data-slug="sun-open"> <title> 9:00- 9:05 Sunday opening remarks</title> <rect x="0" y="15" opacity="0.8" width="7" height="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)"> sun-open</text></g></a> <a href="/2022/talks/survey" title="Results of the 2022 Emacs Survey" data-slug="survey"> <title> 9:05- 9:25 Results of the 2022 Emacs Survey</title> <rect x="7" y="15" opacity="0.8" width="31" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(36,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" data-slug="orgyear"> <title> 9:35- 9:45 This Year in Org</title> <rect x="54" y="15" opacity="0.8" width="15" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(67,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" data-slug="rolodex"> <title> 10:00-10:20 Build a Zettelkasten with the Hyperbole Rolodex</title> <rect x="94" y="15" opacity="0.8" width="31" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(123,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rolodex</text></g></a> <a href="/2022/talks/orgsuperlinks" title="Linking headings with org-super-links (poor-man's Zettelkasten)" data-slug="orgsuperlinks"> <title> 10:40-10:50 Linking headings with org-super-links (poor-man's Zettelkasten)</title> <rect x="156" y="15" opacity="0.8" width="15" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(169,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" data-slug="buttons"> <title> 11:10-11:20 Linking personal info with Hyperbole implicit buttons</title> <rect x="203" y="15" opacity="0.8" width="15" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(216,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buttons</text></g></a> <a href="/2022/talks/hyperorg" title="Powerful productivity with Hyperbole and Org Mode" data-slug="hyperorg"> <title> 1:00- 1:30 Powerful productivity with Hyperbole and Org Mode</title> <rect x="376" y="15" opacity="0.8" width="47" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(421,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" data-slug="workflows"> <title> 1:50- 2:10 Org workflows for developers</title> <rect x="454" y="15" opacity="0.8" width="31" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(483,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" data-slug="grail"> <title> 2:30- 2:50 GRAIL---A Generalized Representation and Aggregation of Information Layers</title> <rect x="517" y="15" opacity="0.8" width="31" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(546,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> grail</text></g></a> <a href="/2022/talks/indieweb" title="Putting Org Mode on the Indieweb" data-slug="indieweb"> <title> 3:20- 3:40 Putting Org Mode on the Indieweb</title> <rect x="596" y="15" opacity="0.8" width="31" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(625,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" data-slug="fanfare"> <title> 4:00- 4:10 Fanfare for the Common Emacs User</title> <rect x="658" y="15" opacity="0.8" width="15" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(671,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> fanfare</text></g></a> <a href="/2022/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"> <title> 5:00- 5:10 Sunday closing remarks</title> <rect x="752" y="15" opacity="0.8" width="15" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(765,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-close</text></g></a> <a href="/2022/talks/rde" title="rde Emacs introduction" data-slug="rde"> <title> 10:00-10:20 rde Emacs introduction</title> <rect x="94" y="50" opacity="0.8" width="31" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(123,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" data-slug="justl"> <title> 10:45-10:55 justl: Driving recipes within Emacs</title> <rect x="164" y="50" opacity="0.8" width="15" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(177,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" data-slug="tramp"> <title> 11:05-11:35 Elisp and the TRAMP: How to NOT write code you don't have to</title> <rect x="196" y="50" opacity="0.8" width="47" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(241,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> tramp</text></g></a> <a href="/2022/talks/detached" title="Getting detached from Emacs" data-slug="detached"> <title> 1:00- 1:10 Getting detached from Emacs</title> <rect x="376" y="50" opacity="0.8" width="15" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(389,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" data-slug="eshell"> <title> 1:35- 1:45 Top 10 reasons why you should be using Eshell</title> <rect x="431" y="50" opacity="0.8" width="15" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(444,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" data-slug="async"> <title> 2:10- 2:30 Emacs was async before async was cool</title> <rect x="486" y="50" opacity="0.8" width="31" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(515,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> async</text></g></a> <a href="/2022/talks/dbus" title="The Wheels on D-Bus" data-slug="dbus"> <title> 3:05- 3:25 The Wheels on D-Bus</title> <rect x="572" y="50" opacity="0.8" width="31" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(601,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" data-slug="localizing"> <title> 4:00- 4:20 Pre-localizing Emacs</title> <rect x="658" y="50" opacity="0.8" width="31" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(687,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(94,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(188,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(282,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(376,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(470,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(564,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(658,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(752,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="/2022/talks/sat-open" title="Saturday opening remarks" data-slug="sat-open"> <title> 9:00- 9:05 Saturday opening remarks</title> <rect x="0" y="15" opacity="0.8" width="7" height="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)"> sat-open</text></g></a> <a href="/2022/talks/journalism" title="Emacs journalism (or everything's a nail if you hit it with Emacs)" data-slug="journalism"> <title> 9:05- 9:25 Emacs journalism (or everything's a nail if you hit it with Emacs)</title> <rect x="7" y="15" opacity="0.8" width="31" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(36,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" data-slug="school"> <title> 9:45-10:05 Back to school with Emacs</title> <rect x="70" y="15" opacity="0.8" width="31" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(99,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" data-slug="handwritten"> <title> 10:15-10:25 How to incorporate handwritten notes into Emacs Orgmode</title> <rect x="117" y="15" opacity="0.8" width="15" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(130,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> handwritten</text></g></a> <a href="/2022/talks/science" title="Writing and organizing literature notes for scientific writing" data-slug="science"> <title> 10:55-11:15 Writing and organizing literature notes for scientific writing</title> <rect x="180" y="15" opacity="0.8" width="31" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(209,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> science</text></g></a> <a href="/2022/talks/buddy" title="The Emacs Buddy initiative" data-slug="buddy"> <title> 11:35-11:45 The Emacs Buddy initiative</title> <rect x="243" y="15" opacity="0.8" width="15" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(256,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buddy</text></g></a> <a href="/2022/talks/meetups" title="Attending and organizing Emacs meetups" data-slug="meetups"> <title> 1:05- 1:25 Attending and organizing Emacs meetups</title> <rect x="384" y="15" opacity="0.8" width="31" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(413,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> meetups</text></g></a> <a href="/2022/talks/community" title="The ship that builds itself: How we used Emacs to develop a workshop for communities" data-slug="community"> <title> 1:50- 2:20 The ship that builds itself: How we used Emacs to develop a workshop for communities</title> <rect x="454" y="15" opacity="0.8" width="47" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(499,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> community</text></g></a> <a href="/2022/talks/realestate" title="Real estate and Org table formulas" data-slug="realestate"> <title> 2:50- 3:15 Real estate and Org table formulas</title> <rect x="549" y="15" opacity="0.8" width="39" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(586,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" data-slug="health"> <title> 3:20- 3:40 Health data journaling and visualization with Org Mode and GNUplot</title> <rect x="596" y="15" opacity="0.8" width="31" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(625,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" data-slug="jupyter"> <title> 4:00- 4:10 Edit live Jupyter notebook cells with Emacs</title> <rect x="658" y="15" opacity="0.8" width="15" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(671,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" data-slug="orgvm"> <title> 4:30- 4:40 orgvm: a simple HTTP server for org</title> <rect x="705" y="15" opacity="0.8" width="15" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(718,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> orgvm</text></g></a> <a href="/2022/talks/sat-close" title="Saturday closing remarks" data-slug="sat-close"> <title> 5:00- 5:05 Saturday closing remarks</title> <rect x="752" y="15" opacity="0.8" width="7" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(757,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="/2022/talks/treesitter" title="Tree-sitter beyond syntax highlighting" data-slug="treesitter"> <title> 10:00-10:10 Tree-sitter beyond syntax highlighting</title> <rect x="94" y="50" opacity="0.8" width="15" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(107,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" data-slug="lspbridge"> <title> 10:20-10:40 lsp-bridge: complete asynchronous LSP client</title> <rect x="125" y="50" opacity="0.8" width="31" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(154,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> lspbridge</text></g></a> <a href="/2022/talks/asmblox" title="asm-blox: a game based on WebAssembly that no one asked for" data-slug="asmblox"> <title> 10:50-11:00 asm-blox: a game based on WebAssembly that no one asked for</title> <rect x="172" y="50" opacity="0.8" width="15" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(185,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> asmblox</text></g></a> <a href="/2022/talks/wayland" title="Emacs should become a Wayland compositor" data-slug="wayland"> <title> 11:25-11:35 Emacs should become a Wayland compositor</title> <rect x="227" y="50" opacity="0.8" width="15" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(240,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> wayland</text></g></a> <a href="/2022/talks/sqlite" title="Using SQLite as a data source: a framework and an example" data-slug="sqlite"> <title> 1:00- 1:20 Using SQLite as a data source: a framework and an example</title> <rect x="376" y="50" opacity="0.8" width="31" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(405,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" data-slug="mail"> <title> 1:45- 2:15 Revisiting the anatomy of Emacs mail user agents</title> <rect x="447" y="50" opacity="0.8" width="47" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(492,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> mail</text></g></a> <a href="/2022/talks/maint" title="Maintaining the Maintainers: Attribution as an Economic Model for Open Source" data-slug="maint"> <title> 2:50- 3:10 Maintaining the Maintainers: Attribution as an Economic Model for Open Source</title> <rect x="549" y="50" opacity="0.8" width="31" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(578,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" data-slug="eev"> <title> 3:35- 3:40 Bidirectional links with eev</title> <rect x="619" y="50" opacity="0.8" width="7" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(624,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" data-slug="python"> <title> 3:50- 3:55 Short hyperlinks to Python docs</title> <rect x="643" y="50" opacity="0.8" width="7" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgreen"></rect> <g transform="translate(648,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" data-slug="haskell"> <title> 4:05- 4:35 Haskell code exploration with Emacs</title> <rect x="666" y="50" opacity="0.8" width="47" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(711,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> haskell</text></g></a> <g transform="translate(0,15)"> <line stroke="lightgray" x1="0" y1="0" x2="0" y2="70"></line> <text fill="darkgray" x="0" y="83" font-size="10" text-anchor="middle"> 9</text></g> <g transform="translate(94,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(188,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(282,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(376,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(470,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(564,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(658,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(752,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="/2022/talks/sun-open" title="Sunday opening remarks" data-slug="sun-open"> <title> 9:00- 9:05 Sunday opening remarks</title> <rect x="0" y="15" opacity="0.8" width="7" height="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)"> sun-open</text></g></a> <a href="/2022/talks/survey" title="Results of the 2022 Emacs Survey" data-slug="survey"> <title> 9:05- 9:25 Results of the 2022 Emacs Survey</title> <rect x="7" y="15" opacity="0.8" width="31" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(36,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" data-slug="orgyear"> <title> 9:35- 9:45 This Year in Org</title> <rect x="54" y="15" opacity="0.8" width="15" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(67,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" data-slug="rolodex"> <title> 10:00-10:20 Build a Zettelkasten with the Hyperbole Rolodex</title> <rect x="94" y="15" opacity="0.8" width="31" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(123,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rolodex</text></g></a> <a href="/2022/talks/orgsuperlinks" title="Linking headings with org-super-links (poor-man's Zettelkasten)" data-slug="orgsuperlinks"> <title> 10:40-10:50 Linking headings with org-super-links (poor-man's Zettelkasten)</title> <rect x="156" y="15" opacity="0.8" width="15" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(169,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" data-slug="buttons"> <title> 11:10-11:20 Linking personal info with Hyperbole implicit buttons</title> <rect x="203" y="15" opacity="0.8" width="15" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(216,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buttons</text></g></a> <a href="/2022/talks/hyperorg" title="Powerful productivity with Hyperbole and Org Mode" data-slug="hyperorg"> <title> 1:00- 1:30 Powerful productivity with Hyperbole and Org Mode</title> <rect x="376" y="15" opacity="0.8" width="47" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(421,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" data-slug="workflows"> <title> 1:50- 2:10 Org workflows for developers</title> <rect x="454" y="15" opacity="0.8" width="31" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(483,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" data-slug="grail"> <title> 2:30- 2:50 GRAIL---A Generalized Representation and Aggregation of Information Layers</title> <rect x="517" y="15" opacity="0.8" width="31" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(546,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> grail</text></g></a> <a href="/2022/talks/indieweb" title="Putting Org Mode on the Indieweb" data-slug="indieweb"> <title> 3:20- 3:40 Putting Org Mode on the Indieweb</title> <rect x="596" y="15" opacity="0.8" width="31" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(625,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" data-slug="fanfare"> <title> 4:00- 4:10 Fanfare for the Common Emacs User</title> <rect x="658" y="15" opacity="0.8" width="15" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(671,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> fanfare</text></g></a> <a href="/2022/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"> <title> 5:00- 5:10 Sunday closing remarks</title> <rect x="752" y="15" opacity="0.8" width="15" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(765,48)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-close</text></g></a> <a href="/2022/talks/rde" title="rde Emacs introduction" data-slug="rde"> <title> 10:00-10:25 rde Emacs introduction</title> <rect x="94" y="50" opacity="0.8" width="39" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(131,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" data-slug="justl"> <title> 10:45-10:55 justl: Driving recipes within Emacs</title> <rect x="164" y="50" opacity="0.8" width="15" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightgray"></rect> <g transform="translate(177,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" data-slug="tramp"> <title> 11:05-11:35 Elisp and the TRAMP: How to NOT write code you don't have to</title> <rect x="196" y="50" opacity="0.8" width="47" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(241,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> tramp</text></g></a> <a href="/2022/talks/detached" title="Getting detached from Emacs" data-slug="detached"> <title> 1:00- 1:10 Getting detached from Emacs</title> <rect x="376" y="50" opacity="0.8" width="15" height="34" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(389,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" data-slug="eshell"> <title> 1:35- 1:45 Top 10 reasons why you should be using Eshell</title> <rect x="431" y="50" opacity="0.8" width="15" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(444,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" data-slug="async"> <title> 2:10- 2:30 Emacs was async before async was cool</title> <rect x="486" y="50" opacity="0.8" width="31" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(515,83)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> async</text></g></a> <a href="/2022/talks/dbus" title="The Wheels on D-Bus" data-slug="dbus"> <title> 3:05- 3:25 The Wheels on D-Bus</title> <rect x="572" y="50" opacity="0.8" width="31" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(601,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" data-slug="localizing"> <title> 4:00- 4:20 Pre-localizing Emacs</title> <rect x="658" y="50" opacity="0.8" width="31" height="34" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(687,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(94,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(188,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(282,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(376,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(470,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(564,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(658,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(752,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