summaryrefslogtreecommitdiffstats
path: root/playbook.org
blob: dcd6e28517effe87dc80770758ec084c9e8b9a30 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
#+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