summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--2022/organizers-notebook.md793
-rw-r--r--2022/organizers-notebook.org514
2 files changed, 1152 insertions, 155 deletions
diff --git a/2022/organizers-notebook.md b/2022/organizers-notebook.md
index aa2565e6..9fcd1b06 100644
--- a/2022/organizers-notebook.md
+++ b/2022/organizers-notebook.md
@@ -3,69 +3,97 @@
# Table of Contents
-- [Current tasks / status](#org6505d82)
- - [Organizers: Review the submissions in emacsconf-2022-private and e-mail emacsconf-org-private with any objections or comments by Sept 26 for possible early speaker notification, Oct 7 for everything](#orge61a7ed)
- - [zaeph: Write preparation instructions and decide on deadline for prerecs](#orgb559195):zaeph:
- - [sacha: add more submissions (CFP deadline Sept 30)](#org1e30af6):sacha:
- - [sacha: copy things over from previous notebooks](#org1619c51):sacha:
- - [corwin: Double-check sachac’s timezone conversions for availability](#orgdc2c829):corwin:
- - [corwin: Investigate streaming options, maybe OBS in the cloud](#orgdbcec6e):corwin:
- - [corwin: document such that someone else could use/fix it](#orged6f6d1):corwin:
- - [corwin: recruit at least one more person to help operate the "video bouncer"](#org4cf6c59):corwin:
- - [corwn, zaeph: Work on the OBS scenes](#orgf01135b):zaeph:corwin:
- - [???: Figure out web-based file upload](#org83173f5):needsowner:
- - [sacha: Prepare to export talk information to wiki](#org8786e13):sacha:
- - [bandali: Give access to emacsconf-2022-private to dto](#org598e96b):bandali:
-- [Other tasks and processes](#org5c5859b)
- - [Sacha: Organize volunteer information](#orgbc3b77a):sacha:
- - [bandali: Set up file upload](#orgf1c1262):bandali:
- - [Once talks are approved](#org099deca)
- - [As prerecorded talks come in](#orgd727f87)
- - [When a talk is captioned](#orgb81c87a)
- - [Other tasks before the conference](#org62eee42)
- - [Test stream setup](#org404f659)
- - [Set up MPV for captions](#orgaccb279)
- - [mpv profile](#org53e49da)
- - [Font: Clear Sans](#org39ccfca)
- - [During the conference](#orge0604b7)
+- [Current tasks / status](#org1c2376c)
+ - [Organizers: Review the submissions in emacsconf-2022-private and e-mail emacsconf-org-private with any objections or comments by Sept 26 for possible early speaker notification, Oct 7 for everything](#org8790269)
+ - [zaeph: Write preparation instructions and decide on deadline for prerecs](#orgfa8f729):zaeph:
+ - [sacha: add more submissions (CFP deadline Sept 30)](#orga7b99da):sacha:
+ - [sacha: copy things over from previous notebooks](#orgc5ed90d):sacha:
+ - [corwin: Double-check sachac’s timezone conversions for availability](#orgd322767):corwin:
+ - [corwin: Investigate streaming options, maybe OBS in the cloud](#orgb0742dd):corwin:
+ - [corwin: document such that someone else could use/fix it](#org8ed4ca8):corwin:
+ - [corwin: recruit at least one more person to help operate the "video bouncer"](#org27e2bb4):corwin:
+ - [corwn, zaeph: Work on the OBS scenes](#orgde446f6):zaeph:corwin:
+ - [???: Figure out web-based file upload](#org3416742):needsowner:
+ - [sacha: Prepare to export talk information to wiki](#org2e90911):sacha:
+ - [zaeph: Give access to emacsconf-2022-private to dto](#orgdaa5da1):zaeph:
+- [Other tasks and processes](#org7fbf476)
+ - [Sacha: Organize volunteer information](#org4529b4b):sacha:
+ - [bandali: Set up file upload](#org8703318):bandali:
+ - [Once talks are approved](#org178397d)
+ - [As prerecorded talks come in](#orgc528fc5)
+ - [Compress the video](#org511d3ca)
+ - [When a talk is captioned](#org44bb04f)
+ - [Other tasks before the conference](#orgfd7736f)
+ - [Test stream setup](#org291640a)
+ - [Set up MPV for captions](#org09cf74d)
+ - [mpv profile](#orga632a72)
+ - [Font: Clear Sans](#org9e6ade2)
+ - [Download prerecorded videos from ${protected}](#days-before)
+ - [During the conference](#org5cdd8d4)
- [Roles needed](#roles)
- - [Set up](#org81f22d2)
- - [Stream](#orgf143b9a)
+ - [Set up](#setup)
+ - [Arrange screens](#screens)
+ - [Start streaming](#start-streaming):stream:
+ - [Check in a speaker](#check-in)
+ - [bandali's check-in steps](#orgc3adc8b)
+ - [Present talk](#present)
+ - [Publish information](#publish)
+ - [Handle Q&A](#questions)
- [During each talk](#each-talk)
- - [After the conference](#org4d13959)
- - [Downsize the server](#org3d09c44):bandali:
- - [In case of](#orgebae129)
- - [Stuck wiki](#orgb856862)
-- [Communications](#org1a622de)
- - [Ask emacsconf-org-private for feedback on early submissions](#orgef11901)
- - [Early speaker notification](#org4e3dd24)
- - [Option A: Early speaker notification(?)](#org8aec626)
- - [Option B: Just letting them know it's been postponed](#org6770c5e)
- - [Future](#org4bef7b8)
- - [Acceptance](#orgd7bc590)
- - [Code](#orgbf4657c)
- - [Template](#org6887032)
- - [Acknowledge pre-rec submission](#org5425acc)
- - [Captions for approval](#org24304da)
- - [Speakers we haven't confirmed e-mail communications with](#org6cfd787)
- - [Speakers who are missing prerecs](#orga53f969)
- - [Template](#org526ab95)
- - [Check-in instructions](#org335d7c4)
- - [Code](#org7b9cb5f)
- - [E-mail for speakers who are planning to be at the conference](#org7bbef3d)
- - [E-mail for speakers who are not planning to be around, but who have sent us their prerecs](#orgdf741ac)
- - [Last email before the conference](#org2ba3487)
- - [Thank you, next steps](#orgfd2bb36)
- - [Code](#org74f9445)
- - [Text](#orga74cd4b)
- - [Archive](#org70d1de6)
- - [Second announcement: CFP](#org8064c22)
- - [First announcement: CFP](#orgc9f1b00)
-- [Supporting code](#org216057b)
- - [Publish this page](#orgd936220)
-
-
-<a id="org6505d82"></a>
+ - [Break time](#break)
+ - [End of stream](#end)
+ - [After the conference](#org125206a)
+ - [Send thanks](#orgae63fc6)
+ - [Update the wiki](#org266989c)
+ - [Update captions](#org48744cb)
+ - [Downsize the server](#org1c13162):bandali:
+ - [In case of](#exceptions)
+ - [Stuck wiki](#orgee73cf7)
+ - [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)
+- [Communications](#org48aec98)
+ - [Ask emacsconf-org-private for feedback on early submissions](#org30dead3)
+ - [Early speaker notification](#org84d7e41)
+ - [Option A: Early speaker notification(?)](#org24fa701)
+ - [Option B: Just letting them know it's been postponed](#org96616dc)
+ - [Future](#org577e665)
+ - [Acceptance](#org6abf1ef)
+ - [Code](#org77d8711)
+ - [Template](#org44c0c23)
+ - [Acknowledge pre-rec submission](#org81f2950)
+ - [Captions for approval](#org4324da9)
+ - [Speakers we haven't confirmed e-mail communications with](#org01d182a)
+ - [Speakers who are missing prerecs](#org7bde509)
+ - [Template](#org889eae8)
+ - [Check-in instructions](#org870a8ec)
+ - [Code](#orgfe4d71f)
+ - [E-mail for speakers who are planning to be at the conference](#orgfcc6405)
+ - [E-mail for speakers who are not planning to be around, but who have sent us their prerecs](#orge9d0751)
+ - [Last email before the conference](#org18d1b15)
+ - [Thank you, next steps](#org975dc9e)
+ - [Code](#org090b205)
+ - [Text](#orgc12d656)
+ - [Archive](#orge9c9fba)
+ - [Second announcement: CFP](#orgb302bad)
+ - [First announcement: CFP](#orge8304a7)
+- [Supporting code](#org411adc7)
+ - [Publish this page](#orge4dd909)
+
+
+<a id="org1c2376c"></a>
# Current tasks / status
@@ -160,14 +188,14 @@ Planned dates and phases:
</table>
-<a id="orge61a7ed"></a>
+<a id="org8790269"></a>
-## TODO Organizers: Review the submissions in emacsconf-2022-private and e-mail emacsconf-org-private with any objections or comments by Sept 26 for possible [early speaker notification](#org4e3dd24), Oct 7 for everything
+## TODO Organizers: Review the submissions in emacsconf-2022-private and e-mail emacsconf-org-private with any objections or comments by Sept 26 for possible [early speaker notification](#org84d7e41), Oct 7 for everything
- zaeph: will start reviewing on Sep 21
-<a id="orgb559195"></a>
+<a id="orgfa8f729"></a>
## TODO zaeph: Write preparation instructions and decide on deadline for prerecs :zaeph:
@@ -181,24 +209,24 @@ We need time after the prerecs get submitted to:
zaeph will also figure out the ffmpeg incantation for converting videos and the process for handling submitted prerecs
-<a id="org1e30af6"></a>
+<a id="orga7b99da"></a>
## WAITING sacha: add more submissions (CFP deadline Sept 30) :sacha:
- Sacha: Add submissions to emacsconf-2022-private, draft 2-day schedule by Oct 10
-<a id="org1619c51"></a>
+<a id="orgc5ed90d"></a>
## INPROGRESS sacha: copy things over from previous notebooks :sacha:
-<a id="orgdc2c829"></a>
+<a id="orgd322767"></a>
## TODO corwin: Double-check sachac’s timezone conversions for availability :corwin:
-<a id="orgdbcec6e"></a>
+<a id="orgb0742dd"></a>
## TODO corwin: Investigate streaming options, maybe OBS in the cloud :corwin:
@@ -207,56 +235,57 @@ zaeph will also figure out the ffmpeg incantation for converting videos and the
**\*** TODO corwin: plan an approach to use a centralized OBS/nginix "bouncer" :corwin:
-<a id="orged6f6d1"></a>
+<a id="org8ed4ca8"></a>
### TODO corwin: document such that someone else could use/fix it :corwin:
-<a id="org4cf6c59"></a>
+<a id="org27e2bb4"></a>
### TODO corwin: recruit at least one more person to help operate the "video bouncer" :corwin:
-<a id="orgf01135b"></a>
+<a id="orgde446f6"></a>
## TODO corwn, zaeph: Work on the OBS scenes :zaeph:corwin:
- [ ] corwin is out from Nov 11-20, and we should start working on them before then.
-<a id="org83173f5"></a>
+<a id="org3416742"></a>
## TODO ???: Figure out web-based file upload :needsowner:
Lesson learned from last year: "Since people kept running into ftp problems, we might want to set up a web-frontend next year to minimise problems."
+Maybe we could ask some of the volunteers who wanted to help us with the infra? It shouldn’t be complicated to deploy a ready-made solution.
-<a id="org8786e13"></a>
+<a id="org2e90911"></a>
## TODO sacha: Prepare to export talk information to wiki :sacha:
-<a id="org598e96b"></a>
+<a id="orgdaa5da1"></a>
-## TODO bandali: Give access to emacsconf-2022-private to dto :bandali:
+## DONE zaeph: Give access to emacsconf-2022-private to dto :zaeph:
-<a id="org5c5859b"></a>
+<a id="org7fbf476"></a>
# Other tasks and processes
-<a id="orgbc3b77a"></a>
+<a id="org4529b4b"></a>
## DONE Sacha: Organize volunteer information :sacha:
-<a id="orgf1c1262"></a>
+<a id="org8703318"></a>
## TODO bandali: Set up file upload :bandali:
-<a id="org099deca"></a>
+<a id="org178397d"></a>
## Once talks are approved
@@ -266,7 +295,7 @@ Lesson learned from last year: "Since people kept running into ftp problems, we
- Confirm e-mail communication with all of the speakers
-<a id="orgd727f87"></a>
+<a id="orgc528fc5"></a>
## As prerecorded talks come in
@@ -277,35 +306,48 @@ Lesson learned from last year: "Since people kept running into ftp problems, we
- Make sure all the links/resources mentioned are written down somewhere (web page and enriched captions for pasting into #emacsconf-accessible)
-<a id="orgb81c87a"></a>
+<a id="org511d3ca"></a>
-## When a talk is captioned
+### Compress the video
--
+Usage: `compress-video.sh original-file output-file`:
+
+(zaeph might tinker with this)
+
+ 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="org62eee42"></a>
+
+<a id="org44bb04f"></a>
+
+## When a talk is captioned
+
+
+<a id="orgfd7736f"></a>
## Other tasks before the conference
- Coordinate volunteer schedules so all the roles are covered
-<a id="org404f659"></a>
+<a id="org291640a"></a>
### Test stream setup
-[Stream](#orgf143b9a)
+[Stream](#org184f14d)
-<a id="orgaccb279"></a>
+<a id="org09cf74d"></a>
### Set up MPV for captions
-<a id="org53e49da"></a>
+<a id="orga632a72"></a>
-### mpv profile
+#### mpv profile
Add the following profile to `~/.config/mpv/mpv.conf`:
@@ -338,9 +380,9 @@ Add the following profile to `~/.config/mpv/mpv.conf`:
(Thanks, zaeph)
-<a id="org39ccfca"></a>
+<a id="org9e6ade2"></a>
-### Font: Clear Sans
+#### Font: Clear Sans
Links:
@@ -348,7 +390,16 @@ Links:
- WOFF from GitHub repo: [clear-sans/WOFF at main · intel/clear-sans](https://github.com/intel/clear-sans/tree/main/WOFF)
-<a id="orge0604b7"></a>
+<a id="days-before"></a>
+
+### Download prerecorded videos from ${protected}
+
+- STREAM: Download prerecorded videos from ${protected}
+
+ rsync -avzue ssh front:/var/www/media.emacsconf.org/2021/protected/*--main.webm .
+
+
+<a id="org5cdd8d4"></a>
## During the conference
@@ -359,19 +410,19 @@ Links:
Each role comprises different responsibilities. A person may have multiple roles.
-- Streamer
+- STREAM: Streamer
- Send the combined stream to Icecast for broadcasting
- Director (possibly same as streamer)
- Switch scenes, manage audio volumes as needed
- Provide timekeeping information to host (especially go-live countdowns)
-- Host
+- HOST: Host
- Introduce talks and speakers
- Read questions
- Give time warnings
- Thank speakers and transition to next talk
- Timekeeper (possibly same as host)
- Manage time based on all available information (prerecs durations, speakers not showing up, etc.)
-- Check in
+- CHECK: Check in
- Notice speakers checking into IRC
- Get them into the correct room and help them doublecheck their audio and video quality
- Troubleshoot as needed
@@ -394,24 +445,250 @@ Each role comprises different responsibilities. A person may have multiple role
- Nice to have: Update the schedule to reflect changes throughout the day
-<a id="org81f22d2"></a>
+<a id="setup"></a>
### Set up
-<a id="orgf143b9a"></a>
+<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/>
+
-#### Stream
+##### Stream
-##### Low-res stream
+###### Low-res stream
Needs the `$main480p` environment variable set to something of the form `icecast://username:password@site:port/mount-point.webm`. Icecast configuration can be found on `live0` at `/etc/icecast2/icecast.xml`. It was okay to run this command directly on `live0` in 2020, since that kept the speed at roughly 1x.
while true; do ffmpeg -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 $main480p done
-##### Youtube
+###### Youtube
+
+
+<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="orgc3adc8b"></a>
+
+#### 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)
+
+
+<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="each-talk"></a>
@@ -422,34 +699,275 @@ Needs the `$main480p` environment variable set to something of the form `icecast
- Volunteers: making sure questions get posted somewhere the speaker can see them
-<a id="org4d13959"></a>
+<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="org125206a"></a>
## After the conference
-<a id="org3d09c44"></a>
+<a id="orgae63fc6"></a>
+
+### Send thanks
+
+[Thank you, next steps](#org975dc9e)
+
+
+<a id="org266989c"></a>
+
+### Update the wiki
+
+
+<a id="org48744cb"></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="org1c13162"></a>
### BLOCKED Downsize the server :bandali:
-<a id="orgebae129"></a>
+<a id="exceptions"></a>
## In case of
-<a id="orgb856862"></a>
+<a id="orgee73cf7"></a>
### Stuck wiki
sudo -iu ikiwiki &#x2013; ikiwiki &#x2013;setup ~ikiwiki/emacsconf.setup
-<a id="org1a622de"></a>
+<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 (<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]
+ - [? 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="org48aec98"></a>
# Communications
-<a id="orgef11901"></a>
+<a id="org30dead3"></a>
## TODO Ask emacsconf-org-private for feedback on early submissions
@@ -474,14 +992,14 @@ Thanks!
Sacha
-<a id="org4e3dd24"></a>
+<a id="org84d7e41"></a>
## TODO Early speaker notification
We can accept early or send people a note saying notification of acceptance will be on Oct 15, because of the extended CFP.
-<a id="org8aec626"></a>
+<a id="org24fa701"></a>
### TODO Option A: Early speaker notification(?)
@@ -522,7 +1040,7 @@ Thank you so much!
Sacha
-<a id="org6770c5e"></a>
+<a id="org96616dc"></a>
### TODO Option B: Just letting them know it's been postponed
@@ -535,17 +1053,17 @@ for your patience!
Sacha
-<a id="org4bef7b8"></a>
+<a id="org577e665"></a>
## Future
-<a id="orgd7bc590"></a>
+<a id="org6abf1ef"></a>
### Acceptance
-<a id="orgbf4657c"></a>
+<a id="org77d8711"></a>
#### Code
@@ -603,7 +1121,7 @@ Sacha
(save-excursion (conf-replace-plist-in-string attrs (plist-get attrs :body)))))
-<a id="org6887032"></a>
+<a id="org44c0c23"></a>
#### Template
@@ -634,7 +1152,7 @@ EmacsConf organization team
P.S. Please keep emacsconf-submit@gnu.org in To or Cc when replying.
-<a id="org5425acc"></a>
+<a id="org81f2950"></a>
### Acknowledge pre-rec submission
@@ -667,23 +1185,24 @@ P.S. Please keep emacsconf-submit@gnu.org in To or Cc when replying.
"Thank you so much for all the work you put into preparing a talk for EmacsConf ${year}, and thank you for submitting the prerecorded video before the conference!\n\nSacha"))))
-<a id="org24304da"></a>
+<a id="org4324da9"></a>
### Captions for approval
Hi ${speakers-short}!
-Thanks for speaking at EmacsConf ${year}! ${captioner} volunteered to
-caption your talk video, and here it is. 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. You can look at the attached
-file or watch your video with closed captions at ${url} . Thanks again
-for your contribution!
+Because you sent in your video early, we were able to caption it so
+that more people can find and enjoy your talk. ${captioner}
+volunteered to caption your talk video, and here it is. 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. You can look
+at the attached file or watch your video with closed captions at
+${url} . Thanks again for your contribution!
Sacha
-<a id="org6cfd787"></a>
+<a id="org01d182a"></a>
### Speakers we haven't confirmed e-mail communications with
@@ -728,7 +1247,7 @@ Sacha Chua
(Please use Reply to All to keep emacsconf-submit@gnu.org in the loop. Thanks!)
-<a id="orga53f969"></a>
+<a id="org7bde509"></a>
### Speakers who are missing prerecs
@@ -749,7 +1268,7 @@ Sacha Chua
(conf-get-talk-info))))))
-<a id="org526ab95"></a>
+<a id="org889eae8"></a>
#### Template
@@ -805,7 +1324,7 @@ stream for you. Hope to hear from you soon!
Sacha
-<a id="org335d7c4"></a>
+<a id="org870a8ec"></a>
### Check-in instructions
@@ -823,7 +1342,7 @@ Goals:
- They’re joined by the streamer and host.
-<a id="org7b9cb5f"></a>
+<a id="orgfe4d71f"></a>
#### Code
@@ -880,7 +1399,7 @@ Slightly more complex because of the conditionals
(buffer-list)))
-<a id="org7bbef3d"></a>
+<a id="orgfcc6405"></a>
#### E-mail for speakers who are planning to be at the conference
@@ -908,7 +1427,7 @@ Looking forward to seeing you soon!
Sacha
-<a id="orgdf741ac"></a>
+<a id="orge9d0751"></a>
#### E-mail for speakers who are not planning to be around, but who have sent us their prerecs
@@ -930,7 +1449,7 @@ Thank you again for being part of EmacsConf ${year}!
Sacha
-<a id="org2ba3487"></a>
+<a id="org18d1b15"></a>
### Last email before the conference
@@ -949,12 +1468,12 @@ Sacha
> also be the time at which the talk will be made available on the same page.
-<a id="orgfd2bb36"></a>
+<a id="org975dc9e"></a>
### Thank you, next steps
-<a id="org74f9445"></a>
+<a id="org090b205"></a>
#### Code
@@ -986,7 +1505,7 @@ Sacha
(plist-get template :body)))))))
-<a id="orga74cd4b"></a>
+<a id="orgc12d656"></a>
#### Text
@@ -1016,12 +1535,12 @@ Thanks again for speaking at EmacsConf!
Sacha
-<a id="org70d1de6"></a>
+<a id="orge9c9fba"></a>
## Archive
-<a id="org8064c22"></a>
+<a id="orgb302bad"></a>
### DONE Second announcement: CFP
@@ -1052,7 +1571,7 @@ emacsconf-discuss list, so as to help avoid generating extra off-topic
chatter in the other lists cc'd on this message. Thank you.
-<a id="orgc9f1b00"></a>
+<a id="orge8304a7"></a>
### DONE First announcement: CFP
@@ -1082,12 +1601,12 @@ emacsconf-discuss list, so as to help avoid generating extra off-topic
chatter in the other lists Cc'd on this message. Thank you.
-<a id="org216057b"></a>
+<a id="org411adc7"></a>
# Supporting code
-<a id="orgd936220"></a>
+<a id="orge4dd909"></a>
## Publish this page
diff --git a/2022/organizers-notebook.org b/2022/organizers-notebook.org
index 0f937eb5..5292a295 100644
--- a/2022/organizers-notebook.org
+++ b/2022/organizers-notebook.org
@@ -11,7 +11,7 @@
* COMMENT How to export this file :noexport:
- [[elisp:(progn (org-md-export-to-markdown) (org-babel-tangle))][Export and tangle]]
-- [[elisp:(progn (org-md-export-to-markdown) (org-babel-tangle) (magit-stage-modified) (magit-commit-create (list "-m" (read-string "Commit message: "))) (call-interactively #'magit-push-current-to-pushremote))][Export, tangle, commit, push]]
+- [[elisp:(emacsconf-org-publish-this-page)][Export, tangle, commit, push]]
- [[elisp:(org-babel-execute-buffer)][Execute buffer]]
* Current tasks / status
@@ -81,16 +81,27 @@ DEADLINE: <2022-10-28 Fri>
- Sacha: Parcel out captioning work to volunteers, help them get set up
- Volunteers: Caption pre-recorded videos (usually starting from autogenerated ones for easier work)
- Make sure all the links/resources mentioned are written down somewhere (web page and enriched captions for pasting into #emacsconf-accessible)
-** When a talk is captioned
--
+*** Compress the video
+Usage: =compress-video.sh original-file output-file=:
+
+(zaeph might tinker with this)
+
+#+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.
+** When a talk is captioned
** Other tasks before the conference
- Coordinate volunteer schedules so all the roles are covered
*** Test stream setup
[[*Stream][Stream]]
*** Set up MPV for captions
-*** mpv profile
+**** mpv profile
Add the following profile to ~~/.config/mpv/mpv.conf~:
#+begin_src conf :eval no
@@ -122,10 +133,20 @@ sub-ass-line-spacing=0
#+end_src
(Thanks, zaeph)
-*** Font: Clear Sans
+**** Font: Clear Sans
Links:
- tar.gz with all fonts: [[https://zaeph.tk/files/emacsconf/captions/fonts.tar.gz][from zaeph's server]] (more convenient)
- WOFF from GitHub repo: [[https://github.com/intel/clear-sans/tree/main/WOFF][clear-sans/WOFF at main · intel/clear-sans]]
+*** Download prerecorded videos from ${protected}
+: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
+
** During the conference
*** Roles needed
:PROPERTIES:
@@ -133,19 +154,19 @@ Links:
:END:
Each role comprises different responsibilities. A person may have multiple roles.
-- Streamer
+- STREAM: Streamer
- Send the combined stream to Icecast for broadcasting
- Director (possibly same as streamer)
- Switch scenes, manage audio volumes as needed
- Provide timekeeping information to host (especially go-live countdowns)
-- Host
+- HOST: Host
- Introduce talks and speakers
- Read questions
- Give time warnings
- Thank speakers and transition to next talk
- Timekeeper (possibly same as host)
- Manage time based on all available information (prerecs durations, speakers not showing up, etc.)
-- Check in
+- CHECK: Check in
- Notice speakers checking into IRC
- Get them into the correct room and help them doublecheck their audio and video quality
- Troubleshoot as needed
@@ -167,8 +188,71 @@ Each role comprises different responsibilities. A person may have multiple role
- Nice to have: Set resources to public as each talk is played (Toobnix, YouTube)
- Nice to have: Update the schedule to reflect changes throughout the day
*** Set up
-**** Stream
-***** Low-res stream
+: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 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 "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 "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/
+
+***** Stream
+****** Low-res stream
Needs the =$main480p= environment variable set to something of the form =icecast://username:password@site:port/mount-point.webm=. Icecast configuration can be found on =live0= at =/etc/icecast2/icecast.xml=. It was okay to run this command directly on =live0= in 2020, since that kept the speed at roughly 1x.
@@ -176,19 +260,413 @@ Each role comprises different responsibilities. A person may have multiple role
while true; do ffmpeg -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 $main480p done
#+end_src
-***** Youtube
+****** Youtube
+
+*** 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]]
+
+*
*** During each talk
:PROPERTIES:
:CUSTOM_ID: each-talk
:END:
- Volunteers: post links/resources/descriptions/captions (depending on your level of energy) to #emacsconf-accessible
- Volunteers: making sure questions get posted somewhere the speaker can see them
+*** 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
+
** After the conference
+*** Send thanks
+[[*Thank you, next steps][Thank you, next steps]]
+*** Update the wiki
+*** 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.
*** BLOCKED Downsize the server :bandali:
** In case of
+:PROPERTIES:
+:CUSTOM_ID: exceptions
+:END:
*** Stuck wiki
sudo -iu ikiwiki -- ikiwiki --setup ~ikiwiki/emacsconf.setup
+
+*** 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:stream-desktop-and-audio.sh]]:
+ #+begin_src sh :eval no :tangle 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)
+
* Communications
** TODO Ask emacsconf-org-private for feedback on early submissions
@@ -390,7 +868,6 @@ P.S. Please keep emacsconf-submit@gnu.org in To or Cc when replying.
"Please feel free to e-mail us at emacsconf-submit@gnu.org if you need help updating the talk wiki page at " page " or if you have other questions.\n\n"
"Thank you so much for all the work you put into preparing a talk for EmacsConf ${year}, and thank you for submitting the prerecorded video before the conference!\n\nSacha"))))
#+end_src
-
*** Captions for approval
:PROPERTIES:
:SUBJECT: EmacsConf ${year}: Please review these captions for ${title}
@@ -399,12 +876,13 @@ P.S. Please keep emacsconf-submit@gnu.org in To or Cc when replying.
Hi ${speakers-short}!
-Thanks for speaking at EmacsConf ${year}! ${captioner} volunteered to
-caption your talk video, and here it is. 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. You can look at the attached
-file or watch your video with closed captions at ${url} . Thanks again
-for your contribution!
+Because you sent in your video early, we were able to caption it so
+that more people can find and enjoy your talk. ${captioner}
+volunteered to caption your talk video, and here it is. 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. You can look
+at the attached file or watch your video with closed captions at
+${url} . Thanks again for your contribution!
Sacha