summaryrefslogtreecommitdiffstats
path: root/2021
diff options
context:
space:
mode:
authorLeo Vivier <zaeph@zaeph.net>2022-09-21 18:01:42 +0200
committerLeo Vivier <zaeph@zaeph.net>2022-09-21 18:01:55 +0200
commit1dfc0a78256d9d87d928355ce2c1a631405d6887 (patch)
treef255a6677b6974e6b221f1e57fe42681fc49dd4d /2021
parent9214435400684c04b8a6de894899d9eab8190081 (diff)
downloademacsconf-wiki-1dfc0a78256d9d87d928355ce2c1a631405d6887.tar.xz
emacsconf-wiki-1dfc0a78256d9d87d928355ce2c1a631405d6887.zip
Move all playbook stuff to 2021/
Diffstat (limited to '2021')
-rw-r--r--2021/playbook.md1411
-rw-r--r--2021/playbook.org1194
-rw-r--r--2021/playbook/restream-flv.sh2
-rw-r--r--2021/playbook/restream-lowres.sh2
-rw-r--r--2021/playbook/restream-youtube.sh2
-rw-r--r--2021/playbook/stream-desktop-and-audio.sh1
6 files changed, 2612 insertions, 0 deletions
diff --git a/2021/playbook.md b/2021/playbook.md
new file mode 100644
index 00000000..cbee525a
--- /dev/null
+++ b/2021/playbook.md
@@ -0,0 +1,1411 @@
+
+# Table of Contents
+
+- [Roles/values](#roles)
+- [After the conference](#org9010597)
+ - [Update captions](#org1ede55a)
+ - [Update](#org9a1dcfd)
+ - [Send thanks](#thanks):email:
+- [Thursday or Friday before the conference](#days-before)
+- [On the day of the conference](#day-of)
+ - [Set up](#setup)
+ - [Arrange screens](#screens)
+ - [Start streaming](#start-streaming):stream:
+ - [Talk process](#talk)
+ - [Check in a speaker](#check-in)
+ - [Present talk](#present)
+ - [Publish information](#publish)
+ - [Handle Q&A](#questions)
+ - [Break time](#break)
+ - [End of stream](#end)
+ - [In case of&#x2026;](#exceptions)
+ - [Last-minute prerecording submission](#last-minute-prerec)
+ - [Last-minute caption update](#last-minute-captions)
+ - [Speaker has not checked in](#missing)
+ - [Speaker does not have a prerec and has not checked in](#really-missing)
+ - [Speaker whose talk was reallocated shows up and has a prerec](#reallocated-prerec)
+ - [Speaker whose talk was reallocated shows up and wants to do it live](#reallocated-live)
+ - [Alternate stream volunteer wants to stream (nice to have, at risk)](#alternate)
+ - [Pad malfunction or mess-up](#pad-broken)
+ - [CRDT malfunctions](#crdt-broken)
+ - [Conduct guidelines issue](#conduct)
+ - [CHECK is unavailable](#check-gone)
+ - [HOST is unavailable](#host-gone)
+ - [Technical issues during a live presentation](#live-issues)
+ - [Big technical issues with streaming](#stream-issues)
+ - [live0 can't handle the load or is close to network transfer limit](#network)
+- [Before the conference](#before)
+ - [Send calls for proposals](#cfp-mails)
+ - [[ANN] EmacsConf 2021 Call for Proposals](#first-cfp):email:
+ - [Second (and final) call for proposals (closing Sep 30)](#second-cfp):email:
+ - [Accept talks](#accept):email:
+ - [E-mail text](#orgb8732b7)
+ - [Thank speakers for submissions](#acknowledge-submission):email:
+ - [Captions prepared](#orge92309b)
+ - [Captions pending](#org6bed7ae)
+ - [Help speakers with tech checks](#tech-checks)
+ - [Follow up with speakers we haven't heard from](#follow-up-silence):email:
+ - [Send check-in instructions](#check-in-instructions):email:
+ - [Unknown Q&A preference](#org4fa4a70)
+ - [Speakers will handle Q&A live](#org55b075e)
+ - [Speakers will handle questions after the event](#org544baed)
+ - [Announce schedule and watching instructions](#announce-schedule):email:
+ - [E-mail text](#org41b2906)
+ - [Follow up regarding prerecorded videos](#follow-up-prerecs):email:
+ - [Offer speakers the opportunity to go live if they really really want to](#go-live-maybe):email:
+ - [Email text](#orgb88fbb1)
+ - [Compress video](#orgbe5dce0)
+ - [Experiment with setup to allow MPV / BBB sound isolation](#sound)
+ - [Check for video encoding issues](#orgde63d42)
+
+<!-- This file was automatically generated from playbook.org. Instead of editing the .md, please edit the .org and republish. Thanks! -->
+
+
+<a id="roles"></a>
+
+# Roles/values
+
+<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
+
+
+<colgroup>
+<col class="org-left" />
+
+<col class="org-left" />
+
+<col class="org-left" />
+</colgroup>
+<tbody>
+<tr>
+<td class="org-left">B</td>
+<td class="org-left">&#xa0;</td>
+<td class="org-left">bandali</td>
+</tr>
+
+
+<tr>
+<td class="org-left">CHECK</td>
+<td class="org-left">check-ins</td>
+<td class="org-left">sachac</td>
+</tr>
+
+
+<tr>
+<td class="org-left">HOST</td>
+<td class="org-left">hosting, streaming, intros, reading, moving questions/answers around</td>
+<td class="org-left">zaeph</td>
+</tr>
+</tbody>
+</table>
+
+<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
+
+
+<colgroup>
+<col class="org-left" />
+
+<col class="org-left" />
+</colgroup>
+<tbody>
+<tr>
+<td class="org-left">${protected}</td>
+<td class="org-left"><a href="file://ssh:front:/var/www/media.emacsconf.org/2021/protected/">file://ssh:front:/var/www/media.emacsconf.org/2021/protected/</a></td>
+</tr>
+
+
+<tr>
+<td class="org-left">${stream-status}</td>
+<td class="org-left"><a href="file://ssh:front:/var/www/live.emacsconf.org/index.html">file://ssh:front:/var/www/live.emacsconf.org/index.html</a></td>
+</tr>
+
+
+<tr>
+<td class="org-left">${upcoming}</td>
+<td class="org-left">upcoming.org shared over CRDT</td>
+</tr>
+
+
+<tr>
+<td class="org-left">${conf}</td>
+<td class="org-left">conf.org shared over CRDT</td>
+</tr>
+
+
+<tr>
+<td class="org-left">${playbook}</td>
+<td class="org-left">playbook.org shared over CRDT</td>
+</tr>
+
+
+<tr>
+<td class="org-left">${dump}</td>
+<td class="org-left"><a href="file://ssh:live:/data/">file://ssh:live:/data/</a></td>
+</tr>
+
+
+<tr>
+<td class="org-left">${media}</td>
+<td class="org-left"><a href="file://ssh:front:/var/www/media.emacsconf.org/2021/">file://ssh:front:/var/www/media.emacsconf.org/2021/</a></td>
+</tr>
+
+
+<tr>
+<td class="org-left">${live-main}</td>
+<td class="org-left"><a href="file://ssh:front:/var/www/live.emacsconf.org/main.html">file://ssh:front:/var/www/live.emacsconf.org/main.html</a></td>
+</tr>
+
+
+<tr>
+<td class="org-left">${live-480p}</td>
+<td class="org-left"><a href="file://ssh:front:/var/www/live.emacsconf.org/main-480p.html">file://ssh:front:/var/www/live.emacsconf.org/main-480p.html</a></td>
+</tr>
+
+
+<tr>
+<td class="org-left">${live-index}</td>
+<td class="org-left"><a href="file://ssh:front:/var/www/live.emacsconf.org/index.html">file://ssh:front:/var/www/live.emacsconf.org/index.html</a></td>
+</tr>
+
+
+<tr>
+<td class="org-left">${live-alt}</td>
+<td class="org-left"><a href="file://ssh:front:/var/www/live.emacsconf.org/alt.html">file://ssh:front:/var/www/live.emacsconf.org/alt.html</a></td>
+</tr>
+
+
+<tr>
+<td class="org-left">${profile}</td>
+<td class="org-left"><a href="file://ssh:live:~/.profile">file://ssh:live:~/.profile</a></td>
+</tr>
+
+
+<tr>
+<td class="org-left">${emacsconf-el}</td>
+<td class="org-left"><a href="https://git.emacsconf.org/emacsconf-el/">https://git.emacsconf.org/emacsconf-el/</a></td>
+</tr>
+
+
+<tr>
+<td class="org-left">&#xa0;</td>
+<td class="org-left">&#xa0;</td>
+</tr>
+</tbody>
+</table>
+
+
+<a id="org9010597"></a>
+
+# After the conference
+
+
+<a id="org1ede55a"></a>
+
+## Update captions
+
+- Merge them into the video with `add-captions.sh`
+
+ #!/usr/bin/zsh
+ BASE="${1%.*}"
+ BASE="${BASE%--main}"
+ ffmpeg -y -i "$1" ${BASE}--main.vtt
+ if [ -f "${BASE}--normalized.webm" ]; then
+ ffmpeg -y -i "$1" -i "${BASE}--normalized.webm" -c:a copy -c:v copy "${BASE}--captioned.webm"
+ else
+ ffmpeg -y -i "$1" -i "${BASE}--compressed.webm" -c:a copy -c:v copy "${BASE}--captioned.webm"
+ fi
+ cp ${BASE}--main.vtt ${BASE}--chapters.vtt ~/vendor/emacsconf-wiki/2021/captions
+ scp "${BASE}--captioned.webm" "${BASE}--main.webm"
+ scp "${BASE}--main.webm" front:~/protected
+ scp "${BASE}--main.vtt" front:~/protected
+ scp "${BASE}--chapters.vtt" front:~/protected
+ ssh front 'cd protected; chmod ugo+r *'
+- Update Toobnix and Youtube captions with `conf-video-share`.
+- Update Toobnix and Youtube descriptions with chapters.
+- Update ${conf-year}/${captions}/${slug}.md in the wiki. To make this from scratch, use `M-x conf-prepare-transcript-directives` from the talk heading in the conference Org file.
+
+
+<a id="org9a1dcfd"></a>
+
+## Update
+
+
+<a id="thanks"></a>
+
+## Send thanks :email:
+
+Thank you so much for being part of EmacsConf ${conf-year}! Hundreds of people
+enjoyed it, and I'm sure even more will come across the videos in the
+days to follow.
+
+Your prerecorded video is available on the talk page at ${url} , and
+we've added the questions and comments that we've collected from
+IRC/BBB/Etherpad. The recording of your Q&A session is also on the
+talk page.
+
+We've also uploaded your talk video to ToobNix (a PeerTube instance)
+at ${toobnix-url} and YouTube at ${youtube-url} . If you
+want to reupload the video to your own channel, feel free to do
+so. You can add the subtitles by downloading them from the talk page
+and uploading them to your video. If you let me know where you've
+uploaded it, I can switch our playlist to include your version of the
+video instead. That way, it might be easier for you to respond to
+questions on videos. (Which some people have already been adding,
+yay!)
+
+If you would like to share more resources, you can add them to the
+talk page or e-mail them to us and we can add them for you.
+
+Thanks again for speaking at EmacsConf!
+
+
+<a id="days-before"></a>
+
+# Thursday or Friday before the conference
+
+- STREAM: Download prerecorded videos from ${protected}
+
+ rsync -avzue ssh front:/var/www/media.emacsconf.org/2021/protected/*--main.webm .
+
+
+<a id="day-of"></a>
+
+# On the day of the conference
+
+
+<a id="setup"></a>
+
+## Set up
+
+
+<a id="screens"></a>
+
+### Arrange screens
+
+- CHECK:
+ - Share ${upcoming}, ${playbook}, and ${conf} via CRDT: `conf-crdt-connect-and-share`
+ - Current schedule, filenames/commands for playing, Q&A preference, IRC nick, pronunciation, intro notes, prerec duration, emergency contact information
+ - `conf-upcoming-add-subtree`
+ - Have #emacsconf-org, #emacsconf, #emacsconf-accessible, and #emacsconf-questions open
+ - Use `/opall` to get op privileges in all the channels
+ - Start backup process for pad
+
+ while true; do
+ curl https://etherpad.wikimedia.org/p/emacsconf-2021/export/html > emacsconf-$(date +"%Y%m%d-%H%M%S").html
+ sleep 15m
+ done
+ - Computer for alternate streaming:
+ - Open browser for joining BBB
+ - Open MPV for playing <http://live0.emacsconf.org:8000/main.webm>
+- HOST:
+ - rsync the newest &#x2013;main.webm from front: rsync -avze ssh front:/var/www/media.emacsconf.org/2021/protected/\*&#x2013;main.webm .
+ - Check OBS scenes for sharing windows/tabs as a virtual camera:
+ - chat.emacsconf.org with #emacsconf
+ - Etherpad
+ - Schedule
+ - next talk page
+ - Clock with current time on screen: `watch TZ=America/Toronto date`
+ - Set up backchannel for easy viewing
+ - ${upcoming}
+ - \#emacsconf-org and #emacsconf channels
+ - (?) Join organizer room S
+
+
+<a id="start-streaming"></a>
+
+### Start streaming :stream:
+
+- HOST: Display getting-ready message and start streaming to main.webm
+- HOST: Confirm that the stream is live at <https://live.emacsconf.org/main.webm>
+- B: Update ${status} to say that the stream is live
+- CHECK: Start low-resolution stream, confirm at <https://live.emacsconf.org/main-480p.webm>
+ Call this on live0 with $CONF480PASS as the first parameter. The Icecast configuration is on `live0` at <file:///ssh:live|sudo:/etc/icecast2/icecast.xml>=.
+
+ PASS=$1
+ while true; do ffmpeg -loglevel 24 -f webm -reconnect_at_eof 1 -reconnect_streamed 1 -re -i http://localhost:8000/main.webm -vf scale=854:480 -f webm -c:a copy -b:v 500k -maxrate 1M -bufsize 1M -content_type video/webm -c:v libvpx icecast://ec2020main480pmu:$PASS@localhost:8000/main-480p.webm; done
+- CHECK: Start Youtube and Toobnix streams. Call this with $YOUTUBE1PASS, $YOUTUBE2PASS, or $TOOBNIX as the parameter
+
+ MOUNT=$1
+ while true; do ffmpeg -loglevel 24 -i http://localhost:8000/main.webm -cluster_size_limit 2M -cluster_time_limit 5100 -b:v 1M -crf 30 -g 125 -deadline good -threads 4 -vcodec libx264 -acodec libmp3lame -f flv $MOUNT; done
+- CHECK: Verify YouTube and Toobnix streams and the CPU load on live0.
+- CHECK: Set the YouTube and Toobnix streams to public.
+- B: Verify with #emacsconf that the stream is active.
+- CHECK: Play main stream on alternate laptop. Start alternate stream and verify. Update ${status}.
+- CHECK: Announce on Twitter (@emacs, @emacsconf, @sachac) and in #emacs
+ EmacsConf 2021 starting now: <https://emacsconf.org/2021/>
+
+
+<a id="talk"></a>
+
+## Talk process
+
+
+<a id="check-in"></a>
+
+### Check in a speaker
+
+Exception: [CHECK is unavailable](#check-gone)
+
+- Speaker checks in on #emacsconf-org via IRC or via e-mail ~30m before
+- CHECK notes IRC nick for speaker.
+- CHECK confirms Q&A preference: live/IRC/Etherpad, preferred way of getting questions
+- [? unknown] Thanks for checking in! How would you like to handle Q&A
+ today - live video, the collaborative Etherpad at
+ <https://etherpad.wikimedia.org/p/emacsconf-2021> , or IRC (like
+ this)?
+- [? IRC] Thanks for checking in! Feel free to keep an eye on
+ \#emacsconf for questions and discussion, and we'll copy things from
+ the pad to there. If the volume gets overwhelming, let us know and
+ we can forward questions to #emacsconf-questions for you. If you'd
+ like to try Q&A over live video or the collaborative pad instead, or
+ if you need help, please let us know.
+- [? Etherpad] Thanks for checking in! The collaborative pad we'll be
+ using for questions is at
+ <https://etherpad.wikimedia.org/p/emacsconf-2021> . We'll collect
+ questions from #emacsconf and put them there. If you'd like to jump
+ to your part of the document, you might be able to keep an eye on
+ questions. Please let us know if you need help, or if you want to
+ switch to live Q&A.
+- [? live] Thanks for checking in! I'll send you some private messages
+ with instructions, so please check there. Let me know if you don't
+ get them.
+ - Private messages:
+ - (erc-message "PRIVMSG" (format "%s You can use this BBB room: %s . I'll join you there shortly to set up the room and do the last-minute tech check." nick room-url))
+ - (erc-message "PRIVMSG" (format "%s The collaborative pad we'll be using for questions is at %s . We'll collect questions from #emacsconf and put them there. If you'd like to jump to your part of the document, you might be able to keep an eye on questions. Alternatively, we can read questions to you." nick conf-collaborative-pad))
+ - (erc-message "PRIVMSG" (format "%s Leo Vivier will join when it's time, and he will give you the go-ahead when it's time to present. See you in the BBB room!" nick))
+ - CHECK directs speaker to available room with `/checkin <room> <nick>`
+ - Speaker joins talk room
+ - CHECK makes speaker presenter and moderator, does last-minute tech check
+ - Hello, thanks
+ - Speaker tries screen sharing and webcam (optional)
+ - check screen readability
+ - CHECK briefs speaker on process, including:
+ - live Q&A: reading questions themselves (can do in any order,
+ can skip; coach possible responses for awkward things) or asking HOST to read questions to them
+ - HOST can share the pad or IRC; speaker shares screen only if doing demo
+ - encouragement of webcam, although it's optional
+ - how HOST will join shortly before the prerec ends and then
+ give them the go-ahead
+ - closing any tabs watching the stream as their talk starts
+ (otherwise the audio is confusing)
+ - If the speaker will be giving a live presentation, CHECK
+ collects emergency contact information (in case of technical
+ issues) and shares it with HOST in the CRDT buffer
+ - Okay to do other things until the prerec ends
+ - CHECK updates ${upcoming} with link to the talk room and
+ preferences for Q&A-. CHECK will also /msg the relevant
+ information.
+
+
+<a id="present"></a>
+
+### Present talk
+
+- CHECK announces the next talk on IRC and marks the previous talk as done. (`conf-announce`)
+- PAD clears pad colours.
+- [? prerec]
+ - HOST switches to MPV scene in OBS and plays the video (with captions if available).
+ - Exception: [Last-minute prerecording submission](#last-minute-prerec)
+ - Exception: [Last-minute caption update](#last-minute-captions)
+ - [CHECK publishes information](#publish)
+ - [HOST gets a head start on handling Q&A](#questions)
+ - When prerec finishes, HOST switches the OBS scene to show BBB.
+- [? live]
+ - Exception: [Speaker does not have a prerec and has not checked in](#really-missing)
+ - HOST joins the BBB room and double-checks that recording is on.
+ - CHECK-alternate joins the BBB room and pauses main MPV.
+ - HOST switches to OBS scene for BBB.
+ - Speaker presents.
+ - Exception: [Technical issues during a live presentation](#live-issues)
+ - [? talk needs to be wrapped up]
+ - HOST nudges speaker verbally.
+
+
+<a id="publish"></a>
+
+### Publish information
+
+- CHECK updates the schedule in:
+ - ${conf}
+ - ${upcoming}
+ - wiki
+- CHECK publishes the video to media.emacsconf.org using `conf-publish-files`
+- CHECK commits the wiki page and the captions for the talk.
+- CHECK publishes the video on YouTube and ToobNix using `conf-video-share`.
+ - Update description:
+
+ This video is available under the terms of the
+ Creative Commons Attribution-ShareAlike 4.0 International (CC
+ BY-SA 4.0) license.
+
+ You can view it using free and open source software at
+ ${url}
+
+ ${description}
+ - Mark it as public.
+ - Add it to EmacsConf 2021 playlist.
+ - Update title and description.
+ - Mark it as public.
+ - Doublecheck subtitles
+ - Add it to the EmacsConf 2021 playlist.
+- [? live sections]
+ - CHECK does a rough-cut of the recording from ${dump} to get the last X minutes or by time range. There's about a 1-2 minute delay.
+ Ex: `(kill-new (conf-dump-get "alt" "10:24" "10:30" "qa_"))`
+ - When there's an opportunity to do so:
+ - CHECK finetunes the rough-cut recording (trim start and end) and posts it to:
+ - media.emacsconf.org/2021
+ - wiki page for talk
+
+
+<a id="questions"></a>
+
+### Handle Q&A
+
+Exceptions:
+
+- [Speaker has not checked in](#missing)
+
+- [? live]
+ - CHECK-alternate joins the BBB room and pauses MPV.
+ - HOST joins the BBB room
+ - HOST starts recording in BBB or confirms that it's already recording
+ - HOST switches to the BBB scene in OBS.
+ - HOST describes how to ask questions.
+ - [? No questions yet]
+ - HOST thanks speaker, says nice things about talk, and asks a couple of prepared questions
+ - [? Awkward question]
+ - HOST can try rephrasing the question.
+ - HOST adds note to IRC/Etherpad that speakers can answer in any order, skip questions, answer afterwards, etc.
+ - [? Q&A needs to be wrapped up]
+ - HOST writes in Etherpad/IRC or nudges speaker verbally.
+ - CHECK notes the time that the live Q&A finished and switches back to the main stream on CHECK-alternate.
+- [? IRC/pad]
+ - HOST switches to pad/chat OBS scene.
+ - HOST describes Q&A method and shows it on the screen.
+ - While there's buffer time before the next talk, HOST can read out
+ questions and answers, or transition to the next talk early
+ - HOST: It's time for the next talk, but if you want to keep
+ discussing the previous talk, please feel free to continue doing
+ so on IRC or the pad.
+- [? speaker will answer after the conference]
+ - HOST switches to pad/chat OBS scene.
+ - HOST says the speaker is not available right now, but we'll
+ forward the questions to the speaker and we'll post the speaker's
+ answers on the wiki page. Leave your contact information if you
+ want to be notified, or subscribe to the emacsconf-discuss mailing
+ list to get the announcement. Please feel free to continue
+ discussing the talk on IRC or the pad.
+- [Present next talk](#present)
+
+
+<a id="break"></a>
+
+## Break time
+
+- CHECK marks the last talk as done. `conf-end-current-talk`
+- CHECK stops and restarts the Toobnix restreaming process, and re-checks the stream
+- CHECK uses `conf-upcoming-add-subtree` to add the afternoon talks to upcoming.org
+- HOST doublechecks network transfer limit and server health
+
+
+<a id="end"></a>
+
+## End of stream
+
+- CHECK removes live Q&A links
+- CHECK stops ffmpeg process for Youtube
+- CHECK stops ffmpeg process for Toobnix
+- CHECK stops ffmpeg process for main-480p
+- STREAM stops streaming
+- B updates the status pages
+- bandali figures out the downstream
+
+
+<a id="exceptions"></a>
+
+## In case of&#x2026;
+
+
+<a id="last-minute-prerec"></a>
+
+### Last-minute prerecording submission
+
+- CHECK will copy it from the FTP upload server to ${protected} and name it appropriately.
+- CHECK will notify STREAM with the scp command and the mpv command so that STREAM can choose.
+
+
+<a id="last-minute-captions"></a>
+
+### Last-minute caption update
+
+- CHECK uploads the &#x2013;main.vtt file to ${protected}
+- CHECK notifies STREAM via ${upcoming}
+- STREAM uses the provided commands to download the VTT file and load it into MPV with `--sub-file`
+
+
+<a id="missing"></a>
+
+### Speaker has not checked in
+
+- Let the previous talk run a little longer for Q&A; end at least in time for the prerec
+- After the previous Q&A wraps up, play the prerec
+- [? still not around after prerec finishes]
+ - HOST: Speaker might be having some difficulty connecting, but we'll collect your questions on the pad and send them afterwards.
+ - Can play next prerec a few minutes early
+
+
+<a id="really-missing"></a>
+
+### Speaker does not have a prerec and has not checked in
+
+- Let the previous talk do live Q&A/demo if ready
+- Close to the time of the missing talk:
+ - See if any of the previous speakers want to be set up for an impromptu talk/extension in a BBB room, just in case
+ - HOST: The next speaker might be having some difficulty connecting. In the meantime, let's&#x2026;
+ - OR:
+ - highlight ongoing discussions
+ - invite another speaker for an impromptu extension; mplsCorwin will keep a list of possible speakers who are still active
+ - replay a short prerec
+ - let mplsCorwin or zaeph fill in
+
+
+<a id="reallocated-prerec"></a>
+
+### Speaker whose talk was reallocated shows up and has a prerec
+
+- CHECK copies it to ${protected}
+- Plan to play prerec at the end of the day, or in any gaps if a live talk falls through
+
+
+<a id="reallocated-live"></a>
+
+### Speaker whose talk was reallocated shows up and wants to do it live
+
+- See if there's enough time if buffers are shuffled back; if so, set up for a live presentation
+- Check for alternate stream volunteers
+- [? not enough time] Offer to set up a BBB room for recording or to
+ accept a prerecording afterwards, then include it on the site and in
+ post-conference communication
+
+
+<a id="alternate"></a>
+
+### Alternate stream volunteer wants to stream (nice to have, at risk)
+
+- CHECK gives ALTERNATE the BBB room URL for the talk they are interested in
+- ALTERNATE starts streaming to assigned end point
+- CHECK confirms stream
+- CHECK updates ${stream-status}
+- CHECK notifies STREAM and HOST
+ - After prerec plays:
+ - HOST: This talk has an extended demo/Q&A. You can go to ${alternate-url} to watch it, and we'll post a recording afterwards.
+ - HOST sends ${alternate-url} to IRC: Alternate stream for ${title}: ${alternate-url}
+- ALTERNATE notifies #emacsconf-org when the stream is done.
+- CHECK updates ${stream-status} to note that the alternate stream is finished.
+
+ FFMPEG process for sending the desktop and audio to the $CONFALT mountpoint on Linux with X11 and Alsa:
+
+ 1. Set the CONFALT environment variable to icecast://user:password@live0.emacsconf.org:8000/alt.webm
+ 2. Install pavucontrol if you don't have it already.
+ 3. Start the following command (<playbook/stream-desktop-and-audio.sh>:
+
+ while true; do ffmpeg -loglevel 0 -ar 48000 -f alsa -channels 2 -sample_rate 48000 -i default -re -video_size 1280x720 -framerate 25 -f x11grab -i :0.0 -cluster_size_limit 2M -cluster_time_limit 5100 -content_type video/webm -c:v libvpx -b:v 1M -crf 30 -g 125 -deadline good -threads 4 -f webm $CONFALT; done
+ 4. Use pavucontrol to set the recording source for the ffmpeg
+ command to be the audio monitor, so you get system output as
+ well.
+ - OR:
+ - [? splitting audio] [Set up sinks for sound](#sound)
+ - [? same audio]
+ - Set up audio monitor as the input for FFMPEG
+ - MPV goes to MPV sink, browser goes to recording sink, FFMPEG takes in recording monitor
+
+
+<a id="pad-broken"></a>
+
+### Pad malfunction or mess-up
+
+- PAD resets the pad using <https://etherpad.wikimedia.org/p/emacsconf-2021/timeslider>
+- [? still not recovered]
+ - PAD reimports the pad from backup
+
+
+<a id="crdt-broken"></a>
+
+### CRDT malfunctions
+
+- HOST notifies CHECK and tries reconnecting
+- [? still doesn't work]
+ - Switch to backup Etherpad
+
+
+<a id="conduct"></a>
+
+### Conduct guidelines issue
+
+- HOST addresses it (on-camera if needed) with a reminder and/or a kick or a ban
+
+
+<a id="check-gone"></a>
+
+### CHECK is unavailable
+
+- HOST does check-ins
+- HOST refers to conf.org for Q&A preference etc.
+- STREAM checks conf.org for prerec filenames etc.
+- Dropped goals:
+ - Publishing recordings ASAP
+ - Updating schedule/wiki on the fly
+
+
+<a id="host-gone"></a>
+
+### HOST is unavailable
+
+- STREAM joins the BBB room and streams directly from there (or streams the prerecs).
+- STREAM will do the hosting.
+
+
+<a id="live-issues"></a>
+
+### Technical issues during a live presentation
+
+- HOST tries to contact the speaker
+- [? back on track]
+ - [? can be squeezed into remaining time]: Continue
+ - [? need extra time]: CHECK fiddles with buffer of following talks in conf.org and updates schedule
+ - [? need too much extra time (ex: 10min)]: HOST acknowledges
+ technical issues and says we may be able to follow up after the
+ conference
+- [? can't resume]: HOST acknowledges technical issues and says we may
+ be able to follow up after the conference
+
+
+<a id="stream-issues"></a>
+
+### Big technical issues with streaming
+
+- HOST notifies #emacsconf and #emacsconf-org and adds a note at the top of the ${pad}.
+- HOST updates the 2021.md wiki page
+- CHECK publishes prerecordings
+ - media.emacsconf.org
+ - wiki
+ - Toobnix
+ - Peertube
+- STREAM e-mails the mailing list
+
+
+<a id="network"></a>
+
+### live0 can't handle the load or is close to network transfer limit
+
+- OR:
+ - Redirect some viewers via asking in #emacsconf:
+ - watch via main-480p
+ - watch via Toobnix (if we can get that working)
+ - Consider dropping the restream to Toobnix (lower audience?) or to Youtube
+ - Add additional node to Linode account for shared transfer pool (TODO: doublecheck)
+
+
+<a id="before"></a>
+
+# Before the conference
+
+
+<a id="cfp-mails"></a>
+
+## Send calls for proposals
+
+
+<a id="first-cfp"></a>
+
+### [ANN] EmacsConf 2021 Call for Proposals :email:
+
+Sent on August 5, 2021 to emacsconf-discuss, emacs-devel, emacs-orgmode, emacs-tangents, Cc: emacsconf-org.
+Included inline Markdown and attached Org version of the CFP
+
+- E-mail text
+
+ #+title: EmacsConf 2021
+ #+subtitle: Online Conference
+ #+date: November 27 and 28, 2021
+ #+options: author:nil
+
+ [[https://emacsconf.org/2021/][EmacsConf 2021]] will be a virtual conference on *November 27 and 28,
+ 2021 (Sat-Sun)*. If you'd like to present at the conference, please
+ [[https://emacsconf.org/2021/cfp/][submit your proposal]] by *September 30, 2021*.
+
+ EmacsConf 2021 is about the joy of [[https://www.gnu.org/software/emacs/][Emacs]] and Emacs Lisp. Come share
+ your experiments and adventures with the Emacs text editor / operating
+ system / way of life! We welcome speakers of *all backgrounds* and
+ *all levels of experience*, including newcomers giving their first
+ talk. What have you found exciting about Emacs lately? What do you
+ wish someone had told you when you were starting out? What part of
+ your workflow might inspire someone to get into Emacs or go deeper?
+
+ A great way to get started with writing a proposal is to start by
+ exploring the programs from previous years: [[https://emacsconf.org/2020/schedule/][2020]], [[https://emacsconf.org/2019/schedule/][2019]], [[https://emacsconf.org/2015/schedule/][2015]], [[https://emacsconf.org/2013/#program][2013]].
+ You might also find some neat ideas on the [[https://emacsconf.org/2021/ideas/][ideas]] page. Feel free to
+ add yours there too! If you're still not sure, come by our IRC
+ channel =#emacsconf= on =irc.libera.chat= and say hi. You can join
+ the chat using [[ircs://irc.libera.chat:6697/emacsconf][your favourite IRC client]], or by visiting
+ [[https://chat.emacsconf.org][chat.emacsconf.org]] in your web browser.
+
+ All kinds of people use Emacs for all kinds of things. We'd love it
+ if EmacsConf 2021 could highlight interesting perspectives and reflect
+ the diversity of our community. If you know someone who might have a
+ good idea for a talk, please reach out to them and encourage them to
+ submit a proposal. Many people (especially from underrepresented
+ groups such as women, people of colour, non-developers, etc.) might
+ not consider themselves expert enough to share their thoughts. If you
+ let them know that you value their knowledge and maybe even suggest
+ something that you think others would like to hear more about, they
+ may realize that they have something worth sharing and that we would
+ love to hear from them.
+
+ * Important dates
+
+ For EmacsConf 2021, we are planning for 9am to 5pm Toronto/EST
+ (2pm-10pm UTC) on November 27 and 28. Depending on people's
+ availability, it might be two half-days.
+
+ | CFP opens | August 5, 2021 |
+ | CFP closes | September 30, 2021 |
+ | Speaker notifications | October 15, 2021 |
+ | Schedule published | October 31, 2021 |
+ | EmacsConf 2021! | November 27 and 28, 2021 |
+
+ If you are not available during the conference itself but you have a
+ neat idea that you'd like to share, please propose it anyway! You can
+ always handle questions after the conference, and we might even be
+ able to coordinate with other Emacs meetups for regional events (if
+ you're an Emacs meetup organizer and would like to make this happen
+ let's [[https://emacsconf.org/contact/][get in touch]]!).
+
+ Please note that although we will try our best to stick to the above
+ dates in the coming months, given the current state of the world, we
+ may have to move things around a bit in case of unforeseen events.
+ Thank you for your patience and understanding.
+
+ * Talk formats
+
+ We'd like EmacsConf 2021 to inspire lots of different people to
+ explore lots of different things in Emacs. We hope to put together a
+ stream of quick ideas followed by lots of conversation over IRC and/or
+ Q&A sessions, with occasional deep dives into topics that many people
+ might find interesting or useful.
+
+ As you think about your talk, consider what you can share in:
+
+ - *Up to 10 minutes total:* What is the core idea? What do you want
+ people to do or remember? You can show just enough to get people
+ interested and then point them to where they can learn more
+ afterwards. You can answer questions over IRC, the pad, or the
+ wiki, and there's no limit to how long that conversation can go.
+
+ - *Up to 20 minutes total:* How would you flesh out some of the points
+ from your 5-10 minute presentation? How can you show the pieces
+ working together?
+
+ - *Up to 40 minutes total:* What would benefit from a deep dive?
+ How do you keep it engaging?
+
+ When writing your proposal, please write an outline of what you plan
+ to talk about if you have 5-10 minutes. If you'd like to propose a
+ longer talk, outline what you might include if you had more time to
+ present (up to 40 minutes, including Q&A).
+
+ Here's an example for a potentially 40-minute talk:
+
+ - 5-10 minutes: quick demo of the abc package working together with
+ xyz package.
+ - 20 minutes: same as above, with some customization options to
+ accommodate a different workflow.
+ - 40 minutes: all of the above, including modifying the behaviour of
+ the package in order to add something new.
+
+ This flexibility would help us in devising the conference schedule so
+ that as many people as possible could get a chance to present their
+ ideas, while still allowing for featuring longer deep dive talks.
+
+ Other session formats such as tutorials, workshops, and hangouts are
+ welcome as well, in case you would find those other formats preferable
+ to a traditional talk format. If you're interested in these or other
+ session types, please let us know [[https://lists.gnu.org/mailman/listinfo/emacsconf-org][publicly]] or [[https://lists.gnu.org/mailman/listinfo/emacsconf-org-private][privately]]. We'll be
+ happy to work something out with you.
+
+ * Office hours
+
+ We're aware that it can be intimidating to submit a proposal to a
+ conference, so we thought we'd try to help! This year, we're opening
+ up the doors of our virtual offices for you to come talk to us about
+ your proposals with hopes of helping you with any hurdles you may be
+ facing with preparing your proposal.
+
+ We'd like to publish a schedule of availabilities of volunteers for
+ holding office hours. Currently these volunteers consist of some of
+ the EmacsConf organizers, but we'd love to have the help of other
+ members of the Emacs community as well. If you are a more experienced
+ Emacs user and would like to help with this, please [[https://emacsconf.org/contact/][get in touch]]!
+
+ Our first office hour this year is planned for Saturday, August 14,
+ from 3pm to 4pm UTC with zaeph (Leo Vivier) at the following
+ BigBlueButton room: https://bbb.emacsverse.org/b/ban-qye-fd1-5kw.
+
+ * Submitting your proposal
+
+ Once you're ready to submit your proposal, the [[https://emacsconf.org/2021/submit/][submit]] page has the
+ instructions on how to submit your talk.
+
+ We use an anonymized submission process to reduce bias and encourage
+ contribution. Identifying information will be removed from
+ submissions by a conference organizer who will not participate in
+ talk selection. The anonymized submissions will then be reviewed by
+ a selection committee.
+
+ If your talk is approved, we'd love it if you could help us make sure
+ the conference runs smoothly. After we email you with the time
+ allotted for your talk, we'll ask you to
+
+ - prepare a prerecording of your talk, or record it with our help if
+ that'd be easier for you; and
+ - schedule a short tech-check if you'd like to be able to answer
+ questions in a live session.
+
+ Don't forget to subscribe to our main mailing list, [[https://lists.gnu.org/mailman/listinfo/emacsconf-discuss][emacsconf-discuss]],
+ for discussion and announcements about the EmacsConf conference.
+
+ We look forward to your ideas and submissions!
+
+ * Getting involved
+
+ If you would like to help with the conference (planning the sessions,
+ reviewing proposals, helping with infrastructure, making sessions more
+ accessible, editing video transcripts, etc.), see our [[https://emacsconf.org/2021/planning/][planning]] page
+ and come say hi to us at =#emacsconf= on =irc.libera.chat=.
+
+ In addition to the [[https://lists.gnu.org/mailman/listinfo/emacsconf-discuss][emacsconf-discuss]] list, feel free to subscribe to
+ [[https://lists.gnu.org/mailman/listinfo/emacsconf-org][emacsconf-org]] as well, for discussions related to organizing the
+ conference by the EmacsConf organizers and volunteers.
+
+ We'd really appreciate your help in making EmacsConf 2021 the best one
+ so far!
+
+ * Commitment to freedom
+
+ We remain fully committed to freedom, and we will continue
+ using our infrastructure and streaming setup consisting entirely
+ of [[https://www.gnu.org/philosophy/free-sw.html][free software]], much like previous EmacsConf conferences.
+ An article describing our infrastructure and tools is underway,
+ and will be announced on the emacsconf-discuss list when published.
+
+
+ * COMMENT Copyright & License
+
+ Copyright (c) 2020 Amin Bandali, Sacha Chua, David Bremner
+ Copyright (c) 2021 Amin Bandali, Sacha Chua, Leo Vivier,
+ Sebastian Crane
+
+ The EmacsConf 2021 Call for Proposals is part of the EmacsConf wiki,
+ and is dual-licensed under the terms of the Creative Commons
+ Attribution-ShareAlike 4.0 International Public License; and the GNU
+ General Public License as published by the Free Software Foundation,
+ either version 3 of the License, or (at your option) any later
+ version.
+
+ A copy of these two licenses is available on the EmacsConf wiki, in
+ the [[https://emacsconf.org/COPYING.CC-BY-SA][COPYING.CC-BY-SA]] and [[https://emacsconf.org/COPYING.GPL][COPYING.GPL]] files.
+
+ * COMMENT How to export this file
+
+ As of the time of writing this document (Org mode version 9.3.7), the
+ Org links library (=ol.el=) does not yet recognize =ircs= link types,
+ and will throw an error if you try to export a file containing them,
+ such as this file.
+
+ To work around that, you can use something along the lines of the
+ Emacs Lisp code below, by either adding it to your init file, or by
+ putting the point in the code block and hitting =C-c C-v e= (that is,
+ hold Ctrl, then hit c followed by v, then release Ctrl, and hit e) to
+ evaluate the code, working around the issue only for the current
+ session.
+
+ #+begin_src emacs-lisp :results silent
+ (org-link-set-parameters
+ "ircs"
+ :export
+ (lambda (link description format)
+ "Export an ircs link.
+ See `org-link-parameters' for details about LINK, DESCRIPTION and
+ FORMAT."
+ (let ((desc (or description link)))
+ (pcase format
+ (`html (format "<a href=\"ircs:%s\">%s</a>" link desc))
+ (`md (format "[%s](ircs:%s)" desc link))
+ (_ nil)))))
+ #+end_src
+
+
+<a id="second-cfp"></a>
+
+### Second (and final) call for proposals (closing Sep 30) :email:
+
+Sent Sept 27, 2021 to the same lists as the CFP
+Included inline Markdown and attached Org version of the CFP
+
+- E-mail text
+
+ Dear fellow Emacsians,
+
+ This is the second and final Call for Proposals for EmacsConf 2021,
+ open until September 30. Please see below for details on how to send
+ in your proposal(s), or chat about them with us in the #emacsconf IRC
+ channel on Libera.Chat.
+
+ If you're considering submitting a proposal but think the remaining
+ time is not enough, please reach out to me off-list as soon as
+ possible and I'd be happy to try and work something out with you.
+
+ I'll close this portion of this email with a big thank you to all the
+ folks who have submitted their talk proposal(s) or will be doing so.
+ Myself and the other EmacsConf organizers look forward to reading over
+ them and getting back to you about them and about the next steps. :)
+
+ Best,
+ amin
+
+ P.S. please direct any replies to this post either to myself or to the
+ emacsconf-discuss list, so as to help avoid generating extra off-topic
+ chatter in the other lists cc'd in this message.
+
+ P.P.S. as a volunteer-run conference, we are always looking for new
+ fellow volunteers and/or organizers to help with various aspects of
+ organizing and running the conference, including reviewing proposal
+ submissions. If you're interested in getting involved, please come by
+ our IRC channel or one of our public mailing lists (info below), or
+ any of the current organizers directly and say hi. We look forward to
+ hearing from you!
+
+
+<a id="accept"></a>
+
+## Accept talks :email:
+
+
+<a id="orgb8732b7"></a>
+
+### E-mail text
+
+Dear ${name},
+
+We would love to have your talk "${title}" as part of EmacsConf
+${conf-year}, and we've allocated ${duration} minutes for
+it. ${time-note}
+
+Your talk is tentatively scheduled for ${schedule}. The times may
+move around a bit as we update the schedule, so we'll check in with
+you if things change a lot. We've scheduled a few minutes for live
+questions and answers via web conference. Will you be available
+around this time? If there are more questions, you can also continue
+over Etherpad/IRC.
+
+Please plan to prerecord your ${duration}-minute talk(s) by ${deadline}
+at the latest. If you can, please send it in as early as possible.
+Submitting your video early lets us ask volunteers to help caption the
+video, making your talk more accessible and searchable.
+
+Please see <https://emacsconf.org/${conf-year}/prepare/> for tips and
+instructions on preparing, recording, and sending in your talk. If
+you have any questions or concerns, please let us know.
+
+Thanks,
+
+Amin Bandali
+EmacsConf organization team
+
+P.S. Please keep emacsconf-submit@gnu.org in To or Cc when replying.
+
+
+<a id="acknowledge-submission"></a>
+
+## Thank speakers for submissions :email:
+
+
+<a id="orge92309b"></a>
+
+### Captions prepared
+
+Because you sent in your video early, we were able to caption it so
+that more people can find and enjoy your talk. I've attached the
+caption text file in case you want to review it, suggest any
+corrections, or use the text in a blog post or elsewhere. Thanks again
+for your contribution!
+
+
+<a id="org6bed7ae"></a>
+
+### Captions pending
+
+Just a quick note to let you know that I've downloaded your submission for "${title}".
+
+Now we have the following files starting with ${video-slug}:
+${details}
+
+A quick check shows that it's about ${video-duration} minutes long.
+
+We'll be working on captioning it over the next few weeks. We'll e-mail
+again a little closer to the conference with schedule updates and other
+useful information. If you want to upload a new version, you can upload
+it the same way you did the previous one.
+
+Please feel free to e-mail us at emacsconf-submit@gnu.org if you need
+help updating the talk wiki page at
+${url} or if you have other questions.
+
+Thank you so much for all the work you put into preparing a talk for
+EmacsConf ${conf-year}, and thank you for submitting the prerecorded video
+before the conference!
+
+
+<a id="tech-checks"></a>
+
+## Help speakers with tech checks
+
+- Explain process
+- Test audio, webcam, screensharing, collaborative pad
+ - Music demos and other things that use system audio will need to be prerecorded (or done through virtual loopback device, maybe? Technical risk.)
+ - Multi-monitor setups might not be handled well by BBB; share window instead of desktop
+- Check if comfortable checking into IRC: chat.emacsconf.org/?join=emacsconf,emacsconf-org
+- Get IRC nick, phone number for emergency contact, store in private wiki
+- Try to record name pronunciation
+- Encourage webcam for Q&A, although make it clear that it's totally optional
+- Possible picture-in-picture approach to maximize screen real estate
+
+
+<a id="follow-up-silence"></a>
+
+## Follow up with speakers we haven't heard from :email:
+
+I think we haven't heard from you since we accepted your EmacsConf 2021
+proposal for "${title}" in early October.
+EmacsConf is in less than two weeks, so I wanted to check in with you to
+see how you're doing.
+
+Could you please e-mail us to let us know if you're still working on
+your prerecorded video, if you're planning to present live, or if you
+can't make it this year? I know it's a strange time for everyone, so
+no worries if other priorities have come up and you don't have the
+time for a presentation.
+
+If you've been having technical issues recording your presentation on
+your computer, one of our volunteers could set up a BigBlueButton web
+conference with you to record the presentation. You can find a list of
+volunteers and their availability at
+<https://emacsconf.org/2021/prepare/#tech-check> . It takes a little time
+to get the recording out of BBB, so please plan to record your
+presentation before Tuesday, November 23.
+
+If you plan to present live, please go through the self-check at
+<https://test.bigbluebutton.org/> . Some speakers have encountered
+technical issues with BigBlueButton that they didn't have with Zoom or
+Google Meet, so this is something we definitely want to look into
+earlier rather than later. If that works for you, please e-mail us
+back so that I can keep your timeslot. The tentative schedule for your
+talk is on the talk page at ${url} .
+
+**Please e-mail us your plans before ${deadline}.** I'm
+planning to shift the schedule around to give more time to confirmed
+speakers for Q&A and possibly live demos. If I don't hear from you by
+then (maybe an over-enthusiastic spam filter has been swallowing up
+all our mail?), I'll probably reallocate the 10 minutes that had
+been set aside for your talk. We might be able to squeeze it back in
+afterwards or play a video from you at the end of the conference day,
+but it would be nice to get the schedule sorted out instead of
+scrambling to fill gaps on the day of the conference.
+
+Hope to hear from you by ${deadline}!
+
+Sacha Chua
+
+(Please use Reply to All to keep emacsconf-submit@gnu.org in the loop. Thanks!)
+
+
+<a id="check-in-instructions"></a>
+
+## Send check-in instructions :email:
+
+
+<a id="org4fa4a70"></a>
+
+### Unknown Q&A preference
+
+We're looking forward to having you join us at EmacsConf if you can! I
+don't seem to have your Q&A preference in my notes, but if you can
+join us at EmacsConf for questions and answers over video, IRC, or
+Etherpad, that would be great. If not, that's cool, we can collect the
+questions and forward them to you after the conference.
+
+If you want to join us, you can get a rough idea of when your talk is
+scheduled at ${url} . We'll probably keep
+updating the schedule even on the day of the conference. You might want
+to check it some time next week to get a rough sense of where it is, and
+then check it again on the day of your talk.
+
+Please check in at least 30 minutes before the scheduled start of your
+prerecorded talk so that we can deal with small scheduling changes or
+technical issues. You can find the check-in process at
+<https://emacsconf.org/2021/speakers/> .
+
+If something comes up, please let us know as soon as you can. Here's
+our emergency contact information:
+
+${emergency-contact-info}
+
+Hope to see you soon if you can join us!
+
+Sacha
+
+
+<a id="org55b075e"></a>
+
+### Speakers will handle Q&A live
+
+We're looking forward to having you join us for questions and answers at
+EmacsConf!
+
+We'll probably keep updating the schedule even on the day of the
+conference. You can get a rough idea of when your talk is scheduled at
+${url} . You might want to check it some time next week to get a rough
+sense of where it is, and then check it again on the day of your talk.
+
+Please check in at least 30 minutes before the scheduled start of your
+prerecorded talk so that we can deal with small scheduling changes or
+technical issues. You can find the check-in process at
+<https://emacsconf.org/2021/speakers/> .
+
+If something comes up, please let us know as soon as you can. Here's
+our emergency contact information:
+
+${emergency-contact-info}
+
+Looking forward to seeing you soon!
+
+
+<a id="org544baed"></a>
+
+### Speakers will handle questions after the event
+
+Thank you so much for contributing a talk for EmacsConf 2021! We're
+looking forward to collecting questions and forwarding them to you by
+e-mail after the conference. We'll also post the prerecording at the
+time that it gets streamed, so people will be able to access it at
+${url} once it has gone live.
+
+If it turns out that you can make it to the conference after all, feel
+free to drop us a line at #emacsconf-org and we'll let people know
+you're around. You can find the check-in process at
+<https://emacsconf.org/2021/speakers/> .
+
+Thank you so much for being part of EmacsConf 2021!
+
+
+<a id="announce-schedule"></a>
+
+## Announce schedule and watching instructions :email:
+
+Sent Nov 20, 2021
+
+
+<a id="org41b2906"></a>
+
+### E-mail text
+
+Dear Emacsian friends,
+
+This is it, the final stretch until EmacsConf 2021, coming up on
+November 27 and 28 less than a week from now! A few weeks ago,
+we excitedly shared the EmacsConf 201 program with you. We're now
+happy to share the conference schedule with you, i.e. the program
+plus each talk's (approximate) scheduled time slot:
+
+<https://emacsconf.org/2021/schedule>
+
+All of the times listed on the schedule are in EST (UTC-5). You can
+click on each talk's title to open its page for more information,
+including its scheduled time in your local time (displaying local time
+requires running a tiny bit of AGPLv3+-licensed free/libre JavaScript
+code, included on the talk pages). For prerecorded talks, this time
+is also when the talk's video will be made available on the same page.
+Please note the '~' tildes near the times, indicating that they are
+approximations and not meant to be taken as exact times.
+
+On November 27 and 28 you will be able to watch the livestreams via
+<https://live.emacsconf.org>, which also has details on how to watch the
+streams using media players that support streaming (like mpv and VLC).
+Also, for Asia-Pacific folks, there will be an alternate stream by
+LibreAustralia, at 11:00-17:30 UTC+11 on Sunday, November 28. Please
+see the <https://libreau.org/upcoming.html#emacsconf21> page on their
+site for more details and how to tune into the alternate stream.
+
+Last but not least, please see the <https://emacsconf.org/2021> page
+of the EmacsConf wiki for more details on watching and participating
+in the conference.
+
+We hope to see you all around on November 27-28 for EmacsConf 2021!
+
+Amin Bandali, Leo Vivier, and Sacha Chua,
+On behalf of the EmacsConf 2021 organizers team
+
+
+<a id="follow-up-prerecs"></a>
+
+## Follow up regarding prerecorded videos :email:
+
+EmacsConf is in a few days and I don't think we have your prerecorded
+video yet, so I'm getting miiiildly stressed about the schedule. And
+you're probably stressing out about it too, so let's go figure out how
+we can make this work.
+
+Option A: If you happen to have the prerecording or can get it done by
+tomorrow, we can probably squeeze it in. Please upload it to
+ftp-upload.emacsconf.org by following the instructions in
+<https://emacsconf.org/2021/prepare#ftp-upload> , or send us a link using
+your favourite file-sharing service (especially if FTP is giving you
+problems).
+
+Option B: If you want to present live, it might be an option. I'm a little
+worried about the potential for technical issues, since we've had
+problems with that in previous EmacsConfs. The tight schedule means
+there's not a lot of time to figure things out, and it can be hard to
+make something as focused as a prerecorded video when you're doing it
+live. We will definitely want to make sure that:
+
+- your self-serve tech check works: <https://test.bigbluebutton.org>
+ at your convenience;
+- we have your emergency contact information in case of frozen
+ Internet connection, etc. Please e-mail us the phone number we can
+ use to call you. We promise to use it only for EmacsConf 2021
+ emergency coordination; and
+- you check in as early as possible (at least 1 hour before, so we
+ know if the speaker before you needs to extend) and let us know
+ that you want to do it live <https://emacsconf.org/2021/speakers> .
+ We keep adapting the schedule as things come up, so please check
+ <https://emacsconf.org/2021/schedule/> on the day of the conference.
+
+If there are technical issues or your talk runs a little over time, we
+might have to stop streaming it on the main stream when it's time for
+the next talk. We may be able to continue streaming it on the
+alternate stream. If so, people can continue watching it there if they
+wish to.
+
+Option C: If you can't make it, that's okay. Life gets crazy
+sometimes. Please let us know and we can update the wiki. If you
+happen to be able to make a prerecorded video afterwards, we can add
+that to the wiki, playlists, and announcements. We hope you can join
+us next year.
+
+Since EmacsConf is **this weekend** (aaaaaaah), please let us know by
+tomorrow noon EST (Friday; 9AM PST, 5PM GMT, 6PM CET) so that we can
+keep the time allocated for you in the schedule. If we don't hear from
+you, we'll probably reallocate the ${duration} minutes reserved for you so
+that other talks can have longer Q&A. If you can still make it, check
+in early and let us know so that we can try to work out an alternate
+stream for you. Hope to hear from you soon!
+
+Sacha
+
+
+<a id="go-live-maybe"></a>
+
+## Offer speakers the opportunity to go live if they really really want to :email:
+
+Sent November 25
+
+
+<a id="orgb88fbb1"></a>
+
+### Email text
+
+Thank you so much for sending in your prerecording. We were able to
+caption most of the talks, yay! That will help more people appreciate
+the talks, and it'll make it easier for people to look up technical
+terms too. The talks will be streamed with open captions, and the talk
+pages will have the videos with closed captions when they're streamed.
+
+We're still adapting the schedule as stuff comes up, so please check
+the schedule again on the day of the conference and check in as early
+as you can. (Check-in instructions: <https://emacsconf.org/2021/speakers>)
+
+&#x2014; Presenting live? &#x2014;
+
+If you really, really, really want to present live, we can keep the
+prerecorded talk as a backup plan. I'm a little worried about the
+potential for technical issues, since we've had problems with that in
+previous EmacsConfs. The tight schedule means there's not a lot of
+time to figure things out, and it can be hard to make something as
+focused as a prerecorded video when you're doing it live. If you want
+to present live, we will definitely want to make sure that:
+
+- your self-serve tech check works: <https://test.bigbluebutton.org>
+ at your convenience;
+- we have your emergency contact information in case of frozen
+ Internet connection, etc. Please e-mail us the phone number we can
+ use to call you. We promise to use it only for EmacsConf 2021
+ emergency coordination; and
+- you check in as early as possible (at least 30 minutes before) and
+ let us know that you want to do it live
+ <https://emacsconf.org/2021/speakers>
+
+Going with the prerecorded video is probably the least-stress option
+for everyone, but we wanted to offer you the option to go live just in case.
+
+Looking forward to seeing you soon!
+
+
+<a id="orgbe5dce0"></a>
+
+## Compress video
+
+Usage: `compress-video.sh original-file output-file`:
+
+ Q=32
+ ffmpeg -y -i "$1" -c:v libvpx-vp9 -b:v 0 -crf $Q -aq-mode 2 -an -tile-columns 0 -tile-rows 0 -frame-parallel 0 -cpu-used 8 -auto-alt-ref 1 -lag-in-frames 25 -g 240 -pass 1 -f webm -threads 8 /dev/null &&
+ ffmpeg -y -i "$1" -c:v libvpx-vp9 -b:v 0 -crf $Q -c:a copy -tile-columns 2 -tile-rows 2 -frame-parallel 0 -cpu-used -5 -auto-alt-ref 1 -lag-in-frames 25 -pass 2 -g 240 -threads 8 "$2"
+
+We tried using q56 before, but it was a little too aggressive. Q=32 is the default and is probably a reasonable space vs. quality compromise.
+
+
+<a id="sound"></a>
+
+## Experiment with setup to allow MPV / BBB sound isolation
+
+Set MIC and OUTPUT appropriately.
+
+ MIC=alsa_input.usb-046d_0819_A68D6BE0-02.mono-fallback
+ OUTPUT=alsa_output.pci-0000_00_1b.0.analog-stereo
+ if [ "$1" == "-u" ]; then
+ pactl unload-module module-loopback
+ pactl unload-module module-null-sink
+ else
+ pacmd load-module module-null-sink sink_name=recording sink_properties=device.description=recording channels=2
+ pacmd load-module module-null-sink sink_name=mpv sink_properties=device.description=mpv
+ pacmd load-module module-loopback source=$MIC sink=recording
+ pacmd load-module module-loopback source=mpv.monitor sink=recording
+ pacmd load-module module-loopback source=recording.monitor sink=$OUTPUT
+ fi
+
+You can probably then use `pavucontrol` (choose All Streams instead of
+Applications on the Playback tab) or something like the following to
+redirect the mpv output to the mpv sink.
+
+ pacmd list-sink-inputs # notice the ID for the process you want to redirect
+ pacmd move-sink-input 1 mpv
+
+
+<a id="orgde63d42"></a>
+
+## Check for video encoding issues
+
+Sometimes the compression may get cut off. You can use
+`compile-media-verify-video-frames` from
+<https://github.com/sachac/compile-media> to check that videos have
+enough frames for their expected duration
+
diff --git a/2021/playbook.org b/2021/playbook.org
new file mode 100644
index 00000000..fe9968d1
--- /dev/null
+++ b/2021/playbook.org
@@ -0,0 +1,1194 @@
+#+PROPERTY: header-args:emacs-lisp :tangle playbook/emacsconf-playbook.el :eval no
+#+OPTIONS: toc:4
+#+begin_export md
+<!-- This file was automatically generated from playbook.org. Instead of editing the .md, please edit the .org and republish. Thanks! -->
+#+end_export
+
+* Commands :noexport:
+
+- [[elisp:(progn (org-md-export-to-markdown) (org-babel-tangle))][Export and tangle]]
+
+* Roles/values
+:PROPERTIES:
+:CUSTOM_ID: roles
+:END:
+
+| B | | bandali |
+| CHECK | check-ins | sachac |
+| HOST | hosting, streaming, intros, reading, moving questions/answers around | zaeph |
+
+| ${protected} | [[/ssh:front:/var/www/media.emacsconf.org/2021/protected/]] |
+| ${stream-status} | [[/ssh:front:/var/www/live.emacsconf.org/index.html]] |
+| ${upcoming} | upcoming.org shared over CRDT |
+| ${conf} | conf.org shared over CRDT |
+| ${playbook} | playbook.org shared over CRDT |
+| ${dump} | [[/ssh:live:/data/]] |
+| ${media} | [[/ssh:front:/var/www/media.emacsconf.org/2021/]] |
+| ${live-main} | [[/ssh:front:/var/www/live.emacsconf.org/main.html]] |
+| ${live-480p} | [[/ssh:front:/var/www/live.emacsconf.org/main-480p.html]] |
+| ${live-index} | [[/ssh:front:/var/www/live.emacsconf.org/index.html]] |
+| ${live-alt} | [[/ssh:front:/var/www/live.emacsconf.org/alt.html]] |
+| ${profile} | [[/ssh:live:~/.profile]] |
+| ${emacsconf-el} | https://git.emacsconf.org/emacsconf-el/ |
+| | |
+* After the conference
+** Update captions
+
+- Merge them into the video with =add-captions.sh=
+ #+begin_src sh :eval no
+ #!/usr/bin/zsh
+ BASE="${1%.*}"
+ BASE="${BASE%--main}"
+ ffmpeg -y -i "$1" ${BASE}--main.vtt
+ if [ -f "${BASE}--normalized.webm" ]; then
+ ffmpeg -y -i "$1" -i "${BASE}--normalized.webm" -c:a copy -c:v copy "${BASE}--captioned.webm"
+ else
+ ffmpeg -y -i "$1" -i "${BASE}--compressed.webm" -c:a copy -c:v copy "${BASE}--captioned.webm"
+ fi
+ cp ${BASE}--main.vtt ${BASE}--chapters.vtt ~/vendor/emacsconf-wiki/2021/captions
+ scp "${BASE}--captioned.webm" "${BASE}--main.webm"
+ scp "${BASE}--main.webm" front:~/protected
+ scp "${BASE}--main.vtt" front:~/protected
+ scp "${BASE}--chapters.vtt" front:~/protected
+ ssh front 'cd protected; chmod ugo+r *'
+ #+end_src
+- Update Toobnix and Youtube captions with =conf-video-share=.
+- Update Toobnix and Youtube descriptions with chapters.
+- Update ${conf-year}/${captions}/${slug}.md in the wiki. To make this from scratch, use =M-x conf-prepare-transcript-directives= from the talk heading in the conference Org file.
+** Update
+** Send thanks :email:
+:PROPERTIES:
+:CUSTOM_ID: thanks
+:END:
+
+Thank you so much for being part of EmacsConf ${conf-year}! Hundreds of people
+enjoyed it, and I'm sure even more will come across the videos in the
+days to follow.
+
+Your prerecorded video is available on the talk page at ${url} , and
+we've added the questions and comments that we've collected from
+IRC/BBB/Etherpad. The recording of your Q&A session is also on the
+talk page.
+
+We've also uploaded your talk video to ToobNix (a PeerTube instance)
+at ${toobnix-url} and YouTube at ${youtube-url} . If you
+want to reupload the video to your own channel, feel free to do
+so. You can add the subtitles by downloading them from the talk page
+and uploading them to your video. If you let me know where you've
+uploaded it, I can switch our playlist to include your version of the
+video instead. That way, it might be easier for you to respond to
+questions on videos. (Which some people have already been adding,
+yay!)
+
+If you would like to share more resources, you can add them to the
+talk page or e-mail them to us and we can add them for you.
+
+Thanks again for speaking at EmacsConf!
+
+* Thursday or Friday before the conference
+:PROPERTIES:
+:CUSTOM_ID: days-before
+:END:
+
+- STREAM: Download prerecorded videos from ${protected}
+ #+begin_src sh :eval no
+ rsync -avzue ssh front:/var/www/media.emacsconf.org/2021/protected/*--main.webm .
+ #+end_src
+* On the day of the conference
+:PROPERTIES:
+:CUSTOM_ID: day-of
+:END:
+** Set up
+:PROPERTIES:
+:CUSTOM_ID: setup
+:END:
+*** Arrange screens
+:PROPERTIES:
+:CUSTOM_ID: screens
+:END:
+
+- CHECK:
+ - Share ${upcoming}, ${playbook}, and ${conf} via CRDT: =conf-crdt-connect-and-share=
+ - Current schedule, filenames/commands for playing, Q&A preference, IRC nick, pronunciation, intro notes, prerec duration, emergency contact information
+ - =conf-upcoming-add-subtree=
+ - Have #emacsconf-org, #emacsconf, #emacsconf-accessible, and #emacsconf-questions open
+ - Use =/opall= to get op privileges in all the channels
+ - Start backup process for pad
+ #+begin_src sh :eval no :tangle playbook/backup-pad.sh
+ while true; do
+ curl https://etherpad.wikimedia.org/p/emacsconf-2021/export/html > emacsconf-$(date +"%Y%m%d-%H%M%S").html
+ sleep 15m
+ done
+ #+end_src
+ - Computer for alternate streaming:
+ - Open browser for joining BBB
+ - Open MPV for playing http://live0.emacsconf.org:8000/main.webm
+- HOST:
+ - rsync the newest --main.webm from front: rsync -avze ssh front:/var/www/media.emacsconf.org/2021/protected/*--main.webm .
+ - Check OBS scenes for sharing windows/tabs as a virtual camera:
+ - chat.emacsconf.org with #emacsconf
+ - Etherpad
+ - Schedule
+ - next talk page
+ - Clock with current time on screen: =watch TZ=America/Toronto date=
+ - Set up backchannel for easy viewing
+ - ${upcoming}
+ - #emacsconf-org and #emacsconf channels
+ - (?) Join organizer room S
+
+*** Start streaming :stream:
+:PROPERTIES:
+:CUSTOM_ID: start-streaming
+:END:
+
+- HOST: Display getting-ready message and start streaming to main.webm
+- HOST: Confirm that the stream is live at https://live.emacsconf.org/main.webm
+- B: Update ${status} to say that the stream is live
+- CHECK: Start low-resolution stream, confirm at https://live.emacsconf.org/main-480p.webm
+ Call this on live0 with $CONF480PASS as the first parameter. The Icecast configuration is on =live0= at [[file:/ssh:live|sudo:/etc/icecast2/icecast.xml]]=.
+ #+begin_src sh :eval no :tangle "playbook/restream-lowres.sh"
+ PASS=$1
+ while true; do ffmpeg -loglevel 24 -f webm -reconnect_at_eof 1 -reconnect_streamed 1 -re -i http://localhost:8000/main.webm -vf scale=854:480 -f webm -c:a copy -b:v 500k -maxrate 1M -bufsize 1M -content_type video/webm -c:v libvpx icecast://ec2020main480pmu:$PASS@localhost:8000/main-480p.webm; done
+ #+end_src
+- CHECK: Start Youtube and Toobnix streams. Call this with $YOUTUBE1PASS, $YOUTUBE2PASS, or $TOOBNIX as the parameter
+ #+begin_src sh :eval no :tangle "playbook/restream-flv.sh"
+ MOUNT=$1
+ while true; do ffmpeg -loglevel 24 -i http://localhost:8000/main.webm -cluster_size_limit 2M -cluster_time_limit 5100 -b:v 1M -crf 30 -g 125 -deadline good -threads 4 -vcodec libx264 -acodec libmp3lame -f flv $MOUNT; done
+ #+end_src
+- CHECK: Verify YouTube and Toobnix streams and the CPU load on live0.
+- CHECK: Set the YouTube and Toobnix streams to public.
+- B: Verify with #emacsconf that the stream is active.
+- CHECK: Play main stream on alternate laptop. Start alternate stream and verify. Update ${status}.
+- CHECK: Announce on Twitter (@emacs, @emacsconf, @sachac) and in #emacs
+ EmacsConf 2021 starting now: https://emacsconf.org/2021/
+
+** Talk process
+:PROPERTIES:
+:CUSTOM_ID: talk
+:END:
+*** Check in a speaker
+:PROPERTIES:
+:CUSTOM_ID: check-in
+:END:
+
+Exception: [[*CHECK is unavailable][CHECK is unavailable]]
+
+- Speaker checks in on #emacsconf-org via IRC or via e-mail ~30m before
+- CHECK notes IRC nick for speaker.
+- CHECK confirms Q&A preference: live/IRC/Etherpad, preferred way of getting questions
+- [? unknown] Thanks for checking in! How would you like to handle Q&A
+ today - live video, the collaborative Etherpad at
+ https://etherpad.wikimedia.org/p/emacsconf-2021 , or IRC (like
+ this)?
+- [? IRC] Thanks for checking in! Feel free to keep an eye on
+ #emacsconf for questions and discussion, and we'll copy things from
+ the pad to there. If the volume gets overwhelming, let us know and
+ we can forward questions to #emacsconf-questions for you. If you'd
+ like to try Q&A over live video or the collaborative pad instead, or
+ if you need help, please let us know.
+- [? Etherpad] Thanks for checking in! The collaborative pad we'll be
+ using for questions is at
+ https://etherpad.wikimedia.org/p/emacsconf-2021 . We'll collect
+ questions from #emacsconf and put them there. If you'd like to jump
+ to your part of the document, you might be able to keep an eye on
+ questions. Please let us know if you need help, or if you want to
+ switch to live Q&A.
+- [? live] Thanks for checking in! I'll send you some private messages
+ with instructions, so please check there. Let me know if you don't
+ get them.
+ - Private messages:
+ - (erc-message "PRIVMSG" (format "%s You can use this BBB room: %s . I'll join you there shortly to set up the room and do the last-minute tech check." nick room-url))
+ - (erc-message "PRIVMSG" (format "%s The collaborative pad we'll be using for questions is at %s . We'll collect questions from #emacsconf and put them there. If you'd like to jump to your part of the document, you might be able to keep an eye on questions. Alternatively, we can read questions to you." nick conf-collaborative-pad))
+ - (erc-message "PRIVMSG" (format "%s Leo Vivier will join when it's time, and he will give you the go-ahead when it's time to present. See you in the BBB room!" nick))
+ - CHECK directs speaker to available room with =/checkin <room> <nick>=
+ - Speaker joins talk room
+ - CHECK makes speaker presenter and moderator, does last-minute tech check
+ - Hello, thanks
+ - Speaker tries screen sharing and webcam (optional)
+ - check screen readability
+ - CHECK briefs speaker on process, including:
+ - live Q&A: reading questions themselves (can do in any order,
+ can skip; coach possible responses for awkward things) or asking HOST to read questions to them
+ - HOST can share the pad or IRC; speaker shares screen only if doing demo
+ - encouragement of webcam, although it's optional
+ - how HOST will join shortly before the prerec ends and then
+ give them the go-ahead
+ - closing any tabs watching the stream as their talk starts
+ (otherwise the audio is confusing)
+ - If the speaker will be giving a live presentation, CHECK
+ collects emergency contact information (in case of technical
+ issues) and shares it with HOST in the CRDT buffer
+ - Okay to do other things until the prerec ends
+ - CHECK updates ${upcoming} with link to the talk room and
+ preferences for Q&A-. CHECK will also /msg the relevant
+ information.
+
+**** bandali's check-in steps
+
+- please leave webcam quality on 'medium'
+- please read each audience question out loud before responding
+- please mute stream on your machine if you're watching
+- would you like to stay around for a longer q&a?
+- would you like to share your webcam or screen? (quickly mention how)
+
+*** Present talk
+:PROPERTIES:
+:CUSTOM_ID: present
+:END:
+
+- CHECK announces the next talk on IRC and marks the previous talk as done. (=conf-announce=)
+- PAD clears pad colours.
+- [? prerec]
+ - HOST switches to MPV scene in OBS and plays the video (with captions if available).
+ - Exception: [[*Last-minute prerecording submission][Last-minute prerecording submission]]
+ - Exception: [[*Last-minute caption update][Last-minute caption update]]
+ - [[*Publish information][CHECK publishes information]]
+ - [[*Handle Q&A][HOST gets a head start on handling Q&A]]
+ - When prerec finishes, HOST switches the OBS scene to show BBB.
+- [? live]
+ - Exception: [[*Speaker does not have a prerec and has not checked in][Speaker does not have a prerec and has not checked in]]
+ - HOST joins the BBB room and double-checks that recording is on.
+ - CHECK-alternate joins the BBB room and pauses main MPV.
+ - HOST switches to OBS scene for BBB.
+ - Speaker presents.
+ - Exception: [[*Technical issues during a live presentation][Technical issues during a live presentation]]
+ - [? talk needs to be wrapped up]
+ - HOST nudges speaker verbally.
+
+*** Publish information
+:PROPERTIES:
+:CUSTOM_ID: publish
+:END:
+
+ - CHECK updates the schedule in:
+ - ${conf}
+ - ${upcoming}
+ - wiki
+ - CHECK publishes the video to media.emacsconf.org using =conf-publish-files=
+ - CHECK commits the wiki page and the captions for the talk.
+ - CHECK publishes the video on YouTube and ToobNix using =conf-video-share=.
+ - Update description:
+ #+begin_example
+This video is available under the terms of the
+Creative Commons Attribution-ShareAlike 4.0 International (CC
+BY-SA 4.0) license.
+
+You can view it using free and open source software at
+${url}
+
+${description}
+ #+end_example
+ - Mark it as public.
+ - Add it to EmacsConf 2021 playlist.
+ - Update title and description.
+ - Mark it as public.
+ - Doublecheck subtitles
+ - Add it to the EmacsConf 2021 playlist.
+ - [? live sections]
+ - CHECK does a rough-cut of the recording from ${dump} to get the last X minutes or by time range. There's about a 1-2 minute delay.
+ Ex: =(kill-new (conf-dump-get "alt" "10:24" "10:30" "qa_"))=
+ - When there's an opportunity to do so:
+ - CHECK finetunes the rough-cut recording (trim start and end) and posts it to:
+ - media.emacsconf.org/2021
+ - wiki page for talk
+
+*** Handle Q&A
+:PROPERTIES:
+:CUSTOM_ID: questions
+:END:
+
+Exceptions:
+- [[*Speaker has not checked in][Speaker has not checked in]]
+
+- [? live]
+ - CHECK-alternate joins the BBB room and pauses MPV.
+ - HOST joins the BBB room
+ - HOST starts recording in BBB or confirms that it's already recording
+ - HOST switches to the BBB scene in OBS.
+ - HOST describes how to ask questions.
+ - [? No questions yet]
+ - HOST thanks speaker, says nice things about talk, and asks a couple of prepared questions
+ - [? Awkward question]
+ - HOST can try rephrasing the question.
+ - HOST adds note to IRC/Etherpad that speakers can answer in any order, skip questions, answer afterwards, etc.
+ - [? Q&A needs to be wrapped up]
+ - HOST writes in Etherpad/IRC or nudges speaker verbally.
+ - CHECK notes the time that the live Q&A finished and switches back to the main stream on CHECK-alternate.
+- [? IRC/pad]
+ - HOST switches to pad/chat OBS scene.
+ - HOST describes Q&A method and shows it on the screen.
+ - While there's buffer time before the next talk, HOST can read out
+ questions and answers, or transition to the next talk early
+ - HOST: It's time for the next talk, but if you want to keep
+ discussing the previous talk, please feel free to continue doing
+ so on IRC or the pad.
+- [? speaker will answer after the conference]
+ - HOST switches to pad/chat OBS scene.
+ - HOST says the speaker is not available right now, but we'll
+ forward the questions to the speaker and we'll post the speaker's
+ answers on the wiki page. Leave your contact information if you
+ want to be notified, or subscribe to the emacsconf-discuss mailing
+ list to get the announcement. Please feel free to continue
+ discussing the talk on IRC or the pad.
+- [[*Present talk][Present next talk]]
+
+** Break time
+:PROPERTIES:
+:CUSTOM_ID: break
+:END:
+
+- CHECK marks the last talk as done. =conf-end-current-talk=
+- CHECK stops and restarts the Toobnix restreaming process, and re-checks the stream
+- CHECK uses =conf-upcoming-add-subtree= to add the afternoon talks to upcoming.org
+- HOST doublechecks network transfer limit and server health
+
+** End of stream
+:PROPERTIES:
+:CUSTOM_ID: end
+:END:
+
+- CHECK removes live Q&A links
+- CHECK stops ffmpeg process for Youtube
+- CHECK stops ffmpeg process for Toobnix
+- CHECK stops ffmpeg process for main-480p
+- STREAM stops streaming
+- B updates the status pages
+- bandali figures out the downstream
+
+** In case of...
+:PROPERTIES:
+:CUSTOM_ID: exceptions
+:END:
+*** Last-minute prerecording submission
+:PROPERTIES:
+:CUSTOM_ID: last-minute-prerec
+:END:
+
+- CHECK will copy it from the FTP upload server to ${protected} and name it appropriately.
+- CHECK will notify STREAM with the scp command and the mpv command so that STREAM can choose.
+
+*** Last-minute caption update
+:PROPERTIES:
+:CUSTOM_ID: last-minute-captions
+:END:
+
+- CHECK uploads the --main.vtt file to ${protected}
+- CHECK notifies STREAM via ${upcoming}
+- STREAM uses the provided commands to download the VTT file and load it into MPV with =--sub-file=
+
+*** Speaker has not checked in
+:PROPERTIES:
+:CUSTOM_ID: missing
+:END:
+- Let the previous talk run a little longer for Q&A; end at least in time for the prerec
+- After the previous Q&A wraps up, play the prerec
+- [? still not around after prerec finishes]
+ - HOST: Speaker might be having some difficulty connecting, but we'll collect your questions on the pad and send them afterwards.
+ - Can play next prerec a few minutes early
+*** Speaker does not have a prerec and has not checked in
+:PROPERTIES:
+:CUSTOM_ID: really-missing
+:END:
+- Let the previous talk do live Q&A/demo if ready
+- Close to the time of the missing talk:
+ - See if any of the previous speakers want to be set up for an impromptu talk/extension in a BBB room, just in case
+ - HOST: The next speaker might be having some difficulty connecting. In the meantime, let's...
+ - OR:
+ - highlight ongoing discussions
+ - invite another speaker for an impromptu extension; mplsCorwin will keep a list of possible speakers who are still active
+ - replay a short prerec
+ - let mplsCorwin or zaeph fill in
+*** Speaker whose talk was reallocated shows up and has a prerec
+:PROPERTIES:
+:CUSTOM_ID: reallocated-prerec
+:END:
+- CHECK copies it to ${protected}
+- Plan to play prerec at the end of the day, or in any gaps if a live talk falls through
+*** Speaker whose talk was reallocated shows up and wants to do it live
+:PROPERTIES:
+:CUSTOM_ID: reallocated-live
+:END:
+- See if there's enough time if buffers are shuffled back; if so, set up for a live presentation
+- Check for alternate stream volunteers
+- [? not enough time] Offer to set up a BBB room for recording or to
+ accept a prerecording afterwards, then include it on the site and in
+ post-conference communication
+*** Alternate stream volunteer wants to stream (nice to have, at risk)
+:PROPERTIES:
+:CUSTOM_ID: alternate
+:END:
+- CHECK gives ALTERNATE the BBB room URL for the talk they are interested in
+- ALTERNATE starts streaming to assigned end point
+- CHECK confirms stream
+- CHECK updates ${stream-status}
+- CHECK notifies STREAM and HOST
+ - After prerec plays:
+ - HOST: This talk has an extended demo/Q&A. You can go to ${alternate-url} to watch it, and we'll post a recording afterwards.
+ - HOST sends ${alternate-url} to IRC: Alternate stream for ${title}: ${alternate-url}
+- ALTERNATE notifies #emacsconf-org when the stream is done.
+- CHECK updates ${stream-status} to note that the alternate stream is finished.
+
+ FFMPEG process for sending the desktop and audio to the $CONFALT mountpoint on Linux with X11 and Alsa:
+
+ 1. Set the CONFALT environment variable to icecast://user:password@live0.emacsconf.org:8000/alt.webm
+ 2. Install pavucontrol if you don't have it already.
+ 3. Start the following command ([[file:playbook/stream-desktop-and-audio.sh]]:
+ #+begin_src sh :eval no :tangle playbook/stream-desktop-and-audio.sh
+ while true; do ffmpeg -loglevel 0 -ar 48000 -f alsa -channels 2 -sample_rate 48000 -i default -re -video_size 1280x720 -framerate 25 -f x11grab -i :0.0 -cluster_size_limit 2M -cluster_time_limit 5100 -content_type video/webm -c:v libvpx -b:v 1M -crf 30 -g 125 -deadline good -threads 4 -f webm $CONFALT; done
+ #+end_src
+ 4. Use pavucontrol to set the recording source for the ffmpeg
+ command to be the audio monitor, so you get system output as
+ well.
+ - OR:
+ - [? splitting audio] [[#sound][Set up sinks for sound]]
+ - [? same audio]
+ - Set up audio monitor as the input for FFMPEG
+ - MPV goes to MPV sink, browser goes to recording sink, FFMPEG takes in recording monitor
+
+*** Pad malfunction or mess-up
+:PROPERTIES:
+:CUSTOM_ID: pad-broken
+:END:
+
+- PAD resets the pad using https://etherpad.wikimedia.org/p/emacsconf-2021/timeslider
+- [? still not recovered]
+ - PAD reimports the pad from backup
+
+*** CRDT malfunctions
+:PROPERTIES:
+:CUSTOM_ID: crdt-broken
+:END:
+
+- HOST notifies CHECK and tries reconnecting
+- [? still doesn't work]
+ - Switch to backup Etherpad
+
+*** Conduct guidelines issue
+:PROPERTIES:
+:CUSTOM_ID: conduct
+:END:
+
+- HOST addresses it (on-camera if needed) with a reminder and/or a kick or a ban
+
+*** CHECK is unavailable
+:PROPERTIES:
+:CUSTOM_ID: check-gone
+:END:
+
+- HOST does check-ins
+- HOST refers to conf.org for Q&A preference etc.
+- STREAM checks conf.org for prerec filenames etc.
+- Dropped goals:
+ - Publishing recordings ASAP
+ - Updating schedule/wiki on the fly
+
+*** HOST is unavailable
+:PROPERTIES:
+:CUSTOM_ID: host-gone
+:END:
+
+- STREAM joins the BBB room and streams directly from there (or streams the prerecs).
+- STREAM will do the hosting.
+
+*** Technical issues during a live presentation
+:PROPERTIES:
+:CUSTOM_ID: live-issues
+:END:
+
+- HOST tries to contact the speaker
+- [? back on track]
+ - [? can be squeezed into remaining time]: Continue
+ - [? need extra time]: CHECK fiddles with buffer of following talks in conf.org and updates schedule
+ - [? need too much extra time (ex: 10min)]: HOST acknowledges
+ technical issues and says we may be able to follow up after the
+ conference
+- [? can't resume]: HOST acknowledges technical issues and says we may
+ be able to follow up after the conference
+
+*** Big technical issues with streaming
+:PROPERTIES:
+:CUSTOM_ID: stream-issues
+:END:
+
+- HOST notifies #emacsconf and #emacsconf-org and adds a note at the top of the ${pad}.
+- HOST updates the 2021.md wiki page
+- CHECK publishes prerecordings
+ - media.emacsconf.org
+ - wiki
+ - Toobnix
+ - Peertube
+- STREAM e-mails the mailing list
+
+*** live0 can't handle the load or is close to network transfer limit
+:PROPERTIES:
+:CUSTOM_ID: network
+:END:
+
+- OR:
+ - Redirect some viewers via asking in #emacsconf:
+ - watch via main-480p
+ - watch via Toobnix (if we can get that working)
+ - Consider dropping the restream to Toobnix (lower audience?) or to Youtube
+ - Add additional node to Linode account for shared transfer pool (TODO: doublecheck)
+
+* Before the conference
+:PROPERTIES:
+:CUSTOM_ID: before
+:END:
+** Send calls for proposals
+:PROPERTIES:
+:CUSTOM_ID: cfp-mails
+:END:
+*** [ANN] EmacsConf 2021 Call for Proposals :email:
+:PROPERTIES:
+:CUSTOM_ID: first-cfp
+:END:
+Sent on August 5, 2021 to emacsconf-discuss, emacs-devel, emacs-orgmode, emacs-tangents, Cc: emacsconf-org.
+Included inline Markdown and attached Org version of the CFP
+
+**** E-mail text
+:PROPERTIES:
+:SUBJECT: [ANN] EmacsConf 2021 Call for Proposals
+:END:
+
+#+begin_src org
+#+title: EmacsConf 2021
+#+subtitle: Online Conference
+#+date: November 27 and 28, 2021
+#+options: author:nil
+
+[[https://emacsconf.org/2021/][EmacsConf 2021]] will be a virtual conference on *November 27 and 28,
+2021 (Sat-Sun)*. If you'd like to present at the conference, please
+[[https://emacsconf.org/2021/cfp/][submit your proposal]] by *September 30, 2021*.
+
+EmacsConf 2021 is about the joy of [[https://www.gnu.org/software/emacs/][Emacs]] and Emacs Lisp. Come share
+your experiments and adventures with the Emacs text editor / operating
+system / way of life! We welcome speakers of *all backgrounds* and
+*all levels of experience*, including newcomers giving their first
+talk. What have you found exciting about Emacs lately? What do you
+wish someone had told you when you were starting out? What part of
+your workflow might inspire someone to get into Emacs or go deeper?
+
+A great way to get started with writing a proposal is to start by
+exploring the programs from previous years: [[https://emacsconf.org/2020/schedule/][2020]], [[https://emacsconf.org/2019/schedule/][2019]], [[https://emacsconf.org/2015/schedule/][2015]], [[https://emacsconf.org/2013/#program][2013]].
+You might also find some neat ideas on the [[https://emacsconf.org/2021/ideas/][ideas]] page. Feel free to
+add yours there too! If you're still not sure, come by our IRC
+channel =#emacsconf= on =irc.libera.chat= and say hi. You can join
+the chat using [[ircs://irc.libera.chat:6697/emacsconf][your favourite IRC client]], or by visiting
+[[https://chat.emacsconf.org][chat.emacsconf.org]] in your web browser.
+
+All kinds of people use Emacs for all kinds of things. We'd love it
+if EmacsConf 2021 could highlight interesting perspectives and reflect
+the diversity of our community. If you know someone who might have a
+good idea for a talk, please reach out to them and encourage them to
+submit a proposal. Many people (especially from underrepresented
+groups such as women, people of colour, non-developers, etc.) might
+not consider themselves expert enough to share their thoughts. If you
+let them know that you value their knowledge and maybe even suggest
+something that you think others would like to hear more about, they
+may realize that they have something worth sharing and that we would
+love to hear from them.
+
+,* Important dates
+
+For EmacsConf 2021, we are planning for 9am to 5pm Toronto/EST
+(2pm-10pm UTC) on November 27 and 28. Depending on people's
+availability, it might be two half-days.
+
+| CFP opens | August 5, 2021 |
+| CFP closes | September 30, 2021 |
+| Speaker notifications | October 15, 2021 |
+| Schedule published | October 31, 2021 |
+| EmacsConf 2021! | November 27 and 28, 2021 |
+
+If you are not available during the conference itself but you have a
+neat idea that you'd like to share, please propose it anyway! You can
+always handle questions after the conference, and we might even be
+able to coordinate with other Emacs meetups for regional events (if
+you're an Emacs meetup organizer and would like to make this happen
+let's [[https://emacsconf.org/contact/][get in touch]]!).
+
+Please note that although we will try our best to stick to the above
+dates in the coming months, given the current state of the world, we
+may have to move things around a bit in case of unforeseen events.
+Thank you for your patience and understanding.
+
+,* Talk formats
+
+We'd like EmacsConf 2021 to inspire lots of different people to
+explore lots of different things in Emacs. We hope to put together a
+stream of quick ideas followed by lots of conversation over IRC and/or
+Q&A sessions, with occasional deep dives into topics that many people
+might find interesting or useful.
+
+As you think about your talk, consider what you can share in:
+
+- *Up to 10 minutes total:* What is the core idea? What do you want
+ people to do or remember? You can show just enough to get people
+ interested and then point them to where they can learn more
+ afterwards. You can answer questions over IRC, the pad, or the
+ wiki, and there's no limit to how long that conversation can go.
+
+- *Up to 20 minutes total:* How would you flesh out some of the points
+ from your 5-10 minute presentation? How can you show the pieces
+ working together?
+
+- *Up to 40 minutes total:* What would benefit from a deep dive?
+ How do you keep it engaging?
+
+When writing your proposal, please write an outline of what you plan
+to talk about if you have 5-10 minutes. If you'd like to propose a
+longer talk, outline what you might include if you had more time to
+present (up to 40 minutes, including Q&A).
+
+Here's an example for a potentially 40-minute talk:
+
+- 5-10 minutes: quick demo of the abc package working together with
+ xyz package.
+- 20 minutes: same as above, with some customization options to
+ accommodate a different workflow.
+- 40 minutes: all of the above, including modifying the behaviour of
+ the package in order to add something new.
+
+This flexibility would help us in devising the conference schedule so
+that as many people as possible could get a chance to present their
+ideas, while still allowing for featuring longer deep dive talks.
+
+Other session formats such as tutorials, workshops, and hangouts are
+welcome as well, in case you would find those other formats preferable
+to a traditional talk format. If you're interested in these or other
+session types, please let us know [[https://lists.gnu.org/mailman/listinfo/emacsconf-org][publicly]] or [[https://lists.gnu.org/mailman/listinfo/emacsconf-org-private][privately]]. We'll be
+happy to work something out with you.
+
+,* Office hours
+
+We're aware that it can be intimidating to submit a proposal to a
+conference, so we thought we'd try to help! This year, we're opening
+up the doors of our virtual offices for you to come talk to us about
+your proposals with hopes of helping you with any hurdles you may be
+facing with preparing your proposal.
+
+We'd like to publish a schedule of availabilities of volunteers for
+holding office hours. Currently these volunteers consist of some of
+the EmacsConf organizers, but we'd love to have the help of other
+members of the Emacs community as well. If you are a more experienced
+Emacs user and would like to help with this, please [[https://emacsconf.org/contact/][get in touch]]!
+
+Our first office hour this year is planned for Saturday, August 14,
+from 3pm to 4pm UTC with zaeph (Leo Vivier) at the following
+BigBlueButton room: https://bbb.emacsverse.org/b/ban-qye-fd1-5kw.
+
+,* Submitting your proposal
+
+Once you're ready to submit your proposal, the [[https://emacsconf.org/2021/submit/][submit]] page has the
+instructions on how to submit your talk.
+
+We use an anonymized submission process to reduce bias and encourage
+contribution. Identifying information will be removed from
+submissions by a conference organizer who will not participate in
+talk selection. The anonymized submissions will then be reviewed by
+a selection committee.
+
+If your talk is approved, we'd love it if you could help us make sure
+the conference runs smoothly. After we email you with the time
+allotted for your talk, we'll ask you to
+
+- prepare a prerecording of your talk, or record it with our help if
+ that'd be easier for you; and
+- schedule a short tech-check if you'd like to be able to answer
+ questions in a live session.
+
+Don't forget to subscribe to our main mailing list, [[https://lists.gnu.org/mailman/listinfo/emacsconf-discuss][emacsconf-discuss]],
+for discussion and announcements about the EmacsConf conference.
+
+We look forward to your ideas and submissions!
+
+,* Getting involved
+
+If you would like to help with the conference (planning the sessions,
+reviewing proposals, helping with infrastructure, making sessions more
+accessible, editing video transcripts, etc.), see our [[https://emacsconf.org/2021/planning/][planning]] page
+and come say hi to us at =#emacsconf= on =irc.libera.chat=.
+
+In addition to the [[https://lists.gnu.org/mailman/listinfo/emacsconf-discuss][emacsconf-discuss]] list, feel free to subscribe to
+[[https://lists.gnu.org/mailman/listinfo/emacsconf-org][emacsconf-org]] as well, for discussions related to organizing the
+conference by the EmacsConf organizers and volunteers.
+
+We'd really appreciate your help in making EmacsConf 2021 the best one
+so far!
+
+,* Commitment to freedom
+
+We remain fully committed to freedom, and we will continue
+using our infrastructure and streaming setup consisting entirely
+of [[https://www.gnu.org/philosophy/free-sw.html][free software]], much like previous EmacsConf conferences.
+An article describing our infrastructure and tools is underway,
+and will be announced on the emacsconf-discuss list when published.
+
+
+,* COMMENT Copyright & License
+
+Copyright (c) 2020 Amin Bandali, Sacha Chua, David Bremner
+Copyright (c) 2021 Amin Bandali, Sacha Chua, Leo Vivier,
+Sebastian Crane
+
+The EmacsConf 2021 Call for Proposals is part of the EmacsConf wiki,
+and is dual-licensed under the terms of the Creative Commons
+Attribution-ShareAlike 4.0 International Public License; and the GNU
+General Public License as published by the Free Software Foundation,
+either version 3 of the License, or (at your option) any later
+version.
+
+A copy of these two licenses is available on the EmacsConf wiki, in
+the [[https://emacsconf.org/COPYING.CC-BY-SA][COPYING.CC-BY-SA]] and [[https://emacsconf.org/COPYING.GPL][COPYING.GPL]] files.
+
+,* COMMENT How to export this file
+
+As of the time of writing this document (Org mode version 9.3.7), the
+Org links library (=ol.el=) does not yet recognize =ircs= link types,
+and will throw an error if you try to export a file containing them,
+such as this file.
+
+To work around that, you can use something along the lines of the
+Emacs Lisp code below, by either adding it to your init file, or by
+putting the point in the code block and hitting =C-c C-v e= (that is,
+hold Ctrl, then hit c followed by v, then release Ctrl, and hit e) to
+evaluate the code, working around the issue only for the current
+session.
+
+,#+begin_src emacs-lisp :results silent
+(org-link-set-parameters
+ "ircs"
+ :export
+ (lambda (link description format)
+ "Export an ircs link.
+See `org-link-parameters' for details about LINK, DESCRIPTION and
+FORMAT."
+ (let ((desc (or description link)))
+ (pcase format
+ (`html (format "<a href=\"ircs:%s\">%s</a>" link desc))
+ (`md (format "[%s](ircs:%s)" desc link))
+ (_ nil)))))
+,#+end_src
+
+#+end_src
+*** Second (and final) call for proposals (closing Sep 30) :email:
+:PROPERTIES:
+:CUSTOM_ID: second-cfp
+:END:
+Sent Sept 27, 2021 to the same lists as the CFP
+Included inline Markdown and attached Org version of the CFP
+
+**** E-mail text
+:PROPERTIES:
+:SUBJECT: [ANN] EmacsConf 2021 Second (and final) Call for Proposals (closing Sep 30)
+:END:
+
+Dear fellow Emacsians,
+
+This is the second and final Call for Proposals for EmacsConf 2021,
+open until September 30. Please see below for details on how to send
+in your proposal(s), or chat about them with us in the #emacsconf IRC
+channel on Libera.Chat.
+
+If you're considering submitting a proposal but think the remaining
+time is not enough, please reach out to me off-list as soon as
+possible and I'd be happy to try and work something out with you.
+
+I'll close this portion of this email with a big thank you to all the
+folks who have submitted their talk proposal(s) or will be doing so.
+Myself and the other EmacsConf organizers look forward to reading over
+them and getting back to you about them and about the next steps. :)
+
+Best,
+amin
+
+P.S. please direct any replies to this post either to myself or to the
+emacsconf-discuss list, so as to help avoid generating extra off-topic
+chatter in the other lists cc'd in this message.
+
+P.P.S. as a volunteer-run conference, we are always looking for new
+fellow volunteers and/or organizers to help with various aspects of
+organizing and running the conference, including reviewing proposal
+submissions. If you're interested in getting involved, please come by
+our IRC channel or one of our public mailing lists (info below), or
+any of the current organizers directly and say hi. We look forward to
+hearing from you!
+** Accept talks :email:
+:PROPERTIES:
+:CUSTOM_ID: accept
+:END:
+*** E-mail text
+Dear ${name},
+
+We would love to have your talk "${title}" as part of EmacsConf
+${conf-year}, and we've allocated ${duration} minutes for
+it. ${time-note}
+
+Your talk is tentatively scheduled for ${schedule}. The times may
+move around a bit as we update the schedule, so we'll check in with
+you if things change a lot. We've scheduled a few minutes for live
+questions and answers via web conference. Will you be available
+around this time? If there are more questions, you can also continue
+over Etherpad/IRC.
+
+Please plan to prerecord your ${duration}-minute talk(s) by ${deadline}
+at the latest. If you can, please send it in as early as possible.
+Submitting your video early lets us ask volunteers to help caption the
+video, making your talk more accessible and searchable.
+
+Please see https://emacsconf.org/${conf-year}/prepare/ for tips and
+instructions on preparing, recording, and sending in your talk. If
+you have any questions or concerns, please let us know.
+
+Thanks,
+
+Amin Bandali
+EmacsConf organization team
+
+P.S. Please keep emacsconf-submit@gnu.org in To or Cc when replying.
+
+** Thank speakers for submissions :email:
+:PROPERTIES:
+:CUSTOM_ID: acknowledge-submission
+:END:
+*** Captions prepared
+Because you sent in your video early, we were able to caption it so
+that more people can find and enjoy your talk. I've attached the
+caption text file in case you want to review it, suggest any
+corrections, or use the text in a blog post or elsewhere. Thanks again
+for your contribution!
+*** Captions pending
+Just a quick note to let you know that I've downloaded your submission for "${title}".
+
+Now we have the following files starting with ${video-slug}:
+${details}
+
+A quick check shows that it's about ${video-duration} minutes long.
+
+We'll be working on captioning it over the next few weeks. We'll e-mail
+again a little closer to the conference with schedule updates and other
+useful information. If you want to upload a new version, you can upload
+it the same way you did the previous one.
+
+Please feel free to e-mail us at emacsconf-submit@gnu.org if you need
+help updating the talk wiki page at
+${url} or if you have other questions.
+
+Thank you so much for all the work you put into preparing a talk for
+EmacsConf ${conf-year}, and thank you for submitting the prerecorded video
+before the conference!
+** Help speakers with tech checks
+:PROPERTIES:
+:CUSTOM_ID: tech-checks
+:END:
+- Explain process
+- Test audio, webcam, screensharing, collaborative pad
+ - Music demos and other things that use system audio will need to be prerecorded (or done through virtual loopback device, maybe? Technical risk.)
+ - Multi-monitor setups might not be handled well by BBB; share window instead of desktop
+- Check if comfortable checking into IRC: chat.emacsconf.org/?join=emacsconf,emacsconf-org
+- Get IRC nick, phone number for emergency contact, store in private wiki
+- Try to record name pronunciation
+- Encourage webcam for Q&A, although make it clear that it's totally optional
+- Possible picture-in-picture approach to maximize screen real estate
+** Follow up with speakers we haven't heard from :email:
+:PROPERTIES:
+:CUSTOM_ID: follow-up-silence
+:END:
+
+I think we haven't heard from you since we accepted your EmacsConf 2021
+proposal for "${title}" in early October.
+EmacsConf is in less than two weeks, so I wanted to check in with you to
+see how you're doing.
+
+Could you please e-mail us to let us know if you're still working on
+your prerecorded video, if you're planning to present live, or if you
+can't make it this year? I know it's a strange time for everyone, so
+no worries if other priorities have come up and you don't have the
+time for a presentation.
+
+If you've been having technical issues recording your presentation on
+your computer, one of our volunteers could set up a BigBlueButton web
+conference with you to record the presentation. You can find a list of
+volunteers and their availability at
+https://emacsconf.org/2021/prepare/#tech-check . It takes a little time
+to get the recording out of BBB, so please plan to record your
+presentation before Tuesday, November 23.
+
+If you plan to present live, please go through the self-check at
+<https://test.bigbluebutton.org/> . Some speakers have encountered
+technical issues with BigBlueButton that they didn't have with Zoom or
+Google Meet, so this is something we definitely want to look into
+earlier rather than later. If that works for you, please e-mail us
+back so that I can keep your timeslot. The tentative schedule for your
+talk is on the talk page at ${url} .
+
+*Please e-mail us your plans before ${deadline}.* I'm
+planning to shift the schedule around to give more time to confirmed
+speakers for Q&A and possibly live demos. If I don't hear from you by
+then (maybe an over-enthusiastic spam filter has been swallowing up
+all our mail?), I'll probably reallocate the 10 minutes that had
+been set aside for your talk. We might be able to squeeze it back in
+afterwards or play a video from you at the end of the conference day,
+but it would be nice to get the schedule sorted out instead of
+scrambling to fill gaps on the day of the conference.
+
+Hope to hear from you by ${deadline}!
+
+Sacha Chua
+
+(Please use Reply to All to keep emacsconf-submit@gnu.org in the loop. Thanks!)
+** Send check-in instructions :email:
+:PROPERTIES:
+:CUSTOM_ID: check-in-instructions
+:END:
+*** Unknown Q&A preference
+We're looking forward to having you join us at EmacsConf if you can! I
+don't seem to have your Q&A preference in my notes, but if you can
+join us at EmacsConf for questions and answers over video, IRC, or
+Etherpad, that would be great. If not, that's cool, we can collect the
+questions and forward them to you after the conference.
+
+If you want to join us, you can get a rough idea of when your talk is
+scheduled at ${url} . We'll probably keep
+updating the schedule even on the day of the conference. You might want
+to check it some time next week to get a rough sense of where it is, and
+then check it again on the day of your talk.
+
+Please check in at least 30 minutes before the scheduled start of your
+prerecorded talk so that we can deal with small scheduling changes or
+technical issues. You can find the check-in process at
+https://emacsconf.org/2021/speakers/ .
+
+If something comes up, please let us know as soon as you can. Here's
+our emergency contact information:
+
+${emergency-contact-info}
+
+Hope to see you soon if you can join us!
+
+Sacha
+
+*** Speakers will handle Q&A live
+
+We're looking forward to having you join us for questions and answers at
+EmacsConf!
+
+We'll probably keep updating the schedule even on the day of the
+conference. You can get a rough idea of when your talk is scheduled at
+${url} . You might want to check it some time next week to get a rough
+sense of where it is, and then check it again on the day of your talk.
+
+Please check in at least 30 minutes before the scheduled start of your
+prerecorded talk so that we can deal with small scheduling changes or
+technical issues. You can find the check-in process at
+https://emacsconf.org/2021/speakers/ .
+
+If something comes up, please let us know as soon as you can. Here's
+our emergency contact information:
+
+${emergency-contact-info}
+
+Looking forward to seeing you soon!
+
+*** Speakers will handle questions after the event
+
+Thank you so much for contributing a talk for EmacsConf 2021! We're
+looking forward to collecting questions and forwarding them to you by
+e-mail after the conference. We'll also post the prerecording at the
+time that it gets streamed, so people will be able to access it at
+${url} once it has gone live.
+
+If it turns out that you can make it to the conference after all, feel
+free to drop us a line at #emacsconf-org and we'll let people know
+you're around. You can find the check-in process at
+https://emacsconf.org/2021/speakers/ .
+
+Thank you so much for being part of EmacsConf 2021!
+** Announce schedule and watching instructions :email:
+:PROPERTIES:
+:CUSTOM_ID: announce-schedule
+:END:
+Sent Nov 20, 2021
+
+*** E-mail text
+Dear Emacsian friends,
+
+This is it, the final stretch until EmacsConf 2021, coming up on
+November 27 and 28 less than a week from now! A few weeks ago,
+we excitedly shared the EmacsConf 201 program with you. We're now
+happy to share the conference schedule with you, i.e. the program
+plus each talk's (approximate) scheduled time slot:
+
+ https://emacsconf.org/2021/schedule
+
+All of the times listed on the schedule are in EST (UTC-5). You can
+click on each talk's title to open its page for more information,
+including its scheduled time in your local time (displaying local time
+requires running a tiny bit of AGPLv3+-licensed free/libre JavaScript
+code, included on the talk pages). For prerecorded talks, this time
+is also when the talk's video will be made available on the same page.
+Please note the '~' tildes near the times, indicating that they are
+approximations and not meant to be taken as exact times.
+
+On November 27 and 28 you will be able to watch the livestreams via
+https://live.emacsconf.org, which also has details on how to watch the
+streams using media players that support streaming (like mpv and VLC).
+Also, for Asia-Pacific folks, there will be an alternate stream by
+LibreAustralia, at 11:00-17:30 UTC+11 on Sunday, November 28. Please
+see the https://libreau.org/upcoming.html#emacsconf21 page on their
+site for more details and how to tune into the alternate stream.
+
+Last but not least, please see the https://emacsconf.org/2021 page
+of the EmacsConf wiki for more details on watching and participating
+in the conference.
+
+We hope to see you all around on November 27-28 for EmacsConf 2021!
+
+Amin Bandali, Leo Vivier, and Sacha Chua,
+On behalf of the EmacsConf 2021 organizers team
+** Follow up regarding prerecorded videos :email:
+:PROPERTIES:
+:SUBJECT: [need answer by Friday noon EST] EmacsConf 2021: Don't have a prerec from you yet, aaah!
+:CUSTOM_ID: follow-up-prerecs
+:END:
+
+EmacsConf is in a few days and I don't think we have your prerecorded
+video yet, so I'm getting miiiildly stressed about the schedule. And
+you're probably stressing out about it too, so let's go figure out how
+we can make this work.
+
+Option A: If you happen to have the prerecording or can get it done by
+tomorrow, we can probably squeeze it in. Please upload it to
+ftp-upload.emacsconf.org by following the instructions in
+https://emacsconf.org/2021/prepare#ftp-upload , or send us a link using
+your favourite file-sharing service (especially if FTP is giving you
+problems).
+
+Option B: If you want to present live, it might be an option. I'm a little
+worried about the potential for technical issues, since we've had
+problems with that in previous EmacsConfs. The tight schedule means
+there's not a lot of time to figure things out, and it can be hard to
+make something as focused as a prerecorded video when you're doing it
+live. We will definitely want to make sure that:
+ - your self-serve tech check works: https://test.bigbluebutton.org
+ at your convenience;
+ - we have your emergency contact information in case of frozen
+ Internet connection, etc. Please e-mail us the phone number we can
+ use to call you. We promise to use it only for EmacsConf 2021
+ emergency coordination; and
+ - you check in as early as possible (at least 1 hour before, so we
+ know if the speaker before you needs to extend) and let us know
+ that you want to do it live https://emacsconf.org/2021/speakers .
+ We keep adapting the schedule as things come up, so please check
+ https://emacsconf.org/2021/schedule/ on the day of the conference.
+
+If there are technical issues or your talk runs a little over time, we
+might have to stop streaming it on the main stream when it's time for
+the next talk. We may be able to continue streaming it on the
+alternate stream. If so, people can continue watching it there if they
+wish to.
+
+Option C: If you can't make it, that's okay. Life gets crazy
+sometimes. Please let us know and we can update the wiki. If you
+happen to be able to make a prerecorded video afterwards, we can add
+that to the wiki, playlists, and announcements. We hope you can join
+us next year.
+
+Since EmacsConf is *this weekend* (aaaaaaah), please let us know by
+tomorrow noon EST (Friday; 9AM PST, 5PM GMT, 6PM CET) so that we can
+keep the time allocated for you in the schedule. If we don't hear from
+you, we'll probably reallocate the ${duration} minutes reserved for you so
+that other talks can have longer Q&A. If you can still make it, check
+in early and let us know so that we can try to work out an alternate
+stream for you. Hope to hear from you soon!
+
+Sacha
+** Offer speakers the opportunity to go live if they really really want to :email:
+:PROPERTIES:
+:CUSTOM_ID: go-live-maybe
+:END:
+Sent November 25
+*** Email text
+Thank you so much for sending in your prerecording. We were able to
+caption most of the talks, yay! That will help more people appreciate
+the talks, and it'll make it easier for people to look up technical
+terms too. The talks will be streamed with open captions, and the talk
+pages will have the videos with closed captions when they're streamed.
+
+We're still adapting the schedule as stuff comes up, so please check
+the schedule again on the day of the conference and check in as early
+as you can. (Check-in instructions: https://emacsconf.org/2021/speakers)
+
+--- Presenting live? ---
+
+If you really, really, really want to present live, we can keep the
+prerecorded talk as a backup plan. I'm a little worried about the
+potential for technical issues, since we've had problems with that in
+previous EmacsConfs. The tight schedule means there's not a lot of
+time to figure things out, and it can be hard to make something as
+focused as a prerecorded video when you're doing it live. If you want
+to present live, we will definitely want to make sure that:
+ - your self-serve tech check works: https://test.bigbluebutton.org
+ at your convenience;
+ - we have your emergency contact information in case of frozen
+ Internet connection, etc. Please e-mail us the phone number we can
+ use to call you. We promise to use it only for EmacsConf 2021
+ emergency coordination; and
+ - you check in as early as possible (at least 30 minutes before) and
+ let us know that you want to do it live
+ https://emacsconf.org/2021/speakers
+Going with the prerecorded video is probably the least-stress option
+for everyone, but we wanted to offer you the option to go live just in case.
+
+Looking forward to seeing you soon!
+
+** Compress video
+
+Usage: =compress-video.sh original-file output-file=:
+
+#+begin_src sh :eval no :tangle compress-video.sh
+Q=32
+ffmpeg -y -i "$1" -c:v libvpx-vp9 -b:v 0 -crf $Q -aq-mode 2 -an -tile-columns 0 -tile-rows 0 -frame-parallel 0 -cpu-used 8 -auto-alt-ref 1 -lag-in-frames 25 -g 240 -pass 1 -f webm -threads 8 /dev/null &&
+ffmpeg -y -i "$1" -c:v libvpx-vp9 -b:v 0 -crf $Q -c:a copy -tile-columns 2 -tile-rows 2 -frame-parallel 0 -cpu-used -5 -auto-alt-ref 1 -lag-in-frames 25 -pass 2 -g 240 -threads 8 "$2"
+#+end_src
+
+We tried using q56 before, but it was a little too aggressive. Q=32 is the default and is probably a reasonable space vs. quality compromise.
+
+** Experiment with setup to allow MPV / BBB sound isolation
+:PROPERTIES:
+:CUSTOM_ID: sound
+:END:
+
+Set MIC and OUTPUT appropriately.
+
+#+begin_src sh :eval no
+MIC=alsa_input.usb-046d_0819_A68D6BE0-02.mono-fallback
+OUTPUT=alsa_output.pci-0000_00_1b.0.analog-stereo
+if [ "$1" == "-u" ]; then
+ pactl unload-module module-loopback
+ pactl unload-module module-null-sink
+else
+ pacmd load-module module-null-sink sink_name=recording sink_properties=device.description=recording channels=2
+ pacmd load-module module-null-sink sink_name=mpv sink_properties=device.description=mpv
+ pacmd load-module module-loopback source=$MIC sink=recording
+ pacmd load-module module-loopback source=mpv.monitor sink=recording
+ pacmd load-module module-loopback source=recording.monitor sink=$OUTPUT
+fi
+#+end_src
+
+You can probably then use =pavucontrol= (choose All Streams instead of
+Applications on the Playback tab) or something like the following to
+redirect the mpv output to the mpv sink.
+
+#+begin_src sh :eval no
+pacmd list-sink-inputs # notice the ID for the process you want to redirect
+pacmd move-sink-input 1 mpv
+#+end_src
+** Check for video encoding issues
+
+Sometimes the compression may get cut off. You can use
+=compile-media-verify-video-frames= from
+https://github.com/sachac/compile-media to check that videos have
+enough frames for their expected duration
+
diff --git a/2021/playbook/restream-flv.sh b/2021/playbook/restream-flv.sh
new file mode 100644
index 00000000..dc632762
--- /dev/null
+++ b/2021/playbook/restream-flv.sh
@@ -0,0 +1,2 @@
+ MOUNT=$1
+ while true; do ffmpeg -loglevel 24 -i http://localhost:8000/main.webm -cluster_size_limit 2M -cluster_time_limit 5100 -b:v 1M -crf 30 -g 125 -deadline good -threads 4 -vcodec libx264 -acodec libmp3lame -f flv $MOUNT; done
diff --git a/2021/playbook/restream-lowres.sh b/2021/playbook/restream-lowres.sh
new file mode 100644
index 00000000..bd6f5bfb
--- /dev/null
+++ b/2021/playbook/restream-lowres.sh
@@ -0,0 +1,2 @@
+ PASS=$1
+ while true; do ffmpeg -loglevel 24 -f webm -reconnect_at_eof 1 -reconnect_streamed 1 -re -i http://localhost:8000/main.webm -vf scale=854:480 -f webm -c:a copy -b:v 500k -maxrate 1M -bufsize 1M -content_type video/webm -c:v libvpx icecast://ec2020main480pmu:$PASS@localhost:8000/main-480p.webm; done
diff --git a/2021/playbook/restream-youtube.sh b/2021/playbook/restream-youtube.sh
new file mode 100644
index 00000000..1cc2994b
--- /dev/null
+++ b/2021/playbook/restream-youtube.sh
@@ -0,0 +1,2 @@
+ KEY=$1
+ while true; do ffmpeg -loglevel 8 -f webm -reconnect_at_eof 1 -reconnect_streamed 1 -re -i http://localhost:8000/main.webm -f webm -c:a copy -c:v copy rtmp://a.rtmp.youtube.com/live2/$KEY; done
diff --git a/2021/playbook/stream-desktop-and-audio.sh b/2021/playbook/stream-desktop-and-audio.sh
new file mode 100644
index 00000000..d3a7e6f8
--- /dev/null
+++ b/2021/playbook/stream-desktop-and-audio.sh
@@ -0,0 +1 @@
+ while true; do ffmpeg -loglevel 0 -ar 48000 -f alsa -channels 2 -sample_rate 48000 -i default -re -video_size 1280x720 -framerate 25 -f x11grab -i :0.0 -cluster_size_limit 2M -cluster_time_limit 5100 -content_type video/webm -c:v libvpx -b:v 1M -crf 30 -g 125 -deadline good -threads 4 -f webm $CONFALT; done