summaryrefslogblamecommitdiffstats
path: root/playbook.org
blob: dcd6e28517effe87dc80770758ec084c9e8b9a30 (plain) (tree)
1
2
3
4
5
6
7
8
9
                                                                                  
                

                                                                                                                                         

            

                     
                                                                                     

              


                 
 


                                                                                          
 
                                                                                  
                                                                                  

                                                                              


                                                                                  






                                                                                  























                                                                                                                                                                                   
         







                                                                              
 



                                                                    
 













                                                                     
 
                                          


                       
 
                                                       
                         
                                                                                   
           
                              


                  
         


                 
                   


                   

        
                                                                                       

                                                                                                                                                            

                                                                                         


                                                          
                                                                                                                  
               
        
             
                                     
                                  
                                                                    
       
                                                                                                                             




                                                                  
                                                                        
                                       

                                            
                             
    
                                                                           


                           
 
                                                                      
                                                                               
                                                    
                                                                                          
                                                                                                                                                             

                                                               
                                                                                                                                                                                                                                                                                                                  
           
                                                                                                                     


                                                                                                                                                                                                                                  
           
                                                                      
                                                       
                                                      
                                                                                                   


                                                                        
               


                
                      


                    

                                                          

                                                                       
                                   
                                                                                      























                                                                                                                                                                                                                                                                                                                                                 






                                                                            
                                                                    

                                                                                                       
                                                       
                                                                  




                                                                  
                                                        
                                                   


                                                            
 
                


                   
 
                                                                                             
                         
            
                                                                                       
                                                                                              
                                                                            
                                                         
                                                           
                                                                  

                                                                                                                                
                                                                   
                                                           
                                       
                     
                                                                                                              

                                   

                       


                   
 



                                  

                                                                               
                                                                              

                         





                                                             
 
              
                   

                                        
                                   
                        
                           
                                            
                     

                                                                                                                                        




                                                                                     
              


                     




                                                             
                                                      

                                                                        
                                          
                                        

                                                                                               


                                                                                                                   

                                                             
                                                                                                            
             
                                        
                                                         
                                                                     
                                                               



                                                                    
                                        


                                                                     
                                                                      

                                                              

                                      
             


                 
 
                                                            

                                                                                    

                                                            
                


               
 
                              
                                        
                                        

                                          

                                    
  
                


                      
                                       


                              

                                                                                          
                                                                                              
  
                              


                                




                                                                                                   
                              


                   





                                                                                                                                   


                          





                                                                                                                     
                                                                                                                                
                             
                                       
                                                                


                              

                                                                                        
                                                                       


                            




                                                                                                
                                                                       


                     
                                                                            

                                                  
                                

                                



                                                                                                                                  

                                                                                                         
 

                                                                                                      
                                                                                
                                                                         
                                                                                                                                                                                                                                                                                                                           



                                                                 





                                                                                              
                              


                      



                                                                                     

                     


                       





                                            


                   
 

                                                                                
                        


                      








                                                  


                     
 


                                                                                     
                                               


                       



                                                     
                                                                                                      






                                                                      


                         
 
                                                                                       








                                                                     


                   


                                                   
                         
                                                    
                                                                             

                                                                                      
                       


                  






















































































































































































































































































































































                                                                                                                                                                                                                                          
                                 


                       








                                                                                                                                                    







































































































































































































































































                                                                                                                                                                                                           
                                                           


                 






















                                                                                                                
                                                                            

                           
                                  
 



                                                                 
 
#+PROPERTY: header-args:emacs-lisp :tangle playbook/emacsconf-playbook.el :eval no
#+OPTIONS: toc:4
#+begin_export md
<!-- This file was automatically generated from playbook.org. Instead of editing the .md, please edit the .org and republish. Thanks! -->
#+end_export

* Commands :noexport:

- [[elisp:(progn (org-md-export-to-markdown) (org-babel-tangle))][Export and tangle]]

* Roles/values
:PROPERTIES:
:CUSTOM_ID: roles
:END:

| B     |                                                                      | bandali |
| CHECK | check-ins                                                            | sachac  |
| HOST  | hosting, streaming, intros, reading, moving questions/answers around | zaeph   |

| ${protected}     | [[/ssh:front:/var/www/media.emacsconf.org/2021/protected/]] |
| ${stream-status} | [[/ssh:front:/var/www/live.emacsconf.org/index.html]]       |
| ${upcoming}      | upcoming.org shared over CRDT                           |
| ${conf}          | conf.org shared over CRDT                               |
| ${playbook}      | playbook.org shared over CRDT                           |
| ${dump}          | [[/ssh:live:/data/]]                                        |
| ${media}         | [[/ssh:front:/var/www/media.emacsconf.org/2021/]]           |
| ${live-main}     | [[/ssh:front:/var/www/live.emacsconf.org/main.html]]        |
| ${live-480p}     | [[/ssh:front:/var/www/live.emacsconf.org/main-480p.html]]   |
| ${live-index}    | [[/ssh:front:/var/www/live.emacsconf.org/index.html]]       |
| ${live-alt}      | [[/ssh:front:/var/www/live.emacsconf.org/alt.html]]         |
| ${profile}       | [[/ssh:live:~/.profile]]                                    |
| ${emacsconf-el}  | https://git.emacsconf.org/emacsconf-el/                 |
|                  |                                                         |
* After the conference
** Update captions

- Merge them into the video with =add-captions.sh=
  #+begin_src sh :eval no
  #!/usr/bin/zsh
  BASE="${1%.*}"
  BASE="${BASE%--main}"
  ffmpeg -y -i "$1" ${BASE}--main.vtt
  if [ -f "${BASE}--normalized.webm" ]; then
     ffmpeg -y -i "$1" -i "${BASE}--normalized.webm" -c:a copy -c:v copy "${BASE}--captioned.webm"
  else  
     ffmpeg -y -i "$1" -i "${BASE}--compressed.webm" -c:a copy -c:v copy "${BASE}--captioned.webm"
  fi
  cp ${BASE}--main.vtt ${BASE}--chapters.vtt ~/vendor/emacsconf-wiki/2021/captions
  scp "${BASE}--captioned.webm" "${BASE}--main.webm"
  scp "${BASE}--main.webm" front:~/protected
  scp "${BASE}--main.vtt" front:~/protected
  scp "${BASE}--chapters.vtt" front:~/protected
  ssh front 'cd protected; chmod ugo+r *'
  #+end_src
- Update Toobnix and Youtube captions with =conf-video-share=.
- Update Toobnix and Youtube descriptions with chapters.
- Update ${conf-year}/${captions}/${slug}.md in the wiki. To make this from scratch, use =M-x conf-prepare-transcript-directives= from the talk heading in the conference Org file.
** Update
** Send thanks  :email:
:PROPERTIES:
:CUSTOM_ID: thanks
:END:

Thank you so much for being part of EmacsConf ${conf-year}! Hundreds of people
enjoyed it, and I'm sure even more will come across the videos in the
days to follow.

Your prerecorded video is available on the talk page at ${url} , and
we've added the questions and comments that we've collected from
IRC/BBB/Etherpad. The recording of your Q&A session is also on the
talk page.

We've also uploaded your talk video to ToobNix (a PeerTube instance)
at ${toobnix-url} and YouTube at ${youtube-url} . If you
want to reupload the video to your own channel, feel free to do
so. You can add the subtitles by downloading them from the talk page
and uploading them to your video. If you let me know where you've
uploaded it, I can switch our playlist to include your version of the
video instead. That way, it might be easier for you to respond to
questions on videos. (Which some people have already been adding,
yay!)

If you would like to share more resources, you can add them to the
talk page or e-mail them to us and we can add them for you.

Thanks again for speaking at EmacsConf!

* Thursday or Friday before the conference
:PROPERTIES:
:CUSTOM_ID: days-before
:END:

- STREAM: Download prerecorded videos from ${protected}
  #+begin_src sh :eval no
  rsync -avzue ssh front:/var/www/media.emacsconf.org/2021/protected/*--main.webm .
  #+end_src
* On the day of the conference
:PROPERTIES:
:CUSTOM_ID: day-of
:END:
** Set up
:PROPERTIES:
:CUSTOM_ID: setup
:END:
*** Arrange screens
:PROPERTIES:
:CUSTOM_ID: screens
:END:

- CHECK:
  - Share ${upcoming}, ${playbook}, and ${conf} via CRDT: =conf-crdt-connect-and-share=
    - Current schedule, filenames/commands for playing, Q&A preference, IRC nick, pronunciation, intro notes, prerec duration, emergency contact information
    - =conf-upcoming-add-subtree=
  - Have #emacsconf-org, #emacsconf, #emacsconf-accessible, and #emacsconf-questions open
  - Use =/opall= to get op privileges in all the channels
  - Start backup process for pad
    #+begin_src sh :eval no :tangle playbook/backup-pad.sh
    while true; do
        curl https://etherpad.wikimedia.org/p/emacsconf-2021/export/html > emacsconf-$(date +"%Y%m%d-%H%M%S").html
      sleep 15m
    done
    #+end_src
  - Computer for alternate streaming:
    - Open browser for joining BBB
    - Open MPV for playing http://live0.emacsconf.org:8000/main.webm
- HOST:
  - rsync the newest --main.webm from front: rsync -avze ssh front:/var/www/media.emacsconf.org/2021/protected/*--main.webm .
  - Check OBS scenes for sharing windows/tabs as a virtual camera:
    - chat.emacsconf.org with #emacsconf
    - Etherpad
    - Schedule
    - next talk page
    - Clock with current time on screen: =watch TZ=America/Toronto date=
  - Set up backchannel for easy viewing
    - ${upcoming}
    - #emacsconf-org and #emacsconf channels
  - (?) Join organizer room S
    
*** Start streaming                                                :stream:
:PROPERTIES:
:CUSTOM_ID: start-streaming
:END:

- HOST: Display getting-ready message and start streaming to main.webm
- HOST: Confirm that the stream is live at https://live.emacsconf.org/main.webm
- B: Update ${status} to say that the stream is live
- CHECK: Start low-resolution stream, confirm at https://live.emacsconf.org/main-480p.webm
  Call this on live0 with $CONF480PASS as the first parameter. The Icecast configuration is on =live0= at [[file:/ssh:live|sudo:/etc/icecast2/icecast.xml]]=.
  #+begin_src sh :eval no :tangle "playbook/restream-lowres.sh"
     PASS=$1
     while true; do ffmpeg -loglevel 24 -f webm -reconnect_at_eof 1 -reconnect_streamed 1  -re -i http://localhost:8000/main.webm -vf scale=854:480 -f webm -c:a copy -b:v 500k -maxrate 1M -bufsize 1M  -content_type video/webm -c:v libvpx icecast://ec2020main480pmu:$PASS@localhost:8000/main-480p.webm; done
  #+end_src
- CHECK: Start Youtube and Toobnix streams. Call this with $YOUTUBE1PASS, $YOUTUBE2PASS, or $TOOBNIX as the parameter
  #+begin_src sh :eval no :tangle "playbook/restream-flv.sh"
     MOUNT=$1
     while true; do ffmpeg -loglevel 24 -i http://localhost:8000/main.webm -cluster_size_limit 2M -cluster_time_limit 5100 -b:v 1M -crf 30 -g 125 -deadline good -threads 4 -vcodec libx264 -acodec libmp3lame -f flv $MOUNT; done
  #+end_src
- CHECK: Verify YouTube and Toobnix streams and the CPU load on live0.
- CHECK: Set the YouTube and Toobnix streams to public.
- B: Verify with #emacsconf that the stream is active.
- CHECK: Play main stream on alternate laptop. Start alternate stream and verify. Update ${status}.
- CHECK: Announce on Twitter (@emacs, @emacsconf, @sachac) and in #emacs
  EmacsConf 2021 starting now: https://emacsconf.org/2021/
   
** Talk process
:PROPERTIES:
:CUSTOM_ID: talk
:END:
*** Check in a speaker
:PROPERTIES:
:CUSTOM_ID: check-in
:END:

Exception: [[*CHECK is unavailable][CHECK is unavailable]]

- Speaker checks in on #emacsconf-org via IRC or via e-mail ~30m before
- CHECK notes IRC nick for speaker.
- CHECK confirms Q&A preference: live/IRC/Etherpad, preferred way of getting questions
- [? unknown] Thanks for checking in! How would you like to handle Q&A
          today - live video, the collaborative Etherpad at
          https://etherpad.wikimedia.org/p/emacsconf-2021 , or IRC (like
          this)?
- [? IRC] Thanks for checking in! Feel free to keep an eye on
          #emacsconf for questions and discussion, and we'll copy things from
          the pad to there. If the volume gets overwhelming, let us know and
          we can forward questions to #emacsconf-questions for you. If you'd
          like to try Q&A over live video or the collaborative pad instead, or
          if you need help, please let us know.
- [? Etherpad] Thanks for checking in! The collaborative pad we'll be
          using for questions is at
          https://etherpad.wikimedia.org/p/emacsconf-2021 . We'll collect
          questions from #emacsconf and put them there. If you'd like to jump
          to your part of the document, you might be able to keep an eye on
          questions. Please let us know if you need help, or if you want to
          switch to live Q&A.
- [? live] Thanks for checking in! I'll send you some private messages
          with instructions, so please check there. Let me know if you don't
          get them.
  - Private messages:
    - (erc-message "PRIVMSG" (format "%s You can use this BBB room: %s . I'll join you there shortly to set up the room and do the last-minute tech check." nick room-url))
    - (erc-message "PRIVMSG" (format "%s The collaborative pad we'll be using for questions is at %s . We'll collect questions from #emacsconf and put them there. If you'd like to jump to your part of the document, you might be able to keep an eye on questions. Alternatively, we can read questions to you." nick conf-collaborative-pad))
    - (erc-message "PRIVMSG" (format "%s Leo Vivier will join when it's time, and he will give you the go-ahead when it's time to present. See you in the BBB room!" nick))
  - CHECK directs speaker to available room with =/checkin <room> <nick>=
  - Speaker joins talk room
  - CHECK makes speaker presenter and moderator, does last-minute tech check
    - Hello, thanks
    - Speaker tries screen sharing and webcam (optional)
    - check screen readability
    - CHECK briefs speaker on process, including:
      - live Q&A: reading questions themselves (can do in any order,
        can skip; coach possible responses for awkward things) or asking HOST to read questions to them
        - HOST can share the pad or IRC; speaker shares screen only if doing demo
      - encouragement of webcam, although it's optional
      - how HOST will join shortly before the prerec ends and then
        give them the go-ahead
      - closing any tabs watching the stream as their talk starts
        (otherwise the audio is confusing)
    - If the speaker will be giving a live presentation, CHECK
      collects emergency contact information (in case of technical
      issues) and shares it with HOST in the CRDT buffer
    - Okay to do other things until the prerec ends
  - CHECK updates ${upcoming} with link to the talk room and
    preferences for Q&A-. CHECK will also /msg the relevant
    information.

*** Present talk
:PROPERTIES:
:CUSTOM_ID: present
:END:

- CHECK announces the next talk on IRC and marks the previous talk as done. (=conf-announce=)
- PAD clears pad colours.
- [? prerec]
  - HOST switches to MPV scene in OBS and plays the video (with captions if available).
    - Exception: [[*Last-minute prerecording submission][Last-minute prerecording submission]]
    - Exception: [[*Last-minute caption update][Last-minute caption update]]
  - [[*Publish information][CHECK publishes information]]
  - [[*Handle Q&A][HOST gets a head start on handling Q&A]]
  - When prerec finishes, HOST switches the OBS scene to show BBB.
- [? live]
  - Exception: [[*Speaker does not have a prerec and has not checked in][Speaker does not have a prerec and has not checked in]]
  - HOST joins the BBB room and double-checks that recording is on.
  - CHECK-alternate joins the BBB room and pauses main MPV.
  - HOST switches to OBS scene for BBB.
  - Speaker presents.
    - Exception: [[*Technical issues during a live presentation][Technical issues during a live presentation]]
  - [? talk needs to be wrapped up]
    - HOST nudges speaker verbally.
  
*** Publish information
:PROPERTIES:
:CUSTOM_ID: publish
:END:

  - CHECK updates the schedule in:
    - ${conf}
    - ${upcoming}
    - wiki
  - CHECK publishes the video to media.emacsconf.org using =conf-publish-files=
  - CHECK commits the wiki page and the captions for the talk.
  - CHECK publishes the video on YouTube and ToobNix using =conf-video-share=.
    - Update description:
      #+begin_example
This video is available under the terms of the
Creative Commons Attribution-ShareAlike 4.0 International (CC
BY-SA 4.0) license.

You can view it using free and open source software at
${url}

${description}
      #+end_example
    - Mark it as public.
    - Add it to EmacsConf 2021 playlist.
    - Update title and description.
    - Mark it as public.
    - Doublecheck subtitles
    - Add it to the EmacsConf 2021 playlist.
  - [? live sections]
    - CHECK does a rough-cut of the recording from ${dump} to get the last X minutes or by time range. There's about a 1-2 minute delay.
      Ex: =(kill-new (conf-dump-get "alt" "10:24" "10:30" "qa_"))=
    - When there's an opportunity to do so:
      - CHECK finetunes the rough-cut recording (trim start and end) and posts it to:
        - media.emacsconf.org/2021
        - wiki page for talk
    
*** Handle Q&A
:PROPERTIES:
:CUSTOM_ID: questions
:END:

Exceptions:
- [[*Speaker has not checked in][Speaker has not checked in]]

- [? live]
  - CHECK-alternate joins the BBB room and pauses MPV.
  - HOST joins the BBB room
  - HOST starts recording in BBB or confirms that it's already recording
  - HOST switches to the BBB scene in OBS.
  - HOST describes how to ask questions.
  - [? No questions yet]
    - HOST thanks speaker, says nice things about talk, and asks a couple of prepared questions
  - [? Awkward question]
    - HOST can try rephrasing the question.
    - HOST adds note to IRC/Etherpad that speakers can answer in any order, skip questions, answer afterwards, etc.
  - [? Q&A needs to be wrapped up]
    - HOST writes in Etherpad/IRC or nudges speaker verbally.
  - CHECK notes the time that the live Q&A finished and switches back to the main stream on CHECK-alternate.
- [? IRC/pad]
  - HOST switches to pad/chat OBS scene.
  - HOST describes Q&A method and shows it on the screen.
  - While there's buffer time before the next talk, HOST can read out
    questions and answers, or transition to the next talk early
  - HOST: It's time for the next talk, but if you want to keep
    discussing the previous talk, please feel free to continue doing
    so on IRC or the pad.
- [? speaker will answer after the conference]
  - HOST switches to pad/chat OBS scene.
  - HOST says the speaker is not available right now, but we'll
    forward the questions to the speaker and we'll post the speaker's
    answers on the wiki page. Leave your contact information if you
    want to be notified, or subscribe to the emacsconf-discuss mailing
    list to get the announcement. Please feel free to continue
    discussing the talk on IRC or the pad.
- [[*Present talk][Present next talk]]
  
** Break time
:PROPERTIES:
:CUSTOM_ID: break
:END:

- CHECK marks the last talk as done. =conf-end-current-talk=
- CHECK stops and restarts the Toobnix restreaming process, and re-checks the stream
- CHECK uses =conf-upcoming-add-subtree= to add the afternoon talks to upcoming.org
- HOST doublechecks network transfer limit and server health
  
** End of stream
:PROPERTIES:
:CUSTOM_ID: end
:END:

- CHECK removes live Q&A links
- CHECK stops ffmpeg process for Youtube
- CHECK stops ffmpeg process for Toobnix
- CHECK stops ffmpeg process for main-480p
- STREAM stops streaming
- B updates the status pages
- bandali figures out the downstream
  
** In case of...
:PROPERTIES:
:CUSTOM_ID: exceptions
:END:
*** Last-minute prerecording submission
:PROPERTIES:
:CUSTOM_ID: last-minute-prerec
:END:

- CHECK will copy it from the FTP upload server to ${protected} and name it appropriately.
- CHECK will notify STREAM with the scp command and the mpv command so that STREAM can choose.
  
*** Last-minute caption update
:PROPERTIES:
:CUSTOM_ID: last-minute-captions
:END:

- CHECK uploads the --main.vtt file to ${protected}
- CHECK notifies STREAM via ${upcoming}
- STREAM uses the provided commands to download the VTT file and load it into MPV with =--sub-file=
  
*** Speaker has not checked in
:PROPERTIES:
:CUSTOM_ID: missing
:END:
- Let the previous talk run a little longer for Q&A; end at least in time for the prerec
- After the previous Q&A wraps up, play the prerec
- [? still not around after prerec finishes]
  - HOST: Speaker might be having some difficulty connecting, but we'll collect your questions on the pad and send them afterwards.
  - Can play next prerec a few minutes early
*** Speaker does not have a prerec and has not checked in
:PROPERTIES:
:CUSTOM_ID: really-missing
:END:
- Let the previous talk do live Q&A/demo if ready
- Close to the time of the missing talk:
  - See if any of the previous speakers want to be set up for an impromptu talk/extension in a BBB room, just in case
  - HOST: The next speaker might be having some difficulty connecting. In the meantime, let's...
    - OR:
      - highlight ongoing discussions
      - invite another speaker for an impromptu extension; mplsCorwin will keep a list of possible speakers who are still active
      - replay a short prerec
      - let mplsCorwin or zaeph fill in
*** Speaker whose talk was reallocated shows up and has a prerec
:PROPERTIES:
:CUSTOM_ID: reallocated-prerec
:END:
- CHECK copies it to ${protected}
- Plan to play prerec at the end of the day, or in any gaps if a live talk falls through
*** Speaker whose talk was reallocated shows up and wants to do it live
:PROPERTIES:
:CUSTOM_ID: reallocated-live
:END:
- See if there's enough time if buffers are shuffled back; if so, set up for a live presentation
- Check for alternate stream volunteers
- [? not enough time] Offer to set up a BBB room for recording or to
  accept a prerecording afterwards, then include it on the site and in
  post-conference communication
*** Alternate stream volunteer wants to stream  (nice to have, at risk)
:PROPERTIES:
:CUSTOM_ID: alternate
:END:
- CHECK gives ALTERNATE the BBB room URL for the talk they are interested in
- ALTERNATE starts streaming to assigned end point
- CHECK confirms stream
- CHECK updates ${stream-status}
- CHECK notifies STREAM and HOST
  - After prerec plays:
    - HOST: This talk has an extended demo/Q&A. You can go to ${alternate-url} to watch it, and we'll post a recording afterwards.
    - HOST sends ${alternate-url} to IRC: Alternate stream for ${title}: ${alternate-url}
- ALTERNATE notifies #emacsconf-org when the stream is done.
- CHECK updates ${stream-status} to note that the alternate stream is finished.

  FFMPEG process for sending the desktop and audio to the $CONFALT mountpoint on Linux with X11 and Alsa:

  1. Set the CONFALT environment variable to icecast://user:password@live0.emacsconf.org:8000/alt.webm
  2. Install pavucontrol if you don't have it already.
  3. Start the following command ([[file:playbook/stream-desktop-and-audio.sh]]:
     #+begin_src sh :eval no :tangle playbook/stream-desktop-and-audio.sh
     while true; do ffmpeg -loglevel 0 -ar 48000 -f alsa -channels 2 -sample_rate 48000 -i default -re -video_size 1280x720 -framerate 25 -f x11grab -i :0.0  -cluster_size_limit 2M -cluster_time_limit 5100 -content_type video/webm -c:v libvpx -b:v 1M -crf 30 -g 125 -deadline good -threads 4  -f webm $CONFALT; done
     #+end_src
  4. Use pavucontrol to set the recording source for the ffmpeg
     command to be the audio monitor, so you get system output as
     well.
     - OR:
       - [? splitting audio] [[#sound][Set up sinks for sound]]
       - [? same audio]
     - Set up audio monitor as the input for FFMPEG
     - MPV goes to MPV sink, browser goes to recording sink, FFMPEG takes in recording monitor

*** Pad malfunction or mess-up
:PROPERTIES:
:CUSTOM_ID: pad-broken
:END:

- PAD resets the pad using https://etherpad.wikimedia.org/p/emacsconf-2021/timeslider
- [? still not recovered]
  - PAD reimports the pad from backup
    
*** CRDT malfunctions
:PROPERTIES:
:CUSTOM_ID: crdt-broken
:END:

- HOST notifies CHECK and tries reconnecting
- [? still doesn't work]
  - Switch to backup Etherpad
    
*** Conduct guidelines issue
:PROPERTIES:
:CUSTOM_ID: conduct
:END:

- HOST addresses it (on-camera if needed) with a reminder and/or a kick or a ban
  
*** CHECK is unavailable
:PROPERTIES:
:CUSTOM_ID: check-gone
:END:

- HOST does check-ins
- HOST refers to conf.org for Q&A preference etc.
- STREAM checks conf.org for prerec filenames etc.
- Dropped goals:
  - Publishing recordings ASAP
  - Updating schedule/wiki on the fly
    
*** HOST is unavailable
:PROPERTIES:
:CUSTOM_ID: host-gone
:END:

- STREAM joins the BBB room and streams directly from there (or streams the prerecs).
- STREAM will do the hosting.
      
*** Technical issues during a live presentation
:PROPERTIES:
:CUSTOM_ID: live-issues
:END:

- HOST tries to contact the speaker
- [? back on track]
  - [? can be squeezed into remaining time]: Continue
  - [? need extra time]: CHECK fiddles with buffer of following talks in conf.org and updates schedule
  - [? need too much extra time (ex: 10min)]: HOST acknowledges
    technical issues and says we may be able to follow up after the
    conference
- [? can't resume]: HOST acknowledges technical issues and says we may
  be able to follow up after the conference
  
*** Big technical issues with streaming
:PROPERTIES:
:CUSTOM_ID: stream-issues
:END:

- HOST notifies #emacsconf and #emacsconf-org and adds a note at the top of the ${pad}.
- HOST updates the 2021.md wiki page
- CHECK publishes prerecordings
  - media.emacsconf.org
  - wiki
  - Toobnix
  - Peertube
- STREAM e-mails the mailing list
  
*** live0 can't handle the load or is close to network transfer limit
:PROPERTIES:
:CUSTOM_ID: network
:END:

- OR:
  - Redirect some viewers via asking in #emacsconf:
    - watch via main-480p
    - watch via Toobnix (if we can get that working)
  - Consider dropping the restream to Toobnix (lower audience?) or to Youtube
  - Add additional node to Linode account for shared transfer pool (TODO: doublecheck)
    
* Before the conference
:PROPERTIES:
:CUSTOM_ID: before
:END:
** Send calls for proposals
:PROPERTIES:
:CUSTOM_ID: cfp-mails
:END:
*** [ANN] EmacsConf 2021 Call for Proposals                         :email:
:PROPERTIES:
:CUSTOM_ID: first-cfp
:END:
Sent on August 5, 2021 to emacsconf-discuss, emacs-devel, emacs-orgmode, emacs-tangents, Cc: emacsconf-org.
Included inline Markdown and attached Org version of the CFP

**** E-mail text
:PROPERTIES:
:SUBJECT:  [ANN] EmacsConf 2021 Call for Proposals
:END:

#+begin_src org
#+title: EmacsConf 2021
#+subtitle: Online Conference
#+date: November 27 and 28, 2021
#+options: author:nil

[[https://emacsconf.org/2021/][EmacsConf 2021]] will be a virtual conference on *November 27 and 28,
2021 (Sat-Sun)*.  If you'd like to present at the conference, please
[[https://emacsconf.org/2021/cfp/][submit your proposal]] by *September 30, 2021*.

EmacsConf 2021 is about the joy of [[https://www.gnu.org/software/emacs/][Emacs]] and Emacs Lisp.  Come share
your experiments and adventures with the Emacs text editor / operating
system / way of life!  We welcome speakers of *all backgrounds* and
*all levels of experience*, including newcomers giving their first
talk.  What have you found exciting about Emacs lately?  What do you
wish someone had told you when you were starting out?  What part of
your workflow might inspire someone to get into Emacs or go deeper?

A great way to get started with writing a proposal is to start by
exploring the programs from previous years: [[https://emacsconf.org/2020/schedule/][2020]], [[https://emacsconf.org/2019/schedule/][2019]], [[https://emacsconf.org/2015/schedule/][2015]], [[https://emacsconf.org/2013/#program][2013]].
You might also find some neat ideas on the [[https://emacsconf.org/2021/ideas/][ideas]] page.  Feel free to
add yours there too!  If you're still not sure, come by our IRC
channel =#emacsconf= on =irc.libera.chat= and say hi.  You can join
the chat using [[ircs://irc.libera.chat:6697/emacsconf][your favourite IRC client]], or by visiting
[[https://chat.emacsconf.org][chat.emacsconf.org]] in your web browser.

All kinds of people use Emacs for all kinds of things.  We'd love it
if EmacsConf 2021 could highlight interesting perspectives and reflect
the diversity of our community.  If you know someone who might have a
good idea for a talk, please reach out to them and encourage them to
submit a proposal.  Many people (especially from underrepresented
groups such as women, people of colour, non-developers, etc.) might
not consider themselves expert enough to share their thoughts.  If you
let them know that you value their knowledge and maybe even suggest
something that you think others would like to hear more about, they
may realize that they have something worth sharing and that we would
love to hear from them.

,* Important dates

For EmacsConf 2021, we are planning for 9am to 5pm Toronto/EST
(2pm-10pm UTC) on November 27 and 28.  Depending on people's
availability, it might be two half-days.

| CFP opens             | August 5, 2021           |
| CFP closes            | September 30, 2021       |
| Speaker notifications | October 15, 2021         |
| Schedule published    | October 31, 2021         |
| EmacsConf 2021!       | November 27 and 28, 2021 |

If you are not available during the conference itself but you have a
neat idea that you'd like to share, please propose it anyway!  You can
always handle questions after the conference, and we might even be
able to coordinate with other Emacs meetups for regional events (if
you're an Emacs meetup organizer and would like to make this happen
let's [[https://emacsconf.org/contact/][get in touch]]!).

Please note that although we will try our best to stick to the above
dates in the coming months, given the current state of the world, we
may have to move things around a bit in case of unforeseen events.
Thank you for your patience and understanding.

,* Talk formats

We'd like EmacsConf 2021 to inspire lots of different people to
explore lots of different things in Emacs.  We hope to put together a
stream of quick ideas followed by lots of conversation over IRC and/or
Q&A sessions, with occasional deep dives into topics that many people
might find interesting or useful.

As you think about your talk, consider what you can share in:

- *Up to 10 minutes total:* What is the core idea?  What do you want
  people to do or remember?  You can show just enough to get people
  interested and then point them to where they can learn more
  afterwards.  You can answer questions over IRC, the pad, or the
  wiki, and there's no limit to how long that conversation can go.

- *Up to 20 minutes total:* How would you flesh out some of the points
  from your 5-10 minute presentation?  How can you show the pieces
  working together?

- *Up to 40 minutes total:* What would benefit from a deep dive?
  How do you keep it engaging?

When writing your proposal, please write an outline of what you plan
to talk about if you have 5-10 minutes.  If you'd like to propose a
longer talk, outline what you might include if you had more time to
present (up to 40 minutes, including Q&A).

Here's an example for a potentially 40-minute talk:

- 5-10 minutes: quick demo of the abc package working together with
  xyz package.
- 20 minutes: same as above, with some customization options to
  accommodate a different workflow.
- 40 minutes: all of the above, including modifying the behaviour of
  the package in order to add something new.

This flexibility would help us in devising the conference schedule so
that as many people as possible could get a chance to present their
ideas, while still allowing for featuring longer deep dive talks.

Other session formats such as tutorials, workshops, and hangouts are
welcome as well, in case you would find those other formats preferable
to a traditional talk format.  If you're interested in these or other
session types, please let us know [[https://lists.gnu.org/mailman/listinfo/emacsconf-org][publicly]] or [[https://lists.gnu.org/mailman/listinfo/emacsconf-org-private][privately]].  We'll be
happy to work something out with you.

,* Office hours

We're aware that it can be intimidating to submit a proposal to a
conference, so we thought we'd try to help!  This year, we're opening
up the doors of our virtual offices for you to come talk to us about
your proposals with hopes of helping you with any hurdles you may be
facing with preparing your proposal.

We'd like to publish a schedule of availabilities of volunteers for
holding office hours.  Currently these volunteers consist of some of
the EmacsConf organizers, but we'd love to have the help of other
members of the Emacs community as well.  If you are a more experienced
Emacs user and would like to help with this, please [[https://emacsconf.org/contact/][get in touch]]!

Our first office hour this year is planned for Saturday, August 14,
from 3pm to 4pm UTC with zaeph (Leo Vivier) at the following
BigBlueButton room: https://bbb.emacsverse.org/b/ban-qye-fd1-5kw.

,* Submitting your proposal

Once you're ready to submit your proposal, the [[https://emacsconf.org/2021/submit/][submit]] page has the
instructions on how to submit your talk.

We use an anonymized submission process to reduce bias and encourage
contribution.  Identifying information will be removed from
submissions by a conference organizer who will not participate in
talk selection.  The anonymized submissions will then be reviewed by
a selection committee.

If your talk is approved, we'd love it if you could help us make sure
the conference runs smoothly.  After we email you with the time
allotted for your talk, we'll ask you to

- prepare a prerecording of your talk, or record it with our help if
  that'd be easier for you; and
- schedule a short tech-check if you'd like to be able to answer
  questions in a live session.

Don't forget to subscribe to our main mailing list, [[https://lists.gnu.org/mailman/listinfo/emacsconf-discuss][emacsconf-discuss]],
for discussion and announcements about the EmacsConf conference.

We look forward to your ideas and submissions!

,* Getting involved

If you would like to help with the conference (planning the sessions,
reviewing proposals, helping with infrastructure, making sessions more
accessible, editing video transcripts, etc.), see our [[https://emacsconf.org/2021/planning/][planning]] page
and come say hi to us at =#emacsconf= on =irc.libera.chat=.

In addition to the [[https://lists.gnu.org/mailman/listinfo/emacsconf-discuss][emacsconf-discuss]] list, feel free to subscribe to
[[https://lists.gnu.org/mailman/listinfo/emacsconf-org][emacsconf-org]] as well, for discussions related to organizing the
conference by the EmacsConf organizers and volunteers.

We'd really appreciate your help in making EmacsConf 2021 the best one
so far!

,* Commitment to freedom

We remain fully committed to freedom, and we will continue
using our infrastructure and streaming setup consisting entirely
of [[https://www.gnu.org/philosophy/free-sw.html][free software]], much like previous EmacsConf conferences.
An article describing our infrastructure and tools is underway,
and will be announced on the emacsconf-discuss list when published.


,* COMMENT Copyright & License

Copyright (c) 2020 Amin Bandali, Sacha Chua, David Bremner
Copyright (c) 2021 Amin Bandali, Sacha Chua, Leo Vivier,
Sebastian Crane

The EmacsConf 2021 Call for Proposals is part of the EmacsConf wiki,
and is dual-licensed under the terms of the Creative Commons
Attribution-ShareAlike 4.0 International Public License; and the GNU
General Public License as published by the Free Software Foundation,
either version 3 of the License, or (at your option) any later
version.

A copy of these two licenses is available on the EmacsConf wiki, in
the [[https://emacsconf.org/COPYING.CC-BY-SA][COPYING.CC-BY-SA]] and [[https://emacsconf.org/COPYING.GPL][COPYING.GPL]] files.

,* COMMENT How to export this file

As of the time of writing this document (Org mode version 9.3.7), the
Org links library (=ol.el=) does not yet recognize =ircs= link types,
and will throw an error if you try to export a file containing them,
such as this file.

To work around that, you can use something along the lines of the
Emacs Lisp code below, by either adding it to your init file, or by
putting the point in the code block and hitting =C-c C-v e= (that is,
hold Ctrl, then hit c followed by v, then release Ctrl, and hit e) to
evaluate the code, working around the issue only for the current
session.

,#+begin_src emacs-lisp :results silent
(org-link-set-parameters
 "ircs"
 :export
 (lambda (link description format)
   "Export an ircs link.
See `org-link-parameters' for details about LINK, DESCRIPTION and
FORMAT."
   (let ((desc (or description link)))
     (pcase format
       (`html (format "<a href=\"ircs:%s\">%s</a>" link desc))
       (`md (format "[%s](ircs:%s)" desc link))
       (_ nil)))))
,#+end_src

#+end_src
*** Second (and final) call for proposals (closing Sep 30)          :email:
:PROPERTIES:
:CUSTOM_ID: second-cfp
:END:
Sent Sept 27, 2021 to the same lists as the CFP
Included inline Markdown and attached Org version of the CFP

**** E-mail text
:PROPERTIES:
:SUBJECT:  [ANN] EmacsConf 2021 Second (and final) Call for Proposals (closing Sep 30)
:END:

Dear fellow Emacsians,

This is the second and final Call for Proposals for EmacsConf 2021,
open until September 30.  Please see below for details on how to send
in your proposal(s), or chat about them with us in the #emacsconf IRC
channel on Libera.Chat.

If you're considering submitting a proposal but think the remaining
time is not enough, please reach out to me off-list as soon as
possible and I'd be happy to try and work something out with you.

I'll close this portion of this email with a big thank you to all the
folks who have submitted their talk proposal(s) or will be doing so.
Myself and the other EmacsConf organizers look forward to reading over
them and getting back to you about them and about the next steps. :)

Best,
amin

P.S. please direct any replies to this post either to myself or to the
emacsconf-discuss list, so as to help avoid generating extra off-topic
chatter in the other lists cc'd in this message.

P.P.S. as a volunteer-run conference, we are always looking for new
fellow volunteers and/or organizers to help with various aspects of
organizing and running the conference, including reviewing proposal
submissions.  If you're interested in getting involved, please come by
our IRC channel or one of our public mailing lists (info below), or
any of the current organizers directly and say hi.  We look forward to
hearing from you!
** Accept talks   :email:
:PROPERTIES:
:CUSTOM_ID: accept
:END:
*** E-mail text
Dear ${name},

We would love to have your talk "${title}" as part of EmacsConf
${conf-year}, and we've allocated ${duration} minutes for
it. ${time-note}

Your talk is tentatively scheduled for ${schedule}.  The times may
move around a bit as we update the schedule, so we'll check in with
you if things change a lot.  We've scheduled a few minutes for live
questions and answers via web conference.  Will you be available
around this time?  If there are more questions, you can also continue
over Etherpad/IRC.

Please plan to prerecord your ${duration}-minute talk(s) by ${deadline}
at the latest.  If you can, please send it in as early as possible.
Submitting your video early lets us ask volunteers to help caption the
video, making your talk more accessible and searchable.

Please see https://emacsconf.org/${conf-year}/prepare/ for tips and
instructions on preparing, recording, and sending in your talk.  If
you have any questions or concerns, please let us know.

Thanks,

Amin Bandali
EmacsConf organization team

P.S. Please keep emacsconf-submit@gnu.org in To or Cc when replying.

** Thank speakers for submissions  :email:
:PROPERTIES:
:CUSTOM_ID: acknowledge-submission
:END:
*** Captions prepared                                               
Because you sent in your video early, we were able to caption it so
that more people can find and enjoy your talk. I've attached the
caption text file in case you want to review it, suggest any
corrections, or use the text in a blog post or elsewhere. Thanks again
for your contribution!
*** Captions pending  
Just a quick note to let you know that I've downloaded your submission for "${title}".

Now we have the following files starting with ${video-slug}:
${details}

A quick check shows that it's about ${video-duration} minutes long.

We'll be working on captioning it over the next few weeks. We'll e-mail
again a little closer to the conference with schedule updates and other
useful information. If you want to upload a new version, you can upload
it the same way you did the previous one.

Please feel free to e-mail us at emacsconf-submit@gnu.org if you need
help updating the talk wiki page at
${url} or if you have other questions.

Thank you so much for all the work you put into preparing a talk for
EmacsConf ${conf-year}, and thank you for submitting the prerecorded video
before the conference!
** Help speakers with tech checks
:PROPERTIES:
:CUSTOM_ID: tech-checks
:END:
- Explain process
- Test audio, webcam, screensharing, collaborative pad
  - Music demos and other things that use system audio will need to be prerecorded (or done through virtual loopback device, maybe? Technical risk.)
  - Multi-monitor setups might not be handled well by BBB; share window instead of desktop
- Check if comfortable checking into IRC: chat.emacsconf.org/?join=emacsconf,emacsconf-org
- Get IRC nick, phone number for emergency contact, store in private wiki
- Try to record name pronunciation
- Encourage webcam for Q&A, although make it clear that it's totally optional
- Possible picture-in-picture approach to maximize screen real estate
** Follow up with speakers we haven't heard from  :email:
:PROPERTIES:
:CUSTOM_ID: follow-up-silence
:END:

I think we haven't heard from you since we accepted your EmacsConf 2021
proposal for "${title}" in early October.
EmacsConf is in less than two weeks, so I wanted to check in with you to
see how you're doing.

Could you please e-mail us to let us know if you're still working on
your prerecorded video, if you're planning to present live, or if you
can't make it this year? I know it's a strange time for everyone, so
no worries if other priorities have come up and you don't have the
time for a presentation.

If you've been having technical issues recording your presentation on
your computer, one of our volunteers could set up a BigBlueButton web
conference with you to record the presentation. You can find a list of
volunteers and their availability at
https://emacsconf.org/2021/prepare/#tech-check . It takes a little time
to get the recording out of BBB, so please plan to record your
presentation before Tuesday, November 23.

If you plan to present live, please go through the self-check at
<https://test.bigbluebutton.org/> . Some speakers have encountered
technical issues with BigBlueButton that they didn't have with Zoom or
Google Meet, so this is something we definitely want to look into
earlier rather than later. If that works for you, please e-mail us
back so that I can keep your timeslot. The tentative schedule for your
talk is on the talk page at ${url} .

*Please e-mail us your plans before ${deadline}.* I'm
planning to shift the schedule around to give more time to confirmed
speakers for Q&A and possibly live demos. If I don't hear from you by
then (maybe an over-enthusiastic spam filter has been swallowing up
all our mail?), I'll probably reallocate the 10 minutes that had
been set aside for your talk. We might be able to squeeze it back in
afterwards or play a video from you at the end of the conference day,
but it would be nice to get the schedule sorted out instead of
scrambling to fill gaps on the day of the conference.

Hope to hear from you by ${deadline}!

Sacha Chua

(Please use Reply to All to keep emacsconf-submit@gnu.org in the loop. Thanks!)
** Send check-in instructions                                        :email:
:PROPERTIES:
:CUSTOM_ID: check-in-instructions
:END:
*** Unknown Q&A preference 
We're looking forward to having you join us at EmacsConf if you can! I
don't seem to have your Q&A preference in my notes, but if you can
join us at EmacsConf for questions and answers over video, IRC, or
Etherpad, that would be great. If not, that's cool, we can collect the
questions and forward them to you after the conference.

If you want to join us, you can get a rough idea of when your talk is
scheduled at ${url} . We'll probably keep
updating the schedule even on the day of the conference. You might want
to check it some time next week to get a rough sense of where it is, and
then check it again on the day of your talk.

Please check in at least 30 minutes before the scheduled start of your
prerecorded talk so that we can deal with small scheduling changes or
technical issues. You can find the check-in process at
https://emacsconf.org/2021/speakers/ .

If something comes up, please let us know as soon as you can. Here's
our emergency contact information:

${emergency-contact-info}

Hope to see you soon if you can join us!

Sacha

*** Speakers will handle Q&A live 

We're looking forward to having you join us for questions and answers at
EmacsConf!

We'll probably keep updating the schedule even on the day of the
conference. You can get a rough idea of when your talk is scheduled at
${url} . You might want to check it some time next week to get a rough
sense of where it is, and then check it again on the day of your talk.

Please check in at least 30 minutes before the scheduled start of your
prerecorded talk so that we can deal with small scheduling changes or
technical issues. You can find the check-in process at
https://emacsconf.org/2021/speakers/ .

If something comes up, please let us know as soon as you can. Here's
our emergency contact information:

${emergency-contact-info}

Looking forward to seeing you soon!

*** Speakers will handle questions after the event  

Thank you so much for contributing a talk for EmacsConf 2021! We're
looking forward to collecting questions and forwarding them to you by
e-mail after the conference. We'll also post the prerecording at the
time that it gets streamed, so people will be able to access it at
${url} once it has gone live.

If it turns out that you can make it to the conference after all, feel
free to drop us a line at #emacsconf-org and we'll let people know
you're around. You can find the check-in process at
https://emacsconf.org/2021/speakers/ .

Thank you so much for being part of EmacsConf 2021!
** Announce schedule and watching instructions  :email:
:PROPERTIES:
:CUSTOM_ID: announce-schedule
:END:
Sent Nov 20, 2021

*** E-mail text
Dear Emacsian friends,

This is it, the final stretch until EmacsConf 2021, coming up on
November 27 and 28 less than a week from now!  A few weeks ago,
we excitedly shared the EmacsConf 201 program with you.  We're now
happy to share the conference schedule with you, i.e. the program
plus each talk's (approximate) scheduled time slot:

                 https://emacsconf.org/2021/schedule

All of the times listed on the schedule are in EST (UTC-5).  You can
click on each talk's title to open its page for more information,
including its scheduled time in your local time (displaying local time
requires running a tiny bit of AGPLv3+-licensed free/libre JavaScript
code, included on the talk pages).  For prerecorded talks, this time
is also when the talk's video will be made available on the same page.
Please note the '~' tildes near the times, indicating that they are
approximations and not meant to be taken as exact times.

On November 27 and 28 you will be able to watch the livestreams via
https://live.emacsconf.org, which also has details on how to watch the
streams using media players that support streaming (like mpv and VLC).
Also, for Asia-Pacific folks, there will be an alternate stream by
LibreAustralia, at 11:00-17:30 UTC+11 on Sunday, November 28.  Please
see the  https://libreau.org/upcoming.html#emacsconf21  page on their
site for more details and how to tune into the alternate stream.

Last but not least, please see the  https://emacsconf.org/2021  page
of the EmacsConf wiki for more details on watching and participating
in the conference.

We hope to see you all around on November 27-28 for EmacsConf 2021!

Amin Bandali, Leo Vivier, and Sacha Chua,
On behalf of the EmacsConf 2021 organizers team
** Follow up regarding prerecorded videos  :email:
:PROPERTIES:
:SUBJECT:  [need answer by Friday noon EST] EmacsConf 2021: Don't have a prerec from you yet, aaah!
:CUSTOM_ID: follow-up-prerecs
:END:

EmacsConf is in a few days and I don't think we have your prerecorded
video yet, so I'm getting miiiildly stressed about the schedule. And
you're probably stressing out about it too, so let's go figure out how
we can make this work.

Option A: If you happen to have the prerecording or can get it done by
tomorrow, we can probably squeeze it in. Please upload it to
ftp-upload.emacsconf.org by following the instructions in
https://emacsconf.org/2021/prepare#ftp-upload , or send us a link using
your favourite file-sharing service (especially if FTP is giving you
problems).

Option B: If you want to present live, it might be an option. I'm a little
worried about the potential for technical issues, since we've had
problems with that in previous EmacsConfs. The tight schedule means
there's not a lot of time to figure things out, and it can be hard to
make something as focused as a prerecorded video when you're doing it
live. We will definitely want to make sure that:
  - your self-serve tech check works: https://test.bigbluebutton.org
    at your convenience;
  - we have your emergency contact information in case of frozen
    Internet connection, etc. Please e-mail us the phone number we can
    use to call you. We promise to use it only for EmacsConf 2021
    emergency coordination; and
  - you check in as early as possible (at least 1 hour before, so we
    know if the speaker before you needs to extend) and let us know
    that you want to do it live https://emacsconf.org/2021/speakers .
    We keep adapting the schedule as things come up, so please check
    https://emacsconf.org/2021/schedule/ on the day of the conference.

If there are technical issues or your talk runs a little over time, we
might have to stop streaming it on the main stream when it's time for
the next talk. We may be able to continue streaming it on the
alternate stream. If so, people can continue watching it there if they
wish to.

Option C: If you can't make it, that's okay. Life gets crazy
sometimes. Please let us know and we can update the wiki. If you
happen to be able to make a prerecorded video afterwards, we can add
that to the wiki, playlists, and announcements. We hope you can join
us next year.

Since EmacsConf is *this weekend* (aaaaaaah), please let us know by
tomorrow noon EST (Friday; 9AM PST, 5PM GMT, 6PM CET) so that we can
keep the time allocated for you in the schedule. If we don't hear from
you, we'll probably reallocate the ${duration} minutes reserved for you so
that other talks can have longer Q&A. If you can still make it, check
in early and let us know so that we can try to work out an alternate
stream for you.  Hope to hear from you soon!

Sacha
** Offer speakers the opportunity to go live if they really really want to  :email:
:PROPERTIES:
:CUSTOM_ID: go-live-maybe
:END:
Sent November 25
*** Email text
Thank you so much for sending in your prerecording. We were able to
caption most of the talks, yay! That will help more people appreciate
the talks, and it'll make it easier for people to look up technical
terms too. The talks will be streamed with open captions, and the talk
pages will have the videos with closed captions when they're streamed.

We're still adapting the schedule as stuff comes up, so please check
the schedule again on the day of the conference and check in as early
as you can. (Check-in instructions: https://emacsconf.org/2021/speakers)

--- Presenting live? ---

If you really, really, really want to present live, we can keep the
prerecorded talk as a backup plan. I'm a little worried about the
potential for technical issues, since we've had problems with that in
previous EmacsConfs. The tight schedule means there's not a lot of
time to figure things out, and it can be hard to make something as
focused as a prerecorded video when you're doing it live. If you want
to present live, we will definitely want to make sure that:
  - your self-serve tech check works: https://test.bigbluebutton.org
    at your convenience;
  - we have your emergency contact information in case of frozen
    Internet connection, etc. Please e-mail us the phone number we can
    use to call you. We promise to use it only for EmacsConf 2021
    emergency coordination; and
  - you check in as early as possible (at least 30 minutes before) and
    let us know that you want to do it live
    https://emacsconf.org/2021/speakers 
Going with the prerecorded video is probably the least-stress option
for everyone, but we wanted to offer you the option to go live just in case.

Looking forward to seeing you soon!

** Compress video

Usage: =compress-video.sh original-file output-file=:

#+begin_src sh :eval no :tangle compress-video.sh
Q=32
ffmpeg -y -i "$1" -c:v libvpx-vp9 -b:v 0 -crf $Q -aq-mode 2 -an -tile-columns 0 -tile-rows 0 -frame-parallel 0 -cpu-used 8 -auto-alt-ref 1 -lag-in-frames 25 -g 240 -pass 1 -f webm -threads 8 /dev/null &&
ffmpeg -y -i "$1" -c:v libvpx-vp9 -b:v 0 -crf $Q -c:a copy -tile-columns 2 -tile-rows 2 -frame-parallel 0 -cpu-used -5 -auto-alt-ref 1 -lag-in-frames 25 -pass 2 -g 240 -threads 8 "$2"
#+end_src

We tried using q56 before, but it was a little too aggressive. Q=32 is the default and is probably a reasonable space vs. quality compromise.

** Experiment with setup to allow MPV / BBB sound isolation
:PROPERTIES:
:CUSTOM_ID: sound
:END:

Set MIC and OUTPUT appropriately.

#+begin_src sh :eval no
MIC=alsa_input.usb-046d_0819_A68D6BE0-02.mono-fallback
OUTPUT=alsa_output.pci-0000_00_1b.0.analog-stereo
if [ "$1" == "-u" ]; then
  pactl unload-module module-loopback
  pactl unload-module module-null-sink
else
  pacmd load-module module-null-sink sink_name=recording sink_properties=device.description=recording channels=2
  pacmd load-module module-null-sink sink_name=mpv sink_properties=device.description=mpv
  pacmd load-module module-loopback source=$MIC sink=recording
  pacmd load-module module-loopback source=mpv.monitor sink=recording
  pacmd load-module module-loopback source=recording.monitor sink=$OUTPUT
fi
#+end_src

You can probably then use =pavucontrol= (choose All Streams instead of
Applications on the Playback tab) or something like the following to
redirect the mpv output to the mpv sink.

#+begin_src sh :eval no
pacmd list-sink-inputs  # notice the ID for the process you want to redirect
pacmd move-sink-input 1 mpv
#+end_src
** Check for video encoding issues

Sometimes the compression may get cut off. You can use
=compile-media-verify-video-frames= from
https://github.com/sachac/compile-media to check that videos have
enough frames for their expected duration