diff options
Diffstat (limited to '')
-rw-r--r-- | 2022/organizers-notebook.md | 178 | ||||
-rw-r--r-- | 2022/organizers-notebook/index.org | 145 | ||||
-rw-r--r-- | 2022/organizers-notebook/schedule.svg | 2 |
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 ’{ “command”: [“loadfile”, “test2.webm”] }’ | 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’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 + +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’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” -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 “echo emacsconf.org/2021/talks/project > ~/url.txt” +<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"> </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’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’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” @@ -1231,26 +1349,22 @@ ssh emacsconf-dev@res.emacsconf.org “vncserver -kill” </tbody> </table> + +### 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: +### 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’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 |