diff options
author | Sacha Chua <sacha@sachachua.com> | 2022-12-02 22:10:56 -0500 |
---|---|---|
committer | Sacha Chua <sacha@sachachua.com> | 2022-12-02 22:10:56 -0500 |
commit | 1efe6dbca3d6d8248811123fb5a638cad4e9d25a (patch) | |
tree | 2b200c8ea7bf39a6fcc5ced18d053f1c84a4e16d /2022 | |
parent | 0b1367f59a1c4cfd790be64196eca2340b82a5fc (diff) | |
download | emacsconf-wiki-1efe6dbca3d6d8248811123fb5a638cad4e9d25a.tar.xz emacsconf-wiki-1efe6dbca3d6d8248811123fb5a638cad4e9d25a.zip |
check all the intros
Diffstat (limited to '')
-rw-r--r-- | 2022/organizers-notebook.md | 723 | ||||
-rw-r--r-- | 2022/organizers-notebook/index.org | 141 |
2 files changed, 692 insertions, 172 deletions
diff --git a/2022/organizers-notebook.md b/2022/organizers-notebook.md index 5637eacb..4ebc1da0 100644 --- a/2022/organizers-notebook.md +++ b/2022/organizers-notebook.md @@ -22,10 +22,12 @@ This file is automatically exported from [/2022/organizers-notebook/index.org](/ Projects and tasks: +- [Manage front0 and live0 size](#resize):bandali: +- [Finalize the files to be used for streaming](#files) - [Look for ways to reduce risk](#derisk):derisk: - [Make checkin and Q&A process slide](#qa):sachac: - [Caption talks and make chapter headings](#caption) -- [Prepare intros for the hosts to read](#host-intros):sachac: +- [Prepare intros for the hosts to read](#host-intros) - [Set up talks on Toobnix and YouTube](#video-platforms):sachac:yt:toobnix: - [Do another run](#dry-run) - [Turn off file upload service on media.emacsconf.org](#upload-off):sachac:infra: @@ -381,10 +383,12 @@ interests you! # Projects and other long-running tasks +- [Manage front0 and live0 size](#resize):bandali: +- [Finalize the files to be used for streaming](#files) - [Look for ways to reduce risk](#derisk):derisk: - [Make checkin and Q&A process slide](#qa):sachac: - [Caption talks and make chapter headings](#caption) -- [Prepare intros for the hosts to read](#host-intros):sachac: +- [Prepare intros for the hosts to read](#host-intros) - [Set up talks on Toobnix and YouTube](#video-platforms):sachac:yt:toobnix: - [Do another run](#dry-run) - [Turn off file upload service on media.emacsconf.org](#upload-off):sachac:infra: @@ -402,6 +406,96 @@ interests you! - [Plan Etherpad use and hosting](#etherpad):sachac:ansible: +<a id="resize"></a> + +## TODO Manage front0 and live0 size :bandali: + + +### TODO Resize front0 and live0 in the Linode administration console :bandali: + +[20:23:48] <bandali> aha okay thanks. yeah i think i’ll do at least 8gb or 16gb for front0, maybe even one or two larger +[20:24:19] <bandali> and for live0 probably the same as last year, maybe slightly larger + + +### CANCELLED Check fps after resize :sachac: + + +### DONE Back up dumps from live0 + +media.emacsconf.org:~/emacsconf-2021-stream-dumps/ +res.emacsconf.org:/data/emacsconf/2021/dumps/ + +Now there should be more space in case we want to enable dumping before the resize + + +### DONE Update ansible configuration :sachac: + +Waiting for resize +Clean up the media root + +in all.yml + +test\_mode: false + +then + +ansible-playbook -i inventory.yml prod-playbook.yml –tags media +ansible-playbook -i inventory.yml prod-playbook.yml –tags stream +ansible-playbook -i inventory.yml prod-playbook.yml –tags publish + +Confirm that + +- icecast dumps recordings +- <https://media.emacsconf.org/2022> is unprotected +- <https://media.emacsconf.org/2022/backstage> is protected + + +<a id="files"></a> + +## STARTED Finalize the files to be used for streaming + +Verify that all the files load + + (let ((info (emacsconf-prepare-for-display (emacsconf-get-talk-info)))) + (mapconcat + (lambda (track) + (concat "- " (plist-get track :name) "\n" + (mapconcat + (lambda (talk) + (if (plist-get talk :video-file) + (format " - [ ] [[elisp:(emacsconf-stream-play-talk-on-change \"%s\")][Play %s]]\n" + (plist-get talk :slug) (plist-get talk :slug)) + "")) + (emacsconf-filter-talks-by-track track info)))) + emacsconf-tracks)) + +How about the ones that might be live + + (let ((info (emacsconf-prepare-for-display (emacsconf-get-talk-info)))) + (mapconcat + (lambda (track) + (concat "- " (plist-get track :name) "\n" + (mapconcat + (lambda (talk) + (if (null (plist-get talk :video-file)) + (format " - [ ] [[elisp:(emacsconf-stream-play-talk-on-change \"%s\")][Play %s]]\n" + (plist-get talk :slug) (plist-get talk :slug)) + "")) + (emacsconf-filter-talks-by-track track info)))) + emacsconf-tracks)) + + +### TODO Fix my audio volume for intros + + +### DONE Remove first eight seconds of Jupyter if possible, and the last 16 seconds or so + +screen -S jupyter-trim ffmpeg -y -ss 8 -to 00:16:40 -i emacsconf-2022-jupyter–edit-live-jupyter-notebook-cells-with-emacs–blaine-mooers–final.webm emacsconf-2022-jupyter–edit-live-jupyter-notebook-cells-with-emacs–blaine-mooers–trimmed.webm + + +### TODO Regenerate overlays to accommodate different layout + + <a id="derisk"></a> ## Look for ways to reduce risk :derisk: @@ -409,7 +503,7 @@ interests you! <https://pad.emacsconf.org/premortem> -### TODO Click on stuff with xdotool +### DONE Click on stuff with xdotool (emacsconf-stream-bbb “journalism”) (emacsconf-stream-xdotool-set-up-bbb “journalism”) @@ -451,7 +545,30 @@ xdotool key f11 (org-agenda nil "a"))) -### TODO Try a reboot +### DONE Try a reboot before the resize :sachac: + +- After rebooting live0, we should still be able to: + - [X] SSH to it + - [X] Stream gen to it + - [X] Start up the fallbacks: screen-fallbacks + - test: mpv <https://live0.emacsconf.org/gen-fallback.webm> + - [X] Play gen stream: mpv <https://live0.emacsconf.org/gen.webm> + - [X] Play gen 480p stream: mpv <https://live0.emacsconf.org/gen-480p.webm> + - [X] Go to watch page for gen: + - <https://emacsconf.org/2022/watch/gen/> + - <https://live.emacsconf.org/2022/watch/gen/> + - [X] Start test restream to toobnix + - screen-restream-test-toobnix.sh + - <https://toobnix.org/w/dmibQFkBTNcJyTVVQTyd5C> + - Test dev as well (optional) + - [X] Stream dev to it + - [X] Play dev stream + - [X] Play dev 480p stream + - [X] Go to watch page for dev +- After rebooting front0, we should still be able to: + - [X] View the wiki <https://emacsconf.org/2022/> + - [X] Update the status page [edit](file://ssh:front0.emacsconf.org:/var/www/status.emacsconf.org/index.html) <https://status.emacsconf.org> + - [ ] Go to the pad: <https://pad.emacsconf.org/2022> ### DONE icecast fallback :derisk:sachac: @@ -627,9 +744,12 @@ can paste in <https://emacsconf.org/2022/qa/> for tips. ### DONE Copy chapter headings for mail talk :emacsconf:captions: +### DONE Caption the new talks :sachac: + + <a id="host-intros"></a> -## Prepare intros for the hosts to read :sachac: +## Prepare intros for the hosts to read <https://pad.emacsconf.org/intros> also in :INTRO\_NOTE: in conf.org so that we can plop it into the hyperlists. @@ -712,20 +832,229 @@ echo ’/bin/bash /home/orga/screen-restream-test-toobnix.sh’ | at 8:3 ### TODO Process the other intros -### SOMEDAY Record more intros :sachac: +### DONE Record more intros :zaeph: + + +### DONE Record two-part introduction for RMS talk + +Before Richard Stallman shares what he’d like to see in Emacs, we will first play Richard Stallman’s 2014 TEDx talk called “Free Software, Free Society”. The TEDx talk is licensed under the Creative Commons Attribution - No Derivative Works 3.0 license. + +The next talk is called “What I’d like to see in Emacs,” by Richard Stallman. This talk will be under the Creative Commons Attribution - ShareAlike license like the other talks at EmacsConf. Afterwards, he will answer questions via a moderated Q&A, so please put your questions in the Etherpad or IRC. + + +### DONE Add images to zaeph’s intros :sachac: + + +### DONE Add subtitles to intros + + +### DONE rerecord zachary, pronunciation + + +### DONE rerecord buddy, got mixed up with meetups + + +### DONE redo visual for health, changed the title case + + +### DONE rerecord indieweb, accent on the wrong syllable + + +### DONE rerecord jupyter intro, repetitive + + +### TODO consider rerecording meetups to add + +Spanish subtitles are also available for this talk. + +You can find them on the talk page. + + +### TODO Contextualize journalism talk <a id="video-platforms"></a> -## TODO Set up talks on Toobnix and YouTube :sachac:yt:toobnix: +## DONE Set up talks on Toobnix and YouTube :sachac:yt:toobnix: so that people can find the videos on other video platforms waiting for prerecs +category 15: science and technology +license 2: attribution - share alike +language: en +privacy 2: unlisted +tags: emacs,emacsconf + ### DONE Add toobnix url on schedule +### Upload to YouTube + + (insert + (string-join + (seq-take + (seq-keep + (lambda (o) + (when (and + (file-exists-p + (expand-file-name + (concat (plist-get o :video-slug) "--final.webm") + emacsconf-cache-dir)) + (null (plist-get o :youtube-url))) + (format "./youtube-upload --client-secrets=../../client_secret.json --title=%s --description=%s --category=%s --tags=emacs,emacsconf --recording-date=%s --default-language=en --default-audio-language=en --embeddable=True %s" + (shell-quote-argument + (concat emacsconf-name " " emacsconf-year ": " (plist-get o :title) " - " (plist-get o :speakers-with-pronouns))) + (shell-quote-argument + (emacsconf-publish-video-description o)) + (shell-quote-argument "Science & Technology") + (format-time-string "%Y-%m-%dT%H:%M:%S.0Z" (plist-get o :start-time) t) + (expand-file-name + (concat (plist-get o :video-slug) "--final.webm") + emacsconf-cache-dir) + ))) + (emacsconf-get-talk-info)) 1) + "\n")) + ./youtube-upload --client-secrets=../../client_secret.json --title=EmacsConf\ 2022\:\ Writing\ and\ organizing\ literature\ notes\ for\ scientific\ writing\ -\ Vidianos\ Giannitsis --description=https\://emacsconf.org/2022/talks/science' + '' + '00\:00\:00\ My\ second\ brain' + '00\:28\ Contents\ of\ the\ talk' + '01\:40\ Bibliography\ management' + '02\:35\ Creating\ literature\ notes\:\ ivy-bibtex-edit-notes' + '03\:04\ org-roam\ reference\ template' + '04\:40\ Demo' + '05\:40\ Annotating\ with\ org-noter' + '06\:44\ Annotating\ in\ English' + '07\:02\ Afterthoughts\ on\ an\ article' + '07\:30\ Adding\ a\ note' + '08\:21\ Creating\ permanent\ notes\ from\ reference\ material' + '09\:01\ The\ organization\ problem' + '09\:21\ zetteldesk.el' + '10\:43\ The\ zetteldesk-desktop' + '11\:45\ Filtering\ with\ ivy-bibtex' + '12\:09\ Inserting\ literature' + '13\:46\ Composing\ the\ final\ article' + '15\:19\ Thanks' + '' + 'You\ can\ view\ this\ and\ other\ resources\ using\ free/libre\ software\ at\ https\://emacsconf.org/2022/talks/science\ .' + 'This\ video\ is\ available\ under\ the\ terms\ of\ the\ Creative\ Commons\ Attribution-ShareAlike\ 4.0\ International\ \(CC\ BY-SA\ 4.0\)\ license. --category=Science\ \&\ Technology --tags=emacs,emacsconf --recording-date=2022-12-03T15:45:00.0Z --default-language=en --default-audio-language=en --embeddable=True /home/sacha/proj/emacsconf/cache/emacsconf-2022-science--writing-and-organizing-literature-notes-for-scientific-writing--vidianos--final.webm + + +### Toobnix + + (insert + (string-join + (seq-keep + (lambda (o) + (when (and + (file-exists-p + (expand-file-name + (concat (plist-get o :video-slug) "--final.webm") + emacsconf-cache-dir)) + (null (plist-get o :toobnix-url))) + (format "node dist/server/tools/peertube.js upload -f %s -n %s -l 2 -c 15 -P 2 -t emacs,emacsconf -L en -C emacsconf -d %s" + (expand-file-name + (concat (plist-get o :video-slug) "--final.webm") + emacsconf-cache-dir) + (shell-quote-argument + (concat emacsconf-name " " emacsconf-year ": " (plist-get o :title) " - " (plist-get o :speakers-with-pronouns))) + (shell-quote-argument + (emacsconf-publish-video-description o))))) + (emacsconf-get-talk-info)) + "\n")) + + +### STARTED Upload talks to YouTube + + (seq-keep + (lambda (o) + (when (and + (file-exists-p + (expand-file-name + (concat (plist-get o :video-slug) "--final.webm") + emacsconf-cache-dir)) + (null (plist-get o :youtube-url))) + (concat (plist-get o :video-slug) "--final.webm"))) + (emacsconf-get-talk-info)) + + ;; This buffer is for text that is not saved, and for Lisp evaluation. + ;; To create a file, visit it with C-x C-f and enter text in its buffer. + + ;; (let ((pos (shell-command-to-string "xdotool getmouselocation"))) + ;; (when (string-match "x:\\([0-9]+\\) y:\\([0-9]+\\)" pos) + ;; (insert (format "(shell-command \"xdotool mousemove %s %s click 1\")\n" (match-string 1 pos) (match-string 2 pos))))) + + (setq list (seq-filter (lambda (o) + (and + (file-exists-p + (expand-file-name + (concat (plist-get o :video-slug) "--final.webm") + emacsconf-cache-dir)) + (null (plist-get o :youtube-url)))) + (emacsconf-prepare-for-display (emacsconf-get-talk-info)))) + + (setq talk (pop list)) + (progn + ;; click create + (shell-command "xdotool mousemove 2439 223 click 1 sleep 1") + ;; video + (shell-command "xdotool mousemove 2420 260 click 1 sleep 1") + ;; select files + (shell-command (concat "xdotool mousemove 1897 984 click 1 sleep 4 type " + (shell-quote-argument (concat (plist-get talk :video-slug) "--final.webm")))) + (shell-command "xdotool mousemove 2101 961 click 1 sleep 5") + + (shell-command (concat "xdotool mousemove 1530 447 click 1 key Ctrl+a Delete sleep 1 type " + (shell-quote-argument (concat + emacsconf-name " " + emacsconf-year ": " + (plist-get talk :title) + " - " + (plist-get talk :speakers-with-pronouns))))) + + (emacsconf-publish-video-description talk t t)) + + ;; next + (progn + (shell-command "xdotool mousemove 2315 1488 click 1 sleep 2") + ;; add captions + (shell-command "xdotool mousemove 2285 462 click 1 sleep 4") + (shell-command "xdotool mousemove 1576 619 click 1 sleep 3") + (shell-command "xdotool mousemove 2015 940 click 1 sleep 4") + (shell-command (concat "xdotool mousemove 1984 869 click 1 sleep 4 type " + (shell-quote-argument (concat (plist-get talk :video-slug) "--main.vtt")))) + (progn + (shell-command "xdotool mousemove 2102 954 sleep 1 click 1 sleep 4") + ;; done + (shell-command "xdotool mousemove 2285 500 click 1 sleep 3") + (shell-command "xdotool mousemove 2312 1483 click 1 sleep 1") + (shell-command "xdotool mousemove 2312 1483 click 1 sleep 1") + ;; schedule + (shell-command "xdotool mousemove 1527 752 click 1") + (message "%s" (format-time-string "%Y-%m-%d %I:%M %p" (plist-get talk :start-time) + emacsconf-timezone)))) + ;; (shell-command (concat "xdotool mousemove 1695 611 click 1 key Shift+PgDn Ctrl+a Del type " + ;; (format-time-string "%I:%M %p" + ;; (plist-get talk :start-time) + ;; emacsconf-timezone))) + ;; copy link + + (progn + (shell-command "xdotool mousemove 2284 668 click 1 sleep 1 click 1") + ;; schedule + (shell-command "xdotool mousemove 2324 1498 click 1 sleep 3") + (emacsconf-with-talk-heading talk + (org-entry-put (point) "YOUTUBE_URL" (read-string "URL: " (current-kill 0))) + ) + ;; close + (shell-command "xdotool mousemove 2100 996 click 1") + ) + + +### DONE upload the rest of the files onto Toobnix + + <a id="dry-run"></a> ## DONE Do another run @@ -923,6 +1252,9 @@ so that nginx can have more memory and we don’t risk slowdowns ## DONE Review notebook for tasks, priorities, and scheduling +### TODO Review tasks + + <a id="mumble"></a> ## Use Mumble for backchannel coordination and also on-stage @@ -1121,6 +1453,15 @@ Pattern: ### TODO Adjust audio levels from hyperlist with a repeat-mode keymap +### DONE Link pamix to a konsole ssh + + +### DONE Add monitoring the streams to the hyperlist / shortcuts + + +### TODO Test hyperlist on obs and record quick demos + + <a id="rec-intro"></a> ## TODO Record intro/outro for day-1 and day-2 :zaeph: @@ -1414,6 +1755,12 @@ Update schedule Publish prerec when talk is playing +### SOMEDAY Irc bot for opening + +notice the message +open the Q&A specified by slug, or look it up from the channel + + ## TODO Consider making a bot to support announcing, updating, publishing, who’s here, announcing when speakers are here <https://salsa.debian.org/rhonda/schedulebot> @@ -1527,6 +1874,30 @@ That might be interesting for reviewing text recognition output ## TODO back up media and bbb +## TODO figure out how zaeph can run ansible + + +## TODO Check that the restreams can handle hiccups + +<https://toobnix.org/w/dmibQFkBTNcJyTVVQTyd5C> + +ugh might need to restart restreams +PTS 233286211, next:63716000 invalid dropping st:0 +DTS 233286223, next:63828674 st:1 invalid dropping + +screen -S restream-test-toobnix -X quit; screen-restream-test-toobnix.sh +screen -S restream-test-youtube -X quit; screen-restream-test-youtube.sh +screen -S restream-gen-toobnix -X quit; screen-restream-gen-toobnix.sh +screen -S restream-gen-youtube -X quit; screen-restream-gen-youtube.sh +screen -S restream-dev-toobnix -X quit; screen-restream-dev-toobnix.sh +screen -S restream-dev-youtube -X quit; screen-restream-dev-youtube.sh + +ugh sound timestamps get all messed up + + +## TODO Figure out how to have a test talk for publishing + + <a id="decisions"></a> # Things to figure out / decisions to make @@ -1867,7 +2238,7 @@ Options: <a id="schedule-gaps"></a> -## SOMEDAY Think about what to do with schedule gaps due to cancelled talks :thoughts: +## TODO Think about what to do with schedule gaps due to cancelled talks :thoughts: - if the previous Q&A is still going, we can stream that one - if there are no previous Q&As running, options: @@ -1885,7 +2256,7 @@ Options: <a id="rmstedsplit"></a> -## SOMEDAY Split rms into two talks? +## CANCELLED Split rms into two talks? - Split into a separate talk: - Can more easily have intros @@ -1894,6 +2265,11 @@ Options: - Might as well learn how to do that anyway +### DONE Figure out what to do about rms sequence + +Keep it at one talk, but figure out stream files thing + + <a id="roles"></a> # Roles needed @@ -1996,7 +2372,7 @@ AM: 9-12 PM EST, PM: 1-5 PM EST (plus a little extra for setup/transition) Saturday Dec 3 -<table id="org937887e" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"> +<table id="org850c9df" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"> <colgroup> @@ -2076,7 +2452,7 @@ publicvoit - pad until 4pm on Sat, until 2pm on Sun Sunday Dec 4 -<table id="org8b8b53c" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"> +<table id="orgb8c1997" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"> <colgroup> @@ -2640,19 +3016,6 @@ If you’ve got any question on the process, you canget in touch with me (zaeph) - Coordinate volunteer schedules so all the roles are covered -### TODO Update ansible configuration :sachac: - -Clean up the media root - -in all.yml - -test\_mode: false - -then - -ansible-playbook -i inventory.yml prod-playbook.yml –tags media,stream,publish - - ### Test stream setup [Stream](#other-streams) @@ -2756,6 +3119,12 @@ Needs the `$main480p` environment variable set to something of the form `icecast ###### Youtube +###### Toobnix + + +###### DONE Add IRC links to YouTube and Toobnix descriptions + + ### Check in a speaker Exception: [CHECK is unavailable](#check-gone) @@ -2827,7 +3196,7 @@ Exception: [CHECK is unavailable](#check-gone) - [? prerec] - HOST switches to MPV scene in OBS and plays the video (with captions if available). - Exception: [Last-minute prerecording submission](#last-minute-prerec) - - Exception: [Last-minute caption update](#last-minute-captions) + - Exception: - [CHECK publishes information](#publish) - [HOST gets a head start on handling Q&A](#questions) - When prerec finishes, HOST switches the OBS scene to show BBB. @@ -2876,6 +3245,14 @@ Exception: [CHECK is unavailable](#check-gone) - wiki page for talk +#### DONE Automatically commit to the wiki + +when emacsconf-publish-autocommit-wiki is set + +(emacsconf-publish-update-talk (append (list :public t) (emacsconf-resolve-talk “journalism”))) +(emacsconf-publish-update-talk (append (list :public nil) (emacsconf-resolve-talk “journalism”))) + + #### DONE Make sure VTTs only get published when they’re edited @@ -2911,6 +3288,9 @@ Exception: [CHECK is unavailable](#check-gone) (emacsconf-get-talk-info))) +#### DONE Automatically commit and push the wiki + + #### DONE Set publishing on a timer :sachac: @@ -2919,6 +3299,14 @@ Exception: [CHECK is unavailable](#check-gone) (emacsconf-stream-schedule-timers) +##### DONE Take intro into account for scheduling q&a time + + +##### TODO Test the timer + + (let ((info (emacsconf-inflate-sexp '(journalism + + #### DONE Simplify manual setting of a timer to update task status :sachac: emacsconf-stream-schedule-talk-status-change @@ -3177,7 +3565,7 @@ Probably focus on grabbing the audio first and seeing what’s worth keeping Make a table of the form -<table id="orgf538b8f" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"> +<table id="org91443f7" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"> <colgroup> @@ -3273,34 +3661,35 @@ Make a table of the form See <https://pad.emacsconf.org/premortem> for more. -- [Common broadcast (gen and dev)](#common) -- [Stuck wiki](#ikiwiki-stuck) -- [Cancelled talk](#cancelled) -- [Last-minute prerecording submission](#last-minute-prerec) -- [Last-minute caption update](#last-minute-captions) -- [Speaker has not checked in](#missing) -- [Speaker does not have a prerec and has not checked in](#really-missing) -- [Pad malfunction or mess-up](#pad-broken) -- [Conduct guidelines issue](#conduct) -- [CHECK is unavailable](#check-gone) -- [HOST is unavailable](#host-gone) +- [Common broadcast (gen and dev)](#common):stream: +- [Stream OBS needs to be restarted](#obs-restart):stream: +- [Stuck wiki](#ikiwiki-stuck):publish: +- [Cancelled talk](#cancelled):schedule: +- [Last-minute prerecording submission](#last-minute-prerec):upload: - [Technical issues during a live presentation](#live-issues):stream: - [Big technical issues with streaming](#stream-issues):stream: +- [Last-minute caption or file update](#last-minute-captions):upload: +- [Pad malfunction or mess-up](#pad-broken):infra: +- [Speaker has not checked in](#missing):sched: +- [Speaker does not have a prerec and has not checked in](#really-missing):sched: +- [Conduct guidelines issue](#conduct):host: +- [CHECK is unavailable](#check-gone) +- [HOST is unavailable](#host-gone) - [live0 can’t handle the load or is close to network transfer limit](#network) - [People have a hard time seeing dark-mode presentations (or light-mode)](#dark-mode) - [Schedule update](#update-sched):sched: - [New talk](#new-talk):sched: - [In case we need to do things manually because the task status hooks don’t work](#manual) - [Alternate stream volunteer wants to stream](#alternate) -- [Renamed talk](#renamed) - [Video playing error, need to play with mpv manually](#play-mpv-manually):stream: -- [Shift changes](#org5e6db1e) -- [Need to restart 480p stream](#restart-480p) +- [Shift changes](#orgbd898c0) +- [Need to restart 480p stream](#restart-480p):stream: +- [Renamed talk](#renamed):sched: <a id="common"></a> -## Common broadcast (gen and dev) +## Common broadcast (gen and dev) :stream: Options: @@ -3308,17 +3697,38 @@ Options: - mpv the same video - join the BBB room +emacsconf-stream-rebroadcast - specify the source track + +[Development -> General]((emacsconf-stream-rebroadcast "Development" "General")) +[General -> Development]((emacsconf-stream-rebroadcast "General" "Development")) + + +<a id="obs-restart"></a> + +## Stream OBS needs to be restarted :stream: + +- ssh to the track and run `track-obs` +- ssh to live0.emacsconf and run whatever’s appropriate: + + screen -S restream-test-toobnix -X quit; screen-restream-test-toobnix.sh + screen -S restream-test-youtube -X quit; screen-restream-test-youtube.sh + screen -S restream-gen-toobnix -X quit; screen-restream-gen-toobnix.sh + screen -S restream-gen-youtube -X quit; screen-restream-gen-youtube.sh + screen -S restream-dev-toobnix -X quit; screen-restream-dev-toobnix.sh + screen -S restream-dev-youtube -X quit; screen-restream-dev-youtube.sh +- check if the streams are all right + <a id="ikiwiki-stuck"></a> -## Stuck wiki +## Stuck wiki :publish: sudo -iu ikiwiki – ikiwiki –setup ~ikiwiki/emacsconf.setup <a id="cancelled"></a> -## Cancelled talk +## Cancelled talk :schedule: 1. Update conf.org to mark the talk as cancelled. 2. Update the `schedule-choices` block to fix the time for the following talk, or recalculate all the schedules. Check for any validation errors in the `:results:` block. @@ -3333,23 +3743,71 @@ sudo -iu ikiwiki – ikiwiki –setup ~ikiwiki/emacsconf.setup <a id="last-minute-prerec"></a> -## Last-minute prerecording submission +## Last-minute prerecording submission :upload: - COORD will copy it from the FTP upload server to orga@res.emacsconf.org:~/stream -p 46668 and name it appropriately. - COORD will notify STREAM with the scp command and the mpv command so that STREAM can choose. +<a id="live-issues"></a> + +## Technical issues during a live presentation :stream: + +- 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 + + +<a id="stream-issues"></a> + +## Big technical issues with streaming :stream: + +<file://ssh:orga@front0.emacsconf.org:/var/www/status.emacsconf.org/index.html> + +- HOST notifies #emacsconf and #emacsconf-org and adds a note at the top of the ${pad}. +- HOST updates the 2022.md wiki page +- CHECK publishes prerecordings + - media.emacsconf.org + - wiki + - Toobnix + - Peertube +- STREAM e-mails the mailing list + + <a id="last-minute-captions"></a> -## Last-minute caption update +## Last-minute caption or file update :upload: - CHECK uploads the –main.vtt file to orga@res.emacsconf.org:~/stream -p 46668 - If streaming locally, STREAM copies the VTT file and loads it into MPV with `--sub-file` +ssh orga@media.emacsconf.org +cd backstage; make all + +ssh orga@res.emacsconf.org -p 46668 +~/cache/update-cache +cd ~/stream +cp ~/cache/\*$SLUG\*–main.webm . + + +<a id="pad-broken"></a> + +## Pad malfunction or mess-up :infra: + +- PAD resets the pad using the time slider +- [? still not recovered] + - PAD reimports the pad from backup + <a id="missing"></a> -## Speaker has not checked in +## Speaker has not checked in :sched: - 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 @@ -3360,7 +3818,7 @@ sudo -iu ikiwiki – ikiwiki –setup ~ikiwiki/emacsconf.setup <a id="really-missing"></a> -## Speaker does not have a prerec and has not checked in +## Speaker does not have a prerec and has not checked in :sched: - Let the previous talk do extended Q&A - Close to the time of the missing talk: @@ -3373,18 +3831,9 @@ sudo -iu ikiwiki – ikiwiki –setup ~ikiwiki/emacsconf.setup - let mplsCorwin or zaeph fill in -<a id="pad-broken"></a> - -## Pad malfunction or mess-up - -- PAD resets the pad using the time slider -- [? still not recovered] - - PAD reimports the pad from backup - - <a id="conduct"></a> -## Conduct guidelines issue +## Conduct guidelines issue :host: - [? IRC]: IRC operator addresses it with a reminder and/or a kick or a ban - [? not resolved, or onscreen] @@ -3410,37 +3859,6 @@ sudo -iu ikiwiki – ikiwiki –setup ~ikiwiki/emacsconf.setup - STREAM will do the hosting. -<a id="live-issues"></a> - -## Technical issues during a live presentation :stream: - -- 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 - - -<a id="stream-issues"></a> - -## Big technical issues with streaming :stream: - -<file://ssh:orga@front0.emacsconf.org:/var/www/status.emacsconf.org/index.html> - -- HOST notifies #emacsconf and #emacsconf-org and adds a note at the top of the ${pad}. -- HOST updates the 2022.md wiki page -- CHECK publishes prerecordings - - media.emacsconf.org - - wiki - - Toobnix - - Peertube -- STREAM e-mails the mailing list - - <a id="network"></a> ## live0 can’t handle the load or is close to network transfer limit @@ -3488,12 +3906,12 @@ mpv –vf=negate $url export SLUG=the ID of the talk -- [TO\_STREAM -> PLAYING](#orgd7e6def):stream: +- [TO\_STREAM -> PLAYING](#org8aa6d0e):stream: - [CLOSED\_Q -> OPEN\_Q](#open) - [OPEN\_Q -> TO\_ARCHIVE](#archive) -<a id="orgd7e6def"></a> +<a id="org8aa6d0e"></a> ### TO\_STREAM -> PLAYING :stream: @@ -3554,20 +3972,6 @@ STATE=before; ssh orga@media.emacsconf.org “cp *home/orga/backstage/assets - MPV goes to MPV sink, browser goes to recording sink, FFMPEG takes in recording monitor -<a id="renamed"></a> - -## Renamed talk - -1. Change conf.org heading. -2. Change the video slug property. -3. Rename any existing files in the backstage area. -4. emacsconf-publish-backstage-index -5. Change the title and heading on the wiki page. -6. Update the schedule (emacsconf-publish-schedule). -7. Update info pages (emacsconf-publish-before-pages). -8. Update the watch pages. - - <a id="play-mpv-manually"></a> ## Video playing error, need to play with mpv manually :stream: @@ -3576,7 +3980,7 @@ You can skip the intro and play a video by specifying the filename, like this: play ~/stream/emacsconf-2022-journalism-\* -<a id="org5e6db1e"></a> +<a id="orgbd898c0"></a> ## Shift changes @@ -3588,7 +3992,7 @@ play ~/stream/emacsconf-2022-journalism-\* <a id="restart-480p"></a> -## Need to restart 480p stream +## Need to restart 480p stream :stream: ssh live @@ -3597,6 +4001,36 @@ or /usr/local/bin/emacsconf-lowres-gen-on-connect +<a id="renamed"></a> + +## Renamed talk :sched: + +1. Change conf.org heading. +2. Change the video slug property. +3. Rename any existing files in the backstage area. +4. emacsconf-publish-backstage-index +5. Change the title and heading on the wiki page. +6. Update the schedule (emacsconf-publish-schedule). +7. Update info pages (emacsconf-publish-info-pages). +8. Update the watch page (emacsconf-publish-watch-pages). +9. Update the pad, and the two previous pads. +10. Update the in-between slide (and for the following one) and upload the assets. +11. Redo the intros for that talk and the following one + SLUG=health; ffmpeg -y -loop 1 -i ../../in-between/$SLUG.png -i $SLUG.opus -i $SLUG.vtt -shortest ../$SLUG.webm; mpv $SLUG.webm + + +### DONE Rename lspbridge + +rerecord lspbridge intro + +lspbridge science + + +### DONE Rename health + +health eev + + <a id="archive"></a> # Task archive @@ -4676,6 +5110,9 @@ Sacha ### DONE Follow up with speakers based on their availability +### CANCELLED Email speakers because I’ll be shutting down the web upload + + <a id="announce-program"></a> ## DONE Send schedule-published email for emacsconf-discuss :needsowner:timesensitive:email: @@ -5384,7 +5821,7 @@ emacsconf-todo-hooks ### CANCELLED Use xdotool to automate joining BBB in Firefox (signing in, clicking on listen only) -#### TODO Xdotool over ssh so that I can click things? +#### DONE Xdotool over ssh so that I can click things? ### CANCELLED Experiment with sharing part of the screen so that there’s space for us to work a little off-screen @@ -5519,7 +5956,7 @@ dev: ### DONE Separate mumble audio so that panic button can still bring in our audio -### SOMEDAY Prepare for rms talk and Q&A with bandali +### DONE Prepare for rms talk and Q&A with bandali Mumble? @@ -5543,6 +5980,12 @@ if ! screen -list | grep -q background; then fi +### DONE Make it easy to rebroadcast other track (ex: rms) - might need mpv with minimal configuration, switchable profiles + + +#### DONE make it easy to rebroadcast + + <a id="caption-workflow"></a> ## DONE Smoothen captioning workflow :sachac: @@ -5555,6 +5998,22 @@ OpenAPI captions so that people can decide what they like. [Set up MPV for captions](#mpv-captions) +### DONE Make sure all the captioned files are marked so + + (seq-keep (lambda (o) + (when (and (string= (plist-get o :status) "TO_STREAM") + (or (null (plist-get o :captions-edited)) + (null (with-temp-buffer + (insert-file-contents + (expand-file-name (concat (plist-get o :video-slug) "--main.vtt") + emacsconf-cache-dir)) + (goto-char (point-min)) + (re-search-forward "captioned by" (line-end-position) t))))) + (plist-get o :slug) + )) + (emacsconf-get-talk-info)) + + ### DONE Edit survey captions @@ -6318,51 +6777,6 @@ Sacha Chua ### Captions for approval - (defun emacsconf-mail-captions-for-approval (talk) - (interactive (list (emacsconf-complete-talk-info))) - (let ((captions (expand-file-name (concat (plist-get talk :video-slug) "--main.vtt") - emacsconf-cache-dir)) - (captioner-info - (with-current-buffer (find-file-noselect emacsconf-org-file) - (org-entry-properties (org-find-property "CUSTOM_ID" (plist-get talk :captioner)))))) - (emacsconf-mail-prepare - (emacsconf-mail-merge-get-template "captions") - (plist-get talk :email) - (list - :speakers-short (plist-get talk :speakers-short) - :year emacsconf-year - :email (plist-get talk :email) - :title (plist-get talk :title) - :captioner (assoc-default "NAME_SHORT" captioner-info) - :url - (format "https://%s:%s@media.emacsconf.org/%s/backstage/#%s" - emacsconf-backstage-user - emacsconf-backstage-password - emacsconf-year - (plist-get talk :slug)) - :password emacsconf-backstage-password - :captioner-email (assoc-default "EMAIL" captioner-info) - :captioner-volunteered - (if (string= (plist-get talk :captioner) "sachac") - "" - (format "%s volunteered to edit the captions for your video. " (assoc-default "NAME_SHORT" captioner-info))) - :chapters-note - (if (file-exists-p - (expand-file-name (concat (plist-get talk :video-slug) "--main--chapters.vtt") - emacsconf-cache-dir)) - "I've come up with some potential chapter headings which you can see as NOTE in the transcript or in the backstage entry for your video. Let me know if you want to tweak those.\n\n" - "") - :intro-note - (emacsconf-surround - "${wrap}Also, I drafted a quick intro for the host to read. Let me know if you want to tweak this: " (plist-get talk :intro-note) "\n\n" - "") - :captioner-thanks - (if (string= (plist-get talk :captioner) "sachac") - "" - (format "%s: Thank you for editing the captions!\n\n" (assoc-default "NAME_SHORT" captioner-info))) - :captions (with-temp-buffer (insert-file-contents captions) (buffer-string)))) - (mml-attach-file captions "text/vtt" "Subtitles" "attachment"))) - <a id="approve-captions"></a> @@ -6376,8 +6790,7 @@ ${captioner-volunteered} 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. You can look at the attached file or watch your video with closed captions at ${url} . I’ve also included the -captions at the end of this e-mail for your convenience, and the -proposed chapter headings are NOTEs before the subtitles.${wrap} +captions at the end of this e-mail for your convenience.${wrap} ${chapters-note}${intro-note}Do you have a bio or social/donation links you’d like us to add to the wiki page for your talk? diff --git a/2022/organizers-notebook/index.org b/2022/organizers-notebook/index.org index 10bae629..530ba6e3 100644 --- a/2022/organizers-notebook/index.org +++ b/2022/organizers-notebook/index.org @@ -134,8 +134,8 @@ res.emacsconf.org:/data/emacsconf/2021/dumps/ Now there should be more space in case we want to enable dumping before the resize -*** STARTED [#A] Update ansible configuration :sachac: -SCHEDULED: <2022-12-02 Fri> +*** DONE [#A] Update ansible configuration :sachac: +CLOSED: [2022-12-02 Fri 19:30] SCHEDULED: <2022-12-02 Fri> :PROPERTIES: :Effort: 0:30 :END: @@ -160,11 +160,106 @@ Confirm that - https://media.emacsconf.org/2022 is unprotected - https://media.emacsconf.org/2022/backstage is protected -** TODO Finalize the files to be used for streaming +** STARTED Finalize the files to be used for streaming SCHEDULED: <2022-12-02 Fri> :PROPERTIES: :CUSTOM_ID: files +:Effort: 0:15 +:END: +:LOGBOOK: + +CLOCK: [2022-12-02 Fri 19:31] :END: + +Verify that all the files load + +#+begin_src emacs-lisp :results replace +(let ((info (emacsconf-prepare-for-display (emacsconf-get-talk-info)))) + (mapconcat + (lambda (track) + (concat "- " (plist-get track :name) "\n" + (mapconcat + (lambda (talk) + (if (plist-get talk :video-file) + (format " - [ ] [[elisp:(emacsconf-stream-play-talk-on-change \"%s\")][Play %s]]\n" + (plist-get talk :slug) (plist-get talk :slug)) + "")) + (emacsconf-filter-talks-by-track track info)))) + emacsconf-tracks)) +#+end_src + +#+RESULTS: +:results: +- General + - [X] [[elisp:(emacsconf-stream-play-talk-on-change "journalism")][Play journalism]] + - [X] [[elisp:(emacsconf-stream-play-talk-on-change "school")][Play school]] + - [X] [[elisp:(emacsconf-stream-play-talk-on-change "handwritten")][Play handwritten]] + - [X] [[elisp:(emacsconf-stream-play-talk-on-change "science")][Play science]] + - [X] [[elisp:(emacsconf-stream-play-talk-on-change "buddy")][Play buddy]] + - [X] [[elisp:(emacsconf-stream-play-talk-on-change "meetups")][Play meetups]] + - [X] [[elisp:(emacsconf-stream-play-talk-on-change "buttons")][Play buttons]] + - [X] [[elisp:(emacsconf-stream-play-talk-on-change "realestate")][Play realestate]] + - [X] [[elisp:(emacsconf-stream-play-talk-on-change "health")][Play health]] + - [X] [[elisp:(emacsconf-stream-play-talk-on-change "jupyter")][Play jupyter]] - black bar + - [X] [[elisp:(emacsconf-stream-play-talk-on-change "survey")][Play survey]] + - [X] [[elisp:(emacsconf-stream-play-talk-on-change "orgyear")][Play orgyear]] + - [X] [[elisp:(emacsconf-stream-play-talk-on-change "rolodex")][Play rolodex]] + - [X] [[elisp:(emacsconf-stream-play-talk-on-change "orgsuperlinks")][Play orgsuperlinks]] + - [X] [[elisp:(emacsconf-stream-play-talk-on-change "workflows")][Play workflows]] + - [X] [[elisp:(emacsconf-stream-play-talk-on-change "indieweb")][Play indieweb]] + - [X] [[elisp:(emacsconf-stream-play-talk-on-change "devel")][Play devel]] - boxed in original +- Development + - [X] [[elisp:(emacsconf-stream-play-talk-on-change "treesitter")][Play treesitter]] + - [X] [[elisp:(emacsconf-stream-play-talk-on-change "asmblox")][Play asmblox]] + - [X] [[elisp:(emacsconf-stream-play-talk-on-change "sqlite")][Play sqlite]] - original is cropped at top and bottom, probably zoomed in + - [X] [[elisp:(emacsconf-stream-play-talk-on-change "mail")][Play mail]] + - [X] [[elisp:(emacsconf-stream-play-talk-on-change "maint")][Play maint]] + - [X] [[elisp:(emacsconf-stream-play-talk-on-change "haskell")][Play haskell]] + - [X] [[elisp:(emacsconf-stream-play-talk-on-change "rde")][Play rde]] + - [X] [[elisp:(emacsconf-stream-play-talk-on-change "justl")][Play justl]] - also boxed in original + - [X] [[elisp:(emacsconf-stream-play-talk-on-change "rms")][Play rms]] - needs subtitles + - [X] [[elisp:(emacsconf-stream-play-talk-on-change "detached")][Play detached]] + - [X] [[elisp:(emacsconf-stream-play-talk-on-change "eshell")][Play eshell]] + - [X] [[elisp:(emacsconf-stream-play-talk-on-change "async")][Play async]] + - [X] [[elisp:(emacsconf-stream-play-talk-on-change "dbus")][Play dbus]] +:end: + +How about the ones that might be live +#+begin_src emacs-lisp :results replace +(let ((info (emacsconf-prepare-for-display (emacsconf-get-talk-info)))) + (mapconcat + (lambda (track) + (concat "- " (plist-get track :name) "\n" + (mapconcat + (lambda (talk) + (if (null (plist-get talk :video-file)) + (format " - [ ] [[elisp:(emacsconf-stream-play-talk-on-change \"%s\")][Play %s]]\n" + (plist-get talk :slug) (plist-get talk :slug)) + "")) + (emacsconf-filter-talks-by-track track info)))) + emacsconf-tracks)) +#+end_src + +#+RESULTS: +:results: +- General + - [X] [[elisp:(emacsconf-stream-play-talk-on-change "sat-open")][Play sat-open]] + - [X] [[elisp:(emacsconf-stream-play-talk-on-change "sat-close")][Play sat-close]] + - [X] [[elisp:(emacsconf-stream-play-talk-on-change "sun-open")][Play sun-open]] + - [X] [[elisp:(emacsconf-stream-play-talk-on-change "orgvm")][Play orgvm]] + - [X] [[elisp:(emacsconf-stream-play-talk-on-change "hyperorg")][Play hyperorg]] + - [X] [[elisp:(emacsconf-stream-play-talk-on-change "grail")][Play grail]] + - [X] [[elisp:(emacsconf-stream-play-talk-on-change "fanfare")][Play fanfare]] + - [X] [[elisp:(emacsconf-stream-play-talk-on-change "sun-close")][Play sun-close]] +- Development + - [X] [[elisp:(emacsconf-stream-play-talk-on-change "lspbridge")][Play lspbridge]] + - [X] [[elisp:(emacsconf-stream-play-talk-on-change "wayland")][Play wayland]] + - [X] [[elisp:(emacsconf-stream-play-talk-on-change "eev")][Play eev]] + - [X] [[elisp:(emacsconf-stream-play-talk-on-change "python")][Play python]] + - [X] [[elisp:(emacsconf-stream-play-talk-on-change "localizing")][Play localizing]] +:end: + +*** TODO Fix my audio volume for intros *** DONE [#C] Remove first eight seconds of Jupyter if possible, and the last 16 seconds or so CLOSED: [2022-12-02 Fri 10:27] SCHEDULED: <2022-12-02 Fri> :PROPERTIES: @@ -176,8 +271,7 @@ CLOSED: [2022-12-02 Fri 10:27] SCHEDULED: <2022-12-02 Fri> :END: screen -S jupyter-trim ffmpeg -y -ss 8 -to 00:16:40 -i emacsconf-2022-jupyter--edit-live-jupyter-notebook-cells-with-emacs--blaine-mooers--final.webm emacsconf-2022-jupyter--edit-live-jupyter-notebook-cells-with-emacs--blaine-mooers--trimmed.webm - - +*** TODO Regenerate overlays to accommodate different layout ** [#A] Look for ways to reduce risk :derisk: :PROPERTIES: @@ -978,7 +1072,7 @@ CLOSED: [2022-11-28 Mon 00:21] SCHEDULED: <2022-11-27 Sun> :END: ** TODO [#C] Turn off file upload service on media.emacsconf.org :sachac:infra: -SCHEDULED: <2022-12-02 Fri> +SCHEDULED: <2022-12-03 Sat> :PROPERTIES: :CUSTOM_ID: upload-off :END: @@ -1529,7 +1623,7 @@ Goals: Update schedule Publish prerec when talk is playing -*** SOMEDAY [#B] Irc bot for opening +*** SOMEDAY [#C] Irc bot for opening SCHEDULED: <2022-12-02 Fri> :PROPERTIES: :CREATED: [2022-12-01 Thu 22:35] @@ -3384,14 +3478,23 @@ emacsconf-stream-rebroadcast - specify the source track - Toobnix - Peertube - STREAM e-mails the mailing list -** Last-minute caption update :upload: +** Last-minute caption or file update :upload: :PROPERTIES: :CUSTOM_ID: last-minute-captions :END: - CHECK uploads the --main.vtt file to orga@res.emacsconf.org:~/stream -p 46668 - If streaming locally, STREAM copies the VTT file and loads it into MPV with =--sub-file= - + +ssh orga@media.emacsconf.org +cd backstage; make all + +ssh orga@res.emacsconf.org -p 46668 +~/cache/update-cache +cd ~/stream +cp ~/cache/*$SLUG*--main.webm . + + ** Pad malfunction or mess-up :infra: :PROPERTIES: :CUSTOM_ID: pad-broken @@ -3591,22 +3694,26 @@ or 6. Update the schedule (emacsconf-publish-schedule). 7. Update info pages (emacsconf-publish-info-pages). 8. Update the watch page (emacsconf-publish-watch-pages). -9. Update the pad. +9. Update the pad, and the two previous pads. 10. Update the in-between slide (and for the following one) and upload the assets. 11. Redo the intros for that talk and the following one - SLUG=eev; ffmpeg -y -i $SLUG.opus -i ../../in-between/$SLUG.png -i $SLUG.vtt ../$SLUG.webm + SLUG=health; ffmpeg -y -loop 1 -i ../../in-between/$SLUG.png -i $SLUG.opus -i $SLUG.vtt -shortest ../$SLUG.webm; mpv $SLUG.webm -*** TODO Rename lspbridge +*** DONE Rename lspbridge +CLOSED: [2022-12-02 Fri 19:23] rerecord lspbridge intro -*** STARTED Rename health +lspbridge science + +*** DONE Rename health +CLOSED: [2022-12-02 Fri 19:27] :PROPERTIES: :Effort: 0:15 :END: :LOGBOOK: -CLOCK: [2022-12-02 Fri 18:58] +CLOCK: [2022-12-02 Fri 18:58]--[2022-12-02 Fri 19:27] => 0:29 :END: - +health eev * Task archive :PROPERTIES: :CUSTOM_ID: archive @@ -4647,8 +4754,8 @@ CLOSED: [2022-11-11 Fri 19:27] SCHEDULED: <2022-11-11 Fri> CLOSED: [2022-11-11 Fri 19:27] *** DONE Follow up with speakers based on their availability CLOSED: [2022-11-11 Fri 19:27] -*** TODO Email speakers because I'll be shutting down the web upload -SCHEDULED: <2022-12-02 Fri> +*** CANCELLED Email speakers because I'll be shutting down the web upload +CLOSED: [2022-12-02 Fri 19:30] SCHEDULED: <2022-12-02 Fri> :PROPERTIES: :CREATED: [2022-11-30 Wed 22:24] :END: |