summaryrefslogtreecommitdiffstats
path: root/organizers-notebook
diff options
context:
space:
mode:
Diffstat (limited to 'organizers-notebook')
-rw-r--r--organizers-notebook/index.org369
1 files changed, 369 insertions, 0 deletions
diff --git a/organizers-notebook/index.org b/organizers-notebook/index.org
index 297c0889..22194a3d 100644
--- a/organizers-notebook/index.org
+++ b/organizers-notebook/index.org
@@ -120,6 +120,11 @@ Put inside double square brackets: =!template id=pagedraft=
(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.
+** Announce
+
+- Post CFP to emacsconf-discuss, reddit.com/r/emacs, and in Emacs News
+- Submit to https://foss.events/
+
** Process proposals
1. In the private repository, create a conf.org.
@@ -174,3 +179,367 @@ For each talk:
- Q_AND_A: pad
- Create draft-schedule section in the public organizers notebook for the year
- Add missing items to plan
+** Set up backstage and upload
+
+See [[emacsconf-ansible:README.org]].
+
+Lessons learned:
+
+- Next year, let's get upload.emacsconf.org in place as the domain name so that people don't try to FTP files to it.
+
+** 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
+
+
+** Process uploaded files
+
+Basic setup:
+
+1. Set up the media server and symlinks: [[emacsconf-ansible:README.org]] (Media).
+2. Set up the prerec processing areas on res: [[emacsconf-ansible:README.org]] (Processing prerecs).
+2. Set up the caption processor on res: [[emacsconf-ansible:README.org]] (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
+** 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.
+** 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
+
+** 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)
+* General infrastructure
+** Icecast
+:PROPERTIES:
+:CUSTOM_ID: icecast
+:END:
+
+Success: You can use [[#obs-instructions][OBS+VNC to record]], and the results can be viewed by mpv.
+- [X] Gen
+- [X] Dev
+Also, recordings are available in /data.
+
+New year:
+
+1. Reprovision with
+ #+begin_src sh :eval no
+ ansible-playbook -i inventory.yml prod-playbook.yml --tags stream
+ #+end_src
+ 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:
+ #+begin_src sh
+ 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"
+ #+end_src
+ For dev:
+ #+begin_src sh
+ 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"
+ #+end_src
+ and then view it with
+ #+begin_src sh
+ mpv https://live0.emacsconf.org/gen.webm
+ #+end_src
+** Watching pages
+:PROPERTIES:
+:CUSTOM_ID: watch
+:END:
+
+Success: You can watch at https://live.emacsconf.org.
+- [X] https://live.emacsconf.org goes to the current year'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 --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:
+
+** VNC
+:PROPERTIES:
+:CUSTOM_ID: vnc
+:END:
+
+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
+
+*** Instructions
+:PROPERTIES:
+:CUSTOM_ID: vnc-instructions
+:END:
+
+NOTE: VNC+OBS doesn'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:
+
+ #+begin_example
+ 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 &
+ #+end_example
+
+If you get the following error:
+
+#+begin_example
+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.
+#+end_example
+
+then the VNC server hasn't started yet. You can start it with
+
+#+begin_src sh :eval no
+ssh emacsconf-$TRACK@res.emacsconf.org -p $SSH_PORT /home/emacsconf-$TRACK/bin/track-vnc
+#+end_src
+
+and then connect with:
+
+#+begin_src sh :eval no
+xvncviewer 127.0.0.1:$TRACK_PORT -shared -geometry 1280x720 -passwd vnc-passwd-$TRACK &
+#+end_src
+
+** Streaming with OBS
+:PROPERTIES:
+:CUSTOM_ID: obs
+:END:
+
+Success: Confirm that you can stream
+- [X] gen
+- [X] dev
+
+New year: reprovision with
+
+#+begin_src sh :eval no
+ansible-playbook -i inventory.yml prod-playbook.yml --tags obs
+#+end_src
+
+so that the year is updated in the shell scripts.
+
+*** Instructions
+:PROPERTIES:
+:CUSTOM_ID: obs-instructions
+:END:
+
+1. [[#vnc-instructions][Connect to the VNC session for the track.]]
+
+2. Start *recording* (not streaming). If you don't see OBS when you connect, it's probably on workspace 2, so you can switch with Alt-2. If you still don'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:
+
+ #+begin_example
+ mpv https://live0.emacsconf.org/$TRACK.webm &
+ #+end_example
+
+*** Icecast
+:PROPERTIES:
+:CUSTOM_ID: icecast
+:END:
+
+Success: You can use [[#obs-instructions][OBS+VNC to record]], and the results can be viewed by mpv.
+- [ ] gen
+- [ ] dev
+
+New year: reprovision with
+
+#+begin_src sh :eval no
+ansible-playbook -i inventory.yml prod-playbook.yml --tags stream
+#+end_src
+
+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=.
+** 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't show the subtitles)
+ ah, it'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're testing. [[#obs][Streaming with 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
+
+** 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've posted to support@libera.chat:
+
+Thank you for running libera.chat. We'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'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?
+** Etherpad
+
+Success:
+
+- [X] pad.emacsconf.org redirects to this year's entry
+- [X] Each talk has its own Etherpad
+** Publishing media to the server and to the wiki
+:PROPERTIES:
+:CUSTOM_ID: media
+:END:
+
+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=.
+** Automated IRC announcements
+
+Success:
+
+- [ ] When a talk starts playing, it is announced in the relevant channel
+
+** Manual IRC announcements
+
+Success:
+
+- [X] You can /opall, /conftopic, and /broadcast
+
+** Low-res stream
+** Restream to YouTube
+** Restream to Toobnix
+* Other process notes
+:PROPERTIES:
+:CUSTOM_ID: other
+:END:
+** Adding another user to BBB
+:PROPERTIES:
+:CUSTOM_ID: bbb-user
+:END:
+
+#+begin_src ssh :eval no
+ssh bbb.emacsverse.org
+docker exec -it greenlight-v2 bundle exec rake user:create["USERNAME","EMAIL","PASSWORD","user"]
+#+end_src
+** When a talk is cancelled
+:PROPERTIES:
+:CUSTOM_ID: cancel-talk
+:END:
+
+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
+** When a talk Q&A changes method
+:PROPERTIES:
+:CUSTOM_ID: change-talk-qa
+:END:
+
+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
+
+** Ansible
+
+#+begin_src sh :eval no
+git clone git@git.emacsconf.org:pub/emacsconf-ansible
+#+end_src