summaryrefslogtreecommitdiffstats
path: root/organizers-notebook.md
diff options
context:
space:
mode:
Diffstat (limited to 'organizers-notebook.md')
-rw-r--r--organizers-notebook.md722
1 files changed, 675 insertions, 47 deletions
diff --git a/organizers-notebook.md b/organizers-notebook.md
index 7e338275..5041f2e0 100644
--- a/organizers-notebook.md
+++ b/organizers-notebook.md
@@ -20,32 +20,48 @@ This document is the general organizers' notebook that can be used as a starting
- [Create the public organizers’ notebook in the wiki](#starting-up-the-conference-planning-process-create-the-public-organizers-notebook-in-the-wiki)
- [Phases and lessons learned](#phases-and-lessons-learned)
- [Draft CFP](#phases-and-lessons-learned-draft-cfp)
- - [Announce](#org3608282)
- - [Process proposals](#orgf94fb47)
- - [Accept proposals](#org74dc473)
+ - [Announce](#phases-and-lessons-learned-announce)
+ - [Process proposals](#phases-and-lessons-learned-process-proposals)
+ - [Accept proposals](#phases-and-lessons-learned-accept-proposals)
- [Draft schedule](#draft-schedule)
- - [Set up backstage and upload](#org4d60026)
- - [Post the schedule](#org42db0c4)
- - [Process uploaded files](#org60f6486)
- - [Generate assets](#org6e66fc5)
- - [Prepare the infrastructure](#org6983794)
- - [Getting ready for captions](#orga1601de)
-- [General infrastructure](#orga2c0410)
+ - [Set up backstage and upload](#phases-and-lessons-learned-set-up-backstage-and-upload)
+ - [Post the schedule](#phases-and-lessons-learned-post-the-schedule)
+ - [Process uploaded files](#phases-and-lessons-learned-process-uploaded-files)
+ - [Generate assets](#phases-and-lessons-learned-generate-assets)
+ - [Prepare the infrastructure](#phases-and-lessons-learned-prepare-the-infrastructure)
+ - [Getting ready for captions](#phases-and-lessons-learned-getting-ready-for-captions)
+ - [Getting ready for the conference](#pre-conf)
+ - [During the conference](#conf)
+ - [After the conference](#phases-and-lessons-learned-after-the-conference)
+- [General infrastructure](#general-infrastructure)
+ - [Linode instance sizes](#general-infrastructure-linode-instance-sizes)
+ - [File uploads](#upload)
- [Icecast](#icecast)
- [Watching pages](#watch)
- [VNC](#vnc)
- - [Streaming with OBS](#org0a63f1c)
- - [IRC web client](#orgaffe686)
- - [Etherpad](#org628c2fe)
+ - [Streaming with OBS](#obs)
+ - [Shell scripts](#general-infrastructure-shell-scripts)
+ - [Backstage](#backstage)
+ - [IRC web client](#general-infrastructure-irc-web-client)
+ - [Etherpad](#general-infrastructure-etherpad)
- [Publishing media to the server and to the wiki](#media)
- - [Automated IRC announcements](#org3ca9756)
- - [Manual IRC announcements](#org4cbb72c)
- - [Low-res stream](#org84b7e1e)
- - [Restream to YouTube](#org1e5d62e)
- - [Restream to Toobnix](#orga5282bc)
+ - [Automated IRC announcements](#general-infrastructure-automated-irc-announcements)
+ - [BigBlueButton](#bbb)
+ - [Manual IRC announcements](#general-infrastructure-manual-irc-announcements)
+ - [Low-res stream](#general-infrastructure-low-res-stream)
+ - [Upload talks to YouTube](#general-infrastructure-upload-talks-to-youtube)
+ - [Restream to YouTube](#general-infrastructure-restream-to-youtube)
- [Other process notes](#other)
- [Adding another user to BBB](#bbb-user)
- - [Ansible](#org8ae0b84)
+ - [When a talk is added after the schedule has already been drafted](#other-process-notes-when-a-talk-is-added-after-the-schedule-has-already-been-drafted)
+ - [When a talk is cancelled](#cancel-talk)
+ - [When a talk changes title](#other-process-notes-when-a-talk-changes-title)
+ - [When a talk Q&A changes method](#change-talk-qa)
+ - [To play the other stream](#other-process-notes-to-play-the-other-stream)
+ - [When a system is down](#other-process-notes-when-a-system-is-down)
+ - [When we need to bring on a last-minute volunteer](#other-process-notes-when-we-need-to-bring-on-a-last-minute-volunteer)
+ - [Checking people in](#other-process-notes-checking-people-in)
+ - [Ansible](#other-process-notes-ansible)
<a id="starting-up-the-conference-planning-process"></a>
@@ -146,7 +162,7 @@ Put inside double square brackets: `!template id=pagedraft`
- Put the speaker introduction right after the talk description for easier web page copying.
-<a id="org3608282"></a>
+<a id="phases-and-lessons-learned-announce"></a>
## Announce
@@ -154,7 +170,25 @@ Put inside double square brackets: `!template id=pagedraft`
- Submit to <https://foss.events/>
-<a id="orgf94fb47"></a>
+### Promote the conference
+
+Submit to <https://foss.events/>
+
+Maybe it would be good to get in touch with podcasts like
+
+- [System Crafters](https://systemcrafters.net/)
+- [This Week in Linux](https://www.youtube.com/playlist?list=PLbFVcOQ-YH_LRP687N0YeN78YZmBp5wqF)
+- [Linux Unplugged](https://linuxunplugged.com/)
+- [Ask Noah](http://asknoahshow.com/)
+- [Linux After Dark](https://linuxafterdark.net/)
+- [Lispy Gopher Show](https://anonradio.net/)
+
+etc to give a heads up on EmacsConf before it
+happens and also mention to them when videos are
+available to spark more interest.
+
+
+<a id="phases-and-lessons-learned-process-proposals"></a>
## Process proposals
@@ -183,7 +217,7 @@ When proposals come in:
PUBLIC\_EMAIL
-<a id="org74dc473"></a>
+<a id="phases-and-lessons-learned-accept-proposals"></a>
## Accept proposals
@@ -216,7 +250,7 @@ For each talk:
- Add missing items to plan
-<a id="org4d60026"></a>
+<a id="phases-and-lessons-learned-set-up-backstage-and-upload"></a>
## Set up backstage and upload
@@ -227,7 +261,7 @@ Lessons learned:
- Next year, let&rsquo;s get upload.emacsconf.org in place as the domain name so that people don&rsquo;t try to FTP files to it.
-<a id="org42db0c4"></a>
+<a id="phases-and-lessons-learned-post-the-schedule"></a>
## Post the schedule
@@ -238,7 +272,7 @@ Lessons learned:
- Update talks.md to refer to watch.md as well
-<a id="org60f6486"></a>
+<a id="phases-and-lessons-learned-process-uploaded-files"></a>
## Process uploaded files
@@ -263,7 +297,7 @@ Process:
3. <elisp:emacsconf-publish-backstage-index>
-<a id="org6e66fc5"></a>
+<a id="phases-and-lessons-learned-generate-assets"></a>
## Generate assets
@@ -281,7 +315,7 @@ Process:
- Splice together into a file that will be processed with subed-record-compile-video.
-<a id="org6983794"></a>
+<a id="phases-and-lessons-learned-prepare-the-infrastructure"></a>
## Prepare the infrastructure
@@ -303,7 +337,7 @@ Checklist:
- [ ] Icecast
-<a id="orga1601de"></a>
+<a id="phases-and-lessons-learned-getting-ready-for-captions"></a>
## Getting ready for captions
@@ -314,11 +348,228 @@ Onboarding:
- Send backstage information <elisp:emacsconf-mail-backstage-info-to-volunteer> . (Can be sent to all captioning volunteers with <elisp:emacsconf-mail-backstage-info-to-captioning-volunteers>)
-<a id="orga2c0410"></a>
+<a id="pre-conf"></a>
+
+## Getting ready for the conference
+
+<elisp:emacsconf-pad-prepopulate-shift-hyperlists>
+
+
+### TODO Send check-in details, schedule update, etc.
+
+
+### Two days before the conference
+
+Go through the :tminustwo: tags.
+
+
+### One day before the conference
+
+Go through the :tminusone: tags.
+
+- Set `emacsconf-publishing-phase` to `conference`.
+- Set emacsconf-publish-include-pads to t and republish the info pages.
+
+
+<a id="conf"></a>
+
+## During the conference
+
+<elisp:emacsconf-pad-open-shift-hyperlist>
+
+
+<a id="phases-and-lessons-learned-after-the-conference"></a>
+
+## After the conference
+
+
+### Capture stats
+
+2024 stats
+
+Saturday:
+gen: 177 peak + 14 peak lowres
+dev: 226 peak + 79 peak lowres
+
+Sunday:
+gen: 89 peak + 10 peak lowres
+
+meet peak 409% CPU (100% is 1 CPU), average 69.4%
+front peak 70.66% CPU (100% is 1 CPU)
+live peak 552% CPU (100% is 1 CPU) average 144%
+res peak 81.54% total CPU (each OBS ~250%), mem 7GB used
+
+so far we have used 1.2TB of transfer this month
+
+
+### Back up the data
+
+
+#### Icecast
+
+rsync -avze ssh live:&rsquo;/data/emacsconf-2024-\*&rsquo; media:~/2024
+
+rsync -avze ssh live:&rsquo;/data/emacsconf-2024-\*&rsquo; .
+
+
+#### BigBlueButton
+
+rsync -avze ssh root@bbb:/var/bigbluebutton/ bigbluebutton/
+
+ssh root@66.175.208.243 &rsquo;dd if=/dev/sda bs=5M &rsquo; | dd of=bbb-img-2024-12-08.img status=progress
+
+The img can be loaded with
+sudo losetup &#x2013;find &#x2013;show bbb-img-2024-12-08.img
+sudo mount /dev/loop10 test
+cd test
+
+
+##### Reviewing all the Q&A durations and chat messages
+
+ (let ((default-directory "/home/sacha/proj/emacsconf/2024/backups/bigbluebutton/published/video"))
+ (mapconcat
+ (lambda (dir)
+ (let ((chat (xml-parse-file
+ (expand-file-name "video.xml" dir)))
+ (metadata (xml-parse-file
+ (expand-file-name "metadata.xml" dir))))
+ (concat
+ "- "
+ (dom-text (car (dom-by-tag metadata 'meetingName))) " ("
+ (format-seconds "%.2h:%z%.2m:%.2s"
+ (/ (string-to-number (dom-text (dom-by-tag metadata 'duration)))
+ 1000))
+ ")"
+ "\n"
+ (if (dom-by-tag chat 'chattimeline)
+ (mapconcat (lambda (node)
+ (concat " - " (dom-attr node 'name) ": "
+ (dom-attr node 'message) "\n"))
+ (dom-by-tag chat 'chattimeline)
+ "")
+ "")
+ "")
+ )
+ )
+ (directory-files "." nil "-"))
+ )
+
+- Copy IRC logs to cache and therefore to backstage: (ex: 2024-12-07-emacsconf-gen.txt)
+
+
+### Combine the IRC logs and the pads, and add them to the wiki
+
+(did we e-mail the speakers before or after?)
+
+
+### Process the Q&A recordings and live presentations
+
+- Save answers videos as &#x2013;answers.webm.
+- From the pad file: emacsconf-extract-copy-pad-to-wiki
+- update cache
+- Set `QA_PUBLIC` property to t as each Q&A gets processed.
+- change status to `TO_INDEX_QA`
+- emacsconf-publish-media-files-on-change
+- emacsconf-publish-info-pages-for-talk
+
+Indexing
+
+- emacsconf-extract-insert-note-with-question-heading
+- emacsconf-subed-make-chapter-file-based-on-comments
+- change status to `TO_CAPTION_QA`
+
+Also copy the YouTube comments and IRC comments
+emacsconf-extract-irc-anonymize-log
+
+
+### Send thank-you emails to the speakers
+
+
+### Notify emacs-discuss that the Q&A is up
+
+<https://lists.gnu.org/archive/html/emacsconf-discuss/2024-12/msg00000.html>
+
+ Hello, everyone!
+
+ https://emacsconf.org/2024/talks and https://media.emacsconf.org/2024
+ should have the talks and Q&A sessions now, hooray, including chapter
+ indices for the Q&A. I've also copied over notes from Etherpad and IRC
+ on the talk pages, and I've e-mailed them to the speakers so they can
+ update the wiki directly or send in additional answers.
+
+ BigBlueButton audio mixing is kinda iffy, so I'm holding off on
+ uploading the Q&A videos (and the live talk for secrets) to
+ YouTube/Toobnix until Leo and other volunteers have a listen to see
+ whether the audio needs to be tweaked, and maybe even to do some kind of
+ normalization. Unfortunately, recordings with separate audio tracks per
+ participant aren't available--it would be cool to figure that out next
+ year--so some talks might need some manual processing. (Please feel free
+ to volunteer if that's up your alley!) In the meantime, you can check
+ out the Q&A videos from the talk pages on the wiki. Please let us know
+ if there's anything that needs tweaking.
+
+ Enjoy!
+
+ Sacha
+
+
+### Write a report
+
+Sample: <https://emacsconf.org/2023/report/>
+
+
+### Send thank-you emails to the volunteers
+
+emacsconf-mail-template-ask-volunteer-for-mailing-address
+
+
+### Process the lessons learned
+
+
+<a id="general-infrastructure"></a>
# General infrastructure
+<a id="general-infrastructure-linode-instance-sizes"></a>
+
+## Linode instance sizes
+
+
+### Production
+
+- front0 shared Linode 32GB
+- live0 shared Linode 64GB
+- meet Dedicated CPU 16GB
+
+
+### Dormant
+
+Resize disk to 25GB, copying large files to media if needed
+
+- nanode front0
+- nanode live0
+- delete meet after downloading all the recordings, or resize down to nanode
+
+
+<a id="upload"></a>
+
+## File uploads
+
+[psi-4ward/psitransfer: Simple open source self-hosted file sharing solution](https://github.com/psi-4ward/psitransfer)
+
+Before the conference:
+
+1. Set `upload_enabled` to `true` in `prod-vars.yml` and run `ansible-playbook -i inventory.yml prod-playbook.yml --tags upload`.
+2. Confirm that <https://upload.emacsconf.org> has the upload interface and works with the password.
+3. Use `emacsconf-mail-template-to-all-groups` and `emacsconf-mail-upload-and-backstage-info` to e-mail the upload information to all speakers.
+
+After the conference:
+
+1. Set `upload_enabled` to `false` in `prod-vars.yml` and run `ansible-playbook -i inventory.yml prod-playbook.yml --tags upload`.
+2. Confirm that <https://upload.emacsconf.org> shows the in-between page.
+
+
<a id="icecast"></a>
## Icecast
@@ -394,7 +645,7 @@ Setting up
<a id="vnc-instructions"></a>
-#### Instructions
+### Instructions
NOTE: VNC+OBS doesn&rsquo;t work well if you have a window manager that
automatically resizes windows, like i3. Please configure your window
@@ -404,7 +655,7 @@ manager so that the VNC window is not resized.
2. Set up your local environment:
- gen: `export TRACK=gen; export TRACK_PORT=5905; export SSH_PORT=46668`
- - dev: export TRACK=dev; export TRACK\_PORT=5906; export SSH\_PORT=46668
+ - dev: `export TRACK=dev; export TRACK_PORT=5906; export SSH_PORT=46668`
3. Copy the password:
@@ -433,7 +684,7 @@ and then connect with:
xvncviewer 127.0.0.1:$TRACK_PORT -shared -geometry 1280x720 -passwd vnc-passwd-$TRACK &
-<a id="org0a63f1c"></a>
+<a id="obs"></a>
## Streaming with OBS
@@ -451,7 +702,7 @@ so that the year is updated in the shell scripts.
<a id="obs-instructions"></a>
-#### Instructions
+### Instructions
1. [Connect to the VNC session for the track.](#vnc-instructions)
@@ -478,7 +729,121 @@ so that the year is updated in the configuration.
This is on live.emacsconf.org and can be restarted with `/etc/init.d/emacsconf restart`.
-<a id="orgaffe686"></a>
+<a id="general-infrastructure-shell-scripts"></a>
+
+## Shell scripts
+
+Success: From the commandline, hosts can:
+
+- [X] play just the intro: intro $SLUG
+- [X] play a file without an intro: play $SLUG
+- [X] play a file with an intro: play-with-intro $SLUG (hmm, this didn&rsquo;t show the subtitles)
+ ah, it&rsquo;s because the intros need to be in the cache dir?
+- [X] open the Q&A for a talk: handle-qa $SLUG
+ - [X] open the pad: pad $SLUG
+ - [X] open BBB: bbb $SLUG
+- [ ] do the whole thing: handle-session $SLUG
+- [ ] rebroadcast the other stream:
+ - rebroadcast gen
+ - rebroadcast dev
+- [ ] control background music: music, stop-music
+
+Setup:
+
+- OBS must be streaming from the stream you&rsquo;re testing. [Streaming with OBS](#obs)
+- You may want to generate test assets and copy them over to the assets/stream directory.
+- Generate all the overlays and copy them to assets/overlays
+- Set up the assets/music directory
+
+
+<a id="backstage"></a>
+
+## Backstage
+
+Update this with <elisp:emacsconf-publish-backstage-index>
+
+Explanation of files:
+
+<table>
+
+
+<colgroup>
+<col class="org-left">
+
+<col class="org-left">
+</colgroup>
+<tbody>
+<tr>
+<td class="org-left">&#x2013;original.mp4/mov/webm</td>
+<td class="org-left">original file as uploaded by the speaker</td>
+</tr>
+
+<tr>
+<td class="org-left">&#x2013;silence.mp4/mov/webm</td>
+<td class="org-left">silence sample if uploaded by speaker</td>
+</tr>
+
+<tr>
+<td class="org-left">&#x2013;reencoded.webm</td>
+<td class="org-left">converted to .webm format and compressed</td>
+</tr>
+
+<tr>
+<td class="org-left">&#x2013;reencoded.opus</td>
+<td class="org-left">audio only</td>
+</tr>
+
+<tr>
+<td class="org-left">&#x2013;normalized.opus</td>
+<td class="org-left">normalized audio</td>
+</tr>
+
+<tr>
+<td class="org-left">&#x2013;reencoded.vtt</td>
+<td class="org-left">WhisperX captions, WebVTT format</td>
+</tr>
+
+<tr>
+<td class="org-left">&#x2013;reencoded.json</td>
+<td class="org-left">WhisperX word data</td>
+</tr>
+
+<tr>
+<td class="org-left">&#x2013;reencoded.srt</td>
+<td class="org-left">WhisperX captions, SRT format</td>
+</tr>
+
+<tr>
+<td class="org-left">&#x2013;reencoded.txt</td>
+<td class="org-left">WhisperX captions, plain text</td>
+</tr>
+
+<tr>
+<td class="org-left">&#x2013;main.vtt</td>
+<td class="org-left">edited captions</td>
+</tr>
+
+<tr>
+<td class="org-left">&#x2013;main&#x2013;chapters.vtt</td>
+<td class="org-left">chapter markers</td>
+</tr>
+
+<tr>
+<td class="org-left">&#x2013;main.txt</td>
+<td class="org-left">captions as text (optional)</td>
+</tr>
+
+<tr>
+<td class="org-left">&#x2013;main.webm</td>
+<td class="org-left">version for streaming based on the most recent resources</td>
+</tr>
+</tbody>
+</table>
+
+Other files might also have been uploaded by the speaker, such as slides or notes.
+
+
+<a id="general-infrastructure-irc-web-client"></a>
## IRC web client
@@ -500,7 +865,7 @@ connection exhaustion errors. Is that something we can plan now or would
you like me to bring it up a few days before the conference?
-<a id="org628c2fe"></a>
+<a id="general-infrastructure-etherpad"></a>
## Etherpad
@@ -509,6 +874,10 @@ Success:
- [X] pad.emacsconf.org redirects to this year&rsquo;s entry
- [X] Each talk has its own Etherpad
+Lessons learned:
+
+- After 2024: Added pronouns and pronunciation to the pad template since that&rsquo;s what the hosts will be looking at
+
<a id="media"></a>
@@ -527,7 +896,7 @@ Switching it back to `TO_STREAM` and calling
<elisp:emacsconf-publish-media-files-on-change> should remove it.
-### TODO Switch public media to unprotected root before the conference
+### TODO Switch public media to unprotected root before the conference :tminustwo:
1. Clear public media directory.
2. Set `media_protect_root` to false in Ansible `group_vars/all.yml`.
@@ -536,7 +905,7 @@ Switching it back to `TO_STREAM` and calling
You can generate the index with `emacsconf-publish-update-media`.
-<a id="org3ca9756"></a>
+<a id="general-infrastructure-automated-irc-announcements"></a>
## Automated IRC announcements
@@ -545,7 +914,131 @@ Success:
- [ ] When a talk starts playing, it is announced in the relevant channel
-<a id="org4cbb72c"></a>
+<a id="bbb"></a>
+
+## BigBlueButton
+
+ssh orga@media.emacsconf.org &ldquo;~/bin/bbb-before sat-open&rdquo;
+<https://media.emacsconf.org/2024/current/bbb-sat-open.html>
+
+ssh orga@media.emacsconf.org &ldquo;~/bin/bbb-open sat-open&rdquo;
+
+After restarting, and in case of &ldquo;Firefox can’t establish a connection to the server at wss://bbb.emacsverse.org/graphql.&rdquo;
+
+ssh root@bbb
+cd greenlight-v3
+docker compose restart
+
+Sizes:
+
+- dormant: 1 GB nanode
+- testing: 4 core 8 GB shared CPU
+- production: 8 core 16 GB dedicated CPU (roughly half CPU load for 107 simultaneous users, 2024)
+
+
+### Installing BigBlueButton
+
+1. Create the instance.
+ - Linode 4core 8GB shared CPU
+ - Image: Ubuntu 22.04
+2. Update the DNS for bbb.emacsverse.org with its IP address.
+3. Download the BBB installer and make it executable.
+4. ufw allow 16384:32768/udp
+5. Run the BBB installer: `./bbb-install.sh -v jammy-300 -s bbb.emacsverse.org -e emacsconf@sachachua.com -g`
+6. `sudo apt install bbb-playback-video` and then follow the instructions at [Server Customization | BigBlueButton](https://docs.bigbluebutton.org/3.0/administration/customize/#install-additional-recording-processing-formats) .
+ - /usr/local/bigbluebutton/core/scripts/bigbluebutton.yml:
+
+ steps:
+ archive: 'sanity'
+ sanity: 'captions'
+ captions:
+ - 'process:presentation'
+ - 'process:video'
+ 'process:presentation': 'publish:presentation'
+ 'process:video': 'publish:video'
+ - systemctl restart bbb-rap-resque-worker.service
+7. docker exec -it greenlight-v3 bundle exec rake admin:create[&rsquo;name&rsquo;,&rsquo;email&rsquo;,&rsquo;password&rsquo;]
+
+
+### System audio limitations
+
+Sharing system audio by changing the audio device to &ldquo;Built-in Audio Analog Stereo&rdquo; is very choppy, only gets captured in the recording if I&rsquo;m using Firefox (not Chrome) AND there&rsquo;s at least one listener, and doesn&rsquo;t allow simultaneous narration from the speaker.
+
+Using pulseaudio to change the app&rsquo;s recording device to the audio monitor results in smoother audio (because it&rsquo;s pretending to be the microphone), but still doesn&rsquo;t allow simultaneous narration from the speaker.
+
+Combining microphone + system audio into a new virtual microphone source is probably more complicated than we want to walk speakers through.
+
+BBB says sharing system audio works only if you use Chrome on Mac OS X or Microsoft Windows (<https://support.bigbluebutton.org/hc/en-us/articles/1500005315642-Can-I-play-a-video-using-screen-sharing>). I tested it on Linux and sharing system audio is not an option. If you happen to know of any more elegant way to do this, I&rsquo;d love to hear it.
+
+Related: <https://github.com/bigbluebutton/bigbluebutton/issues/8632>
+
+
+### Creating talk BBB rooms
+
+- `docker exec -it greenlight-v3 /bin/bash`
+- `bundle exec rails console`
+- `user_id = User.find_by_email("sacha@sachachua.com").id`
+
+ (mapconcat (lambda (group)
+ (format
+ "Room.create(user_id: user_id, name: \"%s - %s\")\n"
+ (plist-get (cadr group) :speakers)
+ (string-join (mapcar (lambda (talk) (plist-get talk :slug))
+ (cdr group)))))
+ (emacsconf-mail-groups (emacsconf-active-talks (emacsconf-get-talk-info)))
+ "")
+
+- <elisp:emacsconf-publish-bbb-static-redirects>
+
+Print out the room IDs with
+
+ Room.all.each { |x| puts x.friendly_id + " " + x.name }; nil
+
+It&rsquo;s possible to change the friendly\_id and then use `x.save!`.
+
+
+### Setting up moderator access codes
+
+
+### Backing up BBB :backup:
+
+rsync -avze ssh root@bbb:/var/bigbluebutton/ bigbluebutton/
+
+ssh root@bbb &rsquo;tar zcvf - /var/bigbluebutton /etc/bigbluebutton /root/greenlight-v3 /usr/local/bigbluebutton /usr/share/bbb-web&rsquo; > bbb-backup-$(date &ldquo;+%Y-%m-%d&rdquo;).tar.gz
+
+ssh root@bbb &rsquo;dd if=/dev/sda bs=5M &rsquo; | dd of=bbb-img-$(date &ldquo;+%Y-%m-%d&rdquo;).img status=progress
+
+
+### Spinning BBB up again
+
+<span class="timestamp-wrapper"><span class="timestamp">[2025-01-22 Wed] </span></span> &#x2026; actually, this ran into some issues with the certificate, so I&rsquo;m just going to do a reinstall.
+
+Previous notes
+
+1. Create a Nanode.
+2. Update the DNS for bbb.emacsverse.org with its IP address. (dns.he.net)
+3. Reboot into Rescue mode. In Lish:
+
+ passwd # set interactively
+ sed -i -e 's/#PasswordAuthentication yes/PasswordAuthentication yes/g' /etc/ssh/sshd_config
+ echo 'PermitRootLogin yes' >> /etc/ssh/sshd_config
+ service ssh start
+4. From the backup directory:
+ gunzip -c bbb-img-2024-12-08.img.gz | ssh root@bbb.emacsconf.org &ldquo;dd of=/dev/sda bs=4M status=progress oflag=direct iflag=fullblock&rdquo;
+5. After I resized to 4core 8GB RAM, I couldn&rsquo;t log in with SSH, so I used the Linode shell. `sshd -t` said no host keys available. Fix:
+
+ ssh-keygen -A
+ service ssh --full-restart
+6. ./bbb-install.sh -v jammy-300 -s bbb.emacsverse.org -e emacsconf@sachachua.com
+
+Resources:
+
+- <https://overto.eu/posts/gunzip-into-dd/>
+- <https://www.linode.com/community/questions/20386/how-do-i-ssh-to-linode-from-the-finnix-boot-in-order-to-copy-my-local-vm-over-to>
+- <https://github.com/bigbluebutton/bigbluebutton/issues/9485>
+
+
+<a id="general-infrastructure-manual-irc-announcements"></a>
## Manual IRC announcements
@@ -554,21 +1047,58 @@ Success:
- [X] You can /opall, /conftopic, and /broadcast
-<a id="org84b7e1e"></a>
+<a id="general-infrastructure-low-res-stream"></a>
## Low-res stream
-
-<a id="org1e5d62e"></a>
+Should be automatic, handled by Icecast
+backup on live:
+
+- /usr/local/bin/emacsconf-lowres-gen-on-connect
+- /usr/local/bin/emacsconf-lowres-dev-on-connect
+
+
+<a id="general-infrastructure-upload-talks-to-youtube"></a>
+
+## Upload talks to YouTube
+
+[Channel videos](https://studio.youtube.com/channel/UCwuyodzTl_KdEKNuJmeo99A/videos/upload?filter=%5B%5D&sort=%7B%22columnType%22%3A%22date%22%2C%22sortOrder%22%3A%22DESCENDING%22%7D)
+
+ (seq-keep
+ (lambda (o)
+ (when (and (string= (plist-get o :status) "TO_STREAM")
+ (not (plist-get o :youtube)))
+ (list
+ (plist-get o :slug)
+ (org-link-make-string
+ (concat "copy:"
+ )
+ "video file")
+ (org-link-make-string
+ (format "elisp:(emacsconf-publish-video-description \"%s\" t)"
+ (plist-get o :slug))
+ "desc")
+ (if (emacsconf-talk-file o "--main.vtt")
+ (org-link-make-string
+ (concat "copy:"
+ (emacsconf-talk-file o "--main.vtt"))
+ "sub file")
+ "")
+ (org-link-make-string
+ (concat "elisp:(emacsconf-set-property-from-slug \""
+ (plist-get o :slug)
+ "\" \"YOUTUBE\" (read-string \"YouTube URL: \"))"
+ )
+ "save")
+ (plist-get o :scheduled))))
+ (emacsconf-publish-prepare-for-display (emacsconf-get-talk-info)))
+
+
+<a id="general-infrastructure-restream-to-youtube"></a>
## Restream to YouTube
-<a id="orga5282bc"></a>
-
-## Restream to Toobnix
-
-
<a id="other"></a>
# Other process notes
@@ -582,7 +1112,105 @@ Success:
docker exec -it greenlight-v2 bundle exec rake user:create["USERNAME","EMAIL","PASSWORD","user"]
-<a id="org8ae0b84"></a>
+<a id="other-process-notes-when-a-talk-is-added-after-the-schedule-has-already-been-drafted"></a>
+
+## When a talk is added after the schedule has already been drafted
+
+- [X] Add the talk to conf.org
+- [X] Add the talk ID to the draft schedule
+- [X] Run the draft schedule block
+- [X] <elisp:emacsconf-schedule-update-from-info>
+- [X] <elisp:emacsconf-publish-talks-json-to-files>
+- [X] Generate pads with `ansible-playbook -i inventory.yml prod-playbook.yml --tags pad`
+- [X] <elisp:emacsconf-set-file-prefixes>
+- [X] <elisp:emacsconf-update-schedule>
+- [X] <elisp:emacsconf-stream-generate-overlays>
+- [X] <elisp:emacsconf-stream-generate-test-videos>
+- [X] `rsync -avze ssh ~/proj/emacsconf/2024/assets/ res:/data/emacsconf/shared/2024/assets/`
+- [X] Send the upload instructions
+- [X] Generate the intro text
+- [ ] Record the intro
+
+
+<a id="cancel-talk"></a>
+
+## When a talk is cancelled
+
+1. Update the status to CANCELLED. Update that specific talk with <elisp:emacsconf-publish-info-pages-for-talk>.
+2. Rejig the schedule if needed, and update with <elisp:emacsconf-schedule-update-from-info>
+3. Update the published schedule with <elisp:emacsconf-update-schedule> and push the wiki.
+4. Regenerate the intros (before, after). <elisp:emacsconf-stream-generate-in-between-pages>, then use <elisp:subed-record-compile-video> in the intros file.
+5. Resync the cache directory.
+6. Consider updating the screenshots for sat-open and sun-open.
+
+
+<a id="other-process-notes-when-a-talk-changes-title"></a>
+
+## When a talk changes title
+
+1. Update the title in conf.org.
+2. Delete the FILE\_PREFIX property.
+3. Call <elisp:emacsconf-set-file-prefix-if-needed>.
+4. Rename existing files with <elisp:emacsconf-update-file-prefixes>.
+5. Update the intro VTT file with the new title.
+6. Update the wiki page for the talk.
+7. Regenerate the in-between images with <elisp:emacsconf-stream-generate-in-between-pages>
+8. Rerecord and recompile the intro, and recompile the intro for the talk after it.
+9. <elisp:emacsconf-update-schedule>
+10. <elisp:emacsconf-pad-prepopulate-hyperlists>
+
+
+<a id="change-talk-qa"></a>
+
+## When a talk Q&A changes method
+
+1. Update the talk property.
+2. Update the schedule with <elisp:emacsconf-update-schedule>
+3. Regenerate the intros (before, after). <elisp:emacsconf-stream-generate-in-between-pages>, then use <elisp:subed-record-compile-video> in the intros file.
+4. Sync the new intros to the /data/emacsconf/shared/$YEAR/assets/intros directory.
+5. Regenerate the pads: <elisp:emacsconf-pad-prepopulate-all-talks>
+6. Regenerate talks.json: <elisp:emacsconf-publish-talks-json-to-files>
+
+
+<a id="other-process-notes-to-play-the-other-stream"></a>
+
+## To play the other stream
+
+- mpv &#x2013;profile=full <https://live0.emacsconf.org/gen.webm>
+- Change the channel topic to note that discussion can be in the other channel
+
+
+<a id="other-process-notes-when-a-system-is-down"></a>
+
+## When a system is down
+
+Let people know in #emacsconf and #emacsconf-org
+
+Update the status page:
+
+<file://ssh:orga@front0.emacsconf.org:/var/www/status.emacsconf.org/index.html>
+
+/broadcast <message> may also be helpful
+
+
+<a id="other-process-notes-when-we-need-to-bring-on-a-last-minute-volunteer"></a>
+
+## When we need to bring on a last-minute volunteer
+
+/backstage nick
+
+will give them the backstage credentials and links to the index
+
+
+<a id="other-process-notes-checking-people-in"></a>
+
+## Checking people in
+
+/checkin nick
+/room nick (should be automatic if live, but there just in case)
+
+
+<a id="other-process-notes-ansible"></a>
## Ansible