diff options
Diffstat (limited to '')
38 files changed, 3621 insertions, 66 deletions
diff --git a/2025/organizers-notebook/index.org b/2025/organizers-notebook/index.org index 378cfcdc..66abbc60 100644 --- a/2025/organizers-notebook/index.org +++ b/2025/organizers-notebook/index.org @@ -740,9 +740,11 @@ Interested in a shift? Please e-mail [[mailto:emacsconf-org-private@gnu.org]] an :end: -* TODO [#A] Check EmacsConf infrastructure :project: +* TODO [#A] Check EmacsConf infrastructure +SCHEDULED: <2026-10-01 Thu> :PROPERTIES: :CUSTOM_ID: check-emacsconf-infrastructure +:CREATED: [2026-05-13 Wed 11:08] :END: - [ ] IRC @@ -757,7 +759,7 @@ Interested in a shift? Please e-mail [[mailto:emacsconf-org-private@gnu.org]] an - [ ] YouTube - [ ] Mumble: Can join from my phone, can speak on stream -** TODO [#A] BigBlueButton +** BigBlueButton :PROPERTIES: :CREATED: [2024-11-02 Sat 11:38] :CUSTOM_ID: check-emacsconf-infrastructure-bigbluebutton @@ -914,7 +916,8 @@ emacsconf-stream-generate-test-videos :PROPERTIES: :CUSTOM_ID: check-emacsconf-infrastructure-etherpad :END: -*** STARTED Try upgrading to 2.x +*** DONE Try upgrading to 2.x +CLOSED: [2026-05-13 Wed 11:29] :PROPERTIES: :Effort: 2:00 :END: diff --git a/2025/talks/gnus.md b/2025/talks/gnus.md index f0b07527..e417ec82 100644 --- a/2025/talks/gnus.md +++ b/2025/talks/gnus.md @@ -38,7 +38,7 @@ using GNU Emacs for email communications. ## Discussion / notes -- bandali: here's the talk page on my site, along with the sample init and authinfo files: <https://kelar.org/~bandali/emacsconf-2025-gnus.html> +- bandali: here's the talk page on my site, along with the sample init and authinfo files: <https://kelar.org/~bandali/gnu/emacs/emacsconf-2025-gnus.html> - Q: I noticed that it took a considerable amount of time to send email. Is it possible to configure gnus to use an external smtp diff --git a/2026.md b/2026.md new file mode 100644 index 00000000..41d793ce --- /dev/null +++ b/2026.md @@ -0,0 +1,43 @@ +[[!meta copyright="Copyright © 2021-2026 Amin Bandali; 2023-2025 Sacha Chua"]] +[[!sidebar content=""]] + +<p class="center">EmacsConf 2026 | Online Conference<br /> +<b>December 12 and 13, 2026 (Sat-Sun)</b></p> + +<p class="center">[[!img /i/emacsconf-logo1-256.png +alt="EmacsConf logo"]]</p> + +<p class="center">[[<b>Call for Participation</b>|cfp]] | [[Ideas]] | +[[Submit a Proposal|submit]] | [[Volunteer]] | [[Guidelines for Conduct|conduct]]</p> + +<p class="center">EmacsConf is the conference about the joy of +<a href="https://www.gnu.org/software/emacs/">GNU Emacs</a> and +Emacs Lisp.</p> + +We are busy putting things together for EmacsConf 2026, and we would +love to have *your* help to make EmacsConf 2026 amazing, much like the +previous EmacsConfs. See our [[**Call for Participation**|cfp]], get +involved, and help spread the word! + +We are holding EmacsConf 2026 as an online conference again this year. +We remain fully committed to freedom, and we will continue using our +infrastructure and streaming setup consisting entirely of [free +software][freesw], much like previous EmacsConf conferences. + +For general EmacsConf discussions, join the +[emacsconf-discuss](https://lists.gnu.org/mailman/listinfo/emacsconf-discuss) +mailing list. For discussions related to organizing EmacsConf, join +the +[emacsconf-org](https://lists.gnu.org/mailman/listinfo/emacsconf-org) +mailing list. You can email us publicly at +<mailto:emacsconf-org@gnu.org> or privately at +<mailto:emacsconf-org-private@gnu.org>. + +Come hang out with us in the `#emacsconf` channel on `irc.libera.chat` +([Libera.Chat][libera] IRC network). You can join the chat using +[your favourite IRC client][libera-emacsconf]. + +[freesw]: https://www.gnu.org/philosophy/free-sw.html +[libera]: https://libera.chat +[libera-emacsconf]: ircs://irc.libera.chat:6697/emacsconf +[chat]: https://chat.emacsconf.org diff --git a/2026/cfp.md b/2026/cfp.md new file mode 100644 index 00000000..63a341e4 --- /dev/null +++ b/2026/cfp.md @@ -0,0 +1,174 @@ +[[!meta title="Call for Participation"]] +[[!meta copyright="Copyright © 2020 Amin Bandali, Sacha Chua, +David Bremner<br /> +Copyright © 2021 Amin Bandali, Sacha Chua, Leo Vivier, +Sebastian Crane<br /> +Copyright © 2022-2026 Amin Bandali<br /> +Copyright © 2023-2026 Sacha Chua"]] +[[!tag blog]] +[[!date "2026-06-27"]] +<!-- cfp.md is exported from cfp.org, please modify that instead. --> + + +# Call for participation + +What have you found exciting about [Emacs](https://www.gnu.org/software/emacs/) lately? Have you figured out +a good workflow? Used Emacs for something interesting? Come share +what you've been learning at EmacsConf 2026 and meet other enthusiasts +along the way! All backgrounds and all levels of experience are +welcome. Emacs isn't just a text editor, it's a way of life! + +[EmacsConf 2026](https://emacsconf.org/2026/) will be a virtual conference on +**December 12 and 13, 2026 (Sat-Sun, 9AM-5PM UTC-5 America/Toronto, which is the same as 2PM-10PM UTC)**. +We hope to get your talk proposal by ****Friday, September 18, 2026.**** + +If there are similar proposals, we'll work with people so that the +talks can cover different facets. + +Wondering what to talk about? Check out this [list of ideas](https://emacsconf.org/ideas/) or the +[talks from previous conferences](https://emacsconf.org/talks/). Got an idea for a talk but not sure +if you're the right person to present it? Let us know at +[emacsconf-submit@gnu.org](mailto:emacsconf-submit@gnu.org?subject=EmacsConf idea&body=) and we can add it to the idea list. + + +# Important dates + +Here's an outline of important dates in the months leading up to the +conference: + +<table> + + +<colgroup> +<col class="org-left" /> + +<col class="org-left" /> +</colgroup> +<tbody> +<tr> +<td class="org-left">Call for Participation</td> +<td class="org-left">June 27, 2026 (Saturday)</td> +</tr> + +<tr> +<td class="org-left">Proposal submission deadline</td> +<td class="org-left">September 18, 2026 (Friday)</td> +</tr> + +<tr> +<td class="org-left">Prerecording submission deadline</td> +<td class="org-left">October 30, 2026 (Friday)</td> +</tr> + +<tr> +<td class="org-left">EmacsConf 2026!</td> +<td class="org-left">December 12 and 13, 2026 (Saturday and Sunday)</td> +</tr> +</tbody> +</table> + +Please note the deadlines are meant to be target dates we'd love to +get your proposal and prerecorded video by, rather than strict +deadlines. Don't stress out if life happens and you need more time, +just let us know! + + +# Talk formats + +Ideally, talks will be prerecorded so that you can script and edit +them as tightly as you want, and so that they can be captioned for +accessibility. Here are the talk options: + +- **5-10 minute lightning talk:** just the essentials! If you can + squeeze your prerecorded talk into 5-10 minutes by focusing on the + essentials (not by talking super quickly!), we might be able to + repeat it during the conference in order to fill gaps. + +- **20-minute talk:** short enough to keep people's attention, + long enough to get into some details. + +There will be time for questions and answers after your talk, so you +don't need to include that in your talk timing. Just like in previous +EmacsConf, you can answer questions via a live video conference, +IRC ([Internet Relay Chat](https://chat.emacsconf.org)), the Etherpad (a web-based collaborative +document), the wiki, or email (your choice). The stream will move on +to the next talk at the scheduled time, but interested people can keep +hanging out with you for a longer conversation. + +If you are not available during the conference itself but you have +a neat idea that you'd like to share, please propose it anyway! +You can always handle questions after the conference, and we might +even be able to coordinate with other Emacs meetups for events in +other time zones. + +We may have time for a few longer sessions. If you'd like to be +considered for a longer time slot, please include an outline for the +extra time in addition to your 20-minute proposal. Other session +formats such as tutorials, workshops, and hangouts are welcome as +well. + + +# Submitting your proposal + +[Send us your idea](https://emacsconf.org/2026/submit/) as soon as you can, so that you can have more time +to work on your talk. +(Proposal deadline: ****Friday, September 18, 2026****) + +If you need help, you can email us publicly at [emacsconf-org@gnu.org](mailto:emacsconf-org@gnu.org) +or privately at [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org). You can also come and +say hi to us on our IRC channel `#emacsconf` on `irc.libera.chat` port +6697 (TLS) using [your favourite IRC client](ircs://irc.libera.chat:6697/emacsconf). + +Here's an Org TODO you can copy in case that's what you use to organize your tasks: + + * TODO Submit proposal to EmacsConf 2026 + DEADLINE: <2026-09-18 Fri> + + - Details: https://emacsconf.org/2026/cfp/ + - Submit: https://emacsconf.org/2026/submit/ + - Dates for conf: Dec 12 and 13, Sat-Sun, 9AM-5PM UTC-5 America/Toronto, which is the same as 2PM-10PM UTC + - Questions: + - public: mailto:emacsconf-org@gnu.org + - private: mailto:emacsconf-org-private@gnu.org + - IRC: irc.libera.chat + + Note: 2026-09-18 is a target date and we'd love to get your proposal + by then. It's not a *deadline* deadline, so don't stress out if life + happens. Just let us know! + + Thanks for sharing what you're learning! + + +# Know someone who might have something to share? + +All kinds of people use Emacs for all kinds of things. We'd love it +if EmacsConf 2026 could highlight interesting perspectives and reflect +the diversity of our community. If you know someone who might have a +good idea for a talk, please reach out to them and encourage them to +submit a proposal. Many people (especially from underrepresented +groups such as women, people of colour, non-developers, etc.) might +not consider themselves proficient enough to share their thoughts. +If you let them know that you value their knowledge and experiences, +and maybe even suggest something that you think others would like to +hear about, they may realize that they do have something worth sharing +and that we would love to hear from them. + + +# Want to volunteer? + +If you would like to help with the conference (planning the sessions, +reviewing proposals, helping with infrastructure, making sessions +more accessible, editing video transcripts, checking in speakers, +reading questions out loud, organizing notes, etc.), please see our +[volunteer](https://emacsconf.org/volunteer/) page. Volunteers get early access to talks and learn lots +of things along the way. We'd really appreciate your help in making +EmacsConf 2026 the best one so far! + + +# Commitment to freedom + +We remain fully committed to freedom. You'll be able to participate +in EmacsConf using [free/libre software](https://www.gnu.org/philosophy/free-sw.html), and we use free/libre software +to organize and run the conference. You can find some notes about our +setup and process at <https://emacsconf.org/infra/>. + diff --git a/2026/cfp.org b/2026/cfp.org new file mode 100644 index 00000000..91c720a9 --- /dev/null +++ b/2026/cfp.org @@ -0,0 +1,220 @@ +# [[elisp:(org-md-export-to-markdown)][Export this file to Markdown]] +# [[elisp:(org-ascii-export-as-ascii)][Export this file to ASCII]] +#+title: EmacsConf 2026 Call for Participation +#+subtitle: Online Conference +#+date: December 12 and 13, 2026 +#+options: author:nil toc:nil + +#+begin_export md +[[!meta title="Call for Participation"]] +[[!meta copyright="Copyright © 2020 Amin Bandali, Sacha Chua, +David Bremner<br /> +Copyright © 2021 Amin Bandali, Sacha Chua, Leo Vivier, +Sebastian Crane<br /> +Copyright © 2022-2026 Amin Bandali<br /> +Copyright © 2023-2026 Sacha Chua"]] +[[!tag blog]] +[[!date "2026-06-27"]] +<!-- cfp.md is exported from cfp.org, please modify that instead. --> +#+end_export + +* COMMENT How to export this file :noexport: + +The =ircs= link type is not part of standard Org Mode, so Org will +throw an error if you try to export this file. + +To work around that, you can use something along the lines of the +Emacs Lisp code below by either adding it to your init file, or by +putting the point in the code block and hitting =C-c C-v e= (that is, +hold Ctrl, then hit c followed by v, then release Ctrl, and hit e) to +evaluate the code, working around the issue only for the current +session. + +#+begin_src emacs-lisp :results silent +(org-link-set-parameters + "ircs" + :export + (lambda (link description format) + "Export an ircs link. +See `org-link-parameters' for details about LINK, DESCRIPTION and +FORMAT." + (let ((desc (or description link))) + (pcase format + (`html (format "<a href=\"ircs:%s\">%s</a>" link desc)) + (`md (format "[%s](ircs:%s)" desc link)) + (_ nil))))) +#+end_src + +Other CFPs we can borrow ideas from: + +- https://debconf23.debconf.org/cfp/ - includes early submission timeline +- https://fosdem.org/2023/news/2022-11-13-call-for-presentations/ - mentions upload date, license +- https://www.fsf.org/blogs/community/libreplanet-2023-will-be-held-march-18-19-cfs-extended-to-november-23 +- https://www.reddit.com/r/scala/comments/103v6e5/scalar_2023_cfp_is_still_open/ - very short + +* Call for participation +:PROPERTIES: +:CUSTOM_ID: cfp +:END: + +What have you found exciting about [[https://www.gnu.org/software/emacs/][Emacs]] lately? Have you figured out +a good workflow? Used Emacs for something interesting? Come share +what you've been learning at EmacsConf 2026 and meet other enthusiasts +along the way! All backgrounds and all levels of experience are +welcome. Emacs isn't just a text editor, it's a way of life! + +[[https://emacsconf.org/2026/][EmacsConf 2026]] will be a virtual conference on +*December 12 and 13, 2026 (Sat-Sun, 9AM-5PM UTC-5 America/Toronto, which is the same as 2PM-10PM UTC)*. +We hope to get your talk proposal by **Friday, September 18, 2026.** + +If there are similar proposals, we'll work with people so that the +talks can cover different facets. + +Wondering what to talk about? Check out this [[https://emacsconf.org/ideas/][list of ideas]] or the +[[https://emacsconf.org/talks/][talks from previous conferences]]. Got an idea for a talk but not sure +if you're the right person to present it? Let us know at +[[mailto:emacsconf-submit@gnu.org?subject=EmacsConf idea&body=][emacsconf-submit@gnu.org]] and we can add it to the idea list. + +* Important dates +:PROPERTIES: +:CUSTOM_ID: dates +:END: + +Here's an outline of important dates in the months leading up to the +conference: + +| Call for Participation | June 27, 2026 (Saturday) | +| Proposal submission deadline | September 18, 2026 (Friday) | +| Prerecording submission deadline | October 30, 2026 (Friday) | +| EmacsConf 2026! | December 12 and 13, 2026 (Saturday and Sunday) | + +Please note the deadlines are meant to be target dates we'd love to +get your proposal and prerecorded video by, rather than strict +deadlines. Don't stress out if life happens and you need more time, +just let us know! + +* Talk formats +:PROPERTIES: +:CUSTOM_ID: formats +:END: + +Ideally, talks will be prerecorded so that you can script and edit +them as tightly as you want, and so that they can be captioned for +accessibility. Here are the talk options: + +- *5-10 minute lightning talk:* just the essentials! If you can + squeeze your prerecorded talk into 5-10 minutes by focusing on the + essentials (not by talking super quickly!), we might be able to + repeat it during the conference in order to fill gaps. + +- *20-minute talk:* short enough to keep people's attention, + long enough to get into some details. + +There will be time for questions and answers after your talk, so you +don't need to include that in your talk timing. Just like in previous +EmacsConf, you can answer questions via a live video conference, +IRC ([[https://chat.emacsconf.org][Internet Relay Chat]]), the Etherpad (a web-based collaborative +document), the wiki, or email (your choice). The stream will move on +to the next talk at the scheduled time, but interested people can keep +hanging out with you for a longer conversation. + +If you are not available during the conference itself but you have +a neat idea that you'd like to share, please propose it anyway! +You can always handle questions after the conference, and we might +even be able to coordinate with other Emacs meetups for events in +other time zones. + +We may have time for a few longer sessions. If you'd like to be +considered for a longer time slot, please include an outline for the +extra time in addition to your 20-minute proposal. Other session +formats such as tutorials, workshops, and hangouts are welcome as +well. + +* Submitting your proposal +:PROPERTIES: +:CUSTOM_ID: submitting +:END: + +[[https://emacsconf.org/2026/submit/][Send us your idea]] as soon as you can, so that you can have more time +to work on your talk. +(Proposal deadline: **Friday, September 18, 2026**) + +If you need help, you can email us publicly at [[mailto:emacsconf-org@gnu.org][emacsconf-org@gnu.org]] +or privately at [[mailto:emacsconf-org-private@gnu.org][emacsconf-org-private@gnu.org]]. You can also come and +say hi to us on our IRC channel =#emacsconf= on =irc.libera.chat= port +6697 (TLS) using [[ircs://irc.libera.chat:6697/emacsconf][your favourite IRC client]]. + +Here's an Org TODO you can copy in case that's what you use to organize your tasks: + +#+begin_src org +,* TODO Submit proposal to EmacsConf 2026 +DEADLINE: <2026-09-18 Fri> + +- Details: https://emacsconf.org/2026/cfp/ +- Submit: https://emacsconf.org/2026/submit/ +- Dates for conf: Dec 12 and 13, Sat-Sun, 9AM-5PM UTC-5 America/Toronto, which is the same as 2PM-10PM UTC +- Questions: + - public: mailto:emacsconf-org@gnu.org + - private: mailto:emacsconf-org-private@gnu.org + - IRC: irc.libera.chat + +Note: 2026-09-18 is a target date and we'd love to get your proposal +by then. It's not a *deadline* deadline, so don't stress out if life +happens. Just let us know! + +Thanks for sharing what you're learning! +#+end_src + +* Know someone who might have something to share? +:PROPERTIES: +:CUSTOM_ID: sharing +:END: + +All kinds of people use Emacs for all kinds of things. We'd love it +if EmacsConf 2026 could highlight interesting perspectives and reflect +the diversity of our community. If you know someone who might have a +good idea for a talk, please reach out to them and encourage them to +submit a proposal. Many people (especially from underrepresented +groups such as women, people of colour, non-developers, etc.) might +not consider themselves proficient enough to share their thoughts. +If you let them know that you value their knowledge and experiences, +and maybe even suggest something that you think others would like to +hear about, they may realize that they do have something worth sharing +and that we would love to hear from them. + +* Want to volunteer? +:PROPERTIES: +:CUSTOM_ID: volunteer +:END: + +If you would like to help with the conference (planning the sessions, +reviewing proposals, helping with infrastructure, making sessions +more accessible, editing video transcripts, checking in speakers, +reading questions out loud, organizing notes, etc.), please see our +[[https://emacsconf.org/volunteer/][volunteer]] page. Volunteers get early access to talks and learn lots +of things along the way. We'd really appreciate your help in making +EmacsConf 2026 the best one so far! + +* Commitment to freedom + +We remain fully committed to freedom. You'll be able to participate +in EmacsConf using [[https://www.gnu.org/philosophy/free-sw.html][free/libre software]], and we use free/libre software +to organize and run the conference. You can find some notes about our +setup and process at https://emacsconf.org/infra/. + +* COMMENT Copyright & License + +Copyright (c) 2020 Amin Bandali, Sacha Chua, David Bremner +Copyright (c) 2021 Amin Bandali, Sacha Chua, Leo Vivier, Sebastian Crane +Copyright (c) 2022-2026 Amin Bandali +Copyright (c) 2023-2026 Sacha Chua + +The EmacsConf 2026 Call for Participation is part of the EmacsConf +wiki, and is dual-licensed under the terms of the Creative Commons +Attribution-ShareAlike 4.0 International Public License; and the GNU +General Public License as published by the Free Software Foundation, +either version 3 of the License, or (at your option) any later +version. + +A copy of these two licenses is available on the EmacsConf wiki, in +the [[https://emacsconf.org/COPYING.CC-BY-SA][COPYING.CC-BY-SA]] and [[https://emacsconf.org/COPYING.GPL][COPYING.GPL]] files. diff --git a/2026/info/emacspeak-after.md b/2026/info/emacspeak-after.md new file mode 100644 index 00000000..0ebb2bb4 --- /dev/null +++ b/2026/info/emacspeak-after.md @@ -0,0 +1,10 @@ +<!-- Automatically generated by emacsconf-publish-after-page --> + + +Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202023%20emacspeak%3A%20Multi-dimensional%20information%20processing%20with%20Emacs%20and%20Emacspeak%3A%20a%20blind%20man%27s%20perspective) + +---- +Got an idea for an EmacsConf talk or session? We'd love to hear from you! Check out the [[Call for Participation|/2026/cfp]] for details. + + +<!-- End of emacsconf-publish-after-page --> diff --git a/2026/info/emacspeak-before.md b/2026/info/emacspeak-before.md new file mode 100644 index 00000000..39b17dd1 --- /dev/null +++ b/2026/info/emacspeak-before.md @@ -0,0 +1,13 @@ +<!-- Automatically generated by emacsconf-publish-before-page --> +[[!toc ]] +Format: 30-min talk ; Q&A: IRC Etherpad: <https://pad.emacsconf.org/2026-emacspeak> +Etherpad: <https://pad.emacsconf.org/2026-emacspeak> +Status: Waiting for video from speaker + + + + + +<div class="vid mainVideo"><div></div><div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2026-emacspeak">Open Etherpad</a></li></ul></div></div> +# Description +<!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2026/info/emacspeak-nav.md b/2026/info/emacspeak-nav.md new file mode 100644 index 00000000..f3cc37ad --- /dev/null +++ b/2026/info/emacspeak-nav.md @@ -0,0 +1,7 @@ + +<div class="talk-nav"> +Back to the [[talks]] +Previous by track: <a href="/2026/talks/sun-open">Sunday opening remarks</a> +Next by track: <a href="/2026/talks/sat-close">Saturday closing remarks / open session</a> +Track: <span class="sched-track General">General</span> +</div> diff --git a/2026/info/open-mic-after.md b/2026/info/open-mic-after.md new file mode 100644 index 00000000..f63e2948 --- /dev/null +++ b/2026/info/open-mic-after.md @@ -0,0 +1,1032 @@ +<!-- Automatically generated by emacsconf-publish-after-page --> + + +<div class="transcript transcript-mainVideo"><a name="open-mic-mainVideo-transcript"></a><h1>Transcript (unedited)</h1> + +[[!template text="""All right, so yes, we have a little bit of time""" start="00:00:00.000" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""while we are waiting for the dev track to finish,""" start="00:00:03.600" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and we could just declare this as a break,""" start="00:00:05.720" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""or if anyone's got any interesting last-minute stuff,""" start="00:00:08.320" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""you can come and share it here,""" start="00:00:12.040" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""where Karthik is also hanging out.""" start="00:00:17.240" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I think every time I read one of your long blog posts,""" start="00:00:20.880" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Karthik, I'm like, mm, life goals.""" start="00:00:23.280" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Someday I want to write something with nice diagrams""" start="00:00:25.560" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and, you know, deep Emacs interestingness.""" start="00:00:28.400" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I have not yet gotten the hang of even using avy""" start="00:00:31.280" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""to nearly the extent that you do.""" start="00:00:34.920" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""But yes, I have, I have always looked""" start="00:00:38.120" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""at your diagrams very longingly""" start="00:00:40.120" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and wondered how you make them.""" start="00:00:42.320" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""With a lot of sweat and cursing, unfortunately.""" start="00:00:44.680" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""It's all very nice. Yeah.""" start="00:00:51.240" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And I, I, I've seen your interactive SVGs,""" start="00:00:54.200" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""which is just wizardry. I have no idea how you do that.""" start="00:00:58.320" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""You can hover over different elements in the SVG""" start="00:01:02.320" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and do interesting things.""" start="00:01:06.960" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Yeah, so it turns out if you just think of them as XML,""" start="00:01:08.760" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""which Emacs will let you""" start="00:01:11.800" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""because you can just control C, control C,""" start="00:01:13.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and it'll switch back to text mode, right?""" start="00:01:15.160" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Then you can be like, oh, yeah, I can work with this""" start="00:01:16.760" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""using the DOM Emacs list library.""" start="00:01:20.000" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And then you can add title elements to it to get the hovers,""" start="00:01:23.560" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""or you can add hyperlinks.""" start="00:01:28.480" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So in fact, the emacs-conf schedule""" start="00:01:31.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""is very naturally generated from emacs-lisp itself,""" start="00:01:35.040" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""because there was no way I was going to handle""" start="00:01:41.200" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""two track schedules by hand.""" start="00:01:43.400" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And that's just SVG so that you can then have the hovers.""" start="00:01:45.720" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""The important thing is that when you're exporting it to HTML,""" start="00:01:49.800" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""it has to be an inline SVG to get the fancy behaviors.""" start="00:01:53.120" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""If you're linking it in as an image, then it doesn't work.""" start="00:01:57.920" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""It has to be inline. So for example, for my org mode,""" start="00:02:02.800" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I have my exports for images checked first if it's an SVG.""" start="00:02:09.280" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And unless I have an attribute""" start="00:02:14.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""on it that says, no, just link to it because it's large and not interactive,""" start="00:02:15.960" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""it actually inlines all of that markup""" start="00:02:20.360" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""into the exported HTML, if that makes sense.""" start="00:02:22.760" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""That does, that does make sense.""" start="00:02:26.880" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""It's a little less mysterious now.""" start="00:02:34.280" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""On the plus side, once it is in there as inline HTML,""" start="00:02:36.560" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""well, inline, you know, it's an inline markup,""" start="00:02:40.320" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""you can actually play around with it""" start="00:02:42.520" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""using JavaScript or CSS. That's really neat.""" start="00:02:44.360" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I had a question about some other SVG wizardry I've seen you do.""" start="00:03:01.920" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""You have these SVGs that grow, right?""" start="00:03:07.680" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Like they accumulate elements, almost like a slideshow.""" start="00:03:09.760" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Am I remembering that correctly? Yeah, yeah, yeah.""" start="00:03:15.960" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I started using that for one""" start="00:03:20.200" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""of the EmacsConf presentations.""" start="00:03:22.400" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Well, the one EmacsConf presentation""" start="00:03:24.520" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I've done in recent history,""" start="00:03:26.560" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""because it's nice to be able to add things gradually, right?""" start="00:03:27.920" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Especially as you're giving a presentation.""" start="00:03:31.640" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And that's also done with Emacs Lisp.""" start="00:03:35.800" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""What I do is, first I make the image, and then in Inkscape,""" start="00:03:38.720" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I can group together the elements""" start="00:03:43.600" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""that I want to appear at the same time.""" start="00:03:46.520" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And then I can use Emacs to, I think I just changed the,""" start="00:03:49.640" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I just add some CSS to them to make them dimmer.""" start="00:03:54.640" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and you just iterate through the different groups in that level,""" start="00:04:01.040" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and you write out the intermediate SVG files,""" start="00:04:04.760" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and then you can use Inkscape""" start="00:04:09.840" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""to convert them into PNGs if you want,""" start="00:04:12.280" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""like images of each step""" start="00:04:14.840" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""that are in PNG format instead of SVG.""" start="00:04:16.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""But the basic idea is you group""" start="00:04:18.720" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""the elements together that you want in one step,""" start="00:04:20.360" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and then you can manipulate it""" start="00:04:24.160" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""using the Emacs DOM.EL library,""" start="00:04:25.880" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""because it's just an XML document.""" start="00:04:30.160" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So you can say, all right, hide everything or have everything visible""" start="00:04:32.880" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and then remove the last one or something like that, you know, iterated.""" start="00:04:38.720" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Show them one at a time and then write your resulting document object model""" start="00:04:43.160" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""to a new file each step. Do you have, that makes sense.""" start="00:04:50.680" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So do you just write the e-list,""" start="00:05:05.920" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""like is this on a case-by-case basis?""" start="00:05:09.160" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Like every time you need to do this,""" start="00:05:12.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""do you write fresh e-list to step through the SVG this way?""" start="00:05:13.520" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Or do you have some kind of package""" start="00:05:18.520" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""or library to do this more?""" start="00:05:22.480" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Let me go see if this is the one.""" start="00:05:27.160" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""It's probably just buried in my config.""" start="00:05:33.000" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""If I do it again, I'm sure I will find another thing""" start="00:05:39.840" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""that I've completely forgotten about""" start="00:05:46.720" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and therefore have to recode or fix or whatever.""" start="00:05:51.160" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""But let me go see. Can you see my screen? Yep. OK.""" start="00:05:56.400" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So, oh, yeah, yeah, this one. Nice, I remember that one.""" start="00:06:03.200" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""OK, so we get this SVG, and then this animateSVGPaths""" start="00:06:07.560" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""is just a function I have. It takes the file name.""" start="00:06:13.720" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""It makes an output there. It adds one path back at a time.""" start="00:06:16.960" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And it just creates a lot of these numbered frames.""" start="00:06:22.040" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So as you can see here,""" start="00:06:25.840" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I'm just saying, OK, take the whole thing.""" start="00:06:27.640" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And then I think, yeah, maybe I said it like,""" start="00:06:30.040" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""you know, take the whole thing,""" start="00:06:34.480" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""make everything transparent,""" start="00:06:37.000" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and then one at a time, make them opaque""" start="00:06:40.200" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and save that, save that to the frame, to the image.""" start="00:06:45.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So this theoretically is a somewhat reusable function""" start="00:06:50.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""that takes the SVG and just fills the directory with it.""" start="00:06:54.320" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""What's the order in which it reveals things?""" start="00:07:01.040" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Top to bottom or bottom to top, it's whatever the SVG has.""" start="00:07:03.400" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And so if you're grouping things together,""" start="00:07:12.920" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""you can rearrange things in Inkscape.""" start="00:07:15.960" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""If you've given them IDs,""" start="00:07:17.600" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""which I have another function for in Emacs list""" start="00:07:22.040" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""that just highlights something""" start="00:07:25.120" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and lets me put an ID for it,""" start="00:07:26.920" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""then you can rearrange them yourself""" start="00:07:28.440" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""by looking at the markup, I guess.""" start="00:07:30.880" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Or I think I actually have some code also""" start="00:07:32.320" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""that will rearrange the path""" start="00:07:35.320" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""based on a list of IDs that I give it.""" start="00:07:37.040" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and sequence so this one is animating""" start="00:07:39.280" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""one element at a time here""" start="00:07:42.760" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""um it's kind of like interesting effect""" start="00:07:44.320" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""but for larger things like for this one""" start="00:07:47.320" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""i can split this up into groups""" start="00:07:49.040" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""because i don't want to necessarily animate them letter by letter and that one""" start="00:07:52.040" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Oh yes, this is the function that I have""" start="00:07:59.600" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""for identifying the paths""" start="00:08:03.320" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and it highlights it and then it asks me for a name.""" start="00:08:05.320" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And this is the one that reorders it.""" start="00:08:08.960" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So I can say, this is the sequence""" start="00:08:11.360" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""that I want it animated in. And it will, yeah, good.""" start="00:08:14.560" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So you don't actually need Inkscape at all, right?""" start="00:08:19.280" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Because you have an elisp function""" start="00:08:23.400" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""that will let you assign the order interactively.""" start="00:08:25.000" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Yeah, so if you're doing just all the elements one after the other,""" start="00:08:28.400" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Inkscape is helpful for combining the different shapes,""" start="00:08:34.600" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""well, breaking it apart,""" start="00:08:39.280" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""because when I get the PDF and I convert it,""" start="00:08:41.400" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""it's like one big element that has a very complex path.""" start="00:08:44.720" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And if I want to animate it element by element,""" start="00:08:48.560" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I have to break it apart""" start="00:08:52.480" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and then recombine it so that, you know, so that this O looks like it's hollow""" start="00:08:53.960" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""instead of like a circle.""" start="00:08:59.760" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So there's a little bit of Inkscape""" start="00:09:01.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""cleaning up before then,""" start="00:09:02.960" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""but I really dislike the mouse heavy stuff of Inkscape""" start="00:09:04.880" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""for assigning IDs and things like that.""" start="00:09:08.440" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I haven't quite gotten the hang of it.""" start="00:09:12.120" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So this is what it looks like""" start="00:09:14.000" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""before you group the elements together""" start="00:09:16.120" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and you combine paths,""" start="00:09:17.920" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""which is what you have to do Inkscape for,""" start="00:09:20.040" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""because I can't make sense of the numbers in Emacs someday.""" start="00:09:22.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So just combine, combine, combine. But once it's there,""" start="00:09:24.880" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I don't like having to set the ID in this""" start="00:09:30.320" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""object properties on the right side,""" start="00:09:32.720" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""because there's a lot of clicking.""" start="00:09:34.880" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""press escape and tab and tab, it's not reliable.""" start="00:09:36.960" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So that's why I have this function""" start="00:09:40.560" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and it lets me identify the paths and animate them""" start="00:09:42.600" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""from within Emacs, because Emacs is a text editor.""" start="00:09:46.560" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Yeah, in name only, but anyway.""" start="00:09:51.000" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So the groups, if you've already assigned groups in Inkscape,""" start="00:09:55.280" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Then when you run it through this function in Emacs,""" start="00:10:02.680" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""you can assign an ordering to the groups,""" start="00:10:06.520" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""the order in which it will be revealed.""" start="00:10:09.160" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Yeah. What I did was I gave it all IDs.""" start="00:10:10.600" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So I gave each group an ID.""" start="00:10:15.040" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And then when I have the ID, I can say, you know, maybe when I group it,""" start="00:10:17.600" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I'm doing it in a bit of a haphazard way,""" start="00:10:26.000" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""not grouping the first thing first,""" start="00:10:28.320" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and then the second thing, and the third thing.""" start="00:10:30.280" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So it's a bit of a mess.""" start="00:10:32.280" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And this one just resorts it by, I think,""" start="00:10:34.400" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""just looking everything up, storing it,""" start="00:10:38.120" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and then putting it back in order.""" start="00:10:41.480" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I probably have the code for this somewhere,""" start="00:10:45.040" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and if it's not, it's in the source code.""" start="00:10:49.160" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""There should be a source.""" start="00:10:52.040" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Yes, so this is an org source for this post,""" start="00:10:53.040" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and if it's not in there, then it should be in my config,""" start="00:10:57.600" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""the definition of this function.""" start="00:11:01.280" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""We are to pass. Here we are. Yeah, there you go.""" start="00:11:03.680" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So there, it just, it takes it, it looks for it,""" start="00:11:11.440" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and it adds it to the first layer.""" start="00:11:17.640" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Okay, you've just explained the magic,""" start="00:11:19.720" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""which makes it less magical,""" start="00:11:29.400" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""but also something I could try. Yeah, this is interesting.""" start="00:11:31.160" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Yeah, S2G is surprisingly powerful. Yeah, I know.""" start="00:11:36.280" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I know it can do a lot more""" start="00:11:41.760" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""than what we typically use it for.""" start="00:11:43.680" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So you also had this feature where, I think you used CSS,""" start="00:11:46.560" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""where if you mouse over something in the SVG,""" start="00:11:53.040" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""something is highlighted in your webpage.""" start="00:11:56.600" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Oh yeah, yeah, yeah. Like in the organizer's notebook.""" start="00:11:58.840" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So I have a draft schedule here.""" start="00:12:04.800" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Yeah, we've been doing all this stuff live, that schedule,""" start="00:12:07.960" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""where if you have, let's pick someone's talk.""" start="00:12:10.680" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Oh, yeah, highlight.""" start="00:12:16.240" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I think, oh, maybe it's the other way around.""" start="00:12:22.120" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I need to put this stuff here first. Oh yeah, okay.""" start="00:12:26.160" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So you'll notice here how if I add some JavaScript,""" start="00:12:30.840" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""it takes a look at what's in the URL.""" start="00:12:33.960" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And if so, then it can highlight a specific thing""" start="00:12:36.000" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""using just, maybe CSS might be it.""" start="00:12:38.440" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Actually, I think it's JavaScript setting the CSS style on it.""" start="00:12:41.680" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""But yeah, you can play around with CSS.""" start="00:12:47.880" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""See, this one has a slightly darker,""" start="00:12:51.280" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""slightly thicker background. So SVGs are great for that.""" start="00:12:53.640" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And if you inspect it,""" start="00:12:59.520" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""which I don't think I have shared here,""" start="00:13:01.480" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""but if you inspect it, I will share my inspect.""" start="00:13:03.200" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I have too many windows open,""" start="00:13:07.560" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""so I don't want to share my whole thing.""" start="00:13:10.720" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""But one of these, oh, I don't even know which, how do I find, okay,""" start="00:13:12.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""it's the developer tools window.""" start="00:13:19.075" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Do I even have developer tools? Oh, I can't see it. OK.""" start="00:13:20.367" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""If you inspect the page on the developer thingy,""" start="00:13:25.325" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""then it will show the SVG element. Yeah.""" start="00:13:29.492" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And unfortunately, I can't share it easily right now.""" start="00:13:38.117" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Maybe just say inspect. Oh, this is actually, I think,""" start="00:13:41.241" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""how also the individual talks have current ones, right?""" start="00:13:46.617" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So I just have this image over here,""" start="00:13:55.117" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and then you just have that one,""" start="00:14:00.440" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""that specific talk styled differently.""" start="00:14:01.720" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""How did you generate this SVG,""" start="00:14:06.000" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""the one showing the schedule?""" start="00:14:13.160" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Oh, okay, okay. Emacs. Book, book, book, book.""" start="00:14:14.640" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Emacs publish, I think. Let me share it. Emacs conf pub.""" start="00:14:24.440" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""One of these windows. Okay, let's see.""" start="00:14:29.600" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Slow down, look at all the windows.""" start="00:14:36.120" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Okay, I'm just gonna share the whole screen.""" start="00:14:39.200" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Screen two, no, screen one. All right, and okay.""" start="00:14:40.640" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I think this is the one. Is it sharing my screen?""" start="00:14:50.520" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""It is not sharing my screen. I'm going to try this again.""" start="00:15:05.760" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Okay. All right. So, the schedule. The schedule.""" start="00:15:08.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""This is the actual function""" start="00:15:23.120" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""that creates the SVG rectangles for the talks.""" start="00:15:24.560" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Oops. My screen share ended. Let me do that again.""" start="00:15:28.320" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""All right, and as you can see,""" start="00:15:35.280" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""it's just a little bit of math for the X, the Y,""" start="00:15:41.240" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""we color it differently""" start="00:15:45.040" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""depending on whether I'm making the schedule for the public view.""" start="00:15:48.200" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So we just, you know, do we do developer, development talk""" start="00:15:52.840" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""or general talk as colors,""" start="00:15:58.440" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""or if I want to color it for the backstage view,""" start="00:15:59.920" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I can keep track of the talk's status.""" start="00:16:02.640" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Anyway, so SDG track takes the track""" start="00:16:04.720" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and all the talk information,""" start="00:16:07.800" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and it makes all the little rectangles.""" start="00:16:09.240" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And this is the thing that adds a little hover""" start="00:16:11.560" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""for the times and titles as well.""" start="00:16:15.600" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So, Emacs's API for dealing with this is actually pretty good.""" start="00:16:17.920" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Oh, and of course, I have a hook here that modifies it.""" start="00:16:22.640" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""You can just run through a different function,""" start="00:16:27.560" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""different functions to tweak it.""" start="00:16:30.120" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So I could say, okay, color it in case my time constraints are,""" start="00:16:32.520" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""you know, not being met.""" start="00:16:36.400" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And then I can paint about this somewhere.""" start="00:16:37.840" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And the nice thing about this""" start="00:16:40.960" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""is it's actually, it's, you can, hang on a second, let me do this carefully.""" start="00:16:51.120" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""All right, here you go.""" start="00:17:06.720" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""It's super nice to be able to refer to it within Emacs itself""" start="00:17:08.000" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""because Emacs has SVG support.""" start="00:17:13.480" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So this is, for example, the organizer view""" start="00:17:15.840" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""inside an org mode file. And it just has all those SVGs.""" start="00:17:19.680" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""It don't have the hover things,""" start="00:17:24.040" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""because it's just an image in it.""" start="00:17:25.600" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""But yeah, SVGs, Emacs, awesome. Oh, that's very cool.""" start="00:17:27.400" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""You're actually drawing the rectangles from scratch.""" start="00:17:37.760" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""It took a little bit of figuring out,""" start="00:17:40.720" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""especially since I realized""" start="00:17:45.000" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I wanted horizontal on the wiki pages""" start="00:17:46.960" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""so that it fits on people's screens,""" start="00:17:49.680" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""but I wanted vertical in my organized review""" start="00:17:51.360" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""so that I don't have to keep tilting my head sideways.""" start="00:17:56.040" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and this is the code for that.""" start="00:18:09.200" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""See, I'm just directly adding G nodes for groups""" start="00:18:12.360" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""or A nodes for the hyperlinks and rep as well.""" start="00:18:19.440" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I think the SVG library also has functions""" start="00:18:23.200" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""for adding rectangles and things like that,""" start="00:18:27.320" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""but sometimes I vaguely remember""" start="00:18:31.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""sometimes you can't return the node that I'm expecting.""" start="00:18:32.360" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So, it's okay to just use the DOM functions directly.""" start="00:18:35.000" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And then the whole thing gets SVG printed afterwards.""" start="00:18:40.560" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So I can just say SVG printed, and then it's good to go.""" start="00:18:46.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Let me see. Actually, do I have SVG?""" start="00:18:54.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Let's schedule for track SVG.""" start="00:18:57.720" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""It's a shame that you can't visually interact""" start="00:19:05.680" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""with parts of an SVG in Emacs the way you can in Emacs.""" start="00:19:08.800" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Oh, some people have some interesting experiments with that.""" start="00:19:11.560" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I haven't dug into it much,""" start="00:19:16.800" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""but people have figured out how to use the mouse events""" start="00:19:18.840" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and then figure out what the, like there's LEC draw, right?""" start="00:19:21.640" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So lecdraw is a package that lets you draw SVGs""" start="00:19:26.200" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and you can drag things and whatever. So that's very cool.""" start="00:19:30.160" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And there's also an org related package""" start="00:19:33.040" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""that lets you visualize your schedule as boxes.""" start="00:19:37.160" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I'd like, yeah, that's a thing also.""" start="00:19:43.440" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So people have experimented""" start="00:19:45.640" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""with mouse interaction and it's cool,""" start="00:19:46.920" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""but I haven't had the brain space to do that yet,""" start="00:19:49.440" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""but it would be nice. Yeah, you're right.""" start="00:19:51.920" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I remember using easy draw""" start="00:19:55.480" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and being surprised at what it can do.""" start="00:19:58.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""The only thing I think I discovered""" start="00:20:02.000" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""is that it ends up creating lots of new SVGs,""" start="00:20:05.120" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""kind of the way that you do""" start="00:20:10.280" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""when you show elements one by one,""" start="00:20:13.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""you are essentially creating one SVG for each state,""" start="00:20:14.960" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""one full SVG for each intermediate state of the presentation, let's say.""" start="00:20:19.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""That's kind of what ELEasyDraw does.""" start="00:20:24.440" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And I thought that's not good for performance.""" start="00:20:26.480" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And it is kind of on the slow side,""" start="00:20:30.840" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""if you compare it to like Inkscape or anything else.""" start="00:20:33.040" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""But yeah, what it can do is pretty amazing.""" start="00:20:37.360" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""you can dynamically modify an SVG object,""" start="00:20:40.960" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and it will automatically get updated in Emacs,""" start="00:20:44.560" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""which is a technique that I use a lot in FFNS in subbed.""" start="00:20:48.400" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So for example, if I have waveform show all in this,""" start="00:20:52.520" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""it will, like, it's very easy to just move one element, for example,""" start="00:20:57.560" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""or make an element larger or smaller.""" start="00:21:03.240" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And that's the... It might be pretty efficient, I don't know,""" start="00:21:08.520" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""but I'm certainly not like writing it to disk each time and reloading it.""" start="00:21:13.280" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Eric and I demoed in 2020 EmacsConf for Dungeon Mode Works,""" start="00:21:20.200" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""where we demonstrated, you know, showing parts of the map""" start="00:21:25.520" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and then, you know, different characters""" start="00:21:29.400" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""have different abilities that show,""" start="00:21:31.650" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""that allow you to see different dungeon features.""" start="00:21:33.840" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And then if your last character,""" start="00:21:36.600" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""you know, of that class or race dies,""" start="00:21:38.800" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""then you suddenly can't see""" start="00:21:42.720" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""secret doors or whatever anymore.""" start="00:21:44.480" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And so just make that disappear""" start="00:21:46.760" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""between one turn and the next""" start="00:21:48.720" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""is just working with just simply update the SVG""" start="00:21:50.560" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and there goes the screen. No, no, no bus, no bus.""" start="00:21:54.920" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""It's pretty awesome. So this is an example""" start="00:21:57.680" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""of how I'm using it to kind of show where we are in the, in the track.""" start="00:22:01.560" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And then here's mouse, mouse interaction, right?""" start="00:22:07.160" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I can change my timestamp right from there. Which is fine.""" start="00:22:09.640" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So, I'm curious how this works exactly.""" start="00:22:21.360" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""To effect any kind of change in the SVG,""" start="00:22:28.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""you have to use the DOM library, right? Yes.""" start="00:22:31.800" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Okay, so, but that means that it's going to be,""" start="00:22:36.240" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""anytime you make a change, it's going to read in the XML,""" start="00:22:39.320" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""convert it to an Elisp DOM, right?""" start="00:22:43.640" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And then you modify that tree.""" start="00:22:48.000" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Yeah, you keep the DOM, like, well, in this case, for example,""" start="00:22:50.920" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I'm actually constructing it using Emacs list objects directly.""" start="00:22:55.840" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""If you were working with an external SVG,""" start="00:23:00.880" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""you would parse it first, yes,""" start="00:23:02.960" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""using XML parse file or something like that.""" start="00:23:05.200" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and then you would have it in memory.""" start="00:23:07.920" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""When you insert the image,""" start="00:23:12.000" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""you insert the list document object model that you have,""" start="00:23:14.560" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and then any changes you make to that document object model""" start="00:23:18.520" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""automatically get updated in the image somehow.""" start="00:23:21.200" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Oh, that's fantastic. Yeah. Yeah. I'll show you the code. Yeah.""" start="00:23:25.520" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So I was under the impression""" start="00:23:33.560" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""that there's a round trip to XML involved""" start="00:23:38.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""to do anything like to go from displayed""" start="00:23:40.097" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""to in-memory to in-memory modified back""" start="00:23:42.299" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""to display all around trip.""" start="00:23:46.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Yeah. So let me see where's my thing that changes it.""" start="00:23:47.840" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So when it's the time.""" start="00:23:52.960" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""It's probably some kind of hook that I'm listening to here.""" start="00:23:59.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Playback position hook. Oh, it's this update current bar.""" start="00:24:07.000" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""All right, so what update current bar does""" start="00:24:12.880" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""is it moves the bar to the right place.""" start="00:24:16.000" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And you see here how this SVG,""" start="00:24:19.320" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I'm actually just reading it off the text property""" start="00:24:21.160" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""so that I know which one is the current one in the overlay.""" start="00:24:24.720" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I remove the old one, just the element.""" start="00:24:28.280" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I don't have to mess around with the image.""" start="00:24:31.400" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I removed the old one for some reason,""" start="00:24:34.280" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""just to make sure, I guess.""" start="00:24:35.600" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""You can actually just update the attribute on it.""" start="00:24:36.840" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Oh, I think this is just so that I don't have to worry""" start="00:24:38.880" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""about whether there is one or there isn't.""" start="00:24:42.920" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And then I add a bar at the right position""" start="00:24:45.520" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and then it makes that little animated sweeping thingy.""" start="00:24:47.960" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So you see how I'm not recreating the SVG at this point.""" start="00:24:52.520" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I'm just getting it from the overlay.""" start="00:24:55.960" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Yeah, that's very interesting. I wonder what it's doing.""" start="00:25:02.560" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""what it's actually doing under the hood when you run SVG removal.""" start="00:25:07.480" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Yeah, I don't know, too. I think it's RSVG is tied""" start="00:25:09.920" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""into the display engine, so to speak. Yeah, that it is.""" start="00:25:19.440" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""But RSVG, the library,""" start="00:25:32.040" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""can only deal with actual SVGs, right, like XML SVGs,""" start="00:25:33.920" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""but we're dealing with the ELISP DOM of an SVG.""" start="00:25:39.200" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So the display engine can re-enter the LISP.""" start="00:25:43.120" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I do know that the display engine""" start="00:25:47.560" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""can re-enter the LISP engine,""" start="00:25:49.520" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""so I think that may be the answer.""" start="00:25:51.840" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Yeah, you can just SVG insert image the object itself.""" start="00:25:53.600" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So here, for example, SVG create just creates,""" start="00:25:58.760" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""it actually just creates a DOM model.""" start="00:26:01.880" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So this is Lisp, and it's not,""" start="00:26:04.240" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""it doesn't get printed to string representation or anything.""" start="00:26:06.600" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And then you can SVG insert image,""" start="00:26:09.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""or you can set the display and, you know,""" start="00:26:13.240" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and use pass it like as an SVG image.""" start="00:26:15.160" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""SVG image gives you an image object""" start="00:26:20.720" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""if you want to do the like the regular""" start="00:26:22.600" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""sort of display thingy. Actually, that one says it turns it""" start="00:26:24.680" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""into a string representation.""" start="00:26:31.200" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Or at least maybe that's just how it gets retrained.""" start="00:26:34.400" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Anyhow, some kind of magic happens,""" start="00:26:36.720" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""but I don't have to worry about it.""" start="00:26:38.560" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""It just stays on my side. Yeah, but I was thinking about it""" start="00:26:39.920" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""because I expect that if it's converting to XML all the time, every time you make a change,""" start="00:26:44.120" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""then that's going to be the bottleneck""" start="00:26:49.600" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""for any kind of heavy interactive SVG editing or modification in Emacs.""" start="00:26:52.120" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""The kind that ELEasyDraw does.""" start="00:26:58.120" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""But maybe if we make it compelling enough,""" start="00:27:01.200" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""then the folks upstream can say, all right,""" start="00:27:03.840" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""like the way that JSON got a lot faster.""" start="00:27:07.280" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Who knows? Maybe we can get that to be faster too. Yeah.""" start="00:27:10.240" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I see a lot of potential for better UIs in Emacs""" start="00:27:13.360" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""with using SVGs. Yeah.""" start="00:27:19.200" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Nicolas Rougier has all those experiments, right?""" start="00:27:22.720" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Yeah, but all of those, I think, are bound by the limitations""" start="00:27:26.320" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""of how deeply SVGs are embedded in the display engine,""" start="00:27:30.160" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""because that's kind of what we're discussing.""" start="00:27:33.600" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""We want to avoid going to XML,""" start="00:27:36.360" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I mean, going from XML to Elisp DOM""" start="00:27:38.480" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""to modified Elisp DOM back to XML.""" start="00:27:41.480" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""We want to avoid that round trip. Yeah, for sure.""" start="00:27:44.840" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Or make that as fast as possible, yeah.""" start="00:27:50.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Does anyone else have anything they want to share?""" start="00:28:04.800" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I've always got stuff I can share,""" start="00:28:11.920" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""but I pretty happily defer. I've already seen what I made.""" start="00:28:13.920" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Karthik? Oh, I'm a fly on a wall here. I'm not.""" start="00:28:17.640" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Okay. I didn't come in with the intent to share anything.""" start="00:28:28.760" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Yeah. How about you, Sacha?""" start="00:28:32.200" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Do you have other stuff you haven't shown off recently?""" start="00:28:34.240" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Aside from all the panicking""" start="00:28:38.000" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""about getting EmacsConf together this year?""" start="00:28:39.840" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I just wanted to bring it up.""" start="00:28:42.600" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Yeah, let's see, what do I have in my recent, like, fiddled with?""" start="00:28:45.400" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So I have a project called...""" start="00:28:50.360" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I have a project called Ufta, which is a little bit fun.""" start="00:28:54.000" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Let me pull it up here before I share.""" start="00:28:56.880" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""You can see my messy, messy desktop. Okay, there it is.""" start="00:29:00.160" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And that's supposed to want a shell. Probably that one.""" start="00:29:08.960" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And we'll just bootroot. keeping in mind that graphics""" start="00:29:21.520" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""is going to end in about five minutes. Ooh, perfect.""" start="00:29:29.120" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""That'll keep me from from being my normal long-winded self.""" start="00:29:33.400" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Have you already made contact with Emmanuel? I was not.""" start="00:29:38.960" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Okay, I'm going to quickly do a check in.""" start="00:29:47.240" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Okay, sounds good. Did you hear back from him?""" start="00:29:50.160" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Assume that's a yes.""" start="00:30:00.120" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""All right, I'll go ahead and share screen here""" start="00:30:01.040" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and just take a look, a very brief look at this.""" start="00:30:04.400" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Assuming I can present. I had a question for Sacha.""" start="00:30:08.880" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I had a question for Sacha and you, Corbin.""" start="00:30:16.720" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Hello. Yeah, you're good. Go for it. Yeah, yeah.""" start="00:30:22.400" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So in past years, in the EmacsConf,""" start="00:30:28.760" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""there was a talk by someone,""" start="00:30:33.320" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""usually John Wheatley, or I think Philip last year,""" start="00:30:36.800" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""about new developments in Emacs.""" start="00:30:41.000" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Yes, and that is kind of at the whim""" start="00:30:44.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""of the Emacs developers,""" start="00:30:48.680" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""whether that is included in the in the conference.""" start="00:30:50.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""It's kind of up to the, you know, how busy folks are""" start="00:30:56.920" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and whether somebody can follow up the time to prepare it.""" start="00:30:59.680" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I see. Yeah, I noticed that there wasn't one for this year.""" start="00:31:02.880" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And I know of at least one improvement""" start="00:31:07.120" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""or one change to Emacs.""" start="00:31:10.000" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""It's small, but I'm guessing it's very crucial""" start="00:31:12.360" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""for a certain class of Emacs users.""" start="00:31:17.560" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And I can talk about that, just that one thing.""" start="00:31:20.360" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""But you can, you can, you can go right.""" start="00:31:24.240" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So I can't share anything and we've got about one minute.""" start="00:31:29.720" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So have that. Okay. Um, so the change is that, uh,""" start="00:31:32.600" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""in the development version of Emacs,""" start="00:31:39.720" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""sorry, child frames are now supported""" start="00:31:41.920" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""in terminal in the terminal.""" start="00:31:46.920" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And I suspect that not many people know about it yet,""" start="00:31:53.680" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""but basically this means something like Corfu is going to work fine""" start="00:31:56.520" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""when you're running Emacs in a terminal,""" start="00:32:03.840" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""as well as pause frames or anything that shows like a little pop-up window""" start="00:32:05.480" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""that previously did not work in Terminal Emacs.""" start="00:32:14.160" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""That's it. That's the update. Cool.""" start="00:32:19.160" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Okay, there I have a share screen button.""" start="00:32:27.520" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""We'll see if I think we're just about to cut away,""" start="00:32:29.360" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""but I'll go ahead and see if I can get this going.""" start="00:32:32.000" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I'll just share my whole screen""" start="00:32:34.920" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and this will be a little ugly as it comes in.""" start="00:32:36.680" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So this is a project that I think is a little bit fun.""" start="00:32:39.600" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""It's called Oopda. And basically what this does,""" start="00:32:44.360" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""you can see it on my source site,""" start="00:32:47.520" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""that's sr.ht tilde mplscorewin slash Oopda.""" start="00:32:49.760" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""O-F-D-A, and this is a very simple approach""" start="00:32:55.160" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""to using an org file as a replacement for SQLite.""" start="00:32:59.600" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""It's very simple, but it does support like a dot style path and notation.""" start="00:33:04.640" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So you can get at deeply nested data""" start="00:33:12.240" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and just gives a little,""" start="00:33:16.320" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""there's a shell script wrapper that comes with it.""" start="00:33:19.160" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""All right.""" start="00:33:24.160" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Theoretically, this is the Q&A for the graphics talk.""" start="00:33:26.320" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Oops, I have to unmute over here. Sorry.""" start="00:33:32.760" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""All right, I had a little audio bleed through,""" start="00:33:38.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""my apologies, can you still hear me?""" start="00:33:53.000" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""All right, I'm gonna guess,""" start="00:34:02.400" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""because I still see us live on the screen""" start="00:34:03.720" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""that we're still live. All right, so I'll just press on.""" start="00:34:05.760" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So what we're looking at here is a project called Upta.""" start="00:34:12.840" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Here's the Emacs Lisp source port.""" start="00:34:18.600" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""You can see it's not real impressive""" start="00:34:21.240" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""even with all of its boilerplate.""" start="00:34:23.200" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""It's under 200 lines of code.""" start="00:34:24.760" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And this is kind of a proof of concept,""" start="00:34:27.400" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""giving us the ability to use a org.org file""" start="00:34:30.600" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""as a flat file database. The intention here is to get""" start="00:34:35.000" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""a kind of transition from SQLite,""" start="00:34:38.280" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""which is using a flat text file as a database,""" start="00:34:40.440" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""to being able to have more of a literate database""" start="00:34:44.240" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""where we can intermix documentation about the data""" start="00:34:48.880" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""with the data itself,""" start="00:34:52.760" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and then by giving a path on the command line.""" start="00:34:54.120" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I'll go back to the README, just take a look at that.""" start="00:34:57.600" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And you can see there's a couple of kind of examples here""" start="00:35:02.200" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""where we're, here we would be querying a path.""" start="00:35:05.240" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""We can also provide a value""" start="00:35:11.320" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and that'll set data into the file.""" start="00:35:15.480" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""It also has an optional first parameter""" start="00:35:20.040" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""to specify the specific org file by default.""" start="00:35:23.120" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""It looks for a file called data.org.""" start="00:35:26.320" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And of course that can be used inside Emacs as well,""" start="00:35:29.400" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""although the value of that may be a little bit limited""" start="00:35:34.280" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""compared to more sophisticated""" start="00:35:37.800" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""technologies like org-element.""" start="00:35:39.800" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""This is not an implementation""" start="00:35:41.800" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""that mirrors all of org-element""" start="00:35:43.840" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""or any of the more complex functionality of org.""" start="00:35:47.160" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""It's really as simple as possible proof of concept""" start="00:35:50.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""to just to be able to kind of work""" start="00:35:52.920" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""with the data inside an org file""" start="00:35:57.680" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and get it back out on the command line.""" start="00:35:59.560" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So we'll see if we can make it work here.""" start="00:36:01.680" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Corwin, could you increase the font size?""" start="00:36:07.840" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I surely will. All right. How's that?""" start="00:36:13.480" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""That's my picture. Yeah. Okay. Cool.""" start="00:36:27.200" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So, let's see if we do have a, well, we can probably make it.""" start="00:36:31.000" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Let's do this.""" start="00:36:39.160" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""All right, and then in theory, this just works.""" start="00:37:00.840" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So we'll cut.""" start="00:37:05.160" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So we'll just create a data file called data.org.""" start="00:37:42.200" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Make sure that works. Looks reasonable.""" start="00:37:45.880" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Let's try adding some data to it. Hmm, not so happy.""" start="00:37:50.240" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Okay, let's try it the hard way.""" start="00:38:13.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I'll come back over here to my usage""" start="00:38:17.560" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and we'll just try running it.""" start="00:38:21.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Is Emacs, is finding Emacs really the issue?""" start="00:38:23.200" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""It seems to me it's not, it's not liking my path.""" start="00:38:37.320" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""It's not finding out that I do EO and PWD.""" start="00:38:41.200" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""It wants it to be on the log. I see.""" start="00:38:44.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So I may have to even mess with that further,""" start="00:38:49.520" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""but we'll just try it.""" start="00:38:54.120" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So this should retrieve the value if it works.""" start="00:38:55.360" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Oh, and let's take a take a simple""" start="00:39:04.840" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Yeah, add-to-list takes a symbol.""" start="00:39:17.120" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""We're going to have issues with bash quoting,""" start="00:39:47.320" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""so you should escape the quoting side.""" start="00:39:52.640" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Gotcha. You're kidding.""" start="00:39:58.560" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I'm not letting go. Whoa. That might work.""" start="00:40:27.720" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I got my parents right. Never demo live. How exciting. OK.""" start="00:40:36.600" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Without batch, though, we may not get our output. OK.""" start="00:41:02.160" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Well, that's as far as I'm going to take it.""" start="00:41:13.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I should have prepped a demo environment.""" start="00:41:20.400" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I wasn't really prepared to demo. No worries.""" start="00:41:21.960" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Couple of questions about this feature.""" start="00:41:26.880" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""The first question is, do you use it? I do use it, yeah.""" start="00:41:30.720" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I should have gotten onto the environment""" start="00:41:37.800" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""where I'm using it. It's a little messy.""" start="00:41:41.280" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""It gets into another project""" start="00:41:45.600" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""that's way too complicated to get into.""" start="00:41:47.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Yeah, but what kinds of things do you use it for?""" start="00:41:48.840" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""It's sort of hard to answer""" start="00:41:53.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""that without getting into my other project,""" start="00:41:57.000" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""but essentially I've got a web development tool chain""" start="00:41:59.160" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""that is kind of a web-based REPL""" start="00:42:02.920" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""that is kind of a literate compute environment, if you will,""" start="00:42:05.760" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""allowing me to use a bunch of virtual machines""" start="00:42:10.920" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""as one big computer. That project is called Ghost Wheel.""" start="00:42:13.120" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And so in order to show off the homepage,""" start="00:42:19.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So on this page, you can see the list of machines,""" start="00:42:23.720" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and then you'll also see there's these state indicators.""" start="00:42:30.360" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And right now, as a matter of fact,""" start="00:42:34.760" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""what I've been hacking on""" start="00:42:38.440" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""is trying to get support for org tables.""" start="00:42:41.240" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Right now, I support only changing all of the data""" start="00:42:44.880" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""within some heading, subheading, or whatever.""" start="00:42:48.760" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""What I'd like to be able to do is specify,""" start="00:42:51.960" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""using org table fm syntax, the particular row column.""" start="00:42:55.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So find a particular named table,""" start="00:43:01.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""find a particular row, you know,""" start="00:43:03.840" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""column one, you know, row two, column one,""" start="00:43:06.560" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and then set the value from the command.""" start="00:43:08.640" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Currently, I just use it for very simple stuff.""" start="00:43:11.920" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I don't really want to show that off.""" start="00:43:18.360" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I've got another page that lists all of the DNS names""" start="00:43:20.520" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""that are associated that are hosted on Ghostwheel.""" start="00:43:23.600" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And so I use that to add items to the list.""" start="00:43:26.160" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Does it make sense? Yeah, it sounds useful.""" start="00:43:29.320" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So one thing that I would like,""" start="00:43:40.440" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I guess it's easy enough to write,""" start="00:43:47.280" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""but is a tool exactly like this""" start="00:43:51.480" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""where I can query my org files from the command line?""" start="00:43:58.800" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Yeah, that's exactly what it says.""" start="00:44:03.840" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Yeah, but it's going to be more""" start="00:44:06.880" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""like a database query where, you know, I say select, select all headings where, you know,""" start="00:44:14.600" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""that contain this string or that have this tag, right?""" start="00:44:23.320" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""The kinds of things that you can do with org-ql from outside, from inside Emacs, right?""" start="00:44:27.280" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""To be able to do those from the command line with,""" start="00:44:38.520" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I'm going to invoke SQL here, like SQL SELECT statements,""" start="00:44:41.120" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""but it doesn't have to be that syntax, right?""" start="00:44:48.280" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Just that capability.""" start="00:44:50.520" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Yeah, I can see that being useful as a command line tool.""" start="00:44:52.520" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And I don't even care about write,""" start="00:44:57.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""like the ability to write or manipulate the file.""" start="00:44:59.400" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Just query. the command line that sounds yeah yeah exactly""" start="00:45:02.400" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""to be able to dig a piece of data out of an org file as well""" start="00:45:11.800" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""for my purpose it's very useful to be able to replace it""" start="00:45:15.160" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""because then i can deal with submit the form you know""" start="00:45:18.360" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and that might be like a sign up form""" start="00:45:21.000" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and then i just add the user add up an entry into the org file""" start="00:45:24.000" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""for that user right what it doesn't do is a relational data""" start="00:45:29.160" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So everything, it's essentially a document data store.""" start="00:45:35.240" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Like a Mongo kind of. True. So over on IRC, ScrewLisp asks,""" start="00:45:40.560" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""what does it mean to query an ARC file?""" start="00:45:53.960" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Is the data in a table? Is it in an ELISP nested list view""" start="00:45:57.280" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""of a table that has a name in ARC?""" start="00:46:01.680" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And my answer to that is that if you ever used RQL,""" start="00:46:06.560" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""written by Alpha Papa,""" start="00:46:10.640" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""then that's the kind of thing I'm talking about.""" start="00:46:14.200" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So, you query based on one of a set of attributes.""" start="00:46:18.040" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And these attributes are anything that's recognized by ARC.""" start="00:46:23.120" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""For example, the to-do status, the dates,""" start="00:46:30.600" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""the outline path, the headings, a full text search.""" start="00:46:35.240" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""There are several more.""" start="00:46:40.400" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""The presence or absence of certain properties.""" start="00:46:43.480" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""using any combination of those if you want to dig down""" start="00:46:46.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and find some data in an art file.""" start="00:46:50.880" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""That's the kind of query I'm talking about.""" start="00:46:52.760" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""It is somewhat equivalent""" start="00:46:56.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""to being able to write SQL queries""" start="00:46:58.240" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""where you match on things just for your art files.""" start="00:47:02.360" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Okay. I think we might have figured out our problem.""" start="00:47:09.720" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""It was DOS encoding. See if that works.""" start="00:47:21.200" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I switched the development track over""" start="00:47:38.840" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""to just watching the gen track since I couldn't find it.""" start="00:47:47.880" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Also, Eludo wants to mention""" start="00:47:53.560" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""the Emacs Carnival theme for December.""" start="00:47:57.360" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Yes, the people of Emacs,""" start="00:48:00.800" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""of which you are all very awesome.""" start="00:48:02.360" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Thank you so much for your patience.""" start="00:48:04.120" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Today has been very interesting.""" start="00:48:05.520" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""But yes, at some point we can show that too.""" start="00:48:08.160" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And we can basically wrap up anytime we like""" start="00:48:13.360" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""or hang out for as much time as we like also.""" start="00:48:17.200" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""okay so this is okay at least i got""" start="00:48:19.280" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""as far as a working demo here""" start="00:48:23.280" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""so now you can kind of see what's going on um""" start="00:48:24.520" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and i'll just wrap that into uh""" start="00:48:26.440" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""into a little prettier output""" start="00:48:31.600" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And you can see that it modified the value.""" start="00:48:40.960" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So it's pretty darn simple.""" start="00:48:53.160" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Again, all it's doing is completely replacing all of this content""" start="00:48:59.480" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""with whatever new value is given as its final argument""" start="00:49:06.160" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""after naming the data path.""" start="00:49:11.680" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So the one refinement we can do just to get a little more complex example going.""" start="00:49:14.880" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""We'll deepen our structure a little bit. And try that.""" start="00:49:23.440" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So here now we'll say test two.""" start="00:49:32.760" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And we can take a look at the data file""" start="00:49:38.800" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and see that it has adjusted that""" start="00:49:47.640" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""because test2 was completely unique, that worked fine.""" start="00:49:51.600" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""If that were not the case,""" start="00:49:55.960" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""we would have had to specify the path""" start="00:50:00.520" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""using dot notation like this. And that's pretty much it.""" start="00:50:02.600" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""It took me much longer to figure out""" start="00:50:17.680" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""why it wasn't just working than it did to demo it.""" start="00:50:20.760" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And again, what I really like about this program,""" start="00:50:23.760" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""besides the fact that I find it quite useful""" start="00:50:29.240" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""to just be able to stuff values into an org file""" start="00:50:31.640" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""from the command line using shell script,""" start="00:50:34.640" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""is what I really like about this""" start="00:50:36.440" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""is that it's a whopping 190 lines of code,""" start="00:50:41.280" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""including all the boilerplate.""" start="00:50:46.000" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And I will share the project into the chat.""" start="00:50:47.920" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So, Corwin, you're not using org-element for this, are you?""" start="00:50:55.760" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""No. Yeah, that's a great question.""" start="00:51:02.200" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Let's just dig a little into the code here.""" start="00:51:06.800" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Or maybe it would be more fun to actually""" start="00:51:10.840" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So the only real requires here, I do use cl-lib mostly.""" start="00:51:21.040" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I'm directly using the macros from org.""" start="00:51:26.720" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Particularly, I'm extremely fond of this function.""" start="00:51:33.160" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I'd love to see this just promoted to promoted""" start="00:51:36.880" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""somewhere deeper into Emacs proper,""" start="00:51:41.280" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""so that I don't have to load all of the org macros""" start="00:51:43.560" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""to get to this particularly useful one,""" start="00:51:47.640" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""which just tells me whether ignoring whitespace""" start="00:51:50.240" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""a string has any characters, has greater than zero length.""" start="00:51:54.680" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Isn't that just string blank B?""" start="00:51:59.640" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So this is a little different.""" start="00:52:04.440" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""This deals with... I may struggle to remember the details,""" start="00:52:09.000" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and it's possible that the non-org specific version""" start="00:52:14.800" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""has even been improved or I didn't use it correctly,""" start="00:52:21.000" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""but I believe my experience was it didn't handle new lines, for example, quite the same way.""" start="00:52:23.520" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So getting into what this actually does,""" start="00:52:29.480" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""most of the program is finding the relevant part of the file.""" start="00:52:38.520" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""You'll see that we start out by doing a depth-based search,""" start="00:52:43.880" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""capture the value that we're looking for.""" start="00:52:49.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And then finally, we widen the buffer""" start="00:52:51.960" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and keep handling the case where we might be being called""" start="00:52:58.120" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""from within Emacs in a narrowed buffer.""" start="00:53:01.800" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""This is another what should be documented at the top.""" start="00:53:05.840" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So that is obviously going to load org.""" start="00:53:11.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Just double-check that. Yeah, it is going to load org.""" start="00:53:13.920" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And we can see that because it didn't find the function.""" start="00:53:21.400" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""until I loaded Org and then it did when I did C-h f""" start="00:53:30.040" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""to get definition of a function.""" start="00:53:40.400" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So, widen the buffer and then I just start looking for the search.""" start="00:53:45.000" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""You can see I'm doing simple regular expression based searches here.""" start="00:53:51.720" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Looking for lines, ultimately, that start with a star.""" start="00:53:55.400" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""That was a little simpler format""" start="00:54:01.720" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""that didn't quite work out.""" start="00:54:05.120" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So I'm searching for, here this is a little tricky,""" start="00:54:07.760" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""but I'm searching for a number of stars""" start="00:54:25.720" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""equal to the depth that I want.""" start="00:54:28.840" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""The depth that I want being calculated""" start="00:54:30.840" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""based on the number of dots that were in the query string.""" start="00:54:33.440" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""from there, you know, kind of skipping some stuff, right?""" start="00:54:38.040" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Once we find our starting position,""" start="00:54:47.160" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""then we're going to have to find the end of that,""" start="00:54:49.600" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""the section that we're going to read or replace.""" start="00:54:53.240" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Text a tiny bit smaller. So I checked org-string nwp,""" start="00:54:57.680" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and it's the same as string blank p.""" start="00:55:12.960" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""exactly the same code or the same result?""" start="00:55:20.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""No, it's the same result. Well, it's the same check,""" start="00:55:26.320" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""but string blank p will return a match object,""" start="00:55:30.400" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""like a string match object,""" start="00:55:34.520" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""whereas the org version will return the string itself""" start="00:55:36.000" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""if it finds a match, as in if it's blank.""" start="00:55:39.120" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I don't remember that.""" start="00:55:46.160" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""As a Boolean check, they are the same.""" start="00:55:48.320" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""If you use it as, you know, is it blank or not.""" start="00:55:51.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So, um, yeah, I've talked for way longer.""" start="00:55:54.160" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I thought I literally thought""" start="00:56:02.680" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""this would be a five minute thing.""" start="00:56:04.120" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I'm not sure if there are any questions on it,""" start="00:56:05.320" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""but just to simply answer your question.""" start="00:56:08.400" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""No, it doesn't use org element.""" start="00:56:10.240" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""This is pure regex based work.""" start="00:56:11.720" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So, the advantage of not using... Right.""" start="00:56:23.760" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So, the advantage of not using arg element""" start="00:56:26.920" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""is that you don't have to load arg or arg element, right?""" start="00:56:32.680" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And so, it's going to be faster.""" start="00:56:37.440" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And it's going to be faster both because you don't have to load arg element""" start="00:56:39.040" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and because you don't have to run arg element, like the arg parser.""" start="00:56:45.360" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""But on the other hand,""" start="00:56:51.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""you end up loading all of org anyway.""" start="00:56:52.880" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So at that point, it might just be better""" start="00:56:58.440" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""to use org element because it's more robust.""" start="00:57:02.680" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""For example, if you have a bunch of leading stars""" start="00:57:05.040" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""inside a source block or something,""" start="00:57:07.920" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""you don't want to misclassify that.""" start="00:57:09.960" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Matter of fact, I believe I had to do some flossing with it""" start="00:57:11.600" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""to deal with not just that,""" start="00:57:16.640" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""but drawers and things like that.""" start="00:57:18.880" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""right yeah so at the end of the day""" start="00:57:21.440" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""that was just an extra 10 or 20 characters""" start="00:57:25.880" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""in the regular expression so i just shrugged and wrote them""" start="00:57:28.040" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""you can see there are a number of i""" start="00:57:31.040" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""i happen to like writing regular expressions""" start="00:57:36.800" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and find them relatively readable so""" start="00:57:40.280" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So it didn't bother me doing that.""" start="00:57:42.480" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I've also done a bunch of work with org-element""" start="00:57:46.720" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""with the dungeon project,""" start="00:57:49.240" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""which of course uses that extensively""" start="00:57:51.440" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""to pull data out of tables and so on.""" start="00:57:53.760" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And indeed, I think that may ultimately be my solution.""" start="00:57:57.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I've been kind of distracted on a side quest""" start="00:58:01.320" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""to improve the org-table-fm parser.""" start="00:58:06.200" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""There's a post on my blog about the work that I've done there,""" start="00:58:09.960" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and recently started talking to Ihor,""" start="00:58:14.280" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""the new org maintainer,""" start="00:58:19.360" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""who took over in the last year or so from Bastien.""" start="00:58:20.840" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Just about what it would take to pick that up,""" start="00:58:27.580" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""or at least get it to a point""" start="00:58:32.160" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""where somebody else could work on it.""" start="00:58:34.280" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""It's pretty dense right now.""" start="00:58:35.680" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So this thing is a bit of a monster,""" start="00:58:39.600" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""but at the end of the day,""" start="00:58:59.920" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""our goal is to extend the syntax,""" start="00:59:01.800" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""is to be able to use this Org Table FM syntax""" start="00:59:06.920" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""in other contexts.""" start="00:59:12.520" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So if you haven't looked at board table FM,""" start="00:59:14.440" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""these I bar or these I markers""" start="00:59:18.520" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""are telling us to look for the table separator.""" start="00:59:21.400" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So positioning based on the location of a table separator.""" start="00:59:26.040" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I find that a little bit brittle""" start="00:59:29.760" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""just because it's really easy to go in and decide,""" start="00:59:34.440" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""oh, it'll look better with an additional line separator in there.""" start="00:59:38.680" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And then all of these formulas break everywhere.""" start="00:59:42.920" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So it would be a little more fun""" start="00:59:48.040" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""to have at least variables in there.""" start="00:59:49.920" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And that's kind of part of the scope.""" start="00:59:53.400" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""If we look, and here you get kind of a hint""" start="00:59:56.160" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""of the new syntax I'd like to support,""" start="01:00:04.120" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""things like $star, $underscore.""" start="01:00:06.640" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Keyword it's it's probably a half-hour talk""" start="01:00:12.560" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""just to get into what every single one of these would do""" start="01:00:17.560" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""But this post does does give some some context of that""" start="01:00:20.880" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And more importantly there is a as a complete test program that""" start="01:00:26.320" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Worked the last time I was playing with it""" start="01:00:35.680" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And this gives you complete examples""" start="01:00:39.160" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""of all the syntax that the work in progress does currently support.""" start="01:00:43.960" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""You'll see some of these items are commented out.""" start="01:00:48.480" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Those aren't supported yet""" start="01:00:52.800" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and before I would implement them now,""" start="01:00:54.360" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""especially now that we're talking in terms of trying to take org itself this direction, you know,""" start="01:00:56.120" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""of kind of beefing up the the TableFM format parsing""" start="01:01:04.360" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""so that it could be used in other contexts besides""" start="01:01:13.540" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""specifically within a formula.""" start="01:01:17.000" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I wouldn't want to add features""" start="01:01:19.640" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""to it without discussing those.""" start="01:01:26.840" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So this is just a simple, basically a literate test file""" start="01:01:33.400" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""if you want to call it that.""" start="01:01:37.640" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""The perhaps key improvement here""" start="01:01:40.440" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""is naming all of the different capture groups.""" start="01:01:43.240" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""which just, if you're working""" start="01:01:49.800" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""with really huge regular expressions, which this is,""" start="01:01:52.120" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""let me just make sure the whole pagex is right in here""" start="01:01:55.920" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""so we can see it, yeah.""" start="01:01:58.840" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So here's the actual rewrite, scale it a little bit,""" start="01:02:00.600" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""so you can see it's kind of a monster.""" start="01:02:05.960" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And that's all using Rx.""" start="01:02:14.480" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So hopefully that looks pretty familiar.""" start="01:02:27.640" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Dollars for specifying a column, at sign to specify a row.""" start="01:02:29.520" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And we also have the keys.""" start="01:02:35.040" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Anybody else want to show and tell?""" start="01:02:43.960" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""We're going to cut over to the automated introduction""" start="01:02:58.560" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""for the Saturday closing remarks in like four minutes.""" start="01:03:01.400" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Oh, but quick, quick, quick mention of the Emacs Carnival.""" start="01:03:07.800" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So the Emacs Carnival is a shared blogging theme.""" start="01:03:15.600" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""where lots of people write about a specific theme,""" start="01:03:20.560" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and then if you write about it,""" start="01:03:25.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""you can send your link to whoever's hosting the carnival.""" start="01:03:26.120" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And it's a great way to discover other people's cool stuff.""" start="01:03:28.240" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So if I take presenter, hang on a second, take presenter.""" start="01:03:31.680" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Oh, actually, haha, I know,""" start="01:03:35.680" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I'm going to make Elladom present it.""" start="01:03:39.520" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Haha, you are now in charge. Okay, take it away.""" start="01:03:41.960" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So I've been using Emacs for like 46 years now,""" start="01:03:47.200" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""back to TECO Emacs. And as I just said in the chat,""" start="01:03:49.960" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I've found that the people who use Emacs""" start="01:03:53.360" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""tend to be interesting people in many different ways.""" start="01:03:56.320" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And so this month, I'm just saying, let's give a shout out""" start="01:03:59.440" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""to some of the interesting people we've met along the way.""" start="01:04:03.200" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And including some of the people""" start="01:04:06.400" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""that are putting on this conference""" start="01:04:09.240" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""are some of the most interesting""" start="01:04:10.160" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and helpful people I've ever met.""" start="01:04:11.960" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So thank you. You're very kind. Thank you.""" start="01:04:13.440" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I'll say more than that. Maybe I will.""" start="01:04:27.920" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I completely agree with you and I couldn't agree more.""" start="01:04:30.680" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I think that's how Sacha and Amin and Leo""" start="01:04:34.280" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""really dragged me into this,""" start="01:04:38.840" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""you know, into being a volunteer.""" start="01:04:40.560" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And I really, I'm sure we'll talk""" start="01:04:42.320" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""about this in the closing remarks,""" start="01:04:44.600" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""but I can't recommend volunteering for this project enough.""" start="01:04:46.040" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""It's just so fun to talk backstage""" start="01:04:50.200" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""with the presenters I don't know.""" start="01:04:54.320" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""It's an extremely engaging community.""" start="01:05:00.680" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""It's really thoughtful.""" start="01:05:11.440" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I like the way y'all are so patient and awesome""" start="01:05:12.760" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and I can be just quietly having my little freak out here""" start="01:05:15.040" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and everyone's fine""" start="01:05:19.440" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and will even help debug things live as needed.""" start="01:05:20.680" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So this is all good.""" start="01:05:23.880" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Anyway, so if people want to participate,""" start="01:05:45.500" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""you basically write a blog post.""" start="01:05:48.120" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""If you don't have a blog yet,""" start="01:05:49.920" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""there are any number of packages in Emacs,""" start="01:05:53.160" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""as well as web-based services,""" start="01:05:56.960" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""but really, you can get something going with Emacs.""" start="01:05:58.480" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""or exporting to HTML and maybe even figure out RSS,""" start="01:06:02.040" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""or you can use a static site generator like Hugo,""" start="01:06:05.840" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""or you can find, if you can set up WordPress,""" start="01:06:08.280" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""that's another way to do it.""" start="01:06:11.000" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Or you can email me your thing and I'll post it on my blog""" start="01:06:12.120" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and let me know how you want to be credited for it.""" start="01:06:15.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Anyway, so you can share your story""" start="01:06:20.240" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""or share your story about somebody else's story""" start="01:06:23.560" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and celebrate Emacs community.""" start="01:06:26.880" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And we can send it to George also.""" start="01:06:35.320" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""We'll then make links in that blog post.""" start="01:06:39.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And on the subject of community,""" start="01:06:48.400" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I also heartily recommend the IRC community on Emacs.""" start="01:06:50.200" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Pound Emacs is another one of those things""" start="01:06:53.440" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""that I just personally can't get enough of,""" start="01:06:55.920" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and I hear a lot of stories about just how it's helped people.""" start="01:06:58.280" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""All right, we are now having the automated introduction""" start="01:07:05.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and then it's going to rejoin over here very soon.""" start="01:07:09.120" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Hang on a second. Wow, that's going.""" start="01:07:12.760" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Saturday close and let's arrange our screen nicely.""" start="01:07:22.440" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""All right, we made it to the end of the first day! Woohoo!""" start="01:07:34.400" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Thank you for joining us""" start="01:07:38.280" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""for the first day of EmacsConf 2025.""" start="01:07:40.400" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Feel free to spread the word""" start="01:07:42.960" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""because there is still another day of fun talks tomorrow.""" start="01:07:44.920" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So hashtag EmacsConf and hashtag Emacs.""" start="01:07:48.480" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""If you do hashtag Emacs on Mastodon""" start="01:07:51.400" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""or Blue Sky or other places, we'll probably find it.""" start="01:07:54.240" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Or if I don't, you can just let me know also.""" start="01:07:58.240" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""The prerecorded talks should be up""" start="01:08:01.760" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""on the talk pages already.""" start="01:08:04.040" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""The live talks, we'll probably actually get them up""" start="01:08:05.640" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""within the next week or two.""" start="01:08:09.120" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I think they've already started processing,""" start="01:08:11.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""so I just had to sit down and then work with""" start="01:08:13.360" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""our wonderful army of volunteer captioners""" start="01:08:15.480" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""to get them all nicely captioned.""" start="01:08:18.400" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""But anyway, so the prerecorded talks""" start="01:08:20.120" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""are also up on YouTube,""" start="01:08:22.440" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and I will eventually also upload them""" start="01:08:23.760" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""to ToobNix, which is a PeerTube instance.""" start="01:08:25.720" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""We will work on extracting live talks.""" start="01:08:29.240" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""If you'd like updates,""" start="01:08:31.240" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""please subscribe to the EmacsConf Discuss mailing list.""" start="01:08:32.120" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""If you've got ideas for making things better,""" start="01:08:35.320" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""we have so many ideas. I always end up with a very long""" start="01:08:37.280" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""to-do list after these things. Please add them to the pad.""" start="01:08:39.480" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I'd love to hear from you on how we can make it even smoother next year.""" start="01:08:43.360" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""There are about 100 people watching in gen""" start="01:08:46.920" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and 100 people watching in devs, which is really awesome.""" start="01:08:49.360" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""It's amazing to think that we can have""" start="01:08:52.160" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""an Emacs party for a lot of people.""" start="01:08:54.120" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And we can only do this because of all the wonderful speakers,""" start="01:08:56.960" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""volunteers, participants,""" start="01:09:00.400" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and very patient people in our lives""" start="01:09:02.280" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""who make it possible through all the time and support.""" start="01:09:04.360" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So this year, Corwin did most of the hosting.""" start="01:09:07.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I mean, also dropped by earlier, so that's great.""" start="01:09:10.040" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I hope Leo is okay. You know, we managed.""" start="01:09:13.440" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And I'm Sasha, by the way. I was running around backstage""" start="01:09:17.920" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and occasionally dropping in to go on the stream.""" start="01:09:22.440" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""There are lots of other volunteers who are not on air.""" start="01:09:26.560" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So, for example, during the proposal review process,""" start="01:09:29.360" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""we got a lot of wonderful comments""" start="01:09:32.720" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""from J.C. Helary, Triko, and James Endres Howell,""" start="01:09:34.320" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""captions from Amitav and Rodion and other people""" start="01:09:37.760" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""have actually started also helping""" start="01:09:41.040" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""with the captions as well.""" start="01:09:42.880" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So jay_bird just sent in some stuff today too.""" start="01:09:45.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""We are slowly working on getting a mirror in the EU set up""" start="01:09:49.400" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""so it'll be a little faster for people.""" start="01:09:52.960" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So thanks to Yang3 for lending us a server.""" start="01:09:55.640" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Babin and Michael and Ian and Jamie""" start="01:09:58.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and Eeyore and Floyd Coulter have also helped out as well.""" start="01:10:00.880" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Thanks to the Free Software Foundation""" start="01:10:06.120" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""for the mailing list, the media server, and of course, GNU Emacs itself,""" start="01:10:08.960" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""for which an astonishing amount""" start="01:10:12.680" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""of the scripting is done in Emacs. It's great.""" start="01:10:15.440" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Thanks to Ry P for the server that we're using for OBS""" start="01:10:19.320" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""so that we can just VNC into it and I can manage two tracks""" start="01:10:23.280" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""without making my computer melt. It's great.""" start="01:10:27.640" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And of course, to all the users""" start="01:10:30.800" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and contributors and project teams""" start="01:10:32.880" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""that work on all the free software""" start="01:10:34.000" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""that this stuff is built on.""" start="01:10:36.120" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Emacs, Org Mode, ERC, Tramp, Magit, BigBlueButton,""" start="01:10:37.280" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Etherpad, IkiWiki, IceCast, OBS, The Lounge,""" start="01:10:43.640" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""LiberaChat, FFmpeg, OpenAI Whisper, WhisperX,""" start="01:10:48.240" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""the Aeneas forced alignment tool,""" start="01:10:52.960" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""PsiTransfer, SubEd, SubSeg, Mozilla Firefox, MPV, and Tampermonkey,""" start="01:10:55.040" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and other things I probably forgot to mention.""" start="01:11:00.280" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Thanks to Shoshin for the music,""" start="01:11:02.200" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and thanks to people also who've donated""" start="01:11:04.600" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""through the Working Together program,""" start="01:11:06.800" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""like Scott and Jonathan and other anonymous donors.""" start="01:11:08.680" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So that's a quick thanks. There's more tomorrow,""" start="01:11:12.560" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""but Corwin, do you have any parting words?""" start="01:11:15.920" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""You know, my parting words, Sacha are a thanks to you""" start="01:11:18.360" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and not just a thanks""" start="01:11:23.560" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""for the hundreds of hours that you put""" start="01:11:25.760" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""into preparing this conference,""" start="01:11:27.280" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""you know, over the years and probably just this year,""" start="01:11:29.400" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""but also for all that you do for the community you are.""" start="01:11:32.160" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""You are a real unsung hero,""" start="01:11:36.000" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""even though I do hear your praises sung.""" start="01:11:38.760" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""They really can't be sung enough.""" start="01:11:42.320" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""In fact, I just this last week""" start="01:11:43.760" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""recommended to two different people your blog""" start="01:11:45.880" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""as a place to get a first introduction to Emacs.""" start="01:11:48.040" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Your Emacs news is an incredible contribution,""" start="01:11:51.600" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and just I want you to hear us thanking you.""" start="01:11:54.800" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Thank you, Sacha. Emacs is a lot of fun,""" start="01:11:57.960" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and Emacs people are a lot of fun,""" start="01:12:04.880" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""so it's all very wonderful. Yeah, we can wrap up here.""" start="01:12:07.520" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""People can keep hanging out if they want.""" start="01:12:10.880" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""I have a kiddo who is probably going to be back home soon""" start="01:12:15.080" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and will pounce on me for more hugs,""" start="01:12:21.120" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""so I will see y'all tomorrow.""" start="01:12:23.560" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""uh, for more probably the same kind of stuff.""" start="01:12:25.600" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Shut it down, save our energy for tomorrow.""" start="01:12:29.920" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Uh, we do like to run into like hours long closing tomorrow.""" start="01:12:32.680" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""So we'll work on resisting that.""" start="01:12:36.320" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Um, I suggest we, we look, we go get some rest""" start="01:12:38.320" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""and come, come back at it fresh tomorrow.""" start="01:12:41.560" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Anybody else, any concerns with that or shall we go for it?""" start="01:12:43.840" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""Sounds good to me.""" start="01:12:47.800" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""If you've got ideas, pop them into the etherpad.""" start="01:12:50.480" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""And thank you so much for sharing this time with us.""" start="01:12:53.600" video="mainVideo-open-mic" id="subtitle"]] +[[!template text="""See you tomorrow.""" start="01:12:56.640" video="mainVideo-open-mic" id="subtitle"]] + +</div>Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202023%20open-mic%3A%20Open%20session) + +---- +Got an idea for an EmacsConf talk or session? We'd love to hear from you! Check out the [[Call for Participation|/2026/cfp]] for details. + + +<!-- End of emacsconf-publish-after-page --> diff --git a/2026/info/open-mic-before.md b/2026/info/open-mic-before.md new file mode 100644 index 00000000..79f37e18 --- /dev/null +++ b/2026/info/open-mic-before.md @@ -0,0 +1,13 @@ +<!-- Automatically generated by emacsconf-publish-before-page --> +[[!toc ]] +Format: 74-min talk ; Q&A: BigBlueButton conference room Etherpad: <https://pad.emacsconf.org/2026-open-mic> +Etherpad: <https://pad.emacsconf.org/2026-open-mic> +Status: All done + + + + + +<div class="vid mainVideo"><video controls preload="none" id="mainVideo-open-mic"><source src="https://media.emacsconf.org/2026/emacsconf-2025-open-mic--open-session--participants--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2026/captions/emacsconf-2025-open-mic--open-session--participants--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 1:13:00 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2026-open-mic">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2026/emacsconf-2025-open-mic--open-session--participants--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2026/emacsconf-2025-open-mic--open-session--participants--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2026/emacsconf-2025-open-mic--open-session--participants--main.opus">Download --main.opus (23MB)</a></li><li><a href="https://media.emacsconf.org/2026/emacsconf-2025-open-mic--open-session--participants--main.png">Download --main.png</a></li><li><a href="https://media.emacsconf.org/2026/emacsconf-2025-open-mic--open-session--participants--main.vtt">Download --main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2026/emacsconf-2025-open-mic--open-session--participants--original.json">Download --original.json (1.3MB)</a></li><li><a href="https://media.emacsconf.org/2026/emacsconf-2025-open-mic--open-session--participants--original.tsv">Download --original.tsv</a></li><li><a href="https://media.emacsconf.org/2026/emacsconf-2025-open-mic--open-session--participants--original.txt">Download --original.txt</a></li><li><a href="https://media.emacsconf.org/2026/emacsconf-2025-open-mic--open-session--participants--original.vtt">Download --original.vtt</a></li><li><a href="https://toobnix.org/videos/watch/cffff616-e726-4bfc-aca4-4d3371ee96fd">View on Toobnix</a></li><li><a href="https://youtu.be/lnieSGyFRek">View on Youtube</a></li></ul></div></div> +# Description +<!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2026/info/open-mic-nav.md b/2026/info/open-mic-nav.md new file mode 100644 index 00000000..e7a12f9f --- /dev/null +++ b/2026/info/open-mic-nav.md @@ -0,0 +1,7 @@ + +<div class="talk-nav"> +Back to the [[talks]] +Previous by track: <a href="/2026/talks/sat-open">Saturday opening remarks</a> +Next by track: <a href="/2026/talks/sun-open">Sunday opening remarks</a> +Track: <span class="sched-track General">General</span> +</div> diff --git a/2026/info/sat-close-after.md b/2026/info/sat-close-after.md new file mode 100644 index 00000000..421a1bae --- /dev/null +++ b/2026/info/sat-close-after.md @@ -0,0 +1,10 @@ +<!-- Automatically generated by emacsconf-publish-after-page --> + + +Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202023%20sat-close%3A%20Saturday%20closing%20remarks%20%2F%20open%20session) + +---- +Got an idea for an EmacsConf talk or session? We'd love to hear from you! Check out the [[Call for Participation|/2026/cfp]] for details. + + +<!-- End of emacsconf-publish-after-page --> diff --git a/2026/info/sat-close-before.md b/2026/info/sat-close-before.md new file mode 100644 index 00000000..69d1c7fe --- /dev/null +++ b/2026/info/sat-close-before.md @@ -0,0 +1,13 @@ +<!-- Automatically generated by emacsconf-publish-before-page --> +[[!toc ]] +Format: 10-min talk ; Q&A: BigBlueButton conference room Etherpad: <https://pad.emacsconf.org/2026-sat-close> +Etherpad: <https://pad.emacsconf.org/2026-sat-close> +Status: Ready to stream + + + + + + +# Description +<!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2026/info/sat-close-nav.md b/2026/info/sat-close-nav.md new file mode 100644 index 00000000..57c37eff --- /dev/null +++ b/2026/info/sat-close-nav.md @@ -0,0 +1,7 @@ + +<div class="talk-nav"> +Back to the [[talks]] +Previous by track: <a href="/2026/talks/emacspeak">Multi-dimensional information processing with Emacs and Emacspeak: a blind man's perspective</a> +Next by track: <a href="/2026/talks/sun-close">Sunday closing remarks</a> +Track: <span class="sched-track General">General</span> +</div> diff --git a/2026/info/sat-open-after.md b/2026/info/sat-open-after.md new file mode 100644 index 00000000..45d9363f --- /dev/null +++ b/2026/info/sat-open-after.md @@ -0,0 +1,10 @@ +<!-- Automatically generated by emacsconf-publish-after-page --> + + +Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202023%20sat-open%3A%20Saturday%20opening%20remarks) + +---- +Got an idea for an EmacsConf talk or session? We'd love to hear from you! Check out the [[Call for Participation|/2026/cfp]] for details. + + +<!-- End of emacsconf-publish-after-page --> diff --git a/2026/info/sat-open-before.md b/2026/info/sat-open-before.md new file mode 100644 index 00000000..5efa8e55 --- /dev/null +++ b/2026/info/sat-open-before.md @@ -0,0 +1,13 @@ +<!-- Automatically generated by emacsconf-publish-before-page --> +[[!toc ]] +Format: 10-min talk ; Q&A: Etherpad +Etherpad: <https://pad.emacsconf.org/2026-sat-open> +Status: Waiting for video from speaker + + + + + + +# Description +<!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2026/info/sat-open-nav.md b/2026/info/sat-open-nav.md new file mode 100644 index 00000000..2eeefbd9 --- /dev/null +++ b/2026/info/sat-open-nav.md @@ -0,0 +1,6 @@ + +<div class="talk-nav"> +Back to the [[talks]] +Next by track: <a href="/2026/talks/open-mic">Open session</a> +Track: <span class="sched-track General">General</span> +</div> diff --git a/2026/info/sun-close-after.md b/2026/info/sun-close-after.md new file mode 100644 index 00000000..1d562979 --- /dev/null +++ b/2026/info/sun-close-after.md @@ -0,0 +1,10 @@ +<!-- Automatically generated by emacsconf-publish-after-page --> + + +Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202023%20sun-close%3A%20Sunday%20closing%20remarks) + +---- +Got an idea for an EmacsConf talk or session? We'd love to hear from you! Check out the [[Call for Participation|/2026/cfp]] for details. + + +<!-- End of emacsconf-publish-after-page --> diff --git a/2026/info/sun-close-before.md b/2026/info/sun-close-before.md new file mode 100644 index 00000000..44944f3a --- /dev/null +++ b/2026/info/sun-close-before.md @@ -0,0 +1,13 @@ +<!-- Automatically generated by emacsconf-publish-before-page --> +[[!toc ]] +Format: 10-min talk ; Q&A: BigBlueButton conference room Etherpad: <https://pad.emacsconf.org/2026-sun-close> +Etherpad: <https://pad.emacsconf.org/2026-sun-close> +Status: Ready to stream + + + + + + +# Description +<!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2026/info/sun-close-nav.md b/2026/info/sun-close-nav.md new file mode 100644 index 00000000..423413cf --- /dev/null +++ b/2026/info/sun-close-nav.md @@ -0,0 +1,6 @@ + +<div class="talk-nav"> +Back to the [[talks]] +Previous by track: <a href="/2026/talks/sat-close">Saturday closing remarks / open session</a> +Track: <span class="sched-track General">General</span> +</div> diff --git a/2026/info/sun-open-after.md b/2026/info/sun-open-after.md new file mode 100644 index 00000000..02a6db8b --- /dev/null +++ b/2026/info/sun-open-after.md @@ -0,0 +1,10 @@ +<!-- Automatically generated by emacsconf-publish-after-page --> + + +Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202023%20sun-open%3A%20Sunday%20opening%20remarks) + +---- +Got an idea for an EmacsConf talk or session? We'd love to hear from you! Check out the [[Call for Participation|/2026/cfp]] for details. + + +<!-- End of emacsconf-publish-after-page --> diff --git a/2026/info/sun-open-before.md b/2026/info/sun-open-before.md new file mode 100644 index 00000000..eae28632 --- /dev/null +++ b/2026/info/sun-open-before.md @@ -0,0 +1,13 @@ +<!-- Automatically generated by emacsconf-publish-before-page --> +[[!toc ]] +Format: 10-min talk ; Q&A: Etherpad +Etherpad: <https://pad.emacsconf.org/2026-sun-open> +Status: Waiting for video from speaker + + + + + + +# Description +<!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2026/info/sun-open-nav.md b/2026/info/sun-open-nav.md new file mode 100644 index 00000000..9cca63b6 --- /dev/null +++ b/2026/info/sun-open-nav.md @@ -0,0 +1,7 @@ + +<div class="talk-nav"> +Back to the [[talks]] +Previous by track: <a href="/2026/talks/open-mic">Open session</a> +Next by track: <a href="/2026/talks/emacspeak">Multi-dimensional information processing with Emacs and Emacspeak: a blind man's perspective</a> +Track: <span class="sched-track General">General</span> +</div> diff --git a/2026/organizers-notebook/index.org b/2026/organizers-notebook/index.org new file mode 100644 index 00000000..ce8846aa --- /dev/null +++ b/2026/organizers-notebook/index.org @@ -0,0 +1,997 @@ +# [[elisp:(progn (memoize 'emacsconf-get-talk-info "5 seconds") (condition-case nil (org-md-export-to-markdown) (error nil)) (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 [/2026/organizers-notebook/index.org](/2026/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 2025](/2025/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: + +| | | Days since previous milestone | +| CFP | [2026-06-27 Sat] | | +| CFP deadline | [2026-09-18 Fri] | 83 | +| Speaker notifications | [2026-09-25 Fri] | | +| Publish schedule | [2026-10-23 Fri] | | +| Video submission deadline | [2026-10-30 Fri] | 42 | +| EmacsConf day 1 | [2026-12-12 Sat] | 43 | +| EmacsConf | [2026-12-13 Sun] | 36 | +#+TBLFM: @3$3=@3$2-@2$2::@6$3=@6$2-@3$2::@7$3=@7$2-@6$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: +- [X] 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 Set up organizers notebook +CLOSED: [2026-07-02 Thu 11:35] +:LOGBOOK: +- State "DONE" from "TODO" [2025-06-17 Tue 10:41] +:END: + +** DONE Draft CFP +CLOSED: [2026-07-02 Thu 11:35] +: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 + +**** DONE Check with other organizers +CLOSED: [2026-07-02 Thu 11:35] +:PROPERTIES: +:CUSTOM_ID: phases-draft-cfp-check-with-other-organizers +:END: +**** DONE Update dates in emacsconf.el +CLOSED: [2026-07-02 Thu 11:35] + +[[file:~/proj/emacsconf/lisp/emacsconf.el]] +[[file:~/proj/emacsconf/lisp/emacsconf-erc.el]] +**** DONE Update conf topic +CLOSED: [2026-07-02 Thu 11:35] +[[file:~/proj/emacsconf/wiki/organizers-notebook/index.org::#phases-and-lessons-learned-draft-cfp-update-the-irc-topic][Update the IRC topic]] +**** DONE Remove draft marker +CLOSED: [2026-07-02 Thu 11:35] + +- [ ] cfp +- [ ] submit + +**** DONE Post CFP in the usual places +CLOSED: [2026-07-02 Thu 11:35] +:PROPERTIES: +:CUSTOM_ID: phases-draft-cfp-post-cfp-in-the-usual-places +:END: +- [ ] emacsconf-discuss +- [ ] reddit.com/r/emacs +- [ ] Emacs News +- [ ] emacs-tangents or info-gnu-emacs +- [ ] Mastodon +- [ ] Bluesky +- [ ] 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.svg" +(require 'emacsconf) +(require 'emacsconf-schedule) +(setq emacsconf-schedule-tracks + '((:label "Saturday" + :start "2026-12-12 9:00" + :end "2026-12-12 18:00" + :tracks ("General" "Development")) + (:label "Sunday" + :start "2026-12-13 9:00" + :end "2026-12-13 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 + emacsconf-schedule-validate-videos-fit-in-time + ))) + (setq emacsconf-schedule-plan + '(("GEN Saturday, Dec 6" :start "2026-12-12 09:00" :set-track "General") + sat-open + emacspeak + open-mic + (lunch :start "12:00") + sat-close + ("DEV Saturday, Dec 6" :start "2026-12-12 9:30" :set-track "Development") + (lunch :start "12:00") + ("GEN Sunday, Dec 7" :start "2026-12-13 09:00" :set-track "General") + sun-open + (lunch :start "12:00" :start "16:30") + (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 500 700 emacsconf-schedule-draft 'vertical))) + (with-temp-file (expand-file-name filename (expand-file-name "organizers-notebook" (expand-file-name emacsconf-year emacsconf-directory))) + (svg-print (emacsconf-schedule-svg 500 700 emacsconf-schedule-draft 'vertical)))) + ;; (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: +saturday closing remarks: Starts at 13:00 before 16:30 +sunday closing remarks: Starts at 13:00 before 16:30 +open-mic: video: 74, allocated 50 +:end: + +#+ATTR_ORG: :width 500 +[[file:schedule.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: + + +** Review rescheduled talks + +#+begin_src emacs-lisp :results table replace +(mapcar (lambda (o) + (list (plist-get o :slug) + (plist-get o :scheduled) + (plist-get o :emailed-schedule) + (emacsconf-schedule-difference-from-emailed o))) + (emacsconf-mail-rescheduled-talks)) +#+end_src + +For big changes, use emacsconf-mail-schedule-updates + + +** While speakers are working on their videos +*** TODO Send draft schedule :email: +SCHEDULED: <2026-09-25 Fri> +:PROPERTIES: +:CREATED: [2025-09-30 Tue 09:38] +:Effort: 0:30 +:END: +:LOGBOOK: +CLOCK: [2025-10-03 Fri 10:26]--[2025-10-03 Fri 11:07] => 0:41 +:END: + +*** TODO Send backstage and upload instructions :email: +:PROPERTIES: +:CREATED: [2025-09-30 Tue 09:39] +:END: +*** TODO Record pronunciations +*** TODO Post the schedule publicly +** While volunteers are working on captions +*** TODO E-mail speakers asking them to confirm the pronunciations :email: +SCHEDULED: <2026-12-01 Tue> +:PROPERTIES: +:CREATED: [2025-09-30 Tue 09:39] +:END: +*** Record intros and opening remarks +:PROPERTIES: +:CUSTOM_ID: intros +:END: + +**** TODO Record sat-open remarks :emacsconf:record: +:PROPERTIES: +:Effort: 0:30 +:CUSTOM_ID: phases-record-intros-and-opening-remarks-record-sat-open-remarks +:END: + +Welcome to EmacsConf 2025, 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/2025 , 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 2025. +**** 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 2025. +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/2025 , 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 2025. +*** TODO Generate assets +*** TODO Send check-in details :email: +*** TODO Ask libera.chat to increase IRC limit +** After the conference +*** TODO Send thanks and follow-up questions :email: +** TODO Confirm shifts +SCHEDULED: <2026-12-01 Tue> +:PROPERTIES: +:CUSTOM_ID: shifts +:CREATED: [2025-11-15 Sat 15:20] +:END: +:LOGBOOK: +- Note taken on [2025-11-22 Sat 17:35] \\ + probably fine for this year +: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 6 2025 + +#+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 7 2025 + +#+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/corwin | sachac | sachac | | | sachac | +| Gen PM | 13:00 | 17:00 | zaeph/corwin | sachac | sachac | | | 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 "2025-12-06") + (list "sun" sun "2025-12-07")))))) + +#+end_src + +#+RESULTS: +:results: +(setq emacsconf-shifts (list (list :id "sat-am-gen" :track "General" :start "2025-12-06T09:00:00-0500" :end "2025-12-06T12:00:00-0500" :host "zaeph" :streamer "sachac" :checkin "sachac" :coord "sachac") (list :id "sat-pm-gen" :track "General" :start "2025-12-06T13:00:00-0500" :end "2025-12-06T17:00:00-0500" :host "zaeph" :streamer "sachac" :checkin "sachac" :coord "sachac") (list :id "sat-am-dev" :track "Development" :start "2025-12-06T10:00:00-0500" :end "2025-12-06T12:00:00-0500" :host "corwin" :streamer "sachac" :checkin "sachac" :coord "sachac") (list :id "sat-pm-dev" :track "Development" :start "2025-12-06T13:00:00-0500" :end "2025-12-06T17:00:00-0500" :host "corwin" :streamer "sachac" :checkin "sachac" :coord "sachac") (list :id "sun-am-gen" :track "General" :start "2025-12-07T09:00:00-0500" :end "2025-12-07T12:00:00-0500" :host "zaeph/corwin" :streamer "sachac" :checkin "sachac" :coord "sachac") (list :id "sun-pm-gen" :track "General" :start "2025-12-07T13:00:00-0500" :end "2025-12-07T17:00:00-0500" :host "zaeph/corwin" :streamer "sachac" :checkin "sachac" :coord "sachac"))) +:end: + + +* TODO [#A] Check EmacsConf infrastructure +SCHEDULED: <2026-10-01 Thu> +:PROPERTIES: +:CUSTOM_ID: check-emacsconf-infrastructure +:CREATED: [2026-05-13 Wed 11:08] +:END: + +- [ ] IRC +- [ ] Streaming assets +- [ ] Publishing to the wiki +- [ ] Web conference +- [ ] OBS +- [ ] Publishing to the media server +- [ ] Etherpad +- [ ] Streaming +- [ ] Toobnix +- [ ] YouTube +- [ ] Mumble: Can join from my phone, can speak on stream + +** BigBlueButton +:PROPERTIES: +:CREATED: [2024-11-02 Sat 11:38] +:CUSTOM_ID: check-emacsconf-infrastructure-bigbluebutton +:END: + +- Plan: Scale up the bbb.emacsverse.org on Sacha's Linode account +- [[https://emacsconf.org/2024/organizers-notebook/#check-emacsconf-infrastructure-bigbluebutton][Installation notes from last year]] + +*** TODO Create meeting rooms for each speaker +: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: + +[[file:~/proj/emacsconf/wiki/organizers-notebook/index.org::#general-infrastructure-bigbluebutton-creating-talk-bbb-rooms][Creating talk BBB rooms]] + +*** TODO Back up after the conference +:PROPERTIES: +:CUSTOM_ID: check-emacsconf-infrastructure-bigbluebutton-notes-backing-up +:CREATED: [2025-06-17 Tue 10:34] +:END: + +[[file:~/proj/emacsconf/wiki/organizers-notebook/index.org::#general-infrastructure-bigbluebutton-backing-up-bbb][Backing up BBB]] + +*** TODO Set up moderator access codes for all the meeting rooms, and make it so people can start the meeting +:PROPERTIES: +: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: + +[[file:~/proj/emacsconf/wiki/organizers-notebook/index.org::#general-infrastructure-bigbluebutton-setting-up-moderator-access-codes][Setting up moderator access codes]] +*** TODO Check BBB audio from my phone +:PROPERTIES: +:CUSTOM_ID: check-emacsconf-infrastructure-bigbluebutton-check-bbb-audio-from-my-phone +:END: +*** Customize BigBlueButton branding +**** 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: +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: + +On front0: +cd ~thelounge; sudo -u thelounge nohup node /usr/bin/thelounge start + +*** TODO Ask libera.chat to increase connections allowed from chat.emacsconf.org on Dec 6 and 7 +: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: +[[file:~/proj/emacsconf/wiki/organizers-notebook/index.org::#general-infrastructure-irc-web-client][IRC web client]] +** IRC announcements +:PROPERTIES: +:CUSTOM_ID: check-emacsconf-infrastructure-irc-announcements +:END: +*** TODO Confirm manual IRC announcements +: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 +:PROPERTIES: +: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: + +emacsconf-stream-generate-test-videos + +*** 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 Try upgrading to 2.x +:PROPERTIES: +:Effort: 2:00 +:END: +:LOGBOOK: +CLOCK: [2025-09-22 Mon 12:46] +:END: + +https://galaxy.ansible.com/ui/repo/published/s3lph/pads/content/role/etherpad/ +[[emacsconf-ansible:roles/pad/tasks/main.yml]] + +nodemon -e yml -w ../../roles/pad/tasks/main.yml -x "vagrant up --provision" + +http://pad.emacsconf.org.vagrant/ + +Progress: +http://pad.emacsconf.org.vagrant:9001/p/2025-hyperboleqa works +http://pad.emacsconf.org.vagrant/p/2025-hyperboleqa works now that I passthrough .js + + +http://pad.emacsconf.org.vagrant/padbootstrap-rLLvrD2UOFI.min.js +*** 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 +:PROPERTIES: +:CUSTOM_ID: check-emacsconf-infrastructure-do-a-dry-run +:END: +*** TODO Generate all the test assets +:PROPERTIES: +:Effort: 0:15 +:CUSTOM_ID: check-emacsconf-infrastructure-do-a-dry-run-generate-all-the-test-assets +:END: +*** TODO Test connecting to VNC and streaming via OBS :emacsconf: +:PROPERTIES: +:CUSTOM_ID: check-emacsconf-infrastructure-do-a-dry-run-test-connecting-to-vnc-and-streaming-via-obs +:CREATED: [2025-11-07 Fri 13:52] +:END: +** Resizing +:PROPERTIES: +:CUSTOM_ID: check-emacsconf-infrastructure-resizing +:END: + +live0: 64GB +front0: 32GB +meet: 64GB + +*** TODO [#A] Resize nodes before production +SCHEDULED: <2026-12-11 Fri> +:PROPERTIES: +:CUSTOM_ID: check-emacsconf-infrastructure-resizing-resize-nodes-before-production +:CREATED: [2026-07-04 Sat 10:39] +:END: + +live0: 64GB +front0: 32GB +meet: 64GB + +*** TODO [#A] Resize nodes after production +SCHEDULED: <2026-12-13 Sun> +:PROPERTIES: +:CUSTOM_ID: check-emacsconf-infrastructure-resizing-resize-nodes-after-production +:CREATED: [2026-07-04 Sat 10:39] +:END: + +live0: nanode +front0: nanode +*** TODO [#A] Resize meet after production +SCHEDULED: <2026-12-13 Sun> +:PROPERTIES: +:CUSTOM_ID: check-emacsconf-infrastructure-resizing-resize-meet-after-production +:CREATED: [2026-07-04 Sat 10:39] +: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 | +** Uploading videos +*** YouTube + +emacsconf-publish-youtube-step-through-publishing + + +*** Toobnix + +* Decisions +:PROPERTIES: +:CUSTOM_ID: decisions +:END: +* Support code +:PROPERTIES: +:CUSTOM_ID: support-code +:END: + +#+begin_src emacs-lisp :results silent +(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 + +#+RESULTS: +:results: +my-org-md-link +:end: diff --git a/2026/organizers-notebook/schedule.svg b/2026/organizers-notebook/schedule.svg new file mode 100644 index 00000000..f3fc6c61 --- /dev/null +++ b/2026/organizers-notebook/schedule.svg @@ -0,0 +1 @@ +<svg width="500" height="700" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><title>Graphical view of the schedule</title><g transform="translate(0,0)"><title>Schedule for Saturday</title><rect width="250" height="700" x="0" y="0" fill="white"></rect><text font-size="10" fill="black" y="30" x="3">Saturday</text><a href="https://emacsconf.org/2026/talks/sat-open" title="Saturday opening remarks" data-slug="sat-open"><title> 9:00- 9:10 Saturday opening remarks</title><rect x="40" y="40" opacity="0.8" width="84" height="13" stroke="black" stroke-dasharray="5,5,5" fill="gray"></rect><g transform="translate(40,51)"><text fill="black" x="0" y="0" font-size="10" transform="nil">sat-open</text></g></a><a href="https://emacsconf.org/2026/talks/emacspeak" title="Multi-dimensional information processing with Emacs and Emacspeak: a blind man's perspective" data-slug="emacspeak"><title> 9:10- 9:40 Multi-dimensional information processing with Emacs and Emacspeak: a blind man's perspective</title><rect x="40" y="53" opacity="0.8" width="84" height="41" stroke="black" stroke-dasharray="5,5,5" fill="gray"></rect><g transform="translate(40,92)"><text fill="black" x="0" y="0" font-size="10" transform="nil">emacspeak</text></g></a><a href="https://emacsconf.org/2026/talks/open-mic" title="Open session" data-slug="open-mic"><title> 9:50-10:40 Open session</title><rect x="40" y="108" opacity="0.8" width="84" height="68" stroke="black" stroke-dasharray="" fill="gray"></rect><g transform="translate(40,174)"><text fill="black" x="0" y="0" font-size="10" transform="nil">open-mic</text></g></a><a href="https://emacsconf.org/2026/talks/sat-close" title="Saturday closing remarks / open session" data-slug="sat-close"><title> 1:00- 1:10 Saturday closing remarks / open session</title><rect x="40" y="369" opacity="0.8" width="84" height="13" stroke="black" stroke-dasharray="" fill="gray"></rect><g transform="translate(40,380)"><text fill="black" x="0" y="0" font-size="10" transform="nil">sat-close</text></g></a><g transform="translate(3,40)"><line stroke="darkgray" x1="40" y1="0" x2="210" y2="0"></line><text fill="black" x="0" y="0" font-size="10" dy=".4em">9 AM</text></g><g transform="translate(3,122)"><line stroke="darkgray" x1="40" y1="0" x2="210" y2="0"></line><text fill="black" x="0" y="0" font-size="10" dy=".4em">10 AM</text></g><g transform="translate(3,204)"><line stroke="darkgray" x1="40" y1="0" x2="210" y2="0"></line><text fill="black" x="0" y="0" font-size="10" dy=".4em">11 AM</text></g><g transform="translate(3,287)"><line stroke="darkgray" x1="40" y1="0" x2="210" y2="0"></line><text fill="black" x="0" y="0" font-size="10" dy=".4em">12 PM</text></g><g transform="translate(3,369)"><line stroke="darkgray" x1="40" y1="0" x2="210" y2="0"></line><text fill="black" x="0" y="0" font-size="10" dy=".4em">1 PM</text></g><g transform="translate(3,451)"><line stroke="darkgray" x1="40" y1="0" x2="210" y2="0"></line><text fill="black" x="0" y="0" font-size="10" dy=".4em">2 PM</text></g><g transform="translate(3,534)"><line stroke="darkgray" x1="40" y1="0" x2="210" y2="0"></line><text fill="black" x="0" y="0" font-size="10" dy=".4em">3 PM</text></g><g transform="translate(3,616)"><line stroke="darkgray" x1="40" y1="0" x2="210" y2="0"></line><text fill="black" x="0" y="0" font-size="10" dy=".4em">4 PM</text></g><g transform="translate(3,698)"><line stroke="darkgray" x1="40" y1="0" x2="210" y2="0"></line><text fill="black" x="0" y="0" font-size="10" dy=".4em">5 PM</text></g></g><g transform="translate(250,0)"><title>Schedule for Sunday</title><rect width="250" height="700" x="0" y="0" fill="white"></rect><text font-size="10" fill="black" y="30" x="3">Sunday</text><a href="https://emacsconf.org/2026/talks/sun-open" title="Sunday opening remarks" data-slug="sun-open"><title> 9:00- 9:10 Sunday opening remarks</title><rect x="40" y="40" opacity="0.8" width="84" height="13" stroke="black" stroke-dasharray="5,5,5" fill="gray"></rect><g transform="translate(40,51)"><text fill="black" x="0" y="0" font-size="10" transform="nil">sun-open</text></g></a><a href="https://emacsconf.org/2026/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"><title> 1:00- 1:10 Sunday closing remarks</title><rect x="40" y="369" opacity="0.8" width="84" height="13" stroke="black" stroke-dasharray="" fill="gray"></rect><g transform="translate(40,380)"><text fill="black" x="0" y="0" font-size="10" transform="nil">sun-close</text></g></a><g transform="translate(3,40)"><line stroke="darkgray" x1="40" y1="0" x2="210" y2="0"></line><text fill="black" x="0" y="0" font-size="10" dy=".4em">9 AM</text></g><g transform="translate(3,122)"><line stroke="darkgray" x1="40" y1="0" x2="210" y2="0"></line><text fill="black" x="0" y="0" font-size="10" dy=".4em">10 AM</text></g><g transform="translate(3,204)"><line stroke="darkgray" x1="40" y1="0" x2="210" y2="0"></line><text fill="black" x="0" y="0" font-size="10" dy=".4em">11 AM</text></g><g transform="translate(3,287)"><line stroke="darkgray" x1="40" y1="0" x2="210" y2="0"></line><text fill="black" x="0" y="0" font-size="10" dy=".4em">12 PM</text></g><g transform="translate(3,369)"><line stroke="darkgray" x1="40" y1="0" x2="210" y2="0"></line><text fill="black" x="0" y="0" font-size="10" dy=".4em">1 PM</text></g><g transform="translate(3,451)"><line stroke="darkgray" x1="40" y1="0" x2="210" y2="0"></line><text fill="black" x="0" y="0" font-size="10" dy=".4em">2 PM</text></g><g transform="translate(3,534)"><line stroke="darkgray" x1="40" y1="0" x2="210" y2="0"></line><text fill="black" x="0" y="0" font-size="10" dy=".4em">3 PM</text></g><g transform="translate(3,616)"><line stroke="darkgray" x1="40" y1="0" x2="210" y2="0"></line><text fill="black" x="0" y="0" font-size="10" dy=".4em">4 PM</text></g><g transform="translate(3,698)"><line stroke="darkgray" x1="40" y1="0" x2="210" y2="0"></line><text fill="black" x="0" y="0" font-size="10" dy=".4em">5 PM</text></g></g></svg>
\ No newline at end of file diff --git a/2026/prepare.md b/2026/prepare.md new file mode 100644 index 00000000..9f224ea1 --- /dev/null +++ b/2026/prepare.md @@ -0,0 +1,313 @@ +[[!meta title="Preparing your talk"]] +[[!meta copyright="Copyright © 2019, 2020 Amin Bandali; 2021, 2022 Amin Bandali, Sacha Chua, Leo Vivier; 2023-2026 Sacha Chua"]] + +This page contains tips for preparing your talk. (Target date: on or before +**October 30, 2026**) If you have any questions, concerns, or suggestions +please feel free to write to one our organizational mailing lists: the +public <emacsconf-org@gnu.org> list, or the private +<emacsconf-org-private@gnu.org> list, depending on the nature of the +matter you would like to discuss. + +Note: being part of a wiki, this page is subject to change (including +by you!); so please check back every now and again for any changes and +updates. + +We'll bring up the web-based upload service at some point. Let us know +at <emacsconf-org-private@gnu.org> if you're already ready to go! +<!--[[Already done? Upload your video and other files|upload]]--> + +## Guidelines for conduct + +Please review our [[guidelines for conduct|conduct]] when preparing your +talk to make sure we’re all on the same page and strive to make the +event a great experience for all. If you’re not sure whether your talk +or presentation style meets the guidelines laid out in the guidelines +for conduct, we’d be happy to help. You can email Sacha Chua at +<sacha@sachachua.com> to chat more about this. + +## Recording your talk + +To help EmacsConf 2026 run smoothly, please prerecord your talk, and +plan to upload your video(s) by **October 30, 2026** to allow us enough time +to do any needed processing (e.g. format or codec conversion) in +preparation for the event. Please consider submitting a prerecording as +early as possible so that we can see if volunteers can caption your +video to make it more accessible and searchable. + +To make it easier for people to orient themselves +when listening to lots of EmacsConf videos in the +playlist, you may want to start your video with +something along the lines of: + +"Hi! I’m ${NAME} and I’ll be talking about ${TOPIC}." + +We'll also try to record a brief introduction for +your talk with enough time for you to review the +pronunciation. + +### Appearance + +The talks will be broadcast with a resolution of **1280x720px** +(720p), so it may help to switch to that size before you record. +Please make sure your text will be easy to read. +[You can change the font-size in your Emacs.](https://www.emacswiki.org/emacs/SetFonts#h5o-6) +(Maybe `M-x customize-face default` and set the height to 150 or more, depending on your resolution?) If you +are capturing a single window, you can also resize it before you +record. + +We recommend using **dark text on a light background** for your +recording, as this can be easier to see especially for people who are +visually impaired. Themes with more contrast are easier to read than +low-contrast ones. If you use a dark theme with your Emacs, you can +change to a lighter one with `M-x customize-theme` (look for those +with a `-light` suffix). The `modus-themes-load-operandi` command from +the `modus-themes` package can be a good option. + +### Audio quality + +Audio quality can go a long way in making your talk enjoyable to +watch. Consider the background noise in the room that you are using to +record, and see if you can temporarily turn off things for your +recording. + +You can help us try to denoise the audio by +providing a recording of at least **5 seconds of +quiet** in the same room in which you plan to do +your main recording. You can listen to it to see +how quiet things are, and figure out if there are +other things you can turn off such as fans or +other computers. We can try to use the noise +profile from that recording to reduce the noise in +your presentation. + +If you have an **external microphone or a +headset**, try recording the audio through that so +that you can reduce the sound of the computer +itself. If you have a smartphone, that might also +be a good way to record audio that you can then +combine with your video afterwards. + +Many speakers prefer to record and edit the audio until they're happy +with how it fits in the time, and then add the slides or videos +afterwards. It might be easier than trying to do both the audio and +the video in one go. + +### Tools + +You can use your favorite video recording tool. If you don't have one yet, you can try +any of the following pieces of free software, depending on your needs: + +- [OBS](//obsproject.com) +- [SimpleScreenRecorder](//www.maartenbaert.be/simplescreenrecorder/) +- [vokoscreenNG](//linuxecke.volkoh.de/vokoscreen/vokoscreen.html) +- [peek](//github.com/phw/peek) +- [ffmpeg](//trac.ffmpeg.org/wiki/Capture/Desktop) + +If you decide to use OBS, please make sure to verify the window-capture +options. Most notably, there is a “Swap red and blue” option that is +necessary for some setups, and it's easy to miss it. + +You might find the following free software programs useful for editing +your video recordings: + +- [Kdenlive](//kdenlive.org/en/) +- [Blender](//www.blender.org) +- [Pitivi](http://www.pitivi.org) + +Per GNU Project’s [Guide to +Formats](//audio-video.gnu.org/docs/formatguide.html), we prefer to +receive prerecorded videos in formats unencumbered by software patents, +such as `video/webm` ([WebM](https://www.webmproject.org/)-encoded video +files, with `.webm` file extension) and `video/ogg` (video files encoded +with the Theora video codec, encapsulated in an Ogg transport layer, +with `.ogg` or `.ogv` file extension). However, if for one reason or +another you are unable to send us your prerecorded video in one of the +above formats, you may submit them in other common formats, like MPEG-4 +(`.mp4`), and we will convert them to our preferred formats on your +behalf. + +*Prepare recorded video in 720p (1280px by 720px) or higher, in the +WebM format if possible.* + + +# Compression + +If you would like to compress your video before uploading, the following shell script may be useful: + + Q=32 + CPU=8 + ffmpeg -y -i "$1" -c:v libvpx-vp9 -b:v 0 -crf $Q -an -row-mt 1 -tile-columns 2 -tile-rows 2 -cpu-used $CPU -g 240 -pass 1 -f webm -threads $CPU /dev/null && + ffmpeg -y -i "$1" -c:v libvpx-vp9 -b:v 0 -crf $Q -c:a libopus -row-mt 1 -tile-columns 2 -tile-rows 2 -cpu-used $CPU -pass 2 -g 240 -threads $CPU "$2" + +If you put it in a file called `compress-video.sh`, you can execute it +from the command line with something like `sh compress-video.sh +input-file.webm output-file.webm`. It will compress the file in two +passes. During the first pass, the frame count will increase, but the +speed will be 0. After the first pass, it will display proper progress +information. + +<a name="tech-check"></a> +# Tech-check + +We ask that speakers who plan to participate in live Q&A sessions schedule +a short tech-check in the weeks leading to the conference; this is to ensure +that you can perform all the common tasks you’d need such as sharing your +screen or toggling your microphone. + +We use BigBlueButton for our video-conferencing +needs, and we'll send you a URL to your own +BigBlueButton room close to the conference. Tiling +window managers and multi-monitor setups can be a +little tricky, so it's good to figure out a setup +that works for you. If there are things you'd like +to confirm by having another person in the +meeting, such as audio quality, please feel free +to get in touch with us and we’ll sort things out +together. + +Thank you so much for helping with EmacsConf 2026! + +# Frequently-asked questions + +## Can I present live? + +We’d prefer that all talks have prerecorded +videos. + +- It's a lot less stressful for both +presenters and organizers. +- Videos can be immediately available for playback once your session starts. +- We can work on getting the video captioned for better accessibility. + +If you really need or want to present live, +though, let us know and we'll figure that out. + +There will also be time for live questions and +answers, so if you can record a short video +covering your main points, you might be able to go +into more detail in live Q&A. + +## My presentation is over/under the time I proposed. Do I need to stress out about it? + +No need to stress out about it. If it's a little +over or under, we'll adjust the Q&A accordingly. + +If you find that your talk is much shorter than +anticipated, let us know and we can adjust the +schedule. + +If there's so much you want to talk about and you +can't decide what to squeeze in, maybe you can +think of your video as a short teaser that can get +people interested and point them to where they can +find out more. You can email +<emacsconf-submit@gnu.org> links and other notes +to add to the wiki page for your talk. If you’d +like to record a longer video *in addition* to the +short one for the main conference, please feel +free to send us that too. + +Additionally, even though it is tempting, please refrain from speaking +super quickly or fast-forwarding your recording to make it fit within +the format. Trimming out the silences and the filler words can help +sometimes, but a better solution for you might be to condense your +talk to the essentials, then write, record, and edit your voice-over. +Once you've figured out how to use the time, you can record your video +to go along with it. Don't sweat being a few minutes over or under, +that's cool. + +Feel free to send some questions for the host to ask you during the +Q&A so that you can address extra points that didn't make it into the +video. + +## What if there are lots of great questions during Q&A and it's already time for the next talk? + +The stream will move on to the next talk, but people can join the +BigBlueButton meeting room and keep chatting with you for as long as +you want to keep going. You can also continue answering questions on +the collaborative pad or IRC, and we’ll copy questions and answers +onto the wiki page afterwards so that you can answer them in your own +time after the event. + +## Do I need to follow some visual guidelines for the presentation? + +- Dark text on a light background is more legible than the opposite + (especially for people who are visually impaired), and more contrast + is better than a low-contrast theme. This stands for both your + slides and your Emacs theme. +- If you think your fonts might be too small in your slides or in Emacs, + they might very well be. [You can change the font-size in your + Emacs](https://www.emacswiki.org/emacs/SetFonts#h5o-6), but you can + also play with the size of the captured window during your recording. +- Try to minimize the screen-flashes that occur when you switch between + windows, especially if their themes do not cohere (light-to-dark and + the reverse). If you can edit your recording, fades and other + transitions are a neat solution to this problem. + +## How do I show my keystrokes on screen? + +In Emacs, you can use +[interaction-log.el](https://github.com/emacsattic/interaction-log) +(in MELPA) to display the keystrokes and the commands they run in a separate +buffer. For a system-wide solution, you can look into +[screenkey](https://gitlab.com/screenkey/screenkey). + +## I’m not used to talking to myself. Can I present the talk to someone? + +We might be able to help you record your talk using the BigBlueButton +web conferencing system before the conference. Please email +<emacsconf-submit@gnu.org> with some times that might work for you and +we’ll see if a volunteer can meet up with you to record it. + +## Can I see the other proposed talks? + +Once we’ve emailed the speakers about their acceptance, we’ll put +up the talk wiki pages. That way, you can see what else is going on +in the conference and maybe coordinate with other speakers in order to +minimize overlap and maximize awesomeness. + +## Do you have an Org TODO I can just copy into my agenda file? + +Sure, modify this as needed: + +``` +* TODO Record presentation for EmacsConf: Title goes here +DEADLINE: <2026-10-30 Fri> + +- 1280x720px +- large text; ideally dark text on a light background +- minimize background noise + - try to use an external microphone if possible (ex: backup audio recording with phone) + - consider recording ~5 seconds of silence in the room you're planning to record in + +https://emacsconf.org/2026/prepare - tips and instructions + +Questions: +- public: mailto:emacsconf-org@gnu.org +- private: mailto:emacsconf-org-private@gnu.org + +Note: 2026-10-30 is a target date and we'd love to +get your video by then. It's not a *deadline* +deadline, so don't stress out if life happens. +Just let us know! + +Thanks for sharing what you're learning! +``` + +## More questions? + +Please email <emacsconf-submit@gnu.org>. We’d love to hear from you. + +Thanks for contributing to EmacsConf 2026! + +<!-- <a name="tech-checklist"></a> --> +<!-- #### Tech checklist --> + +<!-- - Can you speak and be heard? Is there echo? --> +<!-- - Can you hear the organizer? --> +<!-- - Can you share your screen? Is the screen readable? --> +<!-- - If you plan to show your keystrokes, is that display visible? --> +<!-- - If you want to share your webcam (optional), can you enable it? Is it visible? Will there likely be distractions in the background? --> +<!-- - Can you view the collaborative pad? Will you be comfortable reviewing questions on your own (perhaps by keeping it open beside your shared window), or will you need a volunteer to relay questions to you? --> +<!-- - Can you share contact information (ex: phone number) so that we can get in touch with you in case of technical issues or scheduling changes? --> +<!-- - Do you need help finding your way around IRC so that you can check into `#emacsconf-org`? What is your IRC nickname? --> diff --git a/2026/schedule-details.md b/2026/schedule-details.md new file mode 100644 index 00000000..7fa09293 --- /dev/null +++ b/2026/schedule-details.md @@ -0,0 +1,13 @@ +Jump to: <a href="#dev">Development</a> + +<h1 id="gen" class="sched-track General">General (6 talks)</h1> +[[!template id=sched title="""Saturday opening remarks""" url="""/2026/talks/sat-open""" speakers="""Sacha Chua""" watch="""https://emacsconf.org/2026/watch/gen""" slug="""sat-open""" note=""""""]] +[[!template id=sched title="""Open session""" url="""/2026/talks/open-mic""" speakers="""Participants""" watch="""https://emacsconf.org/2026/watch/gen""" slug="""open-mic""" note="""video posted, video: 1:13:00"""]] +[[!template id=sched title="""Sunday opening remarks""" url="""/2026/talks/sun-open""" speakers="""Sacha Chua""" watch="""https://emacsconf.org/2026/watch/gen""" slug="""sun-open""" note=""""""]] +[[!template id=sched title="""Multi-dimensional information processing with Emacs and Emacspeak: a blind man's perspective""" url="""/2026/talks/emacspeak""" watch="""https://emacsconf.org/2026/watch/gen""" slug="""emacspeak""" note=""""""]] +[[!template id=sched title="""Saturday closing remarks / open session""" url="""/2026/talks/sat-close""" watch="""https://emacsconf.org/2026/watch/gen""" slug="""sat-close""" note=""""""]] +[[!template id=sched title="""Sunday closing remarks""" url="""/2026/talks/sun-close""" watch="""https://emacsconf.org/2026/watch/gen""" slug="""sun-close""" note=""""""]] + +Jump to: <a href="#gen">General</a> + +<h1 id="dev" class="sched-track Development">Development (0 talks)</h1> diff --git a/2026/submit.md b/2026/submit.md new file mode 100644 index 00000000..27261da4 --- /dev/null +++ b/2026/submit.md @@ -0,0 +1,81 @@ +[[!meta title="Submit a proposal"]] +[[!meta copyright="Copyright © 2019, 2020 Amin Bandali<br /> +Copyright 2021 Amin Bandali, Sacha Chua, Leo Vivier<br /> +Copyright 2022 Amin Bandali<br /> +Copyright 2023-2026 Sacha Chua"]] + +When you're ready to submit your proposal, send your submission via +email to <emacsconf-submit@gnu.org> by **Friday, September 18, 2026**. +All speakers will be notified by Friday, September 25 (or earlier) +regarding the status of their proposal. If you don't get a message, +please follow up with us. If your talk is accepted, please plan to put +together your prerecorded video by Friday, October 30, 2026 so that we +can normalize all the audio and see if we can transcribe the talk. + +If you put your talk title in your submission e-mail's subject line, +it'll be easier to keep track of the conversation. Please use the +following template for your submission email: + +``` +Talk title: + + +Talk description (<= 500 words): + + + + + + + + +Format (10 minutes, 20 minutes, description of other format) and outline: + +Introduction for you and your talk (<= 100 words): + +Speaker name (and optional pronunciation) and preferred pronouns: + +Speaker availability (times and time zones that you're available Dec 12-13; +ex: after 1pm America/Toronto both Sat and Sun): + +Preferred Q&A approach (live web conference, IRC, pad, wiki, and/or e-mail questions after the event): + +Public contact information (IRC nick, e-mail, website, and/or social media): + +Private emergency contact information (phone number or messaging) in +case we need to reach you due to technical difficulties (optional): + +Please include this speaker release in order to indicate your agreement with it. + + By submitting this proposal, I agree that my presentation at + EmacsConf 2025 is subject to the following terms and conditions: + + The EmacsConf organizers may capture audio and video (a "Recording") + of my presentation and any associated materials, which may include + slides, notes, transcripts, and prerecording(s) of my presentation + that I provide to the EmacsConf organizers. + + I authorize the EmacsConf organizers to distribute, reproduce, + publicly display, and prepare derivative works of the Recording and + any derivative works of the Recording (the "Licensed Materials") + under the terms of the Creative Commons Attribution-ShareAlike 4.0 + International (CC BY-SA 4.0) license. + + I grant to the EmacsConf organizers permission to use my name, + likeness, and biographic information in association with their use + of the Licensed Materials under the above license. + + I represent that I have the authority to grant the above license to + the EmacsConf organizers. If my presentation incorporates any + material owned by third parties, I represent that the material is + sublicensable to the EmacsConf organizers or that my use of them is + fair use. +``` + +For other details, see the [[call for participation|cfp]]. + +You can subscribe to the +[emacsconf-discuss mailing list](https://lists.gnu.org/mailman/listinfo/emacsconf-discuss) +for discussions and announcements about EmacsConf 2026. + +We look forward to your ideas and submissions. Thank you! diff --git a/2026/talks.md b/2026/talks.md new file mode 100644 index 00000000..ab27161d --- /dev/null +++ b/2026/talks.md @@ -0,0 +1,12 @@ +We're getting ready for EmacsConf 2026. Want to propose a talk? +[[Check out our call for participation|/2026/cfp]] and submit your proposal +by Friday, September 18, 2026! + +Here are some of the talks we've accepted so far: + +[[!inline pages="internal(2026/schedule-details)" raw="yes"]] + +Want to help make EmacsConf even awesomer? [[Volunteer!|/volunteer]] + +We hope to see you all around on Dec 12-13 for EmacsConf 2026! + diff --git a/2026/talks/emacspeak.md b/2026/talks/emacspeak.md new file mode 100644 index 00000000..c96fd0b5 --- /dev/null +++ b/2026/talks/emacspeak.md @@ -0,0 +1,30 @@ +[[!meta title="Multi-dimensional information processing with Emacs and Emacspeak: a blind man's perspective"]] +[[!meta copyright="Copyright © 2026 Arkadiusz"]] +[[!inline pages="internal(2026/info/emacspeak-nav)" raw="yes"]] + +<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing --> +<!-- You can manually edit this file to update the abstract, add links, etc. ---> + + +# Multi-dimensional information processing with Emacs and Emacspeak: a blind man's perspective +Arkadiusz (Nuno) - <https://swietnicki.dev> + +[[!inline pages="internal(2026/info/emacspeak-before)" raw="yes"]] + +Emacs is a tool that is extremely suitable to be operated by a fully +blind person. In this talk I would like to demonstrate one of its +strongest features, which is audio font locking. Using this mechanism +the user can get information in two dimensions, that is: "Information +snippet" as well as its metadata, carried by the font. In this talk, I +would like to briefly compare how blind people retrieve information +versus how the sighted do it, then briefly compare Emacs to other +traditional tools. At the end I am going to showcase a couple of +practical points: messages management with Telega, file navigation with +Dired and retrieving contact data with BBDB, all while using only speech +and sounds. + +[[!inline pages="internal(2026/info/emacspeak-after)" raw="yes"]] + +[[!inline pages="internal(2026/info/emacspeak-nav)" raw="yes"]] + + diff --git a/2026/talks/open-mic.md b/2026/talks/open-mic.md new file mode 100644 index 00000000..333909f2 --- /dev/null +++ b/2026/talks/open-mic.md @@ -0,0 +1,21 @@ +[[!meta title="Open session"]] +[[!meta copyright="Copyright © 2026 Participants"]] +[[!inline pages="internal(2026/info/open-mic-nav)" raw="yes"]] + +<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing --> +<!-- You can manually edit this file to update the abstract, add links, etc. ---> + + +# Open session +Participants + +[[!inline pages="internal(2026/info/open-mic-before)" raw="yes"]] + + + + +[[!inline pages="internal(2026/info/open-mic-after)" raw="yes"]] + +[[!inline pages="internal(2026/info/open-mic-nav)" raw="yes"]] + + diff --git a/2026/talks/sat-close.md b/2026/talks/sat-close.md new file mode 100644 index 00000000..12eeb9f2 --- /dev/null +++ b/2026/talks/sat-close.md @@ -0,0 +1,21 @@ +[[!meta title="Saturday closing remarks / open session"]] +[[!meta copyright="Copyright © 2026 ${speakers}"]] +[[!inline pages="internal(2026/info/sat-close-nav)" raw="yes"]] + +<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing --> +<!-- You can manually edit this file to update the abstract, add links, etc. ---> + + +# Saturday closing remarks / open session + + +[[!inline pages="internal(2026/info/sat-close-before)" raw="yes"]] + + + + +[[!inline pages="internal(2026/info/sat-close-after)" raw="yes"]] + +[[!inline pages="internal(2026/info/sat-close-nav)" raw="yes"]] + + diff --git a/2026/talks/sat-open.md b/2026/talks/sat-open.md new file mode 100644 index 00000000..d67255b4 --- /dev/null +++ b/2026/talks/sat-open.md @@ -0,0 +1,21 @@ +[[!meta title="Saturday opening remarks"]] +[[!meta copyright="Copyright © 2026 Sacha Chua"]] +[[!inline pages="internal(2026/info/sat-open-nav)" raw="yes"]] + +<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing --> +<!-- You can manually edit this file to update the abstract, add links, etc. ---> + + +# Saturday opening remarks +Sacha Chua + +[[!inline pages="internal(2026/info/sat-open-before)" raw="yes"]] + + + + +[[!inline pages="internal(2026/info/sat-open-after)" raw="yes"]] + +[[!inline pages="internal(2026/info/sat-open-nav)" raw="yes"]] + + diff --git a/2026/talks/sun-close.md b/2026/talks/sun-close.md new file mode 100644 index 00000000..3568cf20 --- /dev/null +++ b/2026/talks/sun-close.md @@ -0,0 +1,21 @@ +[[!meta title="Sunday closing remarks"]] +[[!meta copyright="Copyright © 2026 ${speakers}"]] +[[!inline pages="internal(2026/info/sun-close-nav)" raw="yes"]] + +<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing --> +<!-- You can manually edit this file to update the abstract, add links, etc. ---> + + +# Sunday closing remarks + + +[[!inline pages="internal(2026/info/sun-close-before)" raw="yes"]] + + + + +[[!inline pages="internal(2026/info/sun-close-after)" raw="yes"]] + +[[!inline pages="internal(2026/info/sun-close-nav)" raw="yes"]] + + diff --git a/2026/talks/sun-open.md b/2026/talks/sun-open.md new file mode 100644 index 00000000..4a3dc64e --- /dev/null +++ b/2026/talks/sun-open.md @@ -0,0 +1,21 @@ +[[!meta title="Sunday opening remarks"]] +[[!meta copyright="Copyright © 2026 Sacha Chua"]] +[[!inline pages="internal(2026/info/sun-open-nav)" raw="yes"]] + +<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing --> +<!-- You can manually edit this file to update the abstract, add links, etc. ---> + + +# Sunday opening remarks +Sacha Chua + +[[!inline pages="internal(2026/info/sun-open-before)" raw="yes"]] + + + + +[[!inline pages="internal(2026/info/sun-open-after)" raw="yes"]] + +[[!inline pages="internal(2026/info/sun-open-nav)" raw="yes"]] + + @@ -6,11 +6,12 @@ alt="EmacsConf logo"]]</p> Emacs Lisp.</p> ## Current Conferences - -**[[EmacsConf 2025|2025]]** - Dec 6-7 (Sat-Sun) + +**[[EmacsConf 2026|2026]]** - Dec 12-13 (Sat-Sun) ## Past Conferences +- [[EmacsConf 2025|2025]] - [[EmacsConf 2024|2024]] - [[EmacsConf 2023|2023]] - [[EmacsConf 2022|2022]] @@ -24,4 +25,4 @@ You can also browse [media.emacsconf.org](https://media.emacsconf.org/) or [eu.m ## Updates -[[!inline pages="(blog/* and !*/Discussion) or 2023/report or 2024/report or 2024/report" limit="10" rootpage="blog" archive="yes"]] +[[!inline pages="(blog/* and !*/Discussion) or 2023/report or 2024/report or 2025/report" limit="10" rootpage="blog" archive="yes"]] diff --git a/organizers-notebook.md b/organizers-notebook.md index 3cdcda26..2ff10b06 100644 --- a/organizers-notebook.md +++ b/organizers-notebook.md @@ -22,7 +22,7 @@ This document is the general organizers' notebook that can be used as a starting - [Draft CFP](#phases-and-lessons-learned-draft-cfp) - [Announce](#phases-and-lessons-learned-announce) - [Process proposals](#phases-and-lessons-learned-process-proposals) - - [Accept proposals](#phases-and-lessons-learned-accept-proposals):email: + - [Accept proposals](#phases-and-lessons-learned-accept-proposals) - [Draft schedule](#draft-schedule) - [Set up backstage and upload](#phases-and-lessons-learned-set-up-backstage-and-upload) - [Post the schedule](#phases-and-lessons-learned-post-the-schedule) @@ -39,37 +39,38 @@ This document is the general organizers' notebook that can be used as a starting - [Linode instance sizes](#general-infrastructure-linode-instance-sizes) - [File uploads](#upload) - [Media processing](#general-infrastructure-media-processing) - - [Wiki](#org7f83d48) + - [Wiki](#general-infrastructure-wiki) - [Icecast](#icecast) - [Watching pages](#watch) - [VNC](#vnc) - [Streaming with OBS](#obs) - - [Mumble](#org09cd092) + - [Mumble](#general-infrastructure-mumble) - [Shell scripts](#general-infrastructure-shell-scripts) - [Backstage](#backstage) - [Thelounge IRC web client](#general-infrastructure-irc-web-client) - [Etherpad](#general-infrastructure-etherpad) - [Publishing media to the server and to the wiki](#media) - - [Automated publishing to the media server](#orgc40bf50) + - [Automated publishing to the media server](#general-infrastructure-automated-publishing-to-the-media-server) - [Automated IRC announcements](#general-infrastructure-automated-irc-announcements) - [BigBlueButton](#bbb) - [Manual IRC announcements](#general-infrastructure-manual-irc-announcements) - - [Check test crontab](#orgc7d6d2a) + - [Check test crontab](#general-infrastructure-check-test-crontab) - [Confirm automated IRC announcements from res](#general-infrastructure-confirm-automated-irc-announcements-from-res) - [Low-res stream](#general-infrastructure-low-res-stream) - [Upload talks to YouTube](#general-infrastructure-upload-talks-to-youtube) - [Restream to YouTube](#general-infrastructure-restream-to-youtube) - - [Restream to Toobnix](#orgdc911e7) - - [i3 window manager](#org692ea98) + - [Restream to Toobnix](#general-infrastructure-restream-to-toobnix) + - [i3 window manager](#general-infrastructure-i3-window-manager) - [Other process notes](#other) - [Adding another user to BBB](#bbb-user) - - [Schedule changes](#org5f8f6b0) + - [Schedule changes](#other-process-notes-schedule-changes) - [When a talk Q&A changes method](#change-talk-qa) - [To play the other stream](#other-process-notes-to-play-the-other-stream) - - [When a system is down](#other-process-notes-when-a-system-is-down) + - [When a system is down - status page](#other-process-notes-when-a-system-is-down) - [When we need to bring on a last-minute volunteer](#other-process-notes-when-we-need-to-bring-on-a-last-minute-volunteer) - [Checking people in](#other-process-notes-checking-people-in) - [Ansible](#other-process-notes-ansible) + - [Updating a transcript](#other-process-notes-updating-a-transcript) <a id="starting-up-the-conference-planning-process"></a> @@ -486,7 +487,7 @@ Onboarding: emacsconf-mail-intro-to-all -### TODO Record opening remarks +### DONE Record opening remarks ### TODO Send check-in details, schedule update, etc. :email: @@ -498,12 +499,15 @@ emacsconf-mail-intro-to-all - [X] Set emacsconf-publish-include-pads to t. - [X] Republish the schedule and the info pages. - [X] Update the conf.org and the wiki on res. (~/emacsconf-2025-private, ~/emacsconf-wiki) -- [X] Resize the BBB server to production levels with bbb-prod: 16 GB $0.1440/hour 6 CPUs +- [X] Resize the BBB server to production levels with bbb-prod: 16 GB $0.1440/hour 6 CPUs. MANUALLY CHECK DISK SIZE. - [X] Send check-in details and last-minute schedule updates. - [X] Start thelounge on front0: systemctl start thelounge. - [X] Confirm I can connect to Mumble. - [X] Resize front0 to production: front0 shared Linode 32GB 8 CPUs 640GB $0.2880/hour - [X] Resize live0 to production: shared Linode 64GB 16 CPUs $0.5760/hour + - [X] CONFIRM DISK SIZE +- [X] Resize BBB to production + - [X] CONFIRM DISK SIZE - [X] Start the VNC servers. #!/bin/bash @@ -553,6 +557,8 @@ emacsconf-mail-intro-to-all - [X] <https://media.emacsconf.org/2025> has talk files - [X] IRC announcement in #emacsconf-gen - [X] Confirm icecast stats are available: <http://live0.emacsconf.org/admin/stats> (username: admin, password is in prod-vars.yml) +- [X] Generate and check all the crontabs <elisp:emacsconf-stream-crontabs> +- [X] Generate all the hyperlists <a id="conf"></a> @@ -561,15 +567,70 @@ emacsconf-mail-intro-to-all <elisp:emacsconf-pad-open-shift-hyperlist> +VNC connection + +See <https://emacsconf.org/organizers-notebook/#vnc> + +DO NOT RESIZE THE WINDOW + +Manual control + +emacsconf-stream-display-clock-and-countdown + +Shell scripts: + +music + +handle-session <talk-id> (ex: handle-session sat-open) + +plays the intro, the video (if any), and opens the Q&A + +keep an eye on it + +play <talk-id> + +play-with-intro <talk-id> + +handle-qa <talk-id> + +bbb <talk-id> + <a id="phases-and-lessons-learned-after-the-conference"></a> ## After the conference -### Capture stats +### DONE Capture stats + +<http://live0.emacsconf.org:8001/status.xsl> -2024 stats + +#### 2025 stats + +Saturday: +gen: 107 + 7 lowres +dev: 97 peak + 7 peak lowres + +Sunday: I forgot to copy icecast stats; maybe 70 peak on gen? + +Sunday: + +- res: + - %Cpu(s): 60.0 us, 6.7 sy, 0.0 ni, 33.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st + - MiB Mem : 48118.6 total, 15679.4 free, 7338.2 used, 26465.2 buff/cache +- bbb: + - CPU%: 3.0 us, 4.0 sy, 3.0 ni, 89.1 id, 0.0 wa, 0.0 hi, 1.0 si, 0.0 st + - Mem: 15988.8 total, 1450.0 free, 3552.0 used, 10986.9 buff/cache +- front: + - %Cpu(s): 2.4 us, 1.6 sy, 0.0 ni, 96.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st + - MiB Mem : 32169.5 total, 28072.2 free, 1257.1 used, 2840.2 buff/cache +- live: + - %Cpu(s): 7.5 us, 8.7 sy, 0.0 ni, 83.3 id, 0.0 wa, 0.0 hi, 0.4 si, 0.0 st + - MiB Mem : 64423.9 total, 56727.6 free, 797.6 used, 6898.8 buff/cache + + +#### 2024 stats Saturday: gen: 177 peak + 14 peak lowres @@ -588,19 +649,24 @@ res peak 81.54% total CPU (each OBS ~250%), mem 7GB used so far we have used 1.2TB of transfer this month -### Back up the data +### DONE Back up the data -#### Icecast +#### Etherpad -rsync -avze ssh live:’/data/emacsconf-2024-\*’ media:~/2024 +<elisp:emacsconf-pad-backup-talks> -rsync -avze ssh live:’/data/emacsconf-2024-\*’ . +This creates –pad.html and –pad.md in the cache. + + +#### Icecast + +rsync -avzue ssh live:’/data/emacsconf-2025-\*’ ~/proj/emacsconf/2025/backups #### BigBlueButton -rsync -avze ssh root@bbb:/var/bigbluebutton/ bigbluebutton/ +rsync -avze ssh root@bbb:/var/bigbluebutton/ bbb/ ssh root@66.175.208.243 ’dd if=/dev/sda bs=5M ’ | dd of=bbb-img-2024-12-08.img status=progress @@ -643,12 +709,28 @@ cd test - Copy IRC logs to cache and therefore to backstage: (ex: 2024-12-07-emacsconf-gen.txt) -### Combine the IRC logs and the pads, and add them to the wiki +### DONE Resize the server disks + +SSH and use df to check first. Needs to fit under these limits: -(did we e-mail the speakers before or after?) +- [X] front0: 25 GB + - [X] disk + - [X] server resized to Nanode 1 GB +- [X] live0: 25 GB + - [X] disk + - [X] server resized to Nanode 1 GB +- [X] bbb: 25 GB + - [X] disk + - [X] server resized to Nanode 1 GB +Shut down the servers after backing up. -### Process the Q&A recordings and live presentations +1. In the Linode console, click on the linode. +2. Go to Storage. +3. Use the 3-dot menu on Debian 10 disk to reisze. + + +### DONE Process the Q&A recordings and live presentations; upload to YouTube - Save answers videos as –answers.webm. - From the pad file: emacsconf-extract-copy-pad-to-wiki @@ -662,16 +744,116 @@ Indexing - emacsconf-extract-insert-note-with-question-heading - emacsconf-subed-make-chapter-file-based-on-comments +- emacsconf-subed-copy-current-chapter-text - change status to `TO_CAPTION_QA` Also copy the YouTube comments and IRC comments emacsconf-extract-irc-anonymize-log +answers–backstage–split.txt +answers–backstage–split.vtt + +subed-shift-subtitles-to-start-at-timestamp + +ffmpeg -i –answers–backstage–reencoded.webm -ss START-TIME -to END-TIME –answers–backstage–trimmed.webm +ffmpeg -i –answers–backstage–trimmed.opus + +Open –answers–backstage–trimmed.opus in Audacity. Select all the audio with Ctrl+A. Use Filter - Effect - Volume and Compression to normalize it to -16 LUFS. Export to –answers–backstage–normalized.opus + +Use <https://studio.youtube.com> to upload the video. +Use emacsconf-publish-answers-description to get the answer description, and move the title (and possibly the speaker name) to the video title. +Add the video to the playlist. +Set the `QA_YOUTUBE_URL` property. + +Play the preview and jump around to different points in the video to check if there are encoding errors. + + +### DONE Upload videos and Q&A sessions to Toobnix + +Install peertube-cli. + +emacsconf-extract-toobnix-api-setup + +emacsconf-publish-toobnix-upload-all +emacsconf-publish-toobnix-upload-all-captions + +Manually add to and reorganize the playlist as needed. (Automate this someday?) + + +#### Fix incorrect Toobnix URLs + + (dolist (talk (emacsconf-get-talk-info)) + (when (plist-get talk :toobnix-url) + (message "%s" (plist-get talk :slug)) + (emacsconf-with-talk-heading talk + (org-entry-put (point) "TOOBNIX_URL" (emacsconf-extract-toobnix-latest-video-url (emacsconf-publish-talk-video-properties talk 'toobnix))) + (when (plist-get talk :qa-toobnix-url) + (org-entry-put (point) "QA_TOOBNIX_URL" (emacsconf-extract-toobnix-latest-video-url (emacsconf-publish-answers-video-properties talk 'toobnix))))))) + + +### DONE Copy the Q&A from the pad and add them to the wiki + + +### DONE Copy interesting questions and remarks from IRC to the wiki + +Our goal is to copy the discussions from IRC to +the wiki pages so that speakers can see any +questions or feedback they’ve missed. -### Send thank-you emails to the speakers :email: +To copy the logs: +1. Use M-x flush-lines to remove any lines with `***`. +2. Copy the IRC logs to the cache directory with a filename like yyyy-mm-dd-channel.txt (ex: 2025-12-07-emacsconf-gen.txt). -### Notify emacs-discuss that the Q&A is up +Then review each log. For each talk: + +1. Select the region for the talk. Figure out the speaker’s nick. Use emacsconf-extract-irc-anonymize-log and give it the nick. +2. Use emacsconf-extract-irc: + - t: open the talk in the other window + - UP and DOWN navigate by line. + - q: add the line to the other window as a question. + - a: add the line to the other window as an answer + - c: add the line to the other window + + +### DONE Index the Q&A + +For each talk with a live Q&A session: + +1. Open the pad and the VTT file. +2. Use `C-u M-x subed-word-data-load-from-file` to load the word data JSON with an offset depending on the start time that the video was trimmed to. +3. Use `M-x subed-set-subtitle-comment` or manually add `NOTE` comments. Correct recognition errors along the way. +4. Use `emacsconf-subed-make-chapter-file-based-on-comments` to create the chapter file. +5. Republish with <elisp:emacsconf-publish-public-index> to make sure the chapters show up. +6. Upload the corrected subtitles to the Q&A video on YouTube. +7. Use `emacsconf-publish-answers-description` to get the updated description. Paste it into the YouTube description. +8. Use `emacsconf-publish-info-pages-for-talk` to update the wiki pages for that talk. + + +### DONE Send thank-you emails to the speakers :email: + + +### CANCELLED Copy the Youtube comments to the wiki pages? + +emacsconf-extract-youtube-api-setup +emacsconf-extract-youtube-comments-by-talk + +Better to direct the speakers to the YouTube videos so that they can discuss things directly. + + +### Write a report + +Start with a longer blog post: + +- <https://sachachua.com/blog/2024/12/emacsconf-2024-notes/> + +A shorter version goes on the wiki: + +- <https://emacsconf.org/2024/report/> +- <https://emacsconf.org/2023/report/> + + +### DONE Notify emacsconf-discuss@gnu.org that the Q&A is up <https://lists.gnu.org/archive/html/emacsconf-discuss/2024-12/msg00000.html> @@ -699,11 +881,6 @@ emacsconf-extract-irc-anonymize-log Sacha -### Write a report - -Sample: <https://emacsconf.org/2023/report/> - - ### Send thank-you emails to the volunteers :email: emacsconf-mail-template-ask-volunteer-for-mailing-address @@ -881,7 +1058,7 @@ When a talk comes in: 9. `emacsconf-publish-backstage-index` -<a id="org7f83d48"></a> +<a id="general-infrastructure-wiki"></a> ## Wiki @@ -889,6 +1066,11 @@ Stylesheet: <file://ssh:front|sudo:ikiwiki@front:/var/www/emacsconf.org/style.cs See also Ansible notes +If the wiki is stuck and needs regenerating: + + ssh front0.emacsconf.org + sudo -iu ikiwiki -- ikiwiki --setup ~ikiwiki/emacsconf.setup + <a id="icecast"></a> @@ -1048,7 +1230,7 @@ icecast is on live0.emacsconf.org and can be restarted with `/etc/init.d/emacsco so that the year is updated in the configuration. -<a id="org09cd092"></a> +<a id="general-infrastructure-mumble"></a> ## DONE Mumble @@ -1203,6 +1385,9 @@ On front: - To start: sudo systemctl start thelounge - To stop: sudo systemctl stop thelounge +backup: +sudo -u thelounge /usr/bin/thelounge start + ### DONE Ask libera.chat to increase IRC limits @@ -1250,6 +1435,12 @@ Switching it back to `TO_STREAM` and calling <elisp:emacsconf-publish-media-files-on-change> should remove it. +### Backing up, mirroring + + rsync -avzue ssh media:/var/www/media.emacsconf.org/ /var/www/media.emacsconf.org/ --exclude protected --exclude backstage + rsync -avzue ssh /var/www/media.emacsconf.org/ yang:~/public_html/media.emacsconf.org/ --exclude protected --exclude backstage + + ### DONE Switch public media to unprotected root before the conference :tminustwo: 1. Clear public media directory. @@ -1259,7 +1450,7 @@ Switching it back to `TO_STREAM` and calling You can generate the index with `emacsconf-publish-update-media`. -<a id="orgc40bf50"></a> +<a id="general-infrastructure-automated-publishing-to-the-media-server"></a> ## Automated publishing to the media server @@ -1318,7 +1509,9 @@ Sizes: 2. Update the DNS for bbb.emacsverse.org with its IP address. 3. Download the BBB installer and make it executable. 4. ufw allow 16384:32768/udp -5. Run the BBB installer: `./bbb-install.sh -v jammy-300 -s bbb.emacsverse.org -e emacsconf@sachachua.com -g` +5. Run the BBB installer: + + ./bbb-install.sh -v jammy-300 -s bbb.emacsverse.org -e emacsconf@sachachua.com -g 6. `sudo apt install bbb-playback-video` and then follow the instructions at [Server Customization | BigBlueButton](https://docs.bigbluebutton.org/3.0/administration/customize/#install-additional-recording-processing-formats) . - /usr/local/bigbluebutton/core/scripts/bigbluebutton.yml: @@ -1334,6 +1527,20 @@ Sizes: 7. docker exec -it greenlight-v3 bundle exec rake admin:create[’name’,’email’,’password’] +### Backing up BigBlueButton + +We generally just need to keep the user database. + + docker exec -t postgres pg_dump -U postgres -d greenlight-v3-production > greenlight_backup.sql + + +### Upgrading BigBlueButton + +Rerun the install script: + + ./bbb-install.sh -v jammy-300 -s bbb.emacsverse.org -e emacsconf@sachachua.com -g + + ### System audio limitations Sharing system audio by changing the audio device to “Built-in Audio Analog Stereo” is very choppy, only gets captured in the recording if I’m using Firefox (not Chrome) AND there’s at least one listener, and doesn’t allow simultaneous narration from the speaker. @@ -1381,10 +1588,15 @@ If you don’t see the video format, doublecheck that [the video format is e bbb-record seems to call `ruby /usr/local/bigbluebutton/core/scripts/process/video.rb -m ID`, which might be a useful backup. +bbb-record –rebuild 4dc2c4e5ac5222bc416b7e31d76e22a5627aed5b-1765135929727 +bbb-record –rebuild e5fceca22f037945fb7183e118599cf37598936c-1765131855663 + +derp, no space left on the device, that’s why, adding to checklist + -### Backing up BBB :backup: +### DONE Backing up BBB :backup: -rsync -avze ssh root@bbb:/var/bigbluebutton/ bigbluebutton/ +rsync -avze ssh root@bbb:/var/bigbluebutton/ ~/proj/emacsconf/2025/backups/bbb/ ssh root@bbb ’tar zcvf - /var/bigbluebutton /etc/bigbluebutton /root/greenlight-v3 /usr/local/bigbluebutton /usr/share/bbb-web’ > bbb-backup-$(date “+%Y-%m-%d”).tar.gz @@ -1426,6 +1638,17 @@ Resources: - <https://github.com/bigbluebutton/bigbluebutton/issues/9485> +### Other meetups + +The bbb.emacsverse.org server also hosts a few other meetups throughout the year. This helps people get together using free and open source software, and it also lets us keep the infrastructure set up instead of scrambling to get everything set up and tested a week or two before the conference. Here are the meetups and contact people: + +- [Emacs Berlin](https://emacs-berlin.org) (Tilmann Singer) +- [Emacs APAC](https://emacs-apac.gitlab.io/) (Bhavin Gandhi) +- [OrgMeetup](https://orgmode.org/worg/orgmeetup.html) (Ihor Radchenko) + +Meetup hosts use a moderator code to log in. + + <a id="general-infrastructure-manual-irc-announcements"></a> ## TODO Manual IRC announcements @@ -1435,14 +1658,14 @@ Success: - [X] You can /opall, /conftopic, and /broadcast -<a id="orgc7d6d2a"></a> +<a id="general-infrastructure-check-test-crontab"></a> ## Check test crontab <a id="general-infrastructure-confirm-automated-irc-announcements-from-res"></a> -## TODO Confirm automated IRC announcements from res +## DONE Confirm automated IRC announcements from res Success: @@ -1464,7 +1687,7 @@ backup on live: <a id="general-infrastructure-upload-talks-to-youtube"></a> -## Upload talks to YouTube +## DONE Upload talks to YouTube [Channel videos](https://studio.youtube.com/channel/UCwuyodzTl_KdEKNuJmeo99A/videos/upload?filter=%5B%5D&sort=%7B%22columnType%22%3A%22date%22%2C%22sortOrder%22%3A%22DESCENDING%22%7D) @@ -1529,7 +1752,7 @@ Need to have set up shifts first. use `ansible-playbook -i inventory.yml prod-playbook.yml --tags restream` to set up -<a id="orgdc911e7"></a> +<a id="general-infrastructure-restream-to-toobnix"></a> ## Restream to Toobnix @@ -1540,7 +1763,7 @@ Need to have set up shifts first. 2. emacsconf-stream-toobnix-copy-livestream-description -<a id="org692ea98"></a> +<a id="general-infrastructure-i3-window-manager"></a> ## i3 window manager @@ -1563,7 +1786,7 @@ termit is the terminal docker exec -it greenlight-v2 bundle exec rake user:create["USERNAME","EMAIL","PASSWORD","user"] -<a id="org5f8f6b0"></a> +<a id="other-process-notes-schedule-changes"></a> ## Schedule changes @@ -1646,7 +1869,7 @@ Manual steps: <a id="other-process-notes-when-a-system-is-down"></a> -## When a system is down +## When a system is down - status page Let people know in #emacsconf and #emacsconf-org @@ -1680,3 +1903,10 @@ will give them the backstage credentials and links to the index git clone git@git.emacsconf.org:pub/emacsconf-ansible + +<a id="other-process-notes-updating-a-transcript"></a> + +## Updating a transcript + +emacsconf-publish-update-transcript + diff --git a/organizers-notebook/index.org b/organizers-notebook/index.org index aa01046a..6f0399ca 100644 --- a/organizers-notebook/index.org +++ b/organizers-notebook/index.org @@ -43,12 +43,12 @@ This repository will store submissions, contact information, etc. 1. Create the repository on ~front0~. Ex: #+begin_src sh - export YEAR=2025 - sudo su - git - cd repositories - mkdir emacsconf-$YEAR-private.git - cd emacsconf-$YEAR-private.git - git init --bare +sudo su - git +export YEAR=2026 +cd repositories +mkdir emacsconf-$YEAR-private.git +cd emacsconf-$YEAR-private.git +git init --bare #+end_src 2. In the ~gitolite-admin~ repo, edit ~conf/gitolite-conf~. Add lines for the group and the repo. Commit and push. Ex: #+begin_example @@ -56,13 +56,15 @@ This repository will store submissions, contact information, etc. repo emacsconf-2024-private RW+ = @admins @emacsconf-2024-org orga #+end_example - 3. Clone the private repository into the appropriate location. ~git clone git@git.emacsconf.org:emacsconf-2025-private private~ + +#+COMMENT: + 3. Clone the private repository into the appropriate location. ~git clone git@git.emacsconf.org:emacsconf-2026-private private~ ** Create the public organizers' notebook in the wiki :PROPERTIES: :CUSTOM_ID: starting-up-the-conference-planning-process-create-the-public-organizers-notebook-in-the-wiki :END: -Ex: file:../2024/organizers-notebook/index.org +Ex: file:../2026/organizers-notebook/index.org * Phases and lessons learned :PROPERTIES: :CUSTOM_ID: phases-and-lessons-learned @@ -73,9 +75,9 @@ Ex: file:../2024/organizers-notebook/index.org :END: Create linked pages -- [ ] year index: ex: [[file:../2024.md]] -- [ ] volunteer page: ex: [[file:../volunteer.md]] -- [ ] submit page: ex: [[file:../2024/submit.md]] +- [X] year index: ex: [[file:../2026.md]] +- [X] volunteer page: ex: [[file:../volunteer.md]] +- [X] submit page: ex: [[file:../2026/submit.md]] *** How to mark pages as drafts :PROPERTIES: @@ -159,6 +161,10 @@ Come hang out with us in the `#emacsconf` channel on `irc.libera.chat` :PROPERTIES: :CUSTOM_ID: phases-and-lessons-learned-draft-cfp-update-the-irc-topic :END: +:LOGBOOK: +- Note taken on [2026-07-02 Thu 11:42] \\ + Done for 2026 +:END: #+begin_src emacs-lisp (erc-cmd-OPALL) @@ -210,6 +216,10 @@ Come hang out with us in the `#emacsconf` channel on `irc.libera.chat` :PROPERTIES: :CUSTOM_ID: phases-and-lessons-learned-announce :END: +:LOGBOOK: +- Note taken on [2026-07-02 Thu 11:42] \\ + Done 2026-06-27 +:END: - Post CFP to emacsconf-discuss, reddit.com/r/emacs, and in Emacs News - Submit to https://foss.events/ @@ -218,6 +228,10 @@ Come hang out with us in the `#emacsconf` channel on `irc.libera.chat` :PROPERTIES: :CUSTOM_ID: phases-and-lessons-learned-announce-promote-the-conference :END: +:LOGBOOK: +- Note taken on [2026-07-02 Thu 11:46] \\ + submitted EmacsConf 2026 to foss.events +:END: Submit to https://foss.events/ @@ -258,12 +272,13 @@ When proposals come in: 2. Use ~emacsconf-mail-add-submission~ if it works, or create the entry and paste it in. ~org-toggle-item~ can help convert Org-style headings into a nested list. - 3. Set the following fields (~my/org-set-property~ + 3. Set the following fields (~sacha-org-set-property~ can be helpful): EMERGENCY, Q_AND_A, AVAILABILITY, NAME, PRONOUNS, TIME, SLUG, EMAIL, NAME_SHORT, CUSTOM_ID, TRACK, TIMEZONE, CATEGORY, DATE_SUBMITTED, PUBLIC_EMAIL + ** Accept proposals :email: :PROPERTIES: :CUSTOM_ID: phases-and-lessons-learned-accept-proposals @@ -273,13 +288,28 @@ Setup: 1. Create YYYY/talks.md. + #+begin_example +We're getting ready for EmacsConf 2026. Want to propose a talk? +[[Check out our call for participation|/2026/cfp]] and submit your proposal +by Friday, September 18, 2026! + +Here are some of the talks we've accepted so far: + +[[!inline pages="internal(2026/schedule-details)" raw="yes"]] + +Want to help make EmacsConf even awesomer? [[Volunteer!|/volunteer]] + +We hope to see you all around on Dec 12-13 for EmacsConf 2026! + #+end_example + For each talk: 1. Set up "Talk abstract" and "Talk details" sections in the conf.org talk subtree. 2. Change status to ~TO_CONFIRM~. -3. Create wiki page with ~emacsconf-publish-add-talk~. -4. Use ~emacsconf-publish-info-pages~ and ~emacsconf-publish-schedule~ as needed. -5. Send acceptance e-mail with ~emacsconf-mail-accept-talk~ +3. Use ~emacsconf-set-file-prefixes~. +4. Create wiki page with ~emacsconf-publish-add-talk~. +5. Use ~emacsconf-publish-info-pages~ and ~emacsconf-publish-schedule~ as needed. +6. Send acceptance e-mail with ~emacsconf-mail-accept-talk~ After the CFP ends: @@ -459,6 +489,7 @@ elisp:emacsconf-pad-prepopulate-shift-hyperlists CLOSED: [2025-11-28 Fri 21:32] :PROPERTIES: :Effort: 1:00 +:CUSTOM_ID: phases-and-lessons-learned-getting-ready-for-the-conference-check-in-with-speakers-for-cancellations-adjustments :END: :LOGBOOK: CLOCK: [2025-11-21 Fri 11:12]--[2025-11-21 Fri 11:14] => 0:02 @@ -469,6 +500,7 @@ emacsconf-mail-intro-to-all CLOSED: [2025-12-08 Mon 21:37] SCHEDULED: <2025-12-02 Tue> :PROPERTIES: :CREATED: [2025-11-28 Fri 21:32] +:CUSTOM_ID: phases-and-lessons-learned-getting-ready-for-the-conference-record-opening-remarks :END: *** TODO Send check-in details, schedule update, etc. :email: :PROPERTIES: @@ -593,6 +625,9 @@ CLOSED: [2025-12-07 Sun 17:26] :END: http://live0.emacsconf.org:8001/status.xsl **** 2025 stats +:PROPERTIES: +:CUSTOM_ID: phases-and-lessons-learned-after-the-conference-capture-stats-2025-stats +:END: Saturday: gen: 107 + 7 lowres @@ -616,6 +651,9 @@ Sunday: - MiB Mem : 64423.9 total, 56727.6 free, 797.6 used, 6898.8 buff/cache **** 2024 stats +:PROPERTIES: +:CUSTOM_ID: phases-and-lessons-learned-after-the-conference-capture-stats-2024-stats +:END: Saturday: gen: 177 peak + 14 peak lowres @@ -638,6 +676,9 @@ CLOSED: [2025-12-07 Sun 17:26] :CUSTOM_ID: phases-and-lessons-learned-after-the-conference-back-up-the-data :END: **** Etherpad +:PROPERTIES: +:CUSTOM_ID: phases-and-lessons-learned-after-the-conference-back-up-the-data-etherpad +:END: elisp:emacsconf-pad-backup-talks This creates --pad.html and --pad.md in the cache. @@ -699,6 +740,9 @@ cd test - Copy IRC logs to cache and therefore to backstage: (ex: 2024-12-07-emacsconf-gen.txt) *** DONE Resize the server disks CLOSED: [2025-12-07 Sun 17:26] +:PROPERTIES: +:CUSTOM_ID: phases-and-lessons-learned-after-the-conference-resize-the-server-disks +:END: SSH and use df to check first. Needs to fit under these limits: - [X] front0: 25 GB @@ -758,6 +802,9 @@ Set the ~QA_YOUTUBE_URL~ property. Play the preview and jump around to different points in the video to check if there are encoding errors. *** DONE Upload videos and Q&A sessions to Toobnix CLOSED: [2025-12-28 Sun 21:27] +:PROPERTIES: +:CUSTOM_ID: phases-and-lessons-learned-after-the-conference-upload-videos-and-q-a-sessions-to-toobnix +:END: Install peertube-cli. @@ -767,7 +814,20 @@ emacsconf-publish-toobnix-upload-all emacsconf-publish-toobnix-upload-all-captions Manually add to and reorganize the playlist as needed. (Automate this someday?) +**** Fix incorrect Toobnix URLs +:PROPERTIES: +:CUSTOM_ID: phases-and-lessons-learned-after-the-conference-upload-videos-and-q-a-sessions-to-toobnix-fix-incorrect-toobnix-urls +:END: +#+begin_src emacs-lisp :eval no +(dolist (talk (emacsconf-get-talk-info)) + (when (plist-get talk :toobnix-url) + (message "%s" (plist-get talk :slug)) + (emacsconf-with-talk-heading talk + (org-entry-put (point) "TOOBNIX_URL" (emacsconf-extract-toobnix-latest-video-url (emacsconf-publish-talk-video-properties talk 'toobnix))) + (when (plist-get talk :qa-toobnix-url) + (org-entry-put (point) "QA_TOOBNIX_URL" (emacsconf-extract-toobnix-latest-video-url (emacsconf-publish-answers-video-properties talk 'toobnix))))))) +#+end_src *** DONE Copy the Q&A from the pad and add them to the wiki CLOSED: [2025-12-28 Sun 19:34] :PROPERTIES: @@ -775,6 +835,9 @@ CLOSED: [2025-12-28 Sun 19:34] :END: *** DONE Copy interesting questions and remarks from IRC to the wiki CLOSED: [2025-12-28 Sun 19:34] +:PROPERTIES: +:CUSTOM_ID: phases-and-lessons-learned-after-the-conference-copy-interesting-questions-and-remarks-from-irc-to-the-wiki +:END: Our goal is to copy the discussions from IRC to the wiki pages so that speakers can see any @@ -799,6 +862,9 @@ Then review each log. For each talk: *** DONE Index the Q&A CLOSED: [2025-12-28 Sun 19:34] +:PROPERTIES: +:CUSTOM_ID: phases-and-lessons-learned-after-the-conference-index-the-q-a +:END: For each talk with a live Q&A session: @@ -822,6 +888,9 @@ CLOSED: [2025-12-30 Tue 12:33] SCHEDULED: <2025-12-29 Mon> *** CANCELLED Copy the Youtube comments to the wiki pages? CLOSED: [2025-12-28 Sun 21:27] +:PROPERTIES: +:CUSTOM_ID: phases-and-lessons-learned-after-the-conference-copy-the-youtube-comments-to-the-wiki-pages +:END: emacsconf-extract-youtube-api-setup emacsconf-extract-youtube-comments-by-talk @@ -840,8 +909,8 @@ A shorter version goes on the wiki: - https://emacsconf.org/2024/report/ - https://emacsconf.org/2023/report/ -*** Notify emacsconf-discuss@gnu.org that the Q&A is up -SCHEDULED: <2025-12-29 Mon> +*** DONE Notify emacsconf-discuss@gnu.org that the Q&A is up +CLOSED: [2026-01-03 Sat 11:02] SCHEDULED: <2025-12-29 Mon> :PROPERTIES: :CUSTOM_ID: phases-and-lessons-learned-after-the-conference-notify-emacs-discuss-that-the-q-a-is-up :CREATED: [2025-12-28 Sun 21:27] @@ -1053,6 +1122,9 @@ When a talk comes in: 8. ~emacsconf-publish-cache-video-data~ to save the file size and length. 9. ~emacsconf-publish-backstage-index~ ** Wiki +:PROPERTIES: +:CUSTOM_ID: general-infrastructure-wiki +:END: Stylesheet: file:/ssh:front|sudo:ikiwiki@front:/var/www/emacsconf.org/style.css @@ -1254,6 +1326,7 @@ so that the year is updated in the configuration. CLOSED: [2025-12-01 Mon 12:49] :PROPERTIES: :Effort: 1:00 +:CUSTOM_ID: general-infrastructure-mumble :END: :LOGBOOK: CLOCK: [2025-12-01 Mon 11:25]--[2025-12-01 Mon 12:49] => 1:24 @@ -1394,6 +1467,9 @@ Switching it back to =TO_STREAM= and calling elisp:emacsconf-publish-media-files-on-change should remove it. *** Backing up, mirroring +:PROPERTIES: +:CUSTOM_ID: general-infrastructure-publishing-media-to-the-server-and-to-the-wiki-backing-up-mirroring +:END: #+begin_src sh :eval yes rsync -avzue ssh media:/var/www/media.emacsconf.org/ /var/www/media.emacsconf.org/ --exclude protected --exclude backstage @@ -1414,6 +1490,9 @@ CLOSED: [2025-11-30 Sun 16:52] You can generate the index with =emacsconf-publish-update-media=. ** Automated publishing to the media server +:PROPERTIES: +:CUSTOM_ID: general-infrastructure-automated-publishing-to-the-media-server +:END: =ansible-playbook -i inventory.yml prod-playbook.yml --tags publish,edit= @@ -1475,7 +1554,10 @@ Sizes: 2. Update the DNS for bbb.emacsverse.org with its IP address. 3. Download the BBB installer and make it executable. 4. ufw allow 16384:32768/udp -5. Run the BBB installer: ~./bbb-install.sh -v jammy-300 -s bbb.emacsverse.org -e emacsconf@sachachua.com -g~ +5. Run the BBB installer: + #+begin_src sh :eval no + ./bbb-install.sh -v jammy-300 -s bbb.emacsverse.org -e emacsconf@sachachua.com -g + #+end_src 6. ~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]] . - /usr/local/bigbluebutton/core/scripts/bigbluebutton.yml: #+begin_example @@ -1491,6 +1573,27 @@ Sizes: - systemctl restart bbb-rap-resque-worker.service 7. docker exec -it greenlight-v3 bundle exec rake admin:create['name','email','password'] +*** Backing up BigBlueButton +:PROPERTIES: +:CUSTOM_ID: general-infrastructure-bigbluebutton-backing-up-bigbluebutton +:END: + +We generally just need to keep the user database. + +#+begin_src sh :eval no :dir "/ssh:bbb:~" +docker exec -t postgres pg_dump -U postgres -d greenlight-v3-production > greenlight_backup.sql +#+end_src + +*** Upgrading BigBlueButton +:PROPERTIES: +:CUSTOM_ID: general-infrastructure-bigbluebutton-upgrading-bigbluebutton +:END: + +Rerun the install script: + +#+begin_src sh :eval no +./bbb-install.sh -v jammy-300 -s bbb.emacsverse.org -e emacsconf@sachachua.com -g +#+end_src *** System audio limitations @@ -1614,6 +1717,19 @@ Resources: - https://overto.eu/posts/gunzip-into-dd/ - https://www.linode.com/community/questions/20386/how-do-i-ssh-to-linode-from-the-finnix-boot-in-order-to-copy-my-local-vm-over-to - https://github.com/bigbluebutton/bigbluebutton/issues/9485 +*** Other meetups +:PROPERTIES: +:CUSTOM_ID: general-infrastructure-bigbluebutton-other-meetups +:END: + +The bbb.emacsverse.org server also hosts a few other meetups throughout the year. This helps people get together using free and open source software, and it also lets us keep the infrastructure set up instead of scrambling to get everything set up and tested a week or two before the conference. Here are the meetups and contact people: + +- [[https://emacs-berlin.org][Emacs Berlin]] (Tilmann Singer) +- [[https://emacs-apac.gitlab.io/][Emacs APAC]] (Bhavin Gandhi) +- [[https://orgmode.org/worg/orgmeetup.html][OrgMeetup]] (Ihor Radchenko) + +Meetup hosts use a moderator code to log in. + ** TODO Manual IRC announcements :PROPERTIES: :CUSTOM_ID: general-infrastructure-manual-irc-announcements @@ -1623,6 +1739,9 @@ Success: - [X] You can /opall, /conftopic, and /broadcast ** Check test crontab +:PROPERTIES: +:CUSTOM_ID: general-infrastructure-check-test-crontab +:END: ** DONE Confirm automated IRC announcements from res CLOSED: [2025-12-08 Mon 21:36] SCHEDULED: <2025-11-27 Thu> :PROPERTIES: @@ -1730,10 +1849,14 @@ Need to have set up shifts first. use =ansible-playbook -i inventory.yml prod-playbook.yml --tags restream= to set up ** Restream to Toobnix +:PROPERTIES: +:CUSTOM_ID: general-infrastructure-restream-to-toobnix +:END: *** DONE Set up Toobnix restreaming events CLOSED: [2025-12-05 Fri 18:54] :PROPERTIES: :Effort: 0:30 +:CUSTOM_ID: general-infrastructure-restream-to-toobnix-set-up-toobnix-restreaming-events :END: :LOGBOOK: CLOCK: [2025-11-22 Sat 17:42]--[2025-11-23 Sun 12:15] => 18:33 @@ -1742,6 +1865,9 @@ CLOCK: [2025-11-22 Sat 17:42]--[2025-11-23 Sun 12:15] => 18:33 1. https://toobnix.org, Publish, Permanent/recurring live 2. emacsconf-stream-toobnix-copy-livestream-description ** i3 window manager +:PROPERTIES: +:CUSTOM_ID: general-infrastructure-i3-window-manager +:END: termit is the terminal @@ -1761,6 +1887,9 @@ ssh bbb.emacsverse.org docker exec -it greenlight-v2 bundle exec rake user:create["USERNAME","EMAIL","PASSWORD","user"] #+end_src ** Schedule changes +:PROPERTIES: +:CUSTOM_ID: other-process-notes-schedule-changes +:END: In general: @@ -1882,5 +2011,8 @@ will give them the backstage credentials and links to the index git clone git@git.emacsconf.org:pub/emacsconf-ansible #+end_src ** Updating a transcript +:PROPERTIES: +:CUSTOM_ID: other-process-notes-updating-a-transcript +:END: emacsconf-publish-update-transcript |
