summaryrefslogtreecommitdiffstats
path: root/2024/organizers-notebook/index.org
diff options
context:
space:
mode:
Diffstat (limited to '2024/organizers-notebook/index.org')
-rw-r--r--2024/organizers-notebook/index.org1483
1 files changed, 1483 insertions, 0 deletions
diff --git a/2024/organizers-notebook/index.org b/2024/organizers-notebook/index.org
new file mode 100644
index 00000000..4c47e4b1
--- /dev/null
+++ b/2024/organizers-notebook/index.org
@@ -0,0 +1,1483 @@
+# [[elisp:(progn (memoize 'emacsconf-get-talk-info "5 seconds") (org-md-export-to-markdown) (memoize-restore 'emacsconf-get-talk-info))][Export this file to Markdown]]
+#+TAGS: emacsconf
+# [[elisp:(memoize 'emacsconf-get-talk-info "5 seconds")][Memoize emacsconf-get-talk-info]] - [[elisp:(memoize-restore 'emacsconf-get-talk-info)][Unmemoize]]
+#+todo: TODO(t) SOMEDAY STARTED INPROGRESS(i) WAITING(w) STANDBY(s) BLOCKED(b) | DONE(x) CANCELLED(c)
+#+OPTIONS: h:6 toc:nil num:nil ':t
+#+PROPERTY: header-args :results silent :exports code :tangle yes
+#+EXPORT_FILE_NAME: ../organizers-notebook.md
+#+PROPERTY: QUANTIFIED Emacs
+
+#+begin_export md
+<!-- organizers-notebook.md is exported from organizers-notebook/index.org, please modify that instead. -->
+[[!sidebar content=""]]
+
+This file is automatically exported from [/2024/organizers-notebook/index.org](/2024/organizers-notebook/index.org). You might prefer to navigate this as an Org file instead. To do so, [clone the wiki repository](https://emacsconf.org/edit/).
+
+You might also like the [general organizers' notebook](/organizers-notebook) and [the organizers' notebook from 2023](/2023/organizers-notebook).
+#+end_export
+
+
+
+#+NAME: list-headings
+#+begin_src emacs-lisp :results value replace :exports results :eval never-export :var heading="Help wanted" :var match="helpwanted"
+(emacsconf-surround
+ (concat heading ":\n\n")
+ (string-join
+ (delq nil
+ (org-map-entries
+ (lambda ()
+ (when (and (org-entry-is-todo-p) (not (org-entry-is-done-p)))
+ (format "- %s %s\n"
+ (org-link-make-string
+ (concat "#" (org-entry-get (point) "CUSTOM_ID"))
+ (org-entry-get (point) "ITEM"))
+ (emacsconf-surround
+ "(by "
+ (and (org-entry-get (point) "DEADLINE")
+ (replace-regexp-in-string "[<>]" "" (org-entry-get (point) "DEADLINE")))
+ ")"
+ ""))))
+ match nil))
+ "")
+"" "")
+#+end_src
+
+#+RESULTS: list-headings
+:results:
+:end:
+
+#+CALL: list-headings(heading="Decisions to make", match="decision")
+
+#+RESULTS:
+:results:
+:end:
+
+
+#+TOC: headlines 2
+* COMMENT Shortcuts
+:PROPERTIES:
+:CUSTOM_ID: shortcuts
+:END:
+
+[[file:~/proj/emacsconf/wiki/organizers-notebook/index.org][Common notebook]]
+
+* TODO Timeline
+:PROPERTIES:
+:CUSTOM_ID: timeline
+:END:
+
+| CFP | [2024-06-30 Sun] | |
+| CFP deadline | [2024-09-20 Fri] | 82 |
+| Speaker notifications | [2024-09-27 Fri] | |
+| *Publish schedule* | [2024-10-25 Fri] | |
+| Video submission deadline | [2024-11-08 Fri] | 49 |
+| EmacsConf | [2024-12-07 Sat] | 29 |
+#+TBLFM: @2$3=@2$2-@1$2::@5$3=@5$2-@2$2::@6$3=@6$2-@5$2
+
+We like to have at least a month to work on audio
+normalization and transcription, and we want
+speakers to have at least a month to work on their
+videos (considering early submissions will already
+have gotten started on processing).
+
+* About this document
+:PROPERTIES:
+:CUSTOM_ID: about-this-doc
+:END:
+
+Tags:
+- =conforg=: Requires access to private conf.org repository
+
+* Communications plan
+:PROPERTIES:
+:CUSTOM_ID: comms
+:END:
+
+Objectives:
+- keep everyone in the loop without them feeling like they're overloaded
+
+Everyone:
+- [ ] Call for participation (speakers and volunteers)
+- [ ] Reminder about CFP
+- [ ] Last call
+
+Speakers:
+- [ ] Send all speakers backstage access and upload instructions
+- [ ] Send all speakers check-in instructions
+
+Volunteers:
+- [ ] Send captioning volunteers the backstage info
+- [ ] Send past captioning volunteers an invitation to participate - ask when there's a lot of load
+- [ ] Ask for help with audio processing
+
+* Good/better/best
+:PROPERTIES:
+:CUSTOM_ID: good-better-best
+:END:
+
+This table makes it easier to move the slider depending on who wants
+to volunteer and how much we can get done. At some point, we'll figure
+out how to track our current status so we know what we need to
+scramble to do in order to get the conference off the ground. *bold*
+is our current goal. Feel free to volunteer for anything that
+interests you!
+
+ | | Good | Better | Best |
+ | Streaming | Regular stream | + alternate streams on PeerTube | + alternate streams on YouTube |
+ | 480p | Same on live | Separate node | Ansible setup |
+ | Audio normalization | Core org handling it | Other volunteer | Multiple volunteers |
+ | Video resolution | Usual reminders | Extra reminders | Everyone remembering to use a large font size |
+ | Intros | Standard, recorded | Reviewed by speakers | More details/context |
+ | Pad | v1.9.7 | v2.x | |
+* Phases
+:PROPERTIES:
+:CUSTOM_ID: phases
+:END:
+** DONE Draft CFP
+CLOSED: [2024-09-17 Tue 16:45]
+:PROPERTIES:
+:CUSTOM_ID: cfp
+:END:
+
+**** Draft linked pages
+:PROPERTIES:
+:CUSTOM_ID: phases-draft-cfp-draft-linked-pages
+:END:
+
+- [X] cfp
+- [X] submit page
+- [X] year index
+- [X] volunteer page
+**** DONE Check with other organizers
+CLOSED: [2024-06-11 Tue 19:21] DEADLINE: <2024-06-14 Fri>
+:PROPERTIES:
+:CREATED: [024-06-03 Mon 10:1]
+:CUSTOM_ID: phases-draft-cfp-check-with-other-organizers
+:END:
+**** DONE Post CFP in the usual places
+CLOSED: [2024-09-17 Tue 16:45]
+:PROPERTIES:
+:CUSTOM_ID: phases-draft-cfp-post-cfp-in-the-usual-places
+:END:
+emacsconf-discuss, reddit.com/r/emacs, Emacs News, emacs-tangents, Mastodon, X
+** TODO Draft schedule
+:PROPERTIES:
+:CUSTOM_ID: draft-schedule
+:END:
+
+#+NAME: schedule
+#+begin_src emacs-lisp :results value replace :exports none :eval never-export :var filename="schedule-1.5-tracks.svg"
+(require 'emacsconf)
+(require 'emacsconf-schedule)
+(setq emacsconf-schedule-tracks
+ '((:label "Saturday"
+ :start "2024-12-07 9:00"
+ :end "2024-12-07 18:00"
+ :tracks ("General" "Development"))
+ (:label "Sunday"
+ :start "2024-12-08 9:00"
+ :end "2024-12-08 18:00"
+ :tracks ("General" "Development"))))
+(let ((emacsconf-schedule-default-buffer-minutes 10)
+ (emacsconf-schedule-default-buffer-minutes-for-live-q-and-a 20)
+ (emacsconf-schedule-break-time 10)
+ (emacsconf-schedule-lunch-time 60)
+ (emacsconf-use-absolute-url t)
+ (emacsconf-schedule-strategies '(emacsconf-schedule-allocate-buffer-time
+ emacsconf-schedule-copy-previous-track))
+ (emacsconf-schedule-validation-functions
+ '(emacsconf-schedule-validate-time-constraints
+ ;; emacsconf-schedule-validate-live-q-and-a-sessions-are-staggered
+ emacsconf-schedule-validate-no-cancelled-talks
+ emacsconf-schedule-validate-all-talks-present
+ emacsconf-schedule-validate-no-duplicates)))
+ (setq emacsconf-schedule-plan
+ '(("GEN Saturday, Dec 7" :start "2024-12-07 09:00" :set-track "General")
+ sat-open
+ papers ; <= 10:00
+ project ; any
+ org-update ; <= 13:00 EST Sat or >= 15:00 Sat or <= 14:00 Sun, Sat preferred
+ color ; <= 12:00 sat pref
+ (lunch :start "12:00")
+ theme ; >= 12:30
+ (water :time 15) ; >= 13:00 Sat, same speaker as shell
+ shell ; >= 13:00 Sat
+ casual ; >= 13:00
+ hyperdrive ; >= 13:30 Sat
+ writing ; >= 15:30 Sat
+ emacs30 ; probably any
+ (sat-close :start "17:00")
+ ("DEV Saturday, Dec 7" :start "2024-12-07 10:00" :set-track "Development")
+ gypsum ; <= 11:00
+ rust ; Dec 7
+ p-search ; any
+ (lunch :start "12:00")
+ (julia :buffer 15) ; >= 13:00
+ guile ; >= 12:00
+ secrets ; >= 13:00
+ (mcclim :time 60) ; >= 14:00
+ maxima
+ ("GEN Sunday, Dec 8" :start "2024-12-08 09:00" :set-track "General")
+ sun-open
+ links ; <= 10:30
+ regex ; <= 12:00 sun or >= 12:00 sat
+ learning ; <= 13:00
+ (blee :buffer 15) ; any
+ (hyperbole :buffer 15)
+ (lunch :start "12:00")
+ (hywiki :buffer 20) ; >= 10:00
+ (pgmacs :buffer 20) ; <= 15:00
+ (literate :buffer 20) ; >= 13:00
+ (students :start "15:00") ; >= 14:00 Sun
+ sharing ; >= 13:00
+ (transducers :start "16:00") ; >= 16:00 sun
+ (sun-close)
+ ))
+ (setq emacsconf-schedule-draft (emacsconf-schedule-prepare (emacsconf-schedule-inflate-sexp emacsconf-schedule-plan)))
+ (prog1 (string-join (emacsconf-schedule-validate emacsconf-schedule-draft) "\n")
+ (let ((emacsconf-schedule-svg-modify-functions
+ '(emacsconf-schedule-svg-color-by-availability
+ ;emacsconf-schedule-svg-color-by-status
+ )))
+ (with-temp-file (expand-file-name filename (file-name-directory emacsconf-org-file))
+ (svg-print (emacsconf-schedule-svg 800 300 emacsconf-schedule-draft)))
+ (with-temp-file (expand-file-name filename (expand-file-name "organizers-notebook" (expand-file-name emacsconf-year emacsconf-directory)))
+ (svg-print (emacsconf-schedule-svg 800 300 emacsconf-schedule-draft))))
+ (clear-image-cache)))
+#+end_src
+
+#+RESULTS: schedule
+:results:
+:end:
+
+#+RESULTS:
+:results:
+:end:
+
+[[file:schedule-1.5-tracks.svg]]
+
+Legend:
+- light blue: constraint is <= a time
+- peach: constraint is >= a time
+- solid line: Q&A will be through BigBlueButton web conference
+- dashed line: Q&A will be IRC/Etherpad during the event or e-mail after the event
+
+Notes:
+
+- Updates:
+ - [2024-10-27 Sun] Removed emacsconf:graph, moved emacsconf:p-search earlier; also emacsconf:learning needs to be in the morning, so I moved emacsconf:pgmacs and emacsconf:org-teach around.
+ - [2024-10-22 Tue] Swapped emacsconf:org-teach and emacsconf:blee
+ - [2024-10-21 Mon] Extended emacsconf:blee
+ - [2024-10-17 Thu] Added emacsconf:org-update to Saturday morning, moving emacsconf:org-teach to Sunday afternoon
+ - [2024-10-15 Tue] Swapped emacsconf:students and emacsconf:literate for availability reasons
+ - [2024-10-13 Sun] Moved emacsconf:hyperdrive to the afternoon (swapping with emacsconf:flp) because of changed availability
+ - [2024-10-12 Sat] I fixed the time constraint for emacsconf:students (needs to be in the afternoon), so I moved emacsconf:hyperbole to the morning.
+- General approach:
+ - I've mostly tried to alternate IRC/pad Q&A with live Q&A.
+ - 1.5 tracks keeps things faster-paced than the 2-track option.
+- Sat:
+ - Gen track:
+ - emacsconf:papers, emacsconf:project, emacsconf:org-teach, emacsconf:flp, emacsconf:color should be pretty general
+ - emacsconf:color and emacsconf:theme are both theme-related. emacsconf:color needs to be in the morning and emacsconf:theme needs to be in the afternoon, so I put them on either side of the lunch break.
+ - Other afternoon talks: emacsconf:water and emacsconf:shell are by the same speaker. emacsconf:casual, emacsconf:hyperdrive, and emacsconf:writing will probably be good for a general audience. These speakers are only available in the afternoon, so this part of the schedule is a bit tight.
+ - I put emacsconf:emacs30 at the end of Saturday to act sort of as a keynote. Closing remarks on Saturday are usually very light, so we could skip them.
+ - Dev track:
+ - emacsconf:gypsum, emacsconf:rust, emacsconf:julia, emacsconf:guile, and emacsconf:mcclim are about other projects
+ - emacsconf:graph, emacsconf:p-search, emacsconf:secrets, and emacsconf:repro will probably be more dev-focused
+- Sun:
+ - Sunday morning last year had some packet loss issues at around 9:30, so we'll start with some talks that don't have BBB Q&A: emacsconf:students, emacsconf:links, emacsconf:regex
+ - emacsconf:blee and emacsconf:language are probably general-audience
+ - emacsconf:pgmacs, emacsconf:regex, and emacsconf:transducers are all development-oriented, but are on the general track for scheduling purposes. [[emacsconf:transducers]] can only be on Sunday afternoon at 4pm because of availability.
+ - I've separated emacsconf:hyperbole and emacsconf:hywiki by lunch so that people who are interested in that can attend the live Q&A for both without worrying about missing things.
+ - emacsconf:learning, emacsconf:sharing, emacsconf:literate will probably be good for a general audience
+
+*** Option: 2 tracks :noexport:
+:PROPERTIES:
+:CUSTOM_ID: sched-2-tracks
+:END:
+#+begin_src emacs-lisp :results value replace :exports none :eval never-export :var filename="schedule-2-tracks.svg"
+(require 'emacsconf)
+(require 'emacsconf-schedule)
+(setq emacsconf-schedule-tracks
+ '((:label "Saturday"
+ :start "2024-12-07 9:00"
+ :end "2024-12-07 18:00"
+ :tracks ("General" "Development"))
+ (:label "Sunday"
+ :start "2024-12-08 9:00"
+ :end "2024-12-08 18:00"
+ :tracks ("General" "Development"))))
+(let ((emacsconf-schedule-default-buffer-minutes 20)
+ (emacsconf-schedule-default-buffer-minutes-for-live-q-and-a 30)
+ (emacsconf-schedule-break-time 10)
+ (emacsconf-schedule-lunch-time 60)
+ (emacsconf-use-absolute-url t)
+ (emacsconf-schedule-strategies '(emacsconf-schedule-allocate-buffer-time
+ emacsconf-schedule-copy-previous-track))
+ (emacsconf-schedule-validation-functions
+ '(emacsconf-schedule-validate-time-constraints
+ ;; emacsconf-schedule-validate-live-q-and-a-sessions-are-staggered
+ emacsconf-schedule-validate-all-talks-present
+ emacsconf-schedule-validate-no-duplicates)))
+ (setq emacsconf-schedule-plan
+ '(("GEN Saturday, Dec 7" :start "2024-12-07 09:00" :set-track "General")
+ sat-open
+ papers ; <= 10:00
+ color ; <= 12:00 sat pref
+ flp ; any, Sat pref
+ hyperdrive ; >= 11:00 Sat
+ (lunch :start "12:00")
+ emacs30 ; probably any
+ theme ; >= 12:30
+ water ; >= 13:00 Sat, same speaker as shell >= 10:00 EST Sat and <= 16:00 EST Sat
+ shell ; >= 13:00 Sat >= 10:00 EST Sat and <= 16:00 EST Sat
+ students
+ writing ; >= 15:30 Sat
+ sat-close
+ ("DEV Saturday, Dec 7" :start "2024-12-07 10:00" :set-track "Development")
+ gypsum ; <= 11:00
+ rust ; Dec 7
+ (lunch :start "12:00")
+ julia ; >= 13:00
+ guile ; >= 12:00
+ (mcclim :time 60) ; >= 14:00
+ regex ; <= 12:00 sun or >= 12:00 sat
+ repro ; any
+ ("GEN Sunday, Dec 8" :start "2024-12-08 09:00" :set-track "General")
+ sun-open
+ links ; <= 10:30
+ (org-teach :buffer 20) ; any
+ (hyperbole :buffer 20)
+ (hywiki :buffer 20) ; >= 10:00
+ language ; <= 12:00
+ (lunch :start "12:00")
+ literate ; >= 13:00
+ casual ; >= 13:00
+ learning ; any
+ project ; any
+ sharing ; any
+ (sun-close :start "16:50")
+ ("DEV Sunday, Dec 8" :start "2024-12-08 10:00" :set-track "Development")
+ pgmacs ; <= 15:00
+ graph ; <= 12:00
+ (lunch :start "12:00")
+ blee ; any
+ p-search ; any
+ secrets ; >= 13:00
+ (transducers :start "16:00") ; >= 16:00 sun
+ ))
+ (setq emacsconf-schedule-draft (emacsconf-schedule-prepare (emacsconf-schedule-inflate-sexp emacsconf-schedule-plan)))
+ (prog1 (string-join (emacsconf-schedule-validate emacsconf-schedule-draft) "\n")
+ (let ((emacsconf-schedule-svg-modify-functions
+ '(emacsconf-schedule-svg-color-by-availability
+ ;emacsconf-schedule-svg-color-by-status
+ )))
+ (with-temp-file (expand-file-name filename (file-name-directory emacsconf-org-file))
+ (svg-print (emacsconf-schedule-svg 800 300 emacsconf-schedule-draft)))
+ (with-temp-file (expand-file-name filename (expand-file-name "organizers-notebook" (expand-file-name emacsconf-year emacsconf-directory)))
+ (svg-print (emacsconf-schedule-svg 800 300 emacsconf-schedule-draft))))
+ (clear-image-cache)))
+#+end_src
+
+#+RESULTS:
+:results:
+:end:
+
+[[file:schedule-2-tracks.svg]]
+
+Coloring by availability:
+- light blue: constraint is <= a time
+- peach: constraint is >= a time
+
+** DONE Prepare shift calendar, ask people to sign up
+CLOSED: [2024-11-26 Tue 10:06] SCHEDULED: <2023-11-01 Wed>
+:PROPERTIES:
+:CUSTOM_ID: shifts
+:END:
+
+#+BEGIN_EXPORT md
+<a name="shifts"></a>
+#+END_EXPORT
+
+AM: 9-12 PM EST, PM: 1-5 PM EST (plus a little extra for setup/transition)
+
+Saturday Dec 7 2024
+
+#+NAME: saturday-shifts
+| | Start | End | [[https://emacsconf.org/2023/volunteer/host/][Host]] | Streamer | [[https://emacsconf.org/2023/volunteer/checkin/][Checkin]] | [[https://emacsconf.org/2023/volunteer/irc/][IRC]] | [[https://emacsconf.org/2023/volunteer/pad/][Pad]] | Coord |
+|--------+-------+-------+--------+----------+---------+-----+-----+--------|
+| Gen AM | 09:00 | 12:00 | zaeph | sachac | sachac | | | sachac |
+| Gen PM | 13:00 | 17:00 | zaeph | sachac | sachac | | | sachac |
+| Dev AM | 10:00 | 12:00 | corwin | sachac | sachac | | | sachac |
+| Dev PM | 13:00 | 17:00 | corwin | sachac | sachac | | | sachac |
+
+Sunday Dec 8 2024
+
+#+NAME: sunday-shifts
+| | Start | End | [[https://emacsconf.org/2023/volunteer/host/][Host]] | Streamer | [[https://emacsconf.org/2023/volunteer/checkin/][Checkin]] | [[https://emacsconf.org/2023/volunteer/irc/][IRC]] | [[https://emacsconf.org/2023/volunteer/pad/][Pad]] | Coord |
+|--------+-------+-------+-------+----------+---------+-----+-----+--------|
+| Gen AM | 09:00 | 12:00 | zaeph | sachac | corwin | | | sachac |
+| Gen PM | 13:00 | 17:00 | zaeph | sachac | corwin | | | sachac |
+
+Backups:
+- dev host/streamer:
+- gen host/streamer:
+- checkin, IRC, pad:
+
+Interested in a shift? Please e-mail [[mailto:emacsconf-org-private@gnu.org]] and we'll help you figure out what you need to learn.
+
+#+begin_src emacs-lisp :var sat=saturday-shifts :var sun=sunday-shifts :rownames no :colnames no :results verbatim replace
+`(setq emacsconf-shifts
+ (list
+ ,@(apply #'append
+ (mapcar
+ (lambda (day)
+ (let ((headers
+ (mapcar
+ (lambda (field)
+ (intern
+ (concat
+ ":"
+ (downcase
+ (if (string-match org-link-bracket-re field)
+ (match-string 2 field)
+ field)))))
+ (seq-drop (car (cadr day)) 3))))
+ (mapcar
+ (lambda (row)
+ (apply #'append
+ (list 'list :id
+ (when (string-match "^\\([^ ]+\\) \\(AM\\|PM\\)" (car row))
+ (format "%s-%s-%s"
+ (car day)
+ (downcase (match-string 2 (car row)))
+ (downcase (match-string 1 (car row)))))
+ :track
+ (if (string-match "^Gen" (car row)) "General" "Development")
+ :start
+ (format "%sT%s:00%s"
+ (elt day 2)
+ (elt row 1)
+ emacsconf-timezone-offset)
+ :end
+ (format "%sT%s:00%s"
+ (elt day 2)
+ (elt row 2)
+ emacsconf-timezone-offset))
+ (seq-map-indexed
+ (lambda (value index)
+ (unless (string= value "")
+ (list (elt headers index) value)))
+ (seq-drop row 3))))
+ (cdr (cadr day)))
+ ))
+ (list
+ (list "sat" sat "2024-12-07")
+ (list "sun" sun "2024-12-08"))))))
+
+#+end_src
+
+#+RESULTS:
+:results:
+(setq emacsconf-shifts (list (list :id "sat-am-gen" :track "General" :start "2024-12-07T09:00:00-0500" :end "2024-12-07T12:00:00-0500" :host "zaeph" :streamer "sachac" :checkin "sachac" :coord "sachac") (list :id "sat-pm-gen" :track "General" :start "2024-12-07T13:00:00-0500" :end "2024-12-07T17:00:00-0500" :host "zaeph" :streamer "sachac" :checkin "sachac" :coord "sachac") (list :id "sat-am-dev" :track "Development" :start "2024-12-07T10:00:00-0500" :end "2024-12-07T12:00:00-0500" :host "corwin" :streamer "sachac" :checkin "sachac" :coord "sachac") (list :id "sat-pm-dev" :track "Development" :start "2024-12-07T13:00:00-0500" :end "2024-12-07T17:00:00-0500" :host "corwin" :streamer "sachac" :checkin "sachac" :coord "sachac") (list :id "sun-am-gen" :track "General" :start "2024-12-08T09:00:00-0500" :end "2024-12-08T12:00:00-0500" :host "zaeph" :streamer "sachac" :checkin "corwin" :coord "sachac") (list :id "sun-pm-gen" :track "General" :start "2024-12-08T13:00:00-0500" :end "2024-12-08T17:00:00-0500" :host "zaeph" :streamer "sachac" :checkin "corwin" :coord "sachac")))
+:end:
+
+
+** Record intros and opening remarks
+:PROPERTIES:
+:CUSTOM_ID: intros
+:END:
+
+*** WAITING Redo pkal pronunciation :emacsconf:record:
+SCHEDULED: <2024-12-03 Tue>
+:PROPERTIES:
+:CREATED: [2024-12-02 Mon 16:48]
+:CUSTOM_ID: phases-record-intros-and-opening-remarks-redo-pkal-pronunciation
+:END:
+
+#+begin_quote
+kǎlud͡ʑert͡ʃit͡ɕ - zaeph's guess is kah-loo-dyer-tshitch
+#+end_quote
+
+#+begin_example
+Next, we have "Emacs 30 Highlights" by Philip Kaludercic.
+You can ask questions in the web conference
+by joining from the talk page,
+or you can ask questions through Etherpad or IRC.
+#+end_example
+
+*** WAITING Rerecord intro for Ihor Radchenko and Bastien Guerry
+:PROPERTIES:
+:CUSTOM_ID: phases-record-intros-and-opening-remarks-rerecord-intro-for-ihor-radchenko-and-bastien-guerry
+:END:
+
+
+zaeph's tips: Ihor said his name in this presentation: https://youtu.be/YA1RJxH4xfQ?t=1
+You’re rolling your Rs for both “Ihor” and “Guerry”, but I think both
+are supposed to be smooth. For Bastien’s family name, it’s
+"ghey-ree". https://paste.xinu.at/A9DFSN/
+
+zaeph will probably pronounce this so much better than I can. =)
+
+#+begin_example
+Next, we have "The future of Org",
+by Ihor Radchenko and Bastien Guerry.
+They will answer questions via web conference.
+You can join using the URL from the talk page
+or ask questions through Etherpad or IRC.
+#+end_example
+
+*** TODO Rerecord Eev intro with MAC-SYM-A pronunciation :record:emacsconf:
+:PROPERTIES:
+:CUSTOM_ID: phases-record-intros-and-opening-remarks-rerecord-eev-intro-with-mac-sym-a-pronunciation
+:END:
+
+#+begin_quote
+My name in the intro is perfect, but Maxima comes from Macsyma, and it is
+pronounced mac - sym (<- as in "symbolic") a...
+#+end_quote
+
+#+begin_example
+Next, we have "Emacs, eev, and Maxima - now!",
+by Eduardo Ochs.
+You can ask questions via Etherpad or IRC.
+#+end_example
+
+*** WAITING Rerecord Vincent Conus using psitransfer version :record:emacsconf:
+SCHEDULED: <2024-12-03 Tue>
+:PROPERTIES:
+:CREATED: [2024-12-02 Mon 19:48]
+:CUSTOM_ID: phases-record-intros-and-opening-remarks-rerecord-vincent-conus-using-psitransfer-version
+:END:
+
+[[file:~/proj/emacsconf/2024/cache/emacsconf-2024-papers--writing-academic-papers-in-orgroam--vincent-conus--name.ogg]]
+
+cuhn-us
+
+#+begin_example
+Next, we have "Writing academic papers in Org-Roam",
+by Vincent Conus.
+He will answer questions via web conference.
+You can join using the URL from the talk page
+or ask questions through Etherpad or IRC.
+#+end_example
+
+
+*** WAITING Rerecord Joseph Turner with new title :emacsconf:record:
+:PROPERTIES:
+:CREATED: [2024-12-02 Mon 13:51]
+:CUSTOM_ID: phases-record-intros-and-opening-remarks-rerecord-joseph-turner-with-new-title
+:END:
+
+[[https://sachachua.com/blog/2024/12/2024-12-02-emacs-news/][2024-12-02 Emacs news]]
+
+New in hyperdrive.el: quick install, peer graph, transclusion!
+
+#+begin_example
+Next, we have "New in hyperdrive.el: quick install,
+peer graph, transclusion!" by Joseph Turner.
+You can ask questions in the web conference
+by joining from the talk page,
+or you can ask questions through Etherpad or IRC.
+#+end_example
+*** STARTED Record sat-open remarks :emacsconf:record:
+:PROPERTIES:
+:Effort: 0:30
+:CUSTOM_ID: phases-record-intros-and-opening-remarks-record-sat-open-remarks
+:END:
+:LOGBOOK:
+CLOCK: [2024-12-03 Tue 13:38]--[2024-12-04 Wed 08:48] => 19:10
+:END:
+
+Welcome to EmacsConf 2024, where we have fun
+exploring how much we can do with a text editor.
+It's hard to give a general overview
+of all the cool talks today and tomorrow,
+so you can flip through the talks
+and see what sparks your interests.
+Don't feel limited to one track or another.
+The best parts of EmacsConf are the conversations.
+The wiki has a page on how to watch and participate,
+and I'll give you a quick overview as well.
+You can watch both streams at live.emacsconf.org
+using free and open source software.
+Using a streaming media player like mpv
+seems to be the best way to watch in terms of performance
+but there are also web-based players
+just in case that's all you've got.
+The schedule shows the General track on top
+and the Development track on the bottom,
+so you can see what else is going on.
+As you're watching the talks,
+you can refer to the schedule in another window.
+Hover over the boxes to see the times and titles,
+and click on the boxes in the schedule
+to jump to the talk's page for more details.
+You can also get the schedule as an iCalendar file
+or as an Org file in different time zones.
+Many talks will be followed by
+live Q&A web conferences with the speaker,
+which will be done in BigBlueButton or BBB.
+These are indicated with a solid border on the schedule
+and by Q&A: BBB on the schedule page.
+You can join the web conference room
+by clicking on the BBB link
+
+on the schedule page or the talk's webpage.
+Then you can ask your questions yourself when the Q&A starts.
+To improve performance, please keep your webcam off
+and stay muted until it's your turn to talk.
+If you don't like Javascript,
+you can still ask questions via IRC
+and the hosts can read them out for you.
+We're probably going to automatically switch
+between talks and Q&A sessions,
+so the transitions on the stream might be a little sudden.
+
+People in the BigBlueButton room
+can continue the conversation
+even after the talk moves off-stream.
+and you can also reach out to the speakers
+using the contact information on the talk page.
+
+Other talks will have Q&A via Etherpad or IRC,
+depending on what the speakers prefer.
+This is indicated in the schedule with a dashed border
+and on the schedule page as well.
+Some talks will have the Q&A after the event,
+so you can add your questions to their Etherpad
+or ask on IRC.
+We'll e-mail the speakers afterwards
+and update the talk pages when they answer.
+The schedule pages and track pages have quick shortcuts
+so that you can find out more about talks, open the Etherpads,
+and join the Q&A sessions. The watch page has more tips
+on how to make the most of Q&A.
+If you can, please add notes and ask questions
+in the Etherpad for the talk. That makes it easier
+for everyone to share their notes,
+and speakers and hosts can read the questions from there.
+We'll copy the notes to the talk pages afterwards.
+We have one pad for each talk,
+so you can follow the links to get to the next one
+or go back to the schedule and get the link from there.
+If you have general feedback about
+the conference itself, please put it in
+pad.emacsconf.org/2024 , which is linked on each pad.
+You can also use this as a general community message board
+for things like Help Wanted.
+Internet Relay Chat or IRC can be another great way
+to be part of lots of conversations.
+You can use chat.emacsconf.org to join the IRC channels
+through your web browser. The tabs on the left can help you
+switch between the different channels.
+There's #emacsconf-gen for the General track
+and #emacsconf-dev for the Development track.
+If you need to reach us, you can join #emacsconf-org
+or e-mail emacsconf-org-private@gnu.org.
+You can use #emacsconf for hallway conversations.
+Of course, you can join any of these channels
+with your favourite IRC client.
+You can connect to irc.libera.chat
+port 6697 with TLS.
+Once again, we're going to be streaming with open captions
+for most of the talks this year, thanks to our speakers and
+captioning volunteers. The captioned talks are indicated
+on the schedule, and with any luck, we'll be posting
+transcripts on talk pages shortly after the talks start.
+If you need additional accommodations,
+please let us know in #emacsconf-org
+and we'll see if we can make things happen.
+If something goes down, we'll update status.emacsconf.org.
+If it doesn't look like we've noticed yet,
+please let us know in the #emacsconf-org IRC channel,
+where we will be quietly panicking.
+In all of these conversations, please keep in mind
+our guidelines for conduct. You can find them on the wiki,
+They basically boil down to: please be nice.
+If all goes well, the prerecorded talks and transcripts
+should be available from the talk pages
+shortly after they start playing,
+and we'll post the recordings of live talks
+and Q&A sessions within the next month or so.
+If you'd like to get an update, you can subscribe to
+the emacsconf-discuss mailing list.
+All right, let's get going.
+Leo is hosting the general track,
+and Corwin hosting the development track.
+The other volunteers and I will run around mostly backstage,
+and you'll probably meet us in the closing remarks.
+That's also where we get to thank
+all the people and organizations
+who make EmacsConf possible.
+Thanks for coming to EmacsConf 2024.
+*** TODO Record sun-open remarks
+:PROPERTIES:
+:CUSTOM_ID: phases-record-intros-and-opening-remarks-record-sun-open-remarks
+:END:
+
+Welcome to the second day of EmacsConf 2024.
+Today we have one track of talks,
+so you don't have to worry about
+missing out on anything.
+The best parts of EmacsConf are the conversations.
+The wiki has a page on how to watch and participate,
+and I'll give you a quick overview as well.
+You can watch the stream at live.emacsconf.org
+using free and open source software.
+Using a streaming media player like mpv
+seems to be the best way to watch in terms of performance
+but there are also web-based players
+just in case that's all you've got.
+As you're watching the talks,
+you can refer to the schedule in another window.
+Hover over the boxes to see the times and titles,
+and click on the boxes in the schedule
+to jump to the talk's page for more details.
+You can also get the schedule as an iCalendar file
+or as an Org file in different time zones.
+
+Many talks will be followed by
+live Q&A web conferences with the speaker,
+which will be done in BigBlueButton or BBB.
+These are indicated with a solid border on the schedule
+and by Q&A: BBB on the schedule page.
+You can join the web conference room
+by clicking on the BBB link
+on the schedule page or the talk's webpage.
+Then you can ask your questions yourself when the Q&A starts.
+To improve performance, please keep your webcam off
+and stay muted until it's your turn to talk.
+If you don't like Javascript,
+you can still ask questions via IRC
+and the hosts can read them out for you.
+
+We're probably going to automatically switch
+between talks and Q&A sessions,
+so the transitions on the stream might be a little sudden,
+People in the BigBlueButton room
+can continue the conversation
+even after the talk moves off-stream,
+and you can also reach out to the speakers
+using the contact information on the talk page.
+
+Other talks will have Q&A via Etherpad or IRC,
+depending on what the speakers prefer.
+This is indicated in the schedule with a dashed border
+and on the schedule page as well.
+Please ask your questions in the recommended places
+so that the speakers can easily see them.
+
+Some talks will have the Q&A after the event,
+so you can add your questions to their Etherpad.
+We'll e-mail the speakers afterwards
+and update the talk pages when they answer.
+
+We're going to start Sunday morning
+with more IRC/Etherpad Q&A
+to try to get around
+some of the bandwidth issues
+that we noticed last year.
+
+The schedule pages and track pages have quick shortcuts
+so that you can find out more about talks, open the Etherpads,
+and join the Q&A sessions. The watch page has more tips
+on how to make the most of Q&A.
+If you can, please add notes and ask questions
+in the Etherpad for the talk. That makes it easier
+for everyone to share their notes,
+and speakers and hosts can read the questions from there.
+We'll copy the notes to the talk pages afterwards.
+We have one pad for each talk,
+so you can follow the links to get to the next one
+or go back to the schedule and get the link from there.
+If you have general feedback about
+the conference itself, please put it in
+pad.emacsconf.org/2024 , which is linked on each pad.
+You can also use this as a general community message board
+for things like Help Wanted.
+Internet Relay Chat or IRC can be another great way
+to be part of lots of conversations.
+You can use chat.emacsconf.org to join the IRC channels
+through your web browser. The tabs on the left can help you
+switch between the different channels.
+Most discussions will be in
+#emacsconf-gen for the General track.
+If you need to reach us, you can join #emacsconf-org
+or e-mail emacsconf-org-private@gnu.org.
+You can use #emacsconf for hallway conversations.
+Of course, you can join any of these channels
+with your favourite IRC client.
+You can connect to irc.libera.chat
+port 6697 with TLS.
+Once again, we're going to be streaming with open captions
+for most of the talks this year, thanks to our speakers and
+captioning volunteers. The captioned talks are indicated
+on the schedule, and with any luck, we'll be posting
+transcripts on talk pages shortly after the talks start.
+If you need additional accommodations,
+please let us know in #emacsconf-org
+and we'll see if we can make things happen.
+If something goes down, we'll update status.emacsconf.org.
+If it doesn't look like we've noticed yet,
+please let us know in the #emacsconf-org IRC channel,
+where we will be quietly panicking.
+In all of these conversations, please keep in mind
+our guidelines for conduct. You can find them on the wiki,
+They basically boil down to: please be nice.
+If all goes well, the prerecorded talks and transcripts
+should be available from the talk pages
+shortly after they start playing,
+and we'll post the recordings of live talks
+and Q&A sessions within the next month or so.
+If you'd like to get an update, you can subscribe to
+the emacsconf-discuss mailing list.
+All right, let's get going.
+Leo Vivier is hosting the general track again today.
+The other volunteers and I will run around mostly backstage,
+and you'll probably meet us in the closing remarks.
+That's also where we get to thank
+all the people and organizations
+who make EmacsConf even possible.
+Thanks for coming to EmacsConf 2024.
+
+* TODO [#A] Check EmacsConf infrastructure :project:
+:PROPERTIES:
+:CUSTOM_ID: check-emacsconf-infrastructure
+:END:
+
+- [X] IRC
+- [ ] Streaming assets
+- [ ] Publishing to the wiki
+- [ ] Web conference
+- [ ] OBS
+- [ ] Publishing to the media server
+- [ ] Etherpad
+- [ ] Streaming
+- [ ] Toobnix
+- [ ] YouTube
+- [X] Mumble: Can join from my phone, can speak on stream
+
+** TODO [#A] BigBlueButton
+DEADLINE: <2024-11-15 Fri>
+:PROPERTIES:
+:CREATED: [2024-11-02 Sat 11:38]
+:CUSTOM_ID: check-emacsconf-infrastructure-bigbluebutton
+:END:
+
+- Plan: spin up Linode temporarily: [[#bbb][BigBlueButton replacement]]
+
+*** Notes
+:PROPERTIES:
+:CUSTOM_ID: check-emacsconf-infrastructure-bigbluebutton-notes
+:END:
+**** install, sizes
+:PROPERTIES:
+:CUSTOM_ID: check-emacsconf-infrastructure-bigbluebutton-notes-install-sizes
+:END:
+[2024-11-19 Tue]
+
+Prerequisites:
+- BBB requires 4 CPU cores before it will install. bbb-conf.sh is fairly straightforward, so I guess we could spin down and then spin up again.
+ Image: Ubuntu 22.04
+
+Steps:
+1. Run the BBB installer: ~./bbb-install.sh -v jammy-300 -s bbb.emacsverse.org -e emacsconf@sachachua.com -g~
+2. ~sudo apt install bbb-playback-video~ and then follow the instructions at [[https://docs.bigbluebutton.org/3.0/administration/customize/#install-additional-recording-processing-formats][Server Customization | BigBlueButton]] .
+3. https://docs.bigbluebutton.org/3.0/administration/customize/#mute-all-users-on-startup
+
+I think it needs 4 CPU cores for regular running, too.
+
+Sizing to shared 8GB 4 core for testing
+#+begin_src sh :eval no
+linode-cli linodes resize 67329098 --type g6-standard-4 --allow_auto_disk_resize false
+#+end_src
+takes about 2 minutes
+
+Sizing to shared nanode, dormant
+
+#+begin_src sh :eval no
+linode-cli linodes resize 67329098 --type g6-nanode-1 --allow_auto_disk_resize true
+#+end_src
+
+#+begin_src
+echo "notify-send 'Resizing BBB...'; linode-cli linodes resize 67329098 --type g6-nanode-1 --allow_auto_disk_resize true" | at 'now + 1 hour'
+#+end_src
+
+Resize disk
+linode-cli linodes disks-list 67329098
+linode-cli linodes disk-resize 67329098 131474261 --size 24000
+
+/var/bigbluebutton is where recordings will go
+
+https://techdocs.akamai.com/linode-api/reference/post-resize-disk
+
+https://www.linode.com/community/questions/21942/how-can-i-schedule-resizing-a-linode
+**** backing up
+:PROPERTIES:
+:CUSTOM_ID: check-emacsconf-infrastructure-bigbluebutton-notes-backing-up
+:END:
+[2024-11-20 Wed] ssh root@66.175.208.243 'tar zcvf - /var/bigbluebutton /etc/bigbluebutton /root/greenlight-v3 /usr/local/bigbluebutton /usr/share/bbb-web' > bbb-backup.tar.gz
+**** DONE Set up bbb with new domain name
+CLOSED: [2024-11-28 Thu 10:00]
+:PROPERTIES:
+:Effort: 1:00
+:CUSTOM_ID: check-emacsconf-infrastructure-bigbluebutton-notes-set-up-bbb-with-new-domain-name
+:END:
+:LOGBOOK:
+CLOCK: [2024-11-28 Thu 09:06]--[2024-11-28 Thu 09:17] => 0:11
+:END:
+If changing IP:
+
+bbb-conf --setip bbb-new.example.com
+service nginx stop
+certbot certonly
+service nginx start
+edit /etc/hosts, add domain name
+
+Certificate is saved at: /etc/letsencrypt/live/bbb.emacsverse.org/fullchain.pem
+Key is saved at: /etc/letsencrypt/live/bbb.emacsverse.org/privkey.pem
+
+edit /etc/nginx/sites-available/bigbluebutton to add server_name
+/etc/letsencrypt/live/
+
+grep in /etc for the old domain
+
+https://github.com/bigbluebutton/greenlight/issues/1794
+- change greenlight/.env
+
+ curl failed to verify the legitimacy of the server and therefore could not
+establish a secure connection to it. To learn more about this situation and
+how to fix it, please visit the web page mentioned above.
+.curl: (60) SSL: no alternative certificate subject name matches target host name 'bbb.emacsverse.org'
+More details here: https://curl.se/docs/sslcerts.html
+
+haproxy is already listening on 443
+
+Fine, let's just reinstall it, harumph.
+
+Create the users:
+
+user_id = User.find_by_email("sacha@sachachua.com").id
+
+... ugh, what's going on, why is free only reporting a little memory? ah, we're still resizing, that's why
+*** STARTED Set up moderator access codes for all the meeting rooms, and make it so people can start the meeting
+SCHEDULED: <2024-11-28 Thu>
+:PROPERTIES:
+:CREATED: [2024-11-28 Thu 11:12]
+:Effort: 0:30
+:CUSTOM_ID: check-emacsconf-infrastructure-bigbluebutton-set-up-moderator-access-codes-for-all-the-meeting-rooms-and-make-it-so-people-can-start-the-meeting
+:END:
+:LOGBOOK:
+CLOCK: [2024-11-28 Thu 12:13]--[2024-11-28 Thu 13:10] => 0:57
+:END:
+
+- Let's try
+ - [ ] Rails
+ - [ ] Spookfox
+ - [ ] Manual
+
+ https://github.com/bigbluebutton/greenlight/blob/a5da808fc33f03613aa3a4089fd418403c539b2f/spec/models/room_spec.rb#L128
+ RoomMeetingOption.
+
+room.get_setting
+
+yeah, that's not good, rails console keeps quitting!
+docker-compose down
+docker-compose up
+
+1:M 28 Nov 2024 17:16:23.441 # WARNING Memory overcommit must be enabled! Without it, a background save or replication may fail under low memory condition. Being disabled, it can can also cause failures without low memory condition, see https://github.com/jemalloc/jemalloc/issues/1328. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
+
+docker-compose down
+docker-compose up -d
+
+makes it more reliable, it seems
+
+room = Room.find_by_id('8b3f36b1-7aee-459d-b963-bddcfe03e1db')
+
+o = MeetingOption.find_by_name('glAnyoneCanStart')
+o.default_value = 'true'
+o.save!
+
+o = MeetingOption.find_by_name('glModeratorAccessCode')
+
+"https://bbb.emacsverse.org/rooms/p4o-29n-esd-ow5/join"
+#+begin_src emacs-lisp
+(dolist (talk (seq-filter (lambda (o)
+ (and (plist-get o :bbb-room)
+ (not (plist-get o :bbb-mod-code))))
+ (emacsconf-publish-prepare-for-display (emacsconf-get-talk-info))))
+ (spookfox-js-injection-eval-in-active-tab
+ (format "window.location.href = \"%s\""
+ (replace-regexp-in-string "/join" "" (plist-get talk :bbb-room)))
+ t)
+ (sleep-for 3)
+ (spookfox-js-injection-eval-in-active-tab
+ "document.querySelector('button[data-rr-ui-event-key=\"settings\"]').click()" t)
+ (spookfox-js-injection-eval-in-active-tab
+ "document.querySelector('input#glAnyoneCanStart').checked = true")
+ (spookfox-js-injection-eval-in-active-tab
+ "document.querySelector('input#muteOnStart').checked = true")
+ (spookfox-js-injection-eval-in-active-tab
+ "document.querySelectorAll('.border-end button')[2].click()" t)
+ (let ((code (spookfox-js-injection-eval-in-active-tab
+ "document.querySelector('.access-code-input input').value" t)))
+ (message "Setting %s to %s" (plist-get talk :slug) code)
+ (emacsconf-set-property-from-slug
+ talk "BBB_MOD_CODE"
+ code)
+ (sit-for 2)))
+#+end_src
+
+#+begin_src emacs-lisp
+(dolist (talk (seq-filter (lambda (o)
+ (plist-get o :bbb-room))
+ (emacsconf-publish-prepare-for-display (emacsconf-get-talk-info))))
+ (spookfox-js-injection-eval-in-active-tab
+ (format "window.location.href = \"%s\""
+ (replace-regexp-in-string "/join" "" (plist-get talk :bbb-room)))
+ t)
+ (sleep-for 3)
+ (spookfox-js-injection-eval-in-active-tab
+ "document.querySelector('button[data-rr-ui-event-key=\"settings\"]').click()" t)
+ (sleep-for 3))
+#+end_src
+*** DONE [#A] Figure out what's going on with BBB!
+CLOSED: [2024-11-28 Thu 10:59] SCHEDULED: <2024-11-28 Thu>
+:PROPERTIES:
+:CREATED: [2024-11-28 Thu 10:12]
+:Effort: 1:00
+:CUSTOM_ID: check-emacsconf-infrastructure-bigbluebutton-figure-out-what-s-going-on-with-bbb
+:END:
+:LOGBOOK:
+CLOCK: [2024-11-28 Thu 10:47]--[2024-11-28 Thu 10:59] => 0:12
+:END:
+*** DONE Create meeting rooms for each speaker
+CLOSED: [2024-11-28 Thu 10:59] SCHEDULED: <2024-11-15 Fri>
+:PROPERTIES:
+:CREATED: [2024-11-02 Sat 11:50]
+:Effort: 0:30
+:CUSTOM_ID: create_rooms
+:END:
+:LOGBOOK:
+CLOCK: [2024-11-28 Thu 10:00]--[2024-11-28 Thu 10:12] => 0:12
+CLOCK: [2024-11-20 Wed 10:48]--[2024-11-20 Wed 12:18] => 1:30
+:END:
+
+Now that I'm more familiar with BigBlueButton and
+Greenlight, I don't have to [[https://sachachua.com/blog/2023/10/using-emacs-and-spookfox-to-automate-creating-bigbluebutton-rooms-in-mozilla-firefox/][use Spookfox to
+automate creating BigBlueButton rooms in Mozilla
+Firefox]]. I can just create them through the Rails
+console.
+
+docker exec -it greenlight-v3 bundle exec rails c
+
+user_id = User.find_by_email("sacha@sachachua.com").id
+
+docker exec -it greenlight-v3 bundle exec rails console
+
+#+begin_src emacs-lisp :results replace
+(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)))
+ "")
+#+end_src
+
+#+RESULTS:
+:results:
+Room.create(user_id: user_id, name: "Eduardo Ochs - maxima")
+Room.create(user_id: user_id, name: "Robin Templeton - guile")
+Room.create(user_id: user_id, name: "Daniel Pinkston - students")
+Room.create(user_id: user_id, name: "Ihor Radchenko and Bastien Guerry - org-update")
+Room.create(user_id: user_id, name: "Mats Lidell - hyperbole")
+Room.create(user_id: user_id, name: "screwlisp - mcclim")
+Room.create(user_id: user_id, name: "Vincent Conus - papers")
+Room.create(user_id: user_id, name: "Jonathan Otsuka - secrets")
+Room.create(user_id: user_id, name: "Ryota - color")
+Room.create(user_id: user_id, name: "Danny McClanahan - regex")
+Room.create(user_id: user_id, name: "Bob Weiner - hywiki")
+Room.create(user_id: user_id, name: "Abhinav Tushar - links")
+Room.create(user_id: user_id, name: "Mohsen BANAN - blee")
+Room.create(user_id: user_id, name: "Gabriele Bozzola - julia")
+Room.create(user_id: user_id, name: "Philip Kaludercic - emacs30")
+Room.create(user_id: user_id, name: "Ramin Honary - gypsum")
+Room.create(user_id: user_id, name: "Colin Woodbury - transducers")
+Room.create(user_id: user_id, name: "MetroWind - theme")
+Room.create(user_id: user_id, name: "Joseph Turner - hyperdrive")
+Room.create(user_id: user_id, name: "Charles Choi - casual")
+Room.create(user_id: user_id, name: "Troy Hinckley - rust")
+Room.create(user_id: user_id, name: "Blaine Mooers - project")
+Room.create(user_id: user_id, name: "Peter Prevos - writing")
+Room.create(user_id: user_id, name: "Howard Abrams - literate")
+Room.create(user_id: user_id, name: "Eric Marsden - pgmacs")
+Room.create(user_id: user_id, name: "Zac Romero - p-search")
+Room.create(user_id: user_id, name: "Bala Ramadurai - learning")
+Room.create(user_id: user_id, name: "Gopar - sharing")
+Room.create(user_id: user_id, name: "Christopher Howard - shellwater")
+:end:
+
+Print out the room IDs with
+
+#+begin_src ruby
+Room.all.each { |x| puts x.friendly_id + " " + x.name }; nil
+#+end_src
+https://github.com/bigbluebutton/greenlight/issues/1925
+
+
+*** DONE Check BBB audio from my phone
+CLOSED: [2024-11-28 Thu 13:03] SCHEDULED: <2024-11-21 Thu>
+:PROPERTIES:
+:CREATED: [2024-11-19 Tue 15:39]
+:CUSTOM_ID: check-emacsconf-infrastructure-bigbluebutton-check-bbb-audio-from-my-phone
+:END:
+*** DONE Create accounts for corwin
+CLOSED: [2024-11-28 Thu 10:11]
+:PROPERTIES:
+:CUSTOM_ID: check-emacsconf-infrastructure-bigbluebutton-create-accounts-for-corwin
+:END:
+*** CANCELLED [#C] Customize BBB to process at night
+CLOSED: [2024-11-27 Wed 13:17]
+:PROPERTIES:
+:CREATED: [2024-11-20 Wed 12:11]
+:CUSTOM_ID: check-emacsconf-infrastructure-bigbluebutton-customize-bbb-to-process-at-night
+:END:
+
+https://docs.bigbluebutton.org/3.0/administration/customize/
+Change processing time
+
+On a 2.2.x BigBlueButton server, the server will process recordings as meetings finish. You can restrict the recording processing interval to specific hours by creating the file /etc/systemd/system/bbb-record-core.timer.d/override.conf with the contents
+
+[Timer]
+OnActiveSec=
+OnUnitInactiveSec=
+OnCalendar=21,22,23,00,01,02,03:*:00
+Persistent=false
+
+and do systemctl daemon-reload. This file overrides the timing of when systemd runs bbb-record-core.target. In the above example, recordings will start processing between 21:00 and 03:59.
+
+- [[file:~/sync/orgzly/Inbox.org::*Set up rooms and assign as properties][Set up rooms and assign as properties]]
+*** TODO [#C] Change background presentation
+:PROPERTIES:
+:CUSTOM_ID: check-emacsconf-infrastructure-bigbluebutton-change-background-presentation
+:END:
+https://docs.bigbluebutton.org/3.0/administration/customize/#change-the-default-presentation
+*** TODO [#C] Modify landing page
+:PROPERTIES:
+:CUSTOM_ID: check-emacsconf-infrastructure-bigbluebutton-modify-landing-page
+:END:
+/var/www/bigbluebutton-default/assets/index.html
+keep backup copy as it will be overwritten when bbb-conf is called
+*** TODO [#C] Change default welcome message
+:PROPERTIES:
+:Effort: 0:30
+:CUSTOM_ID: check-emacsconf-infrastructure-bigbluebutton-change-default-welcome-message
+:END:
+:LOGBOOK:
+CLOCK: [2024-11-20 Wed 12:21]--[2024-11-20 Wed 12:46] => 0:25
+:END:
+https://docs.bigbluebutton.org/3.0/administration/customize/#change-the-default-welcome-message
+*** TODO [#C] Change html5 title
+:PROPERTIES:
+:CUSTOM_ID: check-emacsconf-infrastructure-bigbluebutton-change-html5-title
+:END:
+/usr/share/bigbluebutton/html5-client/private/config/settings.yml
+
+TARGET=/usr/share/bigbluebutton/html5-client/private/config/settings.yml
+yq e -i ".public.app.clientTitle = \"EmacsConf\"" $TARGET
+*** TODO [#C] Try live captions
+:PROPERTIES:
+:CUSTOM_ID: check-emacsconf-infrastructure-bigbluebutton-try-live-captions
+:END:
+https://docs.bigbluebutton.org/3.0/administration/customize/#enable-live-captions
+*** TODO Explore meeting layout? Default to custom, hosts will need to drag people's webcam over if there's a share
+:PROPERTIES:
+:CUSTOM_ID: check-emacsconf-infrastructure-bigbluebutton-explore-meeting-layout-default-to-custom-hosts-will-need-to-drag-people-s-webcam-over-if-there-s-a-share
+:END:
+
+** IRC web client
+:PROPERTIES:
+:CUSTOM_ID: check-emacsconf-infrastructure-irc-web-client
+:END:
+*** DONE Ask libera.chat to increase connections allowed from chat.emacsconf.org on Dec 7 and 8
+CLOSED: [2024-11-27 Wed 13:18]
+:PROPERTIES:
+:CUSTOM_ID: check-emacsconf-infrastructure-irc-web-client-ask-libera-chat-to-increase-connections-allowed-from-chat-emacsconf-org-on-dec-7-and-8
+:END:
+** IRC announcements
+:PROPERTIES:
+:CUSTOM_ID: check-emacsconf-infrastructure-irc-announcements
+:END:
+*** DONE Confirm manual IRC announcements
+CLOSED: [2024-11-02 Sat 12:05]
+:PROPERTIES:
+:CUSTOM_ID: check-emacsconf-infrastructure-irc-announcements-confirm-manual-irc-announcements
+:END:
+*** TODO Confirm automated IRC announcements from res
+:PROPERTIES:
+:CUSTOM_ID: check-emacsconf-infrastructure-irc-announcements-confirm-automated-irc-announcements-from-res
+:END:
+** Media
+:PROPERTIES:
+:CUSTOM_ID: check-emacsconf-infrastructure-media
+:END:
+
+*** TODO Switch public media to unprotected root before the conference
+SCHEDULED: <2024-11-29 Fri>
+:PROPERTIES:
+:CREATED: [2024-11-12 Tue 14:18]
+:CUSTOM_ID: check-emacsconf-infrastructure-media-switch-public-media-to-unprotected-root-before-the-conference
+:END:
+
+1. Clear public media directory.
+2. Set =media_protect_root= to false in Ansible =group_vars/all.yml=.
+3. =ansible-playbook -i inventory.yml prod-playbook.yml --tags media=
+
+You can generate the index with =emacsconf-publish-update-media=.
+** TODO Publishing resources to the wiki
+:PROPERTIES:
+:CUSTOM_ID: check-emacsconf-infrastructure-publishing-resources-to-the-wiki
+:END:
+ansible-playbook -i inventory.yml prod-playbook.yml --tags publish
+
+
+
+** TODO Publishing videos to the media server
+:PROPERTIES:
+:CUSTOM_ID: check-emacsconf-infrastructure-publishing-videos-to-the-media-server
+:END:
+** Playing videos, switching to windows
+:PROPERTIES:
+:CUSTOM_ID: check-emacsconf-infrastructure-playing-videos-switching-to-windows
+:END:
+
+*** TODO Generate test videos for everything
+:PROPERTIES:
+:CUSTOM_ID: check-emacsconf-infrastructure-playing-videos-switching-to-windows-generate-test-videos-for-everything
+:END:
+*** TODO Document how to get that set up again
+:PROPERTIES:
+:CUSTOM_ID: check-emacsconf-infrastructure-playing-videos-switching-to-windows-document-how-to-get-that-set-up-again
+:END:
+** Etherpad
+:PROPERTIES:
+:CUSTOM_ID: check-emacsconf-infrastructure-etherpad
+:END:
+*** TODO Generate pads for all the talks
+:PROPERTIES:
+:CUSTOM_ID: check-emacsconf-infrastructure-etherpad-generate-pads-for-all-the-talks
+:END:
+*** TODO Generate the main index
+:PROPERTIES:
+:CUSTOM_ID: check-emacsconf-infrastructure-etherpad-generate-the-main-index
+:END:
+** TODO Do a dry run
+SCHEDULED: <2024-11-22 Fri>
+:PROPERTIES:
+:CREATED: [2024-11-02 Sat 11:40]
+:CUSTOM_ID: check-emacsconf-infrastructure-do-a-dry-run
+:END:
+*** DONE Generate all the test assets
+CLOSED: [2024-11-06 Wed 18:52]
+:PROPERTIES:
+:Effort: 0:15
+:CUSTOM_ID: check-emacsconf-infrastructure-do-a-dry-run-generate-all-the-test-assets
+:END:
+:LOGBOOK:
+CLOCK: [2024-11-06 Wed 18:47]--[2024-11-06 Wed 18:52] => 0:05
+:END:
+*** TODO Test connecting to VNC and streaming via OBS
+SCHEDULED: <2024-11-07 Thu>
+:PROPERTIES:
+:CREATED: [2024-11-06 Wed 18:52]
+:CUSTOM_ID: check-emacsconf-infrastructure-do-a-dry-run-test-connecting-to-vnc-and-streaming-via-obs
+:END:
+** Resizing
+:PROPERTIES:
+:CUSTOM_ID: check-emacsconf-infrastructure-resizing
+:END:
+
+live0: 64GB
+front0: 32GB
+meet: 64GB
+
+*** TODO [#A] Resize nodes before production
+SCHEDULED: <2024-12-06 Fri>
+:PROPERTIES:
+:CREATED: [2024-11-22 Fri 13:46]
+:CUSTOM_ID: check-emacsconf-infrastructure-resizing-resize-nodes-before-production
+:END:
+
+live0: 64GB
+front0: 32GB
+meet: 64GB
+
+*** TODO [#A] Resize nodes after production
+SCHEDULED: <2024-12-08 Sun>
+:PROPERTIES:
+:CREATED: [2024-11-22 Fri 13:46]
+:CUSTOM_ID: check-emacsconf-infrastructure-resizing-resize-nodes-after-production
+:END:
+
+live0: nanode
+front0: nanode
+*** TODO [#A] Resize meet after production
+SCHEDULED: <2024-12-10 Tue>
+:PROPERTIES:
+:CREATED: [2024-11-22 Fri 13:47]
+:CUSTOM_ID: check-emacsconf-infrastructure-resizing-resize-meet-after-production
+:END:
+meet: nanode
+* Processes and notes
+:PROPERTIES:
+:CUSTOM_ID: processes-and-notes
+:END:
+** Hosting
+:PROPERTIES:
+:CUSTOM_ID: processes-and-notes-hosting
+:END:
+*** TODO Finalize host for dev track
+:PROPERTIES:
+:CUSTOM_ID: processes-and-notes-hosting-finalize-host-for-dev-track
+:END:
+** ERC
+:PROPERTIES:
+:CUSTOM_ID: processes-and-notes-erc
+:END:
+
+Some convenient commands are defined in emacsconf-el:emacsconf-erc.el.
+
+| /opall | Grant operator status in the Emacsconf channels |
+| /deopall | Remove operator status in the Emacsconf channels |
+| /conftopic | Set the first part of the topic |
+
+* Decisions
+:PROPERTIES:
+:CUSTOM_ID: decisions
+:END:
+** BigBlueButton replacement (BBB)
+:PROPERTIES:
+:CUSTOM_ID: bbb
+:END:
+
+The server running bbb.emacsverse.org has been decommissioned, since the nonprofit that shared it with us is defunct.
+
+- We'd like to figure out what our live Q&A setup is going to be for EmacsConf 2024 (Dec 7-8).
+- Nice to have: Hosting for other Emacs meetups like Emacs APAC and OrgMeetup
+- [[https://sachachua.com/blog/2023/12/emacsconf-backstage-figuring-out-our-maximum-number-of-simultaneous-bigbluebutton-users/][Stats from last year]]: 31 meetings, 84 unique users, 62 max simultaneous users, 6 max simultaneous meetings, 27 max users in one meeting, 36 unique talking
+ - also includes some notes on hosting
+- Nice thing about running our own server: we can make one room per speaker, pre-assign their URLs, and let people stay as long as they want in recorded Q&A sessions
+
+Recommendation:
+
+We spin up a shared CPU 4GB under bandali's Linode
+account (for bandwidth pooling and easier
+reimbursement), do the setup/testing, scale down
+as small as possible over the next few weeks,
+scale up to dedicated CPU 16GB a day or two before
+the conference, and keep it at that level until
+the recordings are all done. I have access to that
+Linode account, so I can set it up. If bandali can
+configure emacsverse.org to be handled by Linode,
+I can manage the DNS changes, or he can change
+bbb.emacsverse.org to the IP address of the new
+node.
+
+Some options:
+
+- Linode with 16GB RAM and 8 cores
+ - Advantages: can experiment with both Galene and BBB, manage things ourselves, have filesystem access
+ - Disadvantages: needs someone to do it
+ - Base pricing
+ - Shared CPU 4GB 80GB storage: hourly USD 0.04, monthly USD 24
+ - Dedicated CPU 16GB: hourly USD 0.22, daily 5.28, weekly 36.96, monthly USD 144 - meets minimum requirements and can probably support 200 simultaneous ([[https://docs.bigbluebutton.org/support/faq/][FAQ]])
+ - Shared CPU 8GB 160GB storage: hourly USD 0.07
+ - Shared CPU 16GB 320GB storage: hourly USD 0.14
+ - Last year
+ - Block storage: $1/10GB/month
+ - 125M/hour - [[https://docs.bigbluebutton.org/support/faq/#what-is-the-disk-space-usage-for-storing-one-hour-of-recordings][FAQ]]
+ - In 2023, we had 31 hours of trimmed recordings (main + answers),
+ - (* 31 0.125) 3.875, oh, maybe we can get away with 10GB storage and add another chunk of 10GB midway if we need it, or extend the dedicated
+ - Actually, block storage probably not needed if we're going to keep the big instance up until the recordings are done
+ - Ideas
+ - *We're here -- Option B: Run a slightly larger shared CPU instance from now until shortly before the conference, then scale up* in case BBB does not work for installation/testing with less memory; block storage probably not needed
+ - (* 0.07 24 7 3) USD 35.28 for 8GB, total (+ 35.28 36.96) USD 72.24
+ - (* 0.14 24 7 3) USD 70.56 for 16GB, total (+ 70.56 36.96) USD 107.52
+ - *Option A: Run a small instance continuously, scale up for the conference, pull the recordings off, spin the instance down* - est total USD 60+tax
+ - There are three weeks between now and the conference (* 0.04 24 7 3) USD 20
+ - Last year, recordings were available within three days after the conference
+ - Let's plan for a week at high capacity. (* 0.22 24 7) USD 36.96
+ - and a month of 10GB, possibly up to 30GB. USD 3
+ - That's probably small enough that it doesn't make as much sense to try to fully spin down for a week in between now and the conference (* 0.04 24 7) - which would save USD 6.72 but require figuring out backing up, etc.
+
+- Ask FSF if we can borrow their BBB or Galene, maybe limit it to cycling among 6 or 7 rooms
+ - Waiting for feedback; Corwin has asked them
+- Pay for BigBlueButton hosting; can we find one that's compatible with our commitment to freedom?
+ - https://bigbluebutton.host/plans/#economyplans - Economy 120 (USD 130/month) or Economy 80 (USD 85/month), custom URL
+ - https://www.bigbluemeeting.com/#pricing - 100 concurrent users: USD 125/month, custom URL
+ - https://www.mynaparrot.com/affordable-bigbluebutton-hosting
+ - 100 concurrent users: USD 79/month
+ - 200 concurrent users and custom URL: USD 15 setup fee + USD 149/month
+ - https://www.webhostingzone.org/solutions/bigbluebutton-hosting.html - 150 concurrent, USD 75/month
+ - https://bbbplugin.com/en/pricing/bigbluebutton-for-api/ - 250 concurrent, USD 49 setup + USD 108.80/month
+ - https://biggerbluebutton.com/plans
+ - 150 concurrent users, 10 concurrent meetings, USD 40/month
+ - custom domain, 600 concurrent users, USD 149/month
+ - Compare with Linode pricing
+- Try to squeeze it onto res.emacsconf.org
+ - Tricky to run on a shared server; it likes to use a lot of ports and strongly recommends running it on its own server
+- Go back to using meet.jit.si?
+ - Free:
+ - Need to check speed, reliability
+ - Can send RTMP from the meeting itself
+ - [2024-11-13 Wed] I attended Ihor's
+ OrgMeetup, which he hosted on meet.jit.si. I
+ think he had bandwidth issues at some point
+ and we lost his audio. I remember we ran
+ into that problem before, too, when we used
+ Jitsi for one of the Emacsconfs. Free Jitsi
+ hosting might not be the right fit for us.
+ - Paid: USD 99/month + $0.01/min for recordings + $0.01 min (optional) for RTMP streaming
+- Galene?
+ - [2024-10-31 Thu] I checked out Galene in the last Emacs Berlin meeting. It's promising, but I think the user interface might still need a bit of work. Simple deployment (run one Go binary, I think), but muting/unmuting doesn't trigger enabling the microphone, and the chat was buggy to get to on my mobile device. Supposed to have support for raising hands.
+
+
+* Support code
+:PROPERTIES:
+:CUSTOM_ID: support-code
+:END:
+
+#+begin_src emacs-lisp
+(defun my-ox-link-path (link _ info)
+ (let* ((raw-path (org-element-property :path link)))
+ (setq raw-path
+ (org-export-file-uri
+ (org-publish-file-relative-name raw-path info)))
+ ;; Possibly append `:html-link-home' to relative file
+ ;; name.
+ (let ((home (and (plist-get info :html-link-home)
+ (org-trim (plist-get info :html-link-home)))))
+ (when (and home
+ (plist-get info :html-link-use-abs-url)
+ (not (file-name-absolute-p raw-path)))
+ (setq raw-path (concat (file-name-as-directory home) raw-path))))
+ raw-path))
+
+(defun my-org-md-link (link desc info)
+ (if (string= (org-element-property :type link) "file")
+ (let ((path (my-ox-link-path link desc info)))
+ (if (string= (file-name-extension path) "svg")
+ (with-temp-buffer
+ (insert-file-contents-literally path)
+ (buffer-string))
+ (org-md-link link desc info)))
+ (org-md-link link desc info)))
+
+(with-eval-after-load 'ox-md
+ (setf
+ (alist-get 'link (org-export-backend-transcoders (org-export-get-backend 'md)))
+ 'my-org-md-link))
+#+end_src