summaryrefslogtreecommitdiffstats
path: root/organizers-notebook.md
diff options
context:
space:
mode:
Diffstat (limited to 'organizers-notebook.md')
-rw-r--r--organizers-notebook.md523
1 files changed, 523 insertions, 0 deletions
diff --git a/organizers-notebook.md b/organizers-notebook.md
index 9589cf57..2cff5989 100644
--- a/organizers-notebook.md
+++ b/organizers-notebook.md
@@ -20,6 +20,35 @@ This document is the general organizers' notebook that can be used as a starting
- [Create the public organizers’ notebook in the wiki](#starting-up-the-conference-planning-process-create-the-public-organizers-notebook-in-the-wiki)
- [Phases and lessons learned](#phases-and-lessons-learned)
- [Draft CFP](#phases-and-lessons-learned-draft-cfp)
+ - [Announce](#orgc65a882)
+ - [Process proposals](#org05d8ef4)
+ - [Accept proposals](#orge98e249)
+ - [Draft schedule](#draft-schedule)
+ - [Set up backstage and upload](#orge9a3c89)
+ - [Post the schedule](#org1e7771f)
+ - [Process uploaded files](#orgfd23289)
+ - [Generate assets](#org80c461d)
+ - [Prepare the infrastructure](#org033e054)
+ - [Getting ready for captions](#org217ecc8)
+- [General infrastructure](#org59478a5)
+ - [Icecast](#icecast)
+ - [Watching pages](#watch)
+ - [VNC](#vnc)
+ - [Streaming with OBS](#obs)
+ - [Shell scripts](#org511ba94)
+ - [IRC web client](#org6abc1fd)
+ - [Etherpad](#orgd320fcc)
+ - [Publishing media to the server and to the wiki](#media)
+ - [Automated IRC announcements](#org005b5de)
+ - [Manual IRC announcements](#org33f6301)
+ - [Low-res stream](#orgd5b1661)
+ - [Restream to YouTube](#org3875a88)
+ - [Restream to Toobnix](#org678b044)
+- [Other process notes](#other)
+ - [Adding another user to BBB](#bbb-user)
+ - [When a talk is cancelled](#cancel-talk)
+ - [When a talk Q&A changes method](#change-talk-qa)
+ - [Ansible](#orgf87ae48)
<a id="starting-up-the-conference-planning-process"></a>
@@ -117,4 +146,498 @@ Put inside double square brackets: `!template id=pagedraft`
- It’s easier for us to extend beyond 5pm than to go before 9am
(especially for Pacific time). Extending beyond 5pm puts strain on
European organizers and volunteers, though.
+- Put the speaker introduction right after the talk description for easier web page copying.
+
+
+<a id="orgc65a882"></a>
+
+## Announce
+
+- Post CFP to emacsconf-discuss, reddit.com/r/emacs, and in Emacs News
+- Submit to <https://foss.events/>
+
+
+<a id="org05d8ef4"></a>
+
+## Process proposals
+
+1. In the private repository, create a conf.org.
+2. Set `emacsconf-org-file` to its location.
+3. Create a heading for Submissions and set `CUSTOM_ID` to `submissions`.
+4. Prepare the `prepare` and `submit` pages on the wiki.
+
+When proposals come in:
+
+1. Acknowledge with an e-mail along the lines of:
+
+ Hello, ....!
+
+ <feedback> We'll wait another week in case anyone else wants to
+ chime in before I add it to the wiki and send further notes. :) Thanks for
+ submitting this!
+
+2. Use `emacsconf-mail-add-submission` if it works, or create the entry and paste it in.
+ `org-toggle-item` can help convert Org-style headings into a nested list.
+3. Set the following fields (`my/org-set-property`
+ can be helpful): EMERGENCY, Q\_AND\_A,
+ AVAILABILITY, NAME, PRONOUNS, TIME,
+ SLUG, EMAIL, NAME\_SHORT, CUSTOM\_ID,
+ TRACK, TIMEZONE, CATEGORY, DATE\_SUBMITTED,
+ PUBLIC\_EMAIL
+
+
+<a id="orge98e249"></a>
+
+## Accept proposals
+
+Setup:
+
+1. Create YYYY/talks.md.
+
+For each talk:
+
+1. Set up &ldquo;Talk abstract&rdquo; and &ldquo;Talk details&rdquo; sections in the conf.org talk subtree.
+2. Change status to `TO_CONFIRM`.
+3. Create wiki page with `emacsconf-publish-add-talk`.
+4. Use `emacsconf-publish-info-pages` and `emacsconf-publish-schedule` as needed.
+5. Send acceptance e-mail with `emacsconf-mail-accept-talk`
+
+
+<a id="draft-schedule"></a>
+
+## Draft schedule
+
+- Create entries for opening and closing remarks
+ - FIXED: t
+ - SCHEDULED
+ - TIME: 10
+ - BUFFER: 0
+ - CUSTOM\_ID:
+ - SLUG:
+ - Q\_AND\_A: pad
+- Create draft-schedule section in the public organizers notebook for the year
+- Add missing items to plan
+
+
+<a id="orge9a3c89"></a>
+
+## Set up backstage and upload
+
+See <a href="https://git.emacsconf.org/emacsconf-ansible/tree/README.org">README.org</a>.
+
+Lessons learned:
+
+- Next year, let&rsquo;s get upload.emacsconf.org in place as the domain name so that people don&rsquo;t try to FTP files to it.
+
+
+<a id="org1e7771f"></a>
+
+## Post the schedule
+
+- <elisp:(setq emacsconf-publishing-phase 'schedule)>
+- <elisp:emacsconf-publish-info-pages>
+- <elisp:emacsconf-publish-schedule-org-files>
+- <elisp:emacsconf-ical-generate-all>
+- Update talks.md to refer to watch.md as well
+
+
+<a id="orgfd23289"></a>
+
+## Process uploaded files
+
+Basic setup:
+
+1. Set up the media server and symlinks: <a href="https://git.emacsconf.org/emacsconf-ansible/tree/README.org">README.org</a> (Media).
+2. Set up the prerec processing areas on res: <a href="https://git.emacsconf.org/emacsconf-ansible/tree/README.org">README.org</a> (Processing prerecs).
+3. Set up the caption processor on res: <a href="https://git.emacsconf.org/emacsconf-ansible/tree/README.org">README.org</a> (Captioning).
+
+Process:
+
+1. Review uploaded files with <elisp:emacsconf-upload-dired>
+2. Open the JSON for the file you want to process and use <elisp:emacsconf-upload-copy-from-json> .
+ If more than one file uses the same extension, provide a suffix to disambiguate them.
+3. On res:
+ 1. Create a directory ~/current/files/$slug.
+ 2. Copy the uploaded file from ~/cache as `$video_slug--original.$extension`, or use `rename-original.sh $slug $file`.
+ 3. Call `process-prerec.sh $file`.
+4. When the screens are finished, do locally:
+ 1. update-cache on my computer.
+ 2. <elisp:emacsconf-publish-cache-video-data> or <elisp:emacsconf-cache-all-video-data>
+ 3. <elisp:emacsconf-publish-backstage-index>
+
+
+<a id="org80c461d"></a>
+
+## Generate assets
+
+
+### In-between pages
+
+- Make the $year/assets/in-between directory and copy the template.svg from the previous year.
+- <elisp:emacsconf-stream-generate-in-between-pages>
+
+
+### Intros
+
+- In an empty VTT file, <elisp:emacsconf-subed-intro-subtitles>
+- Record the audio and get captions
+- Splice together into a file that will be processed with subed-record-compile-video.
+
+
+<a id="org033e054"></a>
+
+## Prepare the infrastructure
+
+Checklist:
+
+- [ ] IRC
+ - [ ] Manual announcements
+ - [ ] Automated announcements
+- [ ] Web conference
+- [ ] Streaming assets
+ - [ ] Overlays
+ - [ ] Intros
+- [ ] OBS
+- [ ] VNC
+- [ ] Publishing to the wiki
+- [ ] Publishing to the media server
+- [ ] Etherpad
+- [ ] Mumble
+- [ ] Icecast
+
+
+<a id="org217ecc8"></a>
+
+## Getting ready for captions
+
+Onboarding:
+
+- Add captioner to conf.org with the `:caption:` tag, under a Volunteers heading with the `volunteer` tag. Make sure the `EMAIL` property is set.
+- Add captioner to emacsconf-org mailing list.
+- Send backstage information <elisp:emacsconf-mail-backstage-info-to-volunteer> . (Can be sent to all captioning volunteers with <elisp:emacsconf-mail-backstage-info-to-captioning-volunteers>)
+
+
+<a id="org59478a5"></a>
+
+# General infrastructure
+
+
+<a id="icecast"></a>
+
+## Icecast
+
+Success: You can use [OBS+VNC to record](#obs-instructions), and the results can be viewed by mpv.
+
+- [X] Gen
+- [X] Dev
+
+Also, recordings are available in /data.
+
+New year:
+
+1. Reprovision with
+
+ ansible-playbook -i inventory.yml prod-playbook.yml --tags stream
+
+ so that the year is updated in the configuration.
+2. SSH to live0.emacsconf.org and run `/etc/init.d/emacsconf stop`. Confirm that icecast has stopped with `ps | grep emacsconf`; if not, kill the process.
+ Start it again with `/etc/init.d/emacsconf start`
+3. To test, you can use FFmpeg like this for the gen stream:
+
+ ffmpeg -y -f lavfi -i testsrc=size=1280x720:rate=10 -i background-music.opus \
+ -c:v libvpx -b:v 500K -crf 25 -b:a 128k \
+ -content_type video/webm "icecast://emacsconf:$EMACSCONF_ICECAST_SOURCE_PASSWORD@live0.emacsconf.org:8001/gen.webm"
+
+ For dev:
+
+ ffmpeg -y -f lavfi -i testsrc=size=1280x720:rate=10 -i background-music.opus \
+ -c:v libvpx -b:v 500K -crf 25 -b:a 128k \
+ -content_type video/webm "icecast://emacsconf:$EMACSCONF_ICECAST_SOURCE_PASSWORD@live0.emacsconf.org:8001/dev.webm"
+
+ and then view it with
+
+ mpv https://live0.emacsconf.org/gen.webm
+
+
+<a id="watch"></a>
+
+## Watching pages
+
+Success: You can watch at <https://live.emacsconf.org>.
+
+- [X] <https://live.emacsconf.org> goes to the current year&rsquo;s page.
+- [X] gen stream works in the browser
+- [X] dev stream works in the browser
+- [X] Schedule is correct
+
+New year:
+
+1. ansible-playbook -i inventory.yml prod-playbook.yml &#x2013;tags live
+2. Republish with <elisp:emacsconf-publish-watch-pages>.
+3. Update front:/var/www/live.emacsconf.org.
+
+Set up test streams (see ffmpeg instructions from [Icecast](#icecast)) and then:
+
+
+<a id="vnc"></a>
+
+## VNC
+
+We use VNC to connect to the X servers on res.emacsconf.org so that we can stream from it.
+
+Success:
+
+- [X] Confirm that you can connect to emacsconf-gen via VNC
+- [X] Confirm that you can connect to emacsconf-dev via VNC
+
+Setting up
+
+- <elisp:emacsconf-publish-res-index>
+
+
+<a id="vnc-instructions"></a>
+
+### Instructions
+
+NOTE: VNC+OBS doesn&rsquo;t work well if you have a window manager that
+automatically resizes windows, like i3. Please configure your window
+manager so that the VNC window is not resized.
+
+1. Install a VNC viewer on your system (ex: tigervnc-viewer).
+
+2. Set up your local environment:
+ - gen: `export TRACK=gen; export TRACK_PORT=5905; export SSH_PORT=46668`
+ - dev: `export TRACK=dev; export TRACK_PORT=5906; export SSH_PORT=46668`
+
+3. Copy the password:
+
+ scp emacsconf-$TRACK@res.emacsconf.org:~/.vnc/passwd vnc-passwd-$TRACK -p $SSH\_PORT
+
+4. Forward your local ports and connect via VNC viewer to the
+ appropriate forwarded port from your laptop:
+
+ ssh emacsconf-$TRACK@res.emacsconf.org -N -L $TRACK_PORT:127.0.0.1:$TRACK_PORT -p $SSH_PORT &
+ sleep 5 # Give it time to establish the tunnels
+ xvncviewer 127.0.0.1:$TRACK_PORT -shared -geometry 1280x720 -passwd vnc-passwd-$TRACK &
+
+If you get the following error:
+
+ channel 2: open failed: connect failed: Connection refused
+ CConn: End of stream
+ CConn: The connection was dropped by the server before the session could
+ be established.
+
+then the VNC server hasn&rsquo;t started yet. You can start it with
+
+ ssh emacsconf-$TRACK@res.emacsconf.org -p $SSH_PORT /home/emacsconf-$TRACK/bin/track-vnc
+
+and then connect with:
+
+ xvncviewer 127.0.0.1:$TRACK_PORT -shared -geometry 1280x720 -passwd vnc-passwd-$TRACK &
+
+
+<a id="obs"></a>
+
+## Streaming with OBS
+
+Success: Confirm that you can stream
+
+- [X] gen
+- [X] dev
+
+New year: reprovision with
+
+ ansible-playbook -i inventory.yml prod-playbook.yml --tags obs
+
+so that the year is updated in the shell scripts.
+
+
+<a id="obs-instructions"></a>
+
+### Instructions
+
+1. [Connect to the VNC session for the track.](#vnc-instructions)
+
+2. Start **recording** (not streaming). If you don&rsquo;t see OBS when you connect, it&rsquo;s probably on workspace 2, so you can switch with Alt-2. If you still don&rsquo;t see it there, you can open a terminal with Alt-Enter and then run `track-obs`. After you start recording, confirm that it is now broadcasting to the stream.
+
+3. Verify with MPV on your local system:
+
+ mpv https://live0.emacsconf.org/$TRACK.webm &
+
+
+### Icecast
+
+Success: You can use [OBS+VNC to record](#obs-instructions), and the results can be viewed by mpv.
+
+- [ ] gen
+- [ ] dev
+
+New year: reprovision with
+
+ ansible-playbook -i inventory.yml prod-playbook.yml --tags stream
+
+so that the year is updated in the configuration.
+
+This is on live.emacsconf.org and can be restarted with `/etc/init.d/emacsconf restart`.
+
+
+<a id="org511ba94"></a>
+
+## Shell scripts
+
+Success: From the commandline, hosts can:
+
+- [X] play just the intro: intro $SLUG
+- [X] play a file without an intro: play $SLUG
+- [X] play a file with an intro: play-with-intro $SLUG (hmm, this didn&rsquo;t show the subtitles)
+ ah, it&rsquo;s because the intros need to be in the cache dir?
+- [X] open the Q&A for a talk: handle-qa $SLUG
+ - [X] open the pad: pad $SLUG
+ - [X] open BBB: bbb $SLUG
+- [ ] do the whole thing: handle-session $SLUG
+- [ ] rebroadcast the other stream:
+ - rebroadcast gen
+ - rebroadcast dev
+- [ ] control background music: music, stop-music
+
+Setup:
+
+- OBS must be streaming from the stream you&rsquo;re testing. [Streaming with OBS](#obs)
+- You may want to generate test assets and copy them over to the assets/stream directory.
+- Generate all the overlays and copy them to assets/overlays
+- Set up the assets/music directory
+
+
+<a id="org6abc1fd"></a>
+
+## IRC web client
+
+Success:
+
+- [X] You can join from <https://chat.emacsconf.org>
+- [X] You can join from <https://live.emacsconf.org> and the channels end up as the latest ones
+
+Remember to schedule a task to ask libera.chat to increase the number of users it will accept from chat.emacsconf.org to avoid connection exhaustion errors.
+
+Message I&rsquo;ve posted to support@libera.chat:
+
+Thank you for running libera.chat. We&rsquo;re looking forward to using IRC
+(#emacsconf-gen, #emacsconf-dev) for the discussions for the upcoming
+EmacsConf (Dec 7-8, <https://emacsconf.org>). In the past, we&rsquo;ve needed to
+coordinate with Libera staff to increase the number of connections
+allowed from chat.emacsconf.org during conference days in order to avoid
+connection exhaustion errors. Is that something we can plan now or would
+you like me to bring it up a few days before the conference?
+
+
+<a id="orgd320fcc"></a>
+
+## Etherpad
+
+Success:
+
+- [X] pad.emacsconf.org redirects to this year&rsquo;s entry
+- [X] Each talk has its own Etherpad
+
+
+<a id="media"></a>
+
+## Publishing media to the server and to the wiki
+
+Start of year:
+
+1. Set `media_protect_root` to true in Ansible `group_vars/all.yml`.
+2. `ansible-playbook -i inventory.yml prod-playbook.yml --tags media`
+3. Generate the index with `emacsconf-publish-update-media`
+
+Confirm by setting a submitted talk to `PLAYING` and testing with
+<elisp:emacsconf-publish-media-files-on-change> . The public media
+directory should have the files and the entry should be in the index.
+Switching it back to `TO_STREAM` and calling
+<elisp:emacsconf-publish-media-files-on-change> should remove it.
+
+
+### TODO Switch public media to unprotected root before the conference
+
+1. Clear public media directory.
+2. Set `media_protect_root` to false in Ansible `group_vars/all.yml`.
+3. `ansible-playbook -i inventory.yml prod-playbook.yml --tags media`
+
+You can generate the index with `emacsconf-publish-update-media`.
+
+
+<a id="org005b5de"></a>
+
+## Automated IRC announcements
+
+Success:
+
+- [ ] When a talk starts playing, it is announced in the relevant channel
+
+
+<a id="org33f6301"></a>
+
+## Manual IRC announcements
+
+Success:
+
+- [X] You can /opall, /conftopic, and /broadcast
+
+
+<a id="orgd5b1661"></a>
+
+## Low-res stream
+
+
+<a id="org3875a88"></a>
+
+## Restream to YouTube
+
+
+<a id="org678b044"></a>
+
+## Restream to Toobnix
+
+
+<a id="other"></a>
+
+# Other process notes
+
+
+<a id="bbb-user"></a>
+
+## Adding another user to BBB
+
+ ssh bbb.emacsverse.org
+ docker exec -it greenlight-v2 bundle exec rake user:create["USERNAME","EMAIL","PASSWORD","user"]
+
+
+<a id="cancel-talk"></a>
+
+## When a talk is cancelled
+
+1. Update the status to CANCELLED.
+2. Update the schedule with <elisp:emacsconf-update-schedule>
+3. Regenerate the intros (before, after). <elisp:emacsconf-stream-generate-in-between-pages>, then use <elisp:subed-record-compile-video> in the intros file.
+4. Sync the new intros to the /data/emacsconf/shared/$YEAR/assets/intros directory.
+5. Regenerate the pads: <elisp:emacsconf-pad-prepopulate-all-talks>
+
+
+<a id="change-talk-qa"></a>
+
+## When a talk Q&A changes method
+
+1. Update the talk property.
+2. Update the schedule with <elisp:emacsconf-update-schedule>
+3. Regenerate the intros (before, after). <elisp:emacsconf-stream-generate-in-between-pages>, then use <elisp:subed-record-compile-video> in the intros file.
+4. Sync the new intros to the /data/emacsconf/shared/$YEAR/assets/intros directory.
+5. Regenerate the pads: <elisp:emacsconf-pad-prepopulate-all-talks>
+6. Regenerate talks.json: <elisp:emacsconf-publish-talks-json-to-files>
+
+
+<a id="orgf87ae48"></a>
+
+## Ansible
+
+ git clone git@git.emacsconf.org:pub/emacsconf-ansible