summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--2020/info/19.md2
-rw-r--r--2023/captions/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--main--chapters.vtt41
-rw-r--r--2023/captions/emacsconf-2023-unentangling--unentangling-projects-and-repos--alexey-bochkarev--main--chapters.vtt26
-rw-r--r--2023/captions/emacsconf-2023-unentangling--unentangling-projects-and-repos--alexey-bochkarev--main.vtt81
-rw-r--r--2023/info/adventure-after.md21
-rw-r--r--2023/info/adventure-before.md6
-rw-r--r--2023/info/adventure-nav.md2
-rw-r--r--2023/info/collab-after.md33
-rw-r--r--2023/info/collab-before.md6
-rw-r--r--2023/info/collab-nav.md2
-rw-r--r--2023/info/core-after.md5
-rw-r--r--2023/info/core-before.md4
-rw-r--r--2023/info/core-nav.md2
-rw-r--r--2023/info/cubing-after.md53
-rw-r--r--2023/info/cubing-before.md6
-rw-r--r--2023/info/cubing-nav.md2
-rw-r--r--2023/info/devel-after.md5
-rw-r--r--2023/info/devel-before.md4
-rw-r--r--2023/info/devel-nav.md2
-rw-r--r--2023/info/doc-after.md102
-rw-r--r--2023/info/doc-before.md8
-rw-r--r--2023/info/doc-nav.md2
-rw-r--r--2023/info/eat-after.md41
-rw-r--r--2023/info/eat-before.md4
-rw-r--r--2023/info/eat-nav.md2
-rw-r--r--2023/info/emacsconf-after.md78
-rw-r--r--2023/info/emacsconf-before.md8
-rw-r--r--2023/info/emacsconf-nav.md2
-rw-r--r--2023/info/emacsen-after.md54
-rw-r--r--2023/info/emacsen-before.md8
-rw-r--r--2023/info/emacsen-nav.md2
-rw-r--r--2023/info/emms-after.md114
-rw-r--r--2023/info/emms-before.md8
-rw-r--r--2023/info/emms-nav.md2
-rw-r--r--2023/info/eval-after.md29
-rw-r--r--2023/info/eval-before.md6
-rw-r--r--2023/info/eval-nav.md2
-rw-r--r--2023/info/flat-after.md5
-rw-r--r--2023/info/flat-before.md4
-rw-r--r--2023/info/flat-nav.md2
-rw-r--r--2023/info/gc-after.md370
-rw-r--r--2023/info/gc-before.md4
-rw-r--r--2023/info/gc-nav.md2
-rw-r--r--2023/info/hyperamp-after.md5
-rw-r--r--2023/info/hyperamp-before.md6
-rw-r--r--2023/info/hyperamp-nav.md2
-rw-r--r--2023/info/hyperdrive-after.md62
-rw-r--r--2023/info/hyperdrive-before.md21
-rw-r--r--2023/info/hyperdrive-nav.md2
-rw-r--r--2023/info/koutline-after.md5
-rw-r--r--2023/info/koutline-before.md4
-rw-r--r--2023/info/koutline-nav.md2
-rw-r--r--2023/info/llm-after.md62
-rw-r--r--2023/info/llm-before.md8
-rw-r--r--2023/info/llm-nav.md2
-rw-r--r--2023/info/lspocaml-after.md82
-rw-r--r--2023/info/lspocaml-before.md8
-rw-r--r--2023/info/lspocaml-nav.md2
-rw-r--r--2023/info/matplotllm-after.md25
-rw-r--r--2023/info/matplotllm-before.md6
-rw-r--r--2023/info/matplotllm-nav.md2
-rw-r--r--2023/info/mentor-after.md90
-rw-r--r--2023/info/mentor-before.md6
-rw-r--r--2023/info/mentor-nav.md2
-rw-r--r--2023/info/nabokov-after.md30
-rw-r--r--2023/info/nabokov-before.md8
-rw-r--r--2023/info/nabokov-nav.md2
-rw-r--r--2023/info/one-after.md58
-rw-r--r--2023/info/one-before.md8
-rw-r--r--2023/info/one-nav.md2
-rw-r--r--2023/info/overlay-after.md114
-rw-r--r--2023/info/overlay-before.md8
-rw-r--r--2023/info/overlay-nav.md2
-rw-r--r--2023/info/parallel-after.md72
-rw-r--r--2023/info/parallel-before.md8
-rw-r--r--2023/info/parallel-nav.md2
-rw-r--r--2023/info/poltys-before.md4
-rw-r--r--2023/info/poltys-nav.md2
-rw-r--r--2023/info/ref-after.md29
-rw-r--r--2023/info/ref-before.md6
-rw-r--r--2023/info/ref-nav.md2
-rw-r--r--2023/info/repl-after.md53
-rw-r--r--2023/info/repl-before.md6
-rw-r--r--2023/info/repl-nav.md2
-rw-r--r--2023/info/sat-close-after.md5
-rw-r--r--2023/info/sat-close-before.md6
-rw-r--r--2023/info/sat-close-nav.md2
-rw-r--r--2023/info/sat-open-after.md5
-rw-r--r--2023/info/sat-open-before.md4
-rw-r--r--2023/info/sat-open-nav.md2
-rw-r--r--2023/info/scheme-after.md224
-rw-r--r--2023/info/scheme-before.md6
-rw-r--r--2023/info/scheme-nav.md2
-rw-r--r--2023/info/sharing-after.md90
-rw-r--r--2023/info/sharing-before.md8
-rw-r--r--2023/info/sharing-nav.md2
-rw-r--r--2023/info/solo-after.md62
-rw-r--r--2023/info/solo-before.md8
-rw-r--r--2023/info/solo-nav.md2
-rw-r--r--2023/info/steno-after.md5
-rw-r--r--2023/info/steno-before.md4
-rw-r--r--2023/info/steno-nav.md2
-rw-r--r--2023/info/sun-close-before.md4
-rw-r--r--2023/info/sun-close-nav.md2
-rw-r--r--2023/info/sun-open-after.md5
-rw-r--r--2023/info/sun-open-before.md4
-rw-r--r--2023/info/sun-open-nav.md2
-rw-r--r--2023/info/table-after.md41
-rw-r--r--2023/info/table-before.md4
-rw-r--r--2023/info/table-nav.md2
-rw-r--r--2023/info/teaching-after.md78
-rw-r--r--2023/info/teaching-before.md8
-rw-r--r--2023/info/teaching-nav.md2
-rw-r--r--2023/info/test-after.md96
-rw-r--r--2023/info/test-before.md8
-rw-r--r--2023/info/test-nav.md2
-rw-r--r--2023/info/unentangling-after.md77
-rw-r--r--2023/info/unentangling-before.md14
-rw-r--r--2023/info/unentangling-nav.md2
-rw-r--r--2023/info/uni-after.md72
-rw-r--r--2023/info/uni-before.md8
-rw-r--r--2023/info/uni-nav.md2
-rw-r--r--2023/info/voice-after.md80
-rw-r--r--2023/info/voice-before.md8
-rw-r--r--2023/info/voice-nav.md2
-rw-r--r--2023/info/web-after.md58
-rw-r--r--2023/info/web-before.md8
-rw-r--r--2023/info/web-nav.md2
-rw-r--r--2023/info/windows-after.md8
-rw-r--r--2023/info/windows-before.md6
-rw-r--r--2023/info/windows-nav.md2
-rw-r--r--2023/info/world-after.md185
-rw-r--r--2023/info/world-before.md8
-rw-r--r--2023/info/world-nav.md2
-rw-r--r--2023/info/writing-after.md42
-rw-r--r--2023/info/writing-before.md8
-rw-r--r--2023/info/writing-nav.md2
-rw-r--r--2023/schedule-2023-12-02.md2
-rw-r--r--2023/schedule-2023-12-03.md2
-rw-r--r--2023/talks/flat.md38
-rw-r--r--2023/talks/mentor.md2
-rw-r--r--2024.md1
-rw-r--r--2024/captions/emacsconf-2024-blee--about-blee-towards-an-integrated-emacs-environment-for-enveloping-our-own-autonomy-directed-digital-ecosystem--mohsen-banan--answers.vtt44
-rw-r--r--2024/captions/emacsconf-2024-color--colour-your-emacs-with-ease--ryota--answers.vtt493
-rw-r--r--2024/captions/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--main--chapters.vtt22
-rw-r--r--2024/captions/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--main.vtt896
-rw-r--r--2024/captions/emacsconf-2024-gypsum--gypsum-my-clone-of-emacs-and-elisp-written-in-scheme--ramin-honary--answers.vtt474
-rw-r--r--2024/captions/emacsconf-2024-julia--exploring-shared-philosophies-in-julia-and-emacs--gabriele-bozzola--answers.vtt222
-rw-r--r--2024/captions/emacsconf-2024-org-update--the-future-of-org--ihor-radchenko--main.vtt2
-rw-r--r--2024/captions/emacsconf-2024-papers--writing-academic-papers-in-orgroam--vincent-conus--answers.vtt67
-rw-r--r--2024/captions/emacsconf-2024-project--managing-writing-project-metadata-with-orgmode--blaine-mooers--answers.vtt31
-rw-r--r--2024/captions/emacsconf-2024-transducers--transducers-finally-ergonomic-data-processing-for-emacs--colin-woodbury--answers.vtt2
-rw-r--r--2024/draft-schedule.md68
-rw-r--r--2024/info/blee-after.md44
-rw-r--r--2024/info/blee-before.md9
-rw-r--r--2024/info/casual-before.md9
-rw-r--r--2024/info/color-after.md478
-rw-r--r--2024/info/color-before.md17
-rw-r--r--2024/info/emacs30-after.md864
-rw-r--r--2024/info/emacs30-before.md31
-rw-r--r--2024/info/guile-before.md7
-rw-r--r--2024/info/gypsum-after.md472
-rw-r--r--2024/info/gypsum-before.md25
-rw-r--r--2024/info/hyperbole-before.md9
-rw-r--r--2024/info/hyperdrive-before.md7
-rw-r--r--2024/info/julia-after.md216
-rw-r--r--2024/info/julia-before.md19
-rw-r--r--2024/info/learning-before.md9
-rw-r--r--2024/info/links-before.md5
-rw-r--r--2024/info/literate-before.md9
-rw-r--r--2024/info/maxima-before.md5
-rw-r--r--2024/info/mcclim-before.md9
-rw-r--r--2024/info/open-mic-before.md5
-rw-r--r--2024/info/org-update-after.md2
-rw-r--r--2024/info/org-update-before.md9
-rw-r--r--2024/info/p-search-before.md9
-rw-r--r--2024/info/papers-after.md41
-rw-r--r--2024/info/papers-before.md9
-rw-r--r--2024/info/pgmacs-before.md9
-rw-r--r--2024/info/project-after.md17
-rw-r--r--2024/info/project-before.md9
-rw-r--r--2024/info/regex-before.md3
-rw-r--r--2024/info/rust-before.md9
-rw-r--r--2024/info/sat-close-before.md3
-rw-r--r--2024/info/sat-open-before.md5
-rw-r--r--2024/info/secrets-before.md5
-rw-r--r--2024/info/sharing-before.md5
-rw-r--r--2024/info/shell-before.md5
-rw-r--r--2024/info/students-before.md7
-rw-r--r--2024/info/sun-close-before.md5
-rw-r--r--2024/info/sun-open-before.md3
-rw-r--r--2024/info/theme-before.md9
-rw-r--r--2024/info/transducers-after.md2
-rw-r--r--2024/info/transducers-before.md13
-rw-r--r--2024/info/water-before.md5
-rw-r--r--2024/info/writing-before.md5
-rw-r--r--2024/organizers-notebook.md348
-rw-r--r--2024/organizers-notebook/index.org133
-rw-r--r--2024/prepare.md2
-rw-r--r--2024/report.md199
-rw-r--r--2024/report.org237
-rw-r--r--2024/schedule-details.md4
-rw-r--r--2024/talks/blee.md21
-rw-r--r--2024/talks/literate.md2
-rw-r--r--2024/talks/sun-close.md7
-rw-r--r--2025.md39
-rw-r--r--2025/captions/emacsconf-2025-blee-lcnt--bleelcnt-an-emacscentered-content-production-and-selfpublication-framework--mohsen-banan--main--chapters.vtt77
-rw-r--r--2025/captions/emacsconf-2025-blee-lcnt--bleelcnt-an-emacscentered-content-production-and-selfpublication-framework--mohsen-banan--main.vtt2058
-rw-r--r--2025/captions/emacsconf-2025-bookclub-tapas--bookclub-tapas--maddie-sullivan--main--chapters.vtt68
-rw-r--r--2025/captions/emacsconf-2025-bookclub-tapas--bookclub-tapas--maddie-sullivan--main.vtt2400
-rw-r--r--2025/captions/emacsconf-2025-calc--basic-calc-functionality-for-engineering-or-electronics--christopher-howard--main--chapters.vtt41
-rw-r--r--2025/captions/emacsconf-2025-calc--basic-calc-functionality-for-engineering-or-electronics--christopher-howard--main.vtt888
-rw-r--r--2025/captions/emacsconf-2025-commonlisp--common-lisp-images-communicating-likeahuman-through-shared-emacs-slime-and-eev--screwlisp--main.vtt1260
-rw-r--r--2025/captions/emacsconf-2025-gardening--gardening-in-emacs-a-windows-users-tale-of-tending-tweaking-and-triumph--marco-bresciani--main--chapters.vtt32
-rw-r--r--2025/captions/emacsconf-2025-gardening--gardening-in-emacs-a-windows-users-tale-of-tending-tweaking-and-triumph--marco-bresciani--main.vtt1110
-rw-r--r--2025/captions/emacsconf-2025-gmail--orggmail-a-deep-integration-of-gmail-into-your-org-mode--bala-ramadurai--main--chapters.vtt77
-rw-r--r--2025/captions/emacsconf-2025-gmail--orggmail-a-deep-integration-of-gmail-into-your-org-mode--bala-ramadurai--main.vtt1764
-rw-r--r--2025/captions/emacsconf-2025-gnus--reading-and-writing-emails-in-gnu-emacs-with-gnus--amin-bandali--main--chapters.vtt50
-rw-r--r--2025/captions/emacsconf-2025-gnus--reading-and-writing-emails-in-gnu-emacs-with-gnus--amin-bandali--main.vtt1332
-rw-r--r--2025/captions/emacsconf-2025-graphics--modern-emacselisp-hardwaresoftware-accelerated-graphics--emanuel-berg--main.vtt4
-rw-r--r--2025/captions/emacsconf-2025-greader--gnu-emacs-greader-gnam-reader-mode-is-the-best-emacs-mode-in-existence--yuval-langer--main.vtt223
-rw-r--r--2025/captions/emacsconf-2025-juicemacs--juicemacs-exploring-speculative-jit-compilation-for-elisp-in-java--kana--main.vtt1238
-rw-r--r--2025/captions/emacsconf-2025-llm--emacs-editors-and-llm-driven-workflows--andrew-hyatt--main.vtt1069
-rw-r--r--2025/captions/emacsconf-2025-modern--some-problems-of-modernizing-emacs--eduardo-ochs--main.vtt727
-rw-r--r--2025/captions/emacsconf-2025-org-babel--making-orgbabel-reactive--abhinav-tushar--main--chapters.vtt26
-rw-r--r--2025/captions/emacsconf-2025-org-babel--making-orgbabel-reactive--abhinav-tushar--main.vtt614
-rw-r--r--2025/captions/emacsconf-2025-python--interactive-python-programming-in-emacs--david-vujic--main.vtt731
-rw-r--r--2025/captions/emacsconf-2025-reader--an-introduction-to-the-emacs-reader--divy--main--chapters.vtt47
-rw-r--r--2025/captions/emacsconf-2025-reader--an-introduction-to-the-emacs-reader--divy--main.vtt2431
-rw-r--r--2025/captions/emacsconf-2025-reference--emacs-as-a-fullyfledged-reference-manager--vidianos-giannitsis--main--chapters.vtt32
-rw-r--r--2025/captions/emacsconf-2025-reference--emacs-as-a-fullyfledged-reference-manager--vidianos-giannitsis--main.vtt1035
-rw-r--r--2025/captions/emacsconf-2025-sat-open--saturday-opening-remarks--main--chapters.vtt41
-rw-r--r--2025/captions/emacsconf-2025-sat-open--saturday-opening-remarks--main.vtt376
-rw-r--r--2025/captions/emacsconf-2025-schemacs--one-year-progress-update-schemacs-formerly-gypsum--ramin-honary--main--chapters.vtt29
-rw-r--r--2025/captions/emacsconf-2025-schemacs--one-year-progress-update-schemacs-formerly-gypsum--ramin-honary--main.vtt1183
-rw-r--r--2025/captions/emacsconf-2025-sun-open--sunday-opening-remarks--main--chapters.vtt41
-rw-r--r--2025/captions/emacsconf-2025-sun-open--sunday-opening-remarks--main.vtt376
-rw-r--r--2025/captions/emacsconf-2025-swanky--swanky-python-interactive-development-for-python--scott-zimmermann--main.vtt1108
-rw-r--r--2025/captions/emacsconf-2025-zettelkasten--zettelkasten-for-regular-emacs-hackers--christian-tietze--main--chapters.vtt47
-rw-r--r--2025/captions/emacsconf-2025-zettelkasten--zettelkasten-for-regular-emacs-hackers--christian-tietze--main.vtt1492
-rw-r--r--2025/cfp.md80
-rw-r--r--2025/cfp.org149
-rw-r--r--2025/draft-schedule.md48
-rw-r--r--2025/info/authoring-after.md7
-rw-r--r--2025/info/authoring-before.md18
-rw-r--r--2025/info/authoring-nav.md7
-rw-r--r--2025/info/bibliography-after.md7
-rw-r--r--2025/info/bibliography-before.md18
-rw-r--r--2025/info/bibliography-nav.md7
-rw-r--r--2025/info/blee-lcnt-after.md708
-rw-r--r--2025/info/blee-lcnt-before.md46
-rw-r--r--2025/info/blee-lcnt-nav.md7
-rw-r--r--2025/info/bookclub-tapas-after.md821
-rw-r--r--2025/info/bookclub-tapas-before.md43
-rw-r--r--2025/info/bookclub-tapas-nav.md7
-rw-r--r--2025/info/calc-after.md314
-rw-r--r--2025/info/calc-before.md34
-rw-r--r--2025/info/calc-nav.md7
-rw-r--r--2025/info/claude-code-after.md7
-rw-r--r--2025/info/claude-code-before.md13
-rw-r--r--2025/info/claude-code-nav.md4
-rw-r--r--2025/info/commonlisp-after.md437
-rw-r--r--2025/info/commonlisp-before.md19
-rw-r--r--2025/info/commonlisp-nav.md7
-rw-r--r--2025/info/completion-after.md7
-rw-r--r--2025/info/completion-before.md19
-rw-r--r--2025/info/completion-nav.md7
-rw-r--r--2025/info/gardening-after.md387
-rw-r--r--2025/info/gardening-before.md31
-rw-r--r--2025/info/gardening-nav.md7
-rw-r--r--2025/info/gmail-after.md606
-rw-r--r--2025/info/gmail-before.md46
-rw-r--r--2025/info/gmail-nav.md7
-rw-r--r--2025/info/gnus-after.md463
-rw-r--r--2025/info/gnus-before.md37
-rw-r--r--2025/info/gnus-nav.md7
-rw-r--r--2025/info/graphics-after.md15
-rw-r--r--2025/info/graphics-before.md19
-rw-r--r--2025/info/graphics-nav.md7
-rw-r--r--2025/info/greader-after.md90
-rw-r--r--2025/info/greader-before.md19
-rw-r--r--2025/info/greader-nav.md7
-rw-r--r--2025/info/hyperboleqa-after.md7
-rw-r--r--2025/info/hyperboleqa-before.md19
-rw-r--r--2025/info/hyperboleqa-nav.md7
-rw-r--r--2025/info/juicemacs-after.md422
-rw-r--r--2025/info/juicemacs-before.md19
-rw-r--r--2025/info/juicemacs-nav.md7
-rw-r--r--2025/info/languages-after.md7
-rw-r--r--2025/info/languages-before.md13
-rw-r--r--2025/info/languages-nav.md4
-rw-r--r--2025/info/latex-after.md7
-rw-r--r--2025/info/latex-before.md19
-rw-r--r--2025/info/latex-nav.md7
-rw-r--r--2025/info/life-after.md7
-rw-r--r--2025/info/life-before.md13
-rw-r--r--2025/info/life-nav.md4
-rw-r--r--2025/info/llm-after.md373
-rw-r--r--2025/info/llm-before.md19
-rw-r--r--2025/info/llm-nav.md7
-rw-r--r--2025/info/modern-after.md251
-rw-r--r--2025/info/modern-before.md19
-rw-r--r--2025/info/modern-nav.md7
-rw-r--r--2025/info/n-angulator-after.md7
-rw-r--r--2025/info/n-angulator-before.md13
-rw-r--r--2025/info/n-angulator-nav.md4
-rw-r--r--2025/info/open-mic-after.md7
-rw-r--r--2025/info/open-mic-before.md19
-rw-r--r--2025/info/open-mic-nav.md7
-rw-r--r--2025/info/org-babel-after.md221
-rw-r--r--2025/info/org-babel-before.md29
-rw-r--r--2025/info/org-babel-nav.md7
-rw-r--r--2025/info/private-ai-after.md7
-rw-r--r--2025/info/private-ai-before.md19
-rw-r--r--2025/info/private-ai-nav.md7
-rw-r--r--2025/info/python-after.md259
-rw-r--r--2025/info/python-before.md19
-rw-r--r--2025/info/python-nav.md7
-rw-r--r--2025/info/reader-after.md829
-rw-r--r--2025/info/reader-before.md36
-rw-r--r--2025/info/reader-nav.md7
-rw-r--r--2025/info/reference-after.md358
-rw-r--r--2025/info/reference-before.md31
-rw-r--r--2025/info/reference-nav.md7
-rw-r--r--2025/info/sat-close-after.md7
-rw-r--r--2025/info/sat-close-before.md19
-rw-r--r--2025/info/sat-close-nav.md7
-rw-r--r--2025/info/sat-open-after.md143
-rw-r--r--2025/info/sat-open-before.md34
-rw-r--r--2025/info/sat-open-nav.md6
-rw-r--r--2025/info/schemacs-after.md411
-rw-r--r--2025/info/schemacs-before.md30
-rw-r--r--2025/info/schemacs-nav.md7
-rw-r--r--2025/info/sun-close-after.md7
-rw-r--r--2025/info/sun-close-before.md19
-rw-r--r--2025/info/sun-close-nav.md6
-rw-r--r--2025/info/sun-open-after.md143
-rw-r--r--2025/info/sun-open-before.md34
-rw-r--r--2025/info/sun-open-nav.md7
-rw-r--r--2025/info/swanky-after.md387
-rw-r--r--2025/info/swanky-before.md19
-rw-r--r--2025/info/swanky-nav.md7
-rw-r--r--2025/info/weights-after.md7
-rw-r--r--2025/info/weights-before.md19
-rw-r--r--2025/info/weights-nav.md7
-rw-r--r--2025/info/writing-after.md7
-rw-r--r--2025/info/writing-before.md13
-rw-r--r--2025/info/writing-nav.md7
-rw-r--r--2025/info/zettelkasten-after.md516
-rw-r--r--2025/info/zettelkasten-before.md36
-rw-r--r--2025/info/zettelkasten-nav.md7
-rw-r--r--2025/organizers-notebook.md1270
-rw-r--r--2025/organizers-notebook/index.org1063
-rw-r--r--2025/organizers-notebook/schedule.svg1
-rw-r--r--2025/prepare.md313
-rw-r--r--2025/schedule-2025-12-06.md1
-rw-r--r--2025/schedule-2025-12-07.md1
-rw-r--r--2025/schedule-details.md54
-rw-r--r--2025/schedule-image.md1
-rw-r--r--2025/sidebar.md12
-rw-r--r--2025/speakers.md149
-rw-r--r--2025/submit.md80
-rw-r--r--2025/talks.md7
-rw-r--r--2025/talks/authoring.md30
-rw-r--r--2025/talks/bibliography.md83
-rw-r--r--2025/talks/blee-lcnt.md109
-rw-r--r--2025/talks/bookclub-tapas.md73
-rw-r--r--2025/talks/calc.md26
-rw-r--r--2025/talks/claude-code.md69
-rw-r--r--2025/talks/commonlisp.md88
-rw-r--r--2025/talks/completion.md36
-rw-r--r--2025/talks/gardening.md56
-rw-r--r--2025/talks/gmail.md64
-rw-r--r--2025/talks/gnus.md44
-rw-r--r--2025/talks/graphics.md22
-rw-r--r--2025/talks/greader.md41
-rw-r--r--2025/talks/hyperboleqa.md71
-rw-r--r--2025/talks/juicemacs.md74
-rw-r--r--2025/talks/languages.md57
-rw-r--r--2025/talks/latex.md37
-rw-r--r--2025/talks/life.md92
-rw-r--r--2025/talks/llm.md42
-rw-r--r--2025/talks/modern.md35
-rw-r--r--2025/talks/n-angulator.md28
-rw-r--r--2025/talks/open-mic.md21
-rw-r--r--2025/talks/org-babel.md40
-rw-r--r--2025/talks/private-ai.md32
-rw-r--r--2025/talks/python.md26
-rw-r--r--2025/talks/reader.md34
-rw-r--r--2025/talks/reference.md68
-rw-r--r--2025/talks/sat-close.md21
-rw-r--r--2025/talks/sat-open.md21
-rw-r--r--2025/talks/schemacs.md90
-rw-r--r--2025/talks/sun-close.md21
-rw-r--r--2025/talks/sun-open.md21
-rw-r--r--2025/talks/swanky.md49
-rw-r--r--2025/talks/weights.md43
-rw-r--r--2025/talks/writing.md40
-rw-r--r--2025/talks/zettelkasten.md245
-rw-r--r--2025/watch.md101
-rw-r--r--2025/watch/dev.md94
-rw-r--r--2025/watch/gen.md186
-rw-r--r--2025/watch/info.md11
-rw-r--r--blog.md2
-rw-r--r--captioning.md4
-rw-r--r--donors.md6
-rw-r--r--ideas.md3
-rw-r--r--index.md7
-rw-r--r--local.css12
-rw-r--r--mpv.md13
-rw-r--r--organizers-notebook.md1038
-rw-r--r--organizers-notebook/index.org1045
-rw-r--r--script.js227
-rw-r--r--talks.md2
-rw-r--r--templates/page.tmpl132
-rw-r--r--templates/script.js227
-rw-r--r--volunteer.md4
417 files changed, 45647 insertions, 5114 deletions
diff --git a/2020/info/19.md b/2020/info/19.md
index 4dc84a04..98d78add 100644
--- a/2020/info/19.md
+++ b/2020/info/19.md
@@ -1,7 +1,7 @@
# Sharing blogs (and more) with org-webring
Brett Gilio
-[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--19-sharing-blogs-and-more-with-org-webring--brett-gilio.webm" subtitles="/2020/subtitles/emacsconf-2020--19-sharing-blogs-and-more-with-org-webring--brett-gilio-autogen.vtt"]]
+[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--19-sharing-blogs-and-more-with-org-webring--brett-gilio.webm" subtitles="/2020/subtitles/emacsconf-2020--19-sharing-blogs-and-more-with-org-webring--brett-gilio.vtt"]]
[Download compressed .webm video (25.8M)](https://media.emacsconf.org/2020/emacsconf-2020--19-sharing-blogs-and-more-with-org-webring--brett-gilio--compressed32.webm)
[Download compressed .webm video (20.8M, highly compressed)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--19-sharing-blogs-and-more-with-org-webring--brett-gilio--vp9-q56-video-original-audio.webm)
diff --git a/2023/captions/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--main--chapters.vtt b/2023/captions/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--main--chapters.vtt
new file mode 100644
index 00000000..6f7d26b1
--- /dev/null
+++ b/2023/captions/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--main--chapters.vtt
@@ -0,0 +1,41 @@
+WEBVTT
+
+
+00:00:19.840 --> 00:03:04.599
+Hyperdrives introduction
+
+00:03:04.600 --> 00:04:32.099
+About USHIN and the contributors
+
+00:04:32.646 --> 00:06:06.132
+Basic introduction to Hyperdrive
+
+00:06:06.133 --> 00:12:56.572
+Managing files with Hyperdrive.el
+
+00:12:56.573 --> 00:15:01.233
+Dired like interface
+
+00:15:01.234 --> 00:17:39.973
+History in hyperdrive
+
+00:17:39.973 --> 00:19:20.793
+Use case of sharing large files
+
+00:19:20.913 --> 00:23:26.198
+Drive creation with hyperdrive.el
+
+00:23:26.199 --> 00:30:06.818
+hyperdrive-mirror
+
+00:30:06.819 --> 00:34:20.879
+hyperdrive history
+
+00:34:20.880 --> 00:35:07.119
+Streaming video from hyperdrive
+
+00:35:08.746 --> 00:38:57.540
+hyperdrive.el under the hood
+
+00:38:57.541 --> 00:40:02.859
+Next steps
diff --git a/2023/captions/emacsconf-2023-unentangling--unentangling-projects-and-repos--alexey-bochkarev--main--chapters.vtt b/2023/captions/emacsconf-2023-unentangling--unentangling-projects-and-repos--alexey-bochkarev--main--chapters.vtt
new file mode 100644
index 00000000..d0e8d577
--- /dev/null
+++ b/2023/captions/emacsconf-2023-unentangling--unentangling-projects-and-repos--alexey-bochkarev--main--chapters.vtt
@@ -0,0 +1,26 @@
+WEBVTT
+
+
+00:00:01.220 --> 00:00:43.160
+Introduction
+
+00:00:44.120 --> 00:02:02.180
+The problem
+
+00:02:04.860 --> 00:03:25.280
+Jumping around
+
+00:03:25.280 --> 00:04:46.420
+Capturing
+
+00:04:46.560 --> 00:05:41.780
+Ctags
+
+00:05:43.080 --> 00:07:59.339
+Org Roam
+
+00:07:59.340 --> 00:10:28.880
+How does it work?
+
+00:10:31.860 --> 00:12:38.900
+Time tracking
diff --git a/2023/captions/emacsconf-2023-unentangling--unentangling-projects-and-repos--alexey-bochkarev--main.vtt b/2023/captions/emacsconf-2023-unentangling--unentangling-projects-and-repos--alexey-bochkarev--main.vtt
index a10fafef..1086b80b 100644
--- a/2023/captions/emacsconf-2023-unentangling--unentangling-projects-and-repos--alexey-bochkarev--main.vtt
+++ b/2023/captions/emacsconf-2023-unentangling--unentangling-projects-and-repos--alexey-bochkarev--main.vtt
@@ -1,8 +1,9 @@
-WEBVTT
+WEBVTT captioned by sachac
+NOTE Introduction
00:00:01.220 --> 00:00:03.580
-Hello, I'm Alexey Bychkadov,
+Hello, I'm Alexey Bochkarev,
00:00:03.740 --> 00:00:06.899
and I'm talking about unentangling projects
@@ -46,8 +47,10 @@ So I prepare papers, presentations,
00:00:41.260 --> 00:00:43.160
memos, and so on and so forth.
+NOTE The problem
+
00:00:44.120 --> 00:00:47.940
-And so The workflow problem I had is
+The workflow problem I had is
00:00:49.160 --> 00:00:53.000
sometimes all this does not really fit into a
@@ -59,19 +62,19 @@ concept of a single repository per project.
So I might want to have,
00:00:58.180 --> 00:01:01.160
-for example, a source code in 1 repository
+for example, a source code in one repository
00:01:01.320 --> 00:01:03.480
and then I would like to have a paper in
00:01:03.480 --> 00:01:05.200
-another 1 and then I want to have a
+another one, and then I want to have a
00:01:05.200 --> 00:01:08.620
collection of notes somewhere unrelated to
00:01:08.620 --> 00:01:12.500
-those 2. Emacs is pretty good at supporting
+those two. Emacs is pretty good at supporting
00:01:12.500 --> 00:01:15.840
your workflows and I figured I should share
@@ -80,19 +83,19 @@ your workflows and I figured I should share
what I used and what works for me.
00:01:20.560 --> 00:01:24.900
-So, from the technical perspective,
+From the technical perspective,
00:01:26.479 --> 00:01:27.940
things are pretty easy.
00:01:27.940 --> 00:01:30.720
-So I use a collection of pretty standard
+I use a collection of pretty standard
00:01:30.720 --> 00:01:33.240
-components of Emacs. So it's a projectile org
+components of Emacs. So it's projectile, org
00:01:33.240 --> 00:01:35.360
-mode with this capture templates and other
+mode with this capture templates, and other
00:01:35.360 --> 00:01:38.100
things. Then I sustained a collection of
@@ -107,13 +110,13 @@ which is essentially it's a glorified
collection of org mode files.
00:01:46.100 --> 00:01:48.160
-Then I used directory local variables,
+Then I used directory-local variables,
00:01:48.260 --> 00:01:51.140
-maybe a C text to jump through the source
+maybe a ctags to jump through the source
00:01:51.140 --> 00:01:54.920
-code and very, very little LELisp glue to
+code and very, very little elisp glue to
00:01:54.920 --> 00:01:57.620
make this all work, but that's not really
@@ -124,6 +127,8 @@ rocket science. So that's the workflow I
00:02:00.400 --> 00:02:02.180
would like to talk about today.
+NOTE Jumping around
+
00:02:04.860 --> 00:02:07.120
So what I mean by all that,
@@ -134,7 +139,7 @@ it's pretty straightforward to make Emacs,
to make it easy to jump around a single
00:02:12.720 --> 00:02:14.980
-repository in Emacs. So if I,
+repository in Emacs. So if I...
00:02:15.060 --> 00:02:16.640
Now I have Doom Emacs,
@@ -167,7 +172,7 @@ project, right? So if I create a couple of
custom shortcuts, so if I press a magic
00:02:42.780 --> 00:02:45.280
-button, hyper-OP, don't worry about
+button, Hyper+o p... don't worry about
00:02:45.280 --> 00:02:47.460
hyper-key. So I want it to have a modifier
@@ -200,7 +205,7 @@ binding. Yeah, essentially an Emacs.
And if I hit, for example,
00:03:12.540 --> 00:03:15.200
-R, I end up in a readme file within this
+r, I end up in a README file within this
00:03:15.200 --> 00:03:17.320
specific repository I was sitting in,
@@ -209,11 +214,13 @@ specific repository I was sitting in,
right? So if I want to document something
00:03:19.000 --> 00:03:21.420
-real quick, I go to the readme file.
+real quick, I go to the README file.
00:03:21.680 --> 00:03:25.280
Then I could go to a change log file,
+NOTE Capturing
+
00:03:25.280 --> 00:03:27.440
right? So I have a list of changes and the
@@ -269,10 +276,10 @@ entries 1 by 1 and discuss what I haven't
implemented last time.
00:04:19.540 --> 00:04:22.580
-I could go to project specific,
+I could go to project-specific,
00:04:24.100 --> 00:04:26.320
-sorry, to repo specific to-do list.
+sorry, to repo-specific to-do list.
00:04:26.320 --> 00:04:29.020
And I have list of to-dos that would leave
@@ -298,8 +305,10 @@ there are very many ways to jump through the
00:04:45.400 --> 00:04:46.420
source code conveniently.
+NOTE Ctags
+
00:04:46.560 --> 00:04:49.960
-I ended up not using language servers I use a
+I ended up not using language servers. I use a
00:04:49.960 --> 00:04:53.320
special program called ctags and so the way
@@ -355,6 +364,8 @@ repository, it makes it really convenient to
00:05:39.720 --> 00:05:41.780
jump between all of those.
+NOTE Org Roam
+
00:05:43.080 --> 00:05:46.980
But I have a few problems here.
@@ -476,13 +487,13 @@ so I create a special folder within my
org-roam storage. So it's a special folder
00:07:38.240 --> 00:07:40.940
-outside of Henry Postories that got backed up
+outside of any repositories that got backed up
00:07:40.940 --> 00:07:43.940
to my hard drive with certain redundancy,
00:07:44.080 --> 00:07:46.720
-but I don't really need like version control,
+but I don't really need version control,
00:07:46.720 --> 00:07:48.280
full blown version control for that.
@@ -499,8 +510,13 @@ here. So PKB stands for personal knowledge
00:07:55.320 --> 00:07:58.020
base, and I have a folder project notes in
-00:07:58.020 --> 00:08:01.520
-there, right? So, and How does it work?
+00:07:58.020 --> 00:07:59.339
+there, right?
+
+NOTE How does it work?
+
+00:07:59.340 --> 00:08:01.520
+How does it work?
00:08:01.680 --> 00:08:04.940
So I have a folder per project in there,
@@ -557,10 +573,10 @@ that would be open project.
And then for example, org mode file,
00:08:55.920 --> 00:08:58.260
-right? So this is my personal notes about the
+right? So this is my personal notes about
00:08:58.260 --> 00:09:01.260
-maxconf, not specifically about this very
+EmacsConf, not specifically about this very
00:09:01.260 --> 00:09:02.580
talk, but I can have, you know,
@@ -578,7 +594,7 @@ And how does that happen?
If we try to like look at the code,
00:09:13.080 --> 00:09:14.660
-the e-list magic here,
+the elisp magic here,
00:09:15.040 --> 00:09:17.560
what is happening is it's just a couple of
@@ -634,11 +650,8 @@ And how do I define this variable?
00:10:09.280 --> 00:10:12.500
Is essentially there is this magical file in
-00:10:12.500 --> 00:10:14.160
-a folder called dear locals,
-
-00:10:14.440 --> 00:10:17.380
-elist. And I just put it there.
+00:10:12.500 --> 00:10:17.380
+a folder called .dir-locals.el. And I just put it there.
00:10:17.440 --> 00:10:20.380
And then whenever I go into that folder or
@@ -655,6 +668,8 @@ And that's pretty much it.
00:10:26.280 --> 00:10:28.880
That's how it works for me.
+NOTE Time tracking
+
00:10:31.860 --> 00:10:34.620
I guess 1 thing that I wanted to emphasize
@@ -713,7 +728,7 @@ there. And that's how it works.
So again, what comes in handy,
00:11:28.860 --> 00:11:31.500
-if I hit Control O, I just go back to the
+if I hit C-o, I just go back to the
00:11:31.500 --> 00:11:34.240
file I jumped in into and that's I jumped
diff --git a/2023/info/adventure-after.md b/2023/info/adventure-after.md
index 4a5d4f30..f9d69acc 100644
--- a/2023/info/adventure-after.md
+++ b/2023/info/adventure-after.md
@@ -1,13 +1,10 @@
<!-- Automatically generated by emacsconf-publish-after-page -->
-<a name="adventure-mainVideo-transcript"></a>
-# Transcript
+<div class="transcript transcript-mainVideo"><a name="adventure-mainVideo-transcript"></a><h1>Transcript</h1>
-[[!template new="1" text="""Introduction""" start="00:00:00.000" video="mainVideo-adventure" id="subtitle"]]
-
-[[!template text="""Hi, I'm going to give you a little demo""" start="00:00:00.000" video="mainVideo-adventure" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Introduction""" start="00:00:00.000" video="mainVideo-adventure" id="subtitle"]]</div>[[!template text="""Hi, I'm going to give you a little demo""" start="00:00:00.000" video="mainVideo-adventure" id="subtitle"]]
[[!template text="""of a project that I'm working on""" start="00:00:04.040" video="mainVideo-adventure" id="subtitle"]]
[[!template text="""which is called the `orgdungeon`.""" start="00:00:06.440" video="mainVideo-adventure" id="subtitle"]]
[[!template text="""As you can see here, they are just a bunch of Org files""" start="00:00:09.840" video="mainVideo-adventure" id="subtitle"]]
@@ -23,9 +20,7 @@
[[!template text="""so a similar interface to the developer""" start="00:00:53.200" video="mainVideo-adventure" id="subtitle"]]
[[!template text="""who was using that technology to develop the game.""" start="00:00:57.560" video="mainVideo-adventure" id="subtitle"]]
-[[!template new="1" text="""Demo""" start="00:01:01.200" video="mainVideo-adventure" id="subtitle"]]
-
-[[!template text="""Concretely, I'm going to give you""" start="00:01:01.200" video="mainVideo-adventure" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Demo""" start="00:01:01.200" video="mainVideo-adventure" id="subtitle"]]</div>[[!template text="""Concretely, I'm going to give you""" start="00:01:01.200" video="mainVideo-adventure" id="subtitle"]]
[[!template text="""a demo of how the game looks like.""" start="00:01:03.800" video="mainVideo-adventure" id="subtitle"]]
[[!template text="""So, this is a very vanilla Emacs setup.""" start="00:01:08.880" video="mainVideo-adventure" id="subtitle"]]
[[!template text="""Then I open up the first Org file.""" start="00:01:14.840" video="mainVideo-adventure" id="subtitle"]]
@@ -69,9 +64,7 @@
[[!template text="""I'm just try that. `M-x` and then `emi-escape-10`.""" start="00:03:21.400" video="mainVideo-adventure" id="subtitle"]]
[[!template text="""All right.""" start="00:03:31.480" video="mainVideo-adventure" id="subtitle"]]
-[[!template new="1" text="""emi-escape-12""" start="00:03:33.360" video="mainVideo-adventure" id="subtitle"]]
-
-[[!template text="""So I will jump to another file.""" start="00:03:33.360" video="mainVideo-adventure" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""emi-escape-12""" start="00:03:33.360" video="mainVideo-adventure" id="subtitle"]]</div>[[!template text="""So I will jump to another file.""" start="00:03:33.360" video="mainVideo-adventure" id="subtitle"]]
[[!template text="""Or in the game, you jump to another plane.""" start="00:03:36.040" video="mainVideo-adventure" id="subtitle"]]
[[!template text="""And now you know that""" start="00:03:39.360" video="mainVideo-adventure" id="subtitle"]]
[[!template text="""there is a function called `emi-escape-12`.""" start="00:03:40.339" video="mainVideo-adventure" id="subtitle"]]
@@ -95,9 +88,7 @@
[[!template text="""Write `emi-escape-12`,""" start="00:04:36.440" video="mainVideo-adventure" id="subtitle"]]
[[!template text="""and then now you know the password is `emi`. Right.""" start="00:04:42.240" video="mainVideo-adventure" id="subtitle"]]
-[[!template new="1" text="""The rest of the game""" start="00:04:47.040" video="mainVideo-adventure" id="subtitle"]]
-
-[[!template text="""So you can progress along these different files,""" start="00:04:47.040" video="mainVideo-adventure" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""The rest of the game""" start="00:04:47.040" video="mainVideo-adventure" id="subtitle"]]</div>[[!template text="""So you can progress along these different files,""" start="00:04:47.040" video="mainVideo-adventure" id="subtitle"]]
[[!template text="""and then if you...""" start="00:04:51.840" video="mainVideo-adventure" id="subtitle"]]
[[!template text="""Okay, it's like a game,""" start="00:04:53.520" video="mainVideo-adventure" id="subtitle"]]
[[!template text="""but at the same time, it also teaches you""" start="00:04:54.640" video="mainVideo-adventure" id="subtitle"]]
@@ -119,7 +110,7 @@
[[!template text="""I hope you enjoyed this little demo.""" start="00:05:51.360" video="mainVideo-adventure" id="subtitle"]]
[[!template text="""Thank you.""" start="00:05:56.540" video="mainVideo-adventure" id="subtitle"]]
-
+</div>
Captioner: sachac
diff --git a/2023/info/adventure-before.md b/2023/info/adventure-before.md
index c774f5ff..7c9dda68 100644
--- a/2023/info/adventure-before.md
+++ b/2023/info/adventure-before.md
@@ -1,18 +1,18 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
[[!toc ]]
-Format: 6-min talk; Q&A: Etherpad
+Format: 6-min talk ; Q&A: Etherpad
Status: All done
-<div class="vid"><video controls preload="none" id="adventure-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-adventure--an-orgmode-based-text-adventure-game-for-learning-the-basics-of-emacs-inside-emacs-written-in-emacs-lisp--chunghong-chan--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-adventure--an-orgmode-based-text-adventure-game-for-learning-the-basics-of-emacs-inside-emacs-written-in-emacs-lisp--chunghong-chan--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-adventure--an-orgmode-based-text-adventure-game-for-learning-the-basics-of-emacs-inside-emacs-written-in-emacs-lisp--chunghong-chan--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="adventure-mainVideo" data="""
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-adventure"><source src="https://media.emacsconf.org/2023/emacsconf-2023-adventure--an-orgmode-based-text-adventure-game-for-learning-the-basics-of-emacs-inside-emacs-written-in-emacs-lisp--chunghong-chan--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-adventure--an-orgmode-based-text-adventure-game-for-learning-the-basics-of-emacs-inside-emacs-written-in-emacs-lisp--chunghong-chan--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-adventure--an-orgmode-based-text-adventure-game-for-learning-the-basics-of-emacs-inside-emacs-written-in-emacs-lisp--chunghong-chan--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="mainVideo-adventure" data="""
00:00.000 Introduction
01:01.200 Demo
03:33.360 emi-escape-12
04:47.040 The rest of the game
-"""]]<div></div>Duration: 05:58 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-adventure--an-orgmode-based-text-adventure-game-for-learning-the-basics-of-emacs-inside-emacs-written-in-emacs-lisp--chunghong-chan--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-adventure--an-orgmode-based-text-adventure-game-for-learning-the-basics-of-emacs-inside-emacs-written-in-emacs-lisp--chunghong-chan--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-adventure--an-orgmode-based-text-adventure-game-for-learning-the-basics-of-emacs-inside-emacs-written-in-emacs-lisp--chunghong-chan--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-adventure--an-orgmode-based-text-adventure-game-for-learning-the-basics-of-emacs-inside-emacs-written-in-emacs-lisp--chunghong-chan--main.opus">Download --main.opus (3.3MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-adventure--an-orgmode-based-text-adventure-game-for-learning-the-basics-of-emacs-inside-emacs-written-in-emacs-lisp--chunghong-chan--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-adventure--an-orgmode-based-text-adventure-game-for-learning-the-basics-of-emacs-inside-emacs-written-in-emacs-lisp--chunghong-chan--main.webm">Download --main.webm (19MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-adventure--an-orgmode-based-text-adventure-game-for-learning-the-basics-of-emacs-inside-emacs-written-in-emacs-lisp--chunghong-chan--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-adventure--an-orgmode-based-text-adventure-game-for-learning-the-basics-of-emacs-inside-emacs-written-in-emacs-lisp--chunghong-chan--pad.md">Download --pad.md</a></li><li><a href="https://toobnix.org/w/2oqbPJB8Wm3QSo4HCKAyVn">View on Toobnix</a></li></ul></div></div>
+"""]]<div></div>Duration: 05:58 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2023-adventure">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-adventure--an-orgmode-based-text-adventure-game-for-learning-the-basics-of-emacs-inside-emacs-written-in-emacs-lisp--chunghong-chan--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-adventure--an-orgmode-based-text-adventure-game-for-learning-the-basics-of-emacs-inside-emacs-written-in-emacs-lisp--chunghong-chan--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-adventure--an-orgmode-based-text-adventure-game-for-learning-the-basics-of-emacs-inside-emacs-written-in-emacs-lisp--chunghong-chan--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-adventure--an-orgmode-based-text-adventure-game-for-learning-the-basics-of-emacs-inside-emacs-written-in-emacs-lisp--chunghong-chan--main.opus">Download --main.opus (3.3MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-adventure--an-orgmode-based-text-adventure-game-for-learning-the-basics-of-emacs-inside-emacs-written-in-emacs-lisp--chunghong-chan--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-adventure--an-orgmode-based-text-adventure-game-for-learning-the-basics-of-emacs-inside-emacs-written-in-emacs-lisp--chunghong-chan--main.webm">Download --main.webm (19MB)</a></li><li><a href="https://toobnix.org/w/2oqbPJB8Wm3QSo4HCKAyVn">View on Toobnix</a></li><li><a href="https://youtu.be/7R0yA0R1jsk">View on Youtube</a></li></ul></div></div>
# Description
<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/info/adventure-nav.md b/2023/info/adventure-nav.md
index 95382fff..d50bda6c 100644
--- a/2023/info/adventure-nav.md
+++ b/2023/info/adventure-nav.md
@@ -2,5 +2,5 @@
<div class="talk-nav">
Back to the [[talks]]
Next by track: <a href="/2023/talks/uni">Authoring and presenting university courses with Emacs and a full libre software stack</a>
-Track: <span class="sched-track General">General</span>
+Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2023/watch/gen">Watch</a></strong>
</div>
diff --git a/2023/info/collab-after.md b/2023/info/collab-after.md
index de166231..06ebf8d4 100644
--- a/2023/info/collab-after.md
+++ b/2023/info/collab-after.md
@@ -1,13 +1,10 @@
<!-- Automatically generated by emacsconf-publish-after-page -->
-<a name="collab-mainVideo-transcript"></a>
-# Transcript
+<div class="transcript transcript-mainVideo"><a name="collab-mainVideo-transcript"></a><h1>Transcript</h1>
-[[!template new="1" text="""Introduction""" start="00:00:00.000" video="mainVideo-collab" id="subtitle"]]
-
-[[!template text="""[Lukas]: Welcome to our presentation,""" start="00:00:00.000" video="mainVideo-collab" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Introduction""" start="00:00:00.000" video="mainVideo-collab" id="subtitle"]]</div>[[!template text="""[Lukas]: Welcome to our presentation,""" start="00:00:00.000" video="mainVideo-collab" id="subtitle"]]
[[!template text="""Collaborative Data Processing""" start="00:00:01.875" video="mainVideo-collab" id="subtitle"]]
[[!template text="""and Documenting using org-babel.""" start="00:00:03.600" video="mainVideo-collab" id="subtitle"]]
[[!template text="""My name is Lukas Bossert, and I'm""" start="00:00:06.040" video="mainVideo-collab" id="subtitle"]]
@@ -35,9 +32,7 @@
[[!template text="""All right.""" start="00:01:13.360" video="mainVideo-collab" id="subtitle"]]
[[!template text="""Let's dive in to that.""" start="00:01:14.240" video="mainVideo-collab" id="subtitle"]]
-[[!template new="1" text="""Org Mode""" start="00:01:16.080" video="mainVideo-collab" id="subtitle"]]
-
-[[!template text="""Jonathan, can you give us an introduction about Org Mode?""" start="00:01:16.080" video="mainVideo-collab" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Org Mode""" start="00:01:16.080" video="mainVideo-collab" id="subtitle"]]</div>[[!template text="""Jonathan, can you give us an introduction about Org Mode?""" start="00:01:16.080" video="mainVideo-collab" id="subtitle"]]
[[!template text="""[Jonathan]: Of course.""" start="00:01:19.920" video="mainVideo-collab" id="subtitle"]]
[[!template text="""So in case anyone isn't familiar with it,""" start="00:01:20.440" video="mainVideo-collab" id="subtitle"]]
[[!template text="""Org Mode, in the words of Carsten Dominik,""" start="00:01:23.080" video="mainVideo-collab" id="subtitle"]]
@@ -62,9 +57,7 @@
[[!template text="""So what you see here is the plain text underneath it.""" start="00:02:10.800" video="mainVideo-collab" id="subtitle"]]
[[!template text="""So this is Org Mode.""" start="00:02:14.720" video="mainVideo-collab" id="subtitle"]]
-[[!template new="1" text="""Working together""" start="00:02:18.960" video="mainVideo-collab" id="subtitle"]]
-
-[[!template text="""And Jonathan, since we kind of already""" start="00:02:18.960" video="mainVideo-collab" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Working together""" start="00:02:18.960" video="mainVideo-collab" id="subtitle"]]</div>[[!template text="""And Jonathan, since we kind of already""" start="00:02:18.960" video="mainVideo-collab" id="subtitle"]]
[[!template text="""did the introduction together, should we""" start="00:02:21.920" video="mainVideo-collab" id="subtitle"]]
[[!template text="""also do the working part together?""" start="00:02:26.120" video="mainVideo-collab" id="subtitle"]]
[[!template text="""[Jonathan]: Of course.""" start="00:02:28.761" video="mainVideo-collab" id="subtitle"]]
@@ -152,9 +145,7 @@
[[!template text="""50 items is fine.""" start="00:06:23.160" video="mainVideo-collab" id="subtitle"]]
[[!template text="""So what do we see here, Jonathan?""" start="00:06:25.360" video="mainVideo-collab" id="subtitle"]]
-[[!template new="1" text="""Data cleaning""" start="00:06:27.840" video="mainVideo-collab" id="subtitle"]]
-
-[[!template text="""[Jonathan]: Right.""" start="00:06:27.840" video="mainVideo-collab" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Data cleaning""" start="00:06:27.840" video="mainVideo-collab" id="subtitle"]]</div>[[!template text="""[Jonathan]: Right.""" start="00:06:27.840" video="mainVideo-collab" id="subtitle"]]
[[!template text="""So the first thing we see when we look at this""" start="00:06:28.320" video="mainVideo-collab" id="subtitle"]]
[[!template text="""is a couple of Q codes at the top,""" start="00:06:31.240" video="mainVideo-collab" id="subtitle"]]
[[!template text="""which are an artifact of Wikidata.""" start="00:06:33.308" video="mainVideo-collab" id="subtitle"]]
@@ -194,9 +185,7 @@
[[!template text="""and consortia.""" start="00:07:59.960" video="mainVideo-collab" id="subtitle"]]
[[!template text="""Very nice.""" start="00:08:02.760" video="mainVideo-collab" id="subtitle"]]
-[[!template new="1" text="""Processing""" start="00:08:04.040" video="mainVideo-collab" id="subtitle"]]
-
-[[!template text="""So let's come to our main part, doing some processing.""" start="00:08:04.040" video="mainVideo-collab" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Processing""" start="00:08:04.040" video="mainVideo-collab" id="subtitle"]]</div>[[!template text="""So let's come to our main part, doing some processing.""" start="00:08:04.040" video="mainVideo-collab" id="subtitle"]]
[[!template text="""Let me give you a headline here, process the data.""" start="00:08:08.720" video="mainVideo-collab" id="subtitle"]]
[[!template text="""What do you want to do first?""" start="00:08:13.640" video="mainVideo-collab" id="subtitle"]]
[[!template text="""[Jonathan]: This is not a very complicated data set,""" start="00:08:15.520" video="mainVideo-collab" id="subtitle"]]
@@ -283,9 +272,7 @@
[[!template text="""this also will be updated once it's exported.""" start="00:12:30.400" video="mainVideo-collab" id="subtitle"]]
[[!template text="""Very nice, Jonathan.""" start="00:12:35.080" video="mainVideo-collab" id="subtitle"]]
-[[!template new="1" text="""Visualization""" start="00:12:36.040" video="mainVideo-collab" id="subtitle"]]
-
-[[!template text="""But I think we did a lot of analysis""" start="00:12:36.040" video="mainVideo-collab" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Visualization""" start="00:12:36.040" video="mainVideo-collab" id="subtitle"]]</div>[[!template text="""But I think we did a lot of analysis""" start="00:12:36.040" video="mainVideo-collab" id="subtitle"]]
[[!template text="""on text and counting things.""" start="00:12:38.975" video="mainVideo-collab" id="subtitle"]]
[[!template text="""Can we also do something more visual?""" start="00:12:41.080" video="mainVideo-collab" id="subtitle"]]
[[!template text="""Show me something.""" start="00:12:43.680" video="mainVideo-collab" id="subtitle"]]
@@ -318,9 +305,7 @@
[[!template text="""and I get a nice plot of the network below our cell.""" start="00:13:52.920" video="mainVideo-collab" id="subtitle"]]
[[!template text="""So this is very nice indeed.""" start="00:13:59.160" video="mainVideo-collab" id="subtitle"]]
-[[!template new="1" text="""Preserve""" start="00:14:01.760" video="mainVideo-collab" id="subtitle"]]
-
-[[!template text="""So I think it's about time to wrap it up and to export""" start="00:14:01.760" video="mainVideo-collab" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Preserve""" start="00:14:01.760" video="mainVideo-collab" id="subtitle"]]</div>[[!template text="""So I think it's about time to wrap it up and to export""" start="00:14:01.760" video="mainVideo-collab" id="subtitle"]]
[[!template text="""and to preserve the data and the documentation""" start="00:14:05.200" video="mainVideo-collab" id="subtitle"]]
[[!template text="""that we have in our very last step, calling preserve.""" start="00:14:07.960" video="mainVideo-collab" id="subtitle"]]
[[!template text="""So I would like to do it in two steps.""" start="00:14:13.080" video="mainVideo-collab" id="subtitle"]]
@@ -413,7 +398,7 @@
[[!template text="""Thanks for listening.""" start="00:19:01.120" video="mainVideo-collab" id="subtitle"]]
[[!template text="""[Jonathan]: Thank you all, have a good day.""" start="00:19:05.720" video="mainVideo-collab" id="subtitle"]]
-
+</div>
Captioner: amine
diff --git a/2023/info/collab-before.md b/2023/info/collab-before.md
index 22e68600..a4d8979c 100644
--- a/2023/info/collab-before.md
+++ b/2023/info/collab-before.md
@@ -1,13 +1,13 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
[[!toc ]]
-Format: 20-min talk; Q&A: ask questions via Etherpad/IRC; we'll e-mail the speaker and post answers on this wiki page after the conference
+Format: 20-min talk ; Q&A: ask questions via Etherpad/IRC; we'll e-mail the speaker and post answers on this wiki page after the conference
Status: All done
-<div class="vid"><video controls preload="none" id="collab-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-collab--collaborative-data-processing-and-documenting-using-orgbabel--jonathan-hartman-lukas-c-bossert--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-collab--collaborative-data-processing-and-documenting-using-orgbabel--jonathan-hartman-lukas-c-bossert--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-collab--collaborative-data-processing-and-documenting-using-orgbabel--jonathan-hartman-lukas-c-bossert--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="collab-mainVideo" data="""
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-collab"><source src="https://media.emacsconf.org/2023/emacsconf-2023-collab--collaborative-data-processing-and-documenting-using-orgbabel--jonathan-hartman-lukas-c-bossert--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-collab--collaborative-data-processing-and-documenting-using-orgbabel--jonathan-hartman-lukas-c-bossert--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-collab--collaborative-data-processing-and-documenting-using-orgbabel--jonathan-hartman-lukas-c-bossert--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="mainVideo-collab" data="""
00:00.000 Introduction
01:16.080 Org Mode
02:18.960 Working together
@@ -16,6 +16,6 @@ Status: All done
12:36.040 Visualization
14:01.760 Preserve
-"""]]<div></div>Duration: 19:16 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-collab--collaborative-data-processing-and-documenting-using-orgbabel--jonathan-hartman-lukas-c-bossert--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-collab--collaborative-data-processing-and-documenting-using-orgbabel--jonathan-hartman-lukas-c-bossert--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-collab--collaborative-data-processing-and-documenting-using-orgbabel--jonathan-hartman-lukas-c-bossert--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-collab--collaborative-data-processing-and-documenting-using-orgbabel--jonathan-hartman-lukas-c-bossert--main.opus">Download --main.opus (11MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-collab--collaborative-data-processing-and-documenting-using-orgbabel--jonathan-hartman-lukas-c-bossert--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-collab--collaborative-data-processing-and-documenting-using-orgbabel--jonathan-hartman-lukas-c-bossert--main.webm">Download --main.webm (62MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-collab--collaborative-data-processing-and-documenting-using-orgbabel--jonathan-hartman-lukas-c-bossert--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-collab--collaborative-data-processing-and-documenting-using-orgbabel--jonathan-hartman-lukas-c-bossert--pad.md">Download --pad.md</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-collab--collaborative-data-processing-and-documenting-using-orgbabel--jonathan-hartman-lukas-c-bossert--room-noise.webm">Download --room-noise.webm</a></li><li><a href="https://toobnix.org/w/7AAwoawr5MXNSrqiHJQoak">View on Toobnix</a></li></ul></div></div>
+"""]]<div></div>Duration: 19:16 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2023-collab">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-collab--collaborative-data-processing-and-documenting-using-orgbabel--jonathan-hartman-lukas-c-bossert--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-collab--collaborative-data-processing-and-documenting-using-orgbabel--jonathan-hartman-lukas-c-bossert--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-collab--collaborative-data-processing-and-documenting-using-orgbabel--jonathan-hartman-lukas-c-bossert--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-collab--collaborative-data-processing-and-documenting-using-orgbabel--jonathan-hartman-lukas-c-bossert--main.opus">Download --main.opus (11MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-collab--collaborative-data-processing-and-documenting-using-orgbabel--jonathan-hartman-lukas-c-bossert--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-collab--collaborative-data-processing-and-documenting-using-orgbabel--jonathan-hartman-lukas-c-bossert--main.webm">Download --main.webm (62MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-collab--collaborative-data-processing-and-documenting-using-orgbabel--jonathan-hartman-lukas-c-bossert--room-noise.webm">Download --room-noise.webm</a></li><li><a href="https://toobnix.org/w/7AAwoawr5MXNSrqiHJQoak">View on Toobnix</a></li><li><a href="https://www.youtube.com/watch?v=fz7-Kd83IjM">View on Youtube</a></li></ul></div></div>
# Description
<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/info/collab-nav.md b/2023/info/collab-nav.md
index 55c61f3f..66f593f6 100644
--- a/2023/info/collab-nav.md
+++ b/2023/info/collab-nav.md
@@ -3,5 +3,5 @@
Back to the [[talks]]
Previous by track: <a href="/2023/talks/nabokov">Why Nabokov would use Org-Mode if he were writing today</a>
Next by track: <a href="/2023/talks/solo">How I play TTRPGs in Emacs</a>
-Track: <span class="sched-track General">General</span>
+Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2023/watch/gen">Watch</a></strong>
</div>
diff --git a/2023/info/core-after.md b/2023/info/core-after.md
index 13fa508a..6a24fa1c 100644
--- a/2023/info/core-after.md
+++ b/2023/info/core-after.md
@@ -1,8 +1,7 @@
<!-- Automatically generated by emacsconf-publish-after-page -->
-<a name="core-mainVideo-transcript"></a>
-# Transcript (unedited)
+<div class="transcript transcript-mainVideo"><a name="core-mainVideo-transcript"></a><h1>Transcript (unedited)</h1>
[[!template text="""All right. Hi again, everyone.""" start="00:00:02.540" video="mainVideo-core" id="subtitle"]]
[[!template text="""It's been a while. Well,""" start="00:00:03.840" video="mainVideo-core" id="subtitle"]]
@@ -1559,7 +1558,7 @@
[[!template text="""felt like it was tiring to stay and listen to""" start="01:07:08.040" video="mainVideo-core" id="subtitle"]]
[[!template text="""your answers. So thank you so much Stefan.""" start="01:07:10.900" video="mainVideo-core" id="subtitle"]]
-Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202023%20core%3A%20Emacs%20core%20development%3A%20how%20it%20works)
+</div>Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202023%20core%3A%20Emacs%20core%20development%3A%20how%20it%20works)
<!-- End of emacsconf-publish-after-page -->
diff --git a/2023/info/core-before.md b/2023/info/core-before.md
index dfa57577..7360c892 100644
--- a/2023/info/core-before.md
+++ b/2023/info/core-before.md
@@ -1,12 +1,12 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
[[!toc ]]
-Format: 68-min talk; Q&A: BigBlueButton conference room
+Format: 68-min talk ; Q&A: BigBlueButton conference room
Status: Q&A to be extracted from the room recordings
-<div class="vid"><video controls preload="none" id="core-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-core--emacs-core-development-how-it-works--stefan-kangas--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-core--emacs-core-development-how-it-works--stefan-kangas--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:07:13 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-core--emacs-core-development-how-it-works--stefan-kangas--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-core--emacs-core-development-how-it-works--stefan-kangas--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-core--emacs-core-development-how-it-works--stefan-kangas--main.json">Download --main.json (2.4MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-core--emacs-core-development-how-it-works--stefan-kangas--main.opus">Download --main.opus (23MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-core--emacs-core-development-how-it-works--stefan-kangas--main.vtt">Download --main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-core--emacs-core-development-how-it-works--stefan-kangas--main.webm">Download --main.webm (211MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-core--emacs-core-development-how-it-works--stefan-kangas--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-core--emacs-core-development-how-it-works--stefan-kangas--pad.md">Download --pad.md</a></li><li><a href="https://toobnix.org/w/m4XmrmE9Geat54AKT1RQaH">View on Toobnix</a></li></ul></div></div>
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-core"><source src="https://media.emacsconf.org/2023/emacsconf-2023-core--emacs-core-development-how-it-works--stefan-kangas--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-core--emacs-core-development-how-it-works--stefan-kangas--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:07:13 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2023-core">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-core--emacs-core-development-how-it-works--stefan-kangas--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-core--emacs-core-development-how-it-works--stefan-kangas--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-core--emacs-core-development-how-it-works--stefan-kangas--main.json">Download --main.json (2.4MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-core--emacs-core-development-how-it-works--stefan-kangas--main.opus">Download --main.opus (23MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-core--emacs-core-development-how-it-works--stefan-kangas--main.vtt">Download --main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-core--emacs-core-development-how-it-works--stefan-kangas--main.webm">Download --main.webm (211MB)</a></li><li><a href="https://toobnix.org/w/m4XmrmE9Geat54AKT1RQaH">View on Toobnix</a></li><li><a href="https://www.youtube.com/watch?v=2izQJiuL0vA">View on Youtube</a></li></ul></div></div>
# Description
<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/info/core-nav.md b/2023/info/core-nav.md
index 57508c7e..5eb44913 100644
--- a/2023/info/core-nav.md
+++ b/2023/info/core-nav.md
@@ -3,5 +3,5 @@
Back to the [[talks]]
Previous by track: <a href="/2023/talks/devel">Emacs development updates</a>
Next by track: <a href="/2023/talks/hyperamp">Top 10 ways Hyperbole amps up Emacs</a>
-Track: <span class="sched-track General">General</span>
+Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2023/watch/gen">Watch</a></strong>
</div>
diff --git a/2023/info/cubing-after.md b/2023/info/cubing-after.md
index dae3e345..a0ac454b 100644
--- a/2023/info/cubing-after.md
+++ b/2023/info/cubing-after.md
@@ -1,13 +1,10 @@
<!-- Automatically generated by emacsconf-publish-after-page -->
-<a name="cubing-mainVideo-transcript"></a>
-# Transcript
+<div class="transcript transcript-mainVideo"><a name="cubing-mainVideo-transcript"></a><h1>Transcript</h1>
-[[!template new="1" text="""Introduction""" start="00:00:00.000" video="mainVideo-cubing" id="subtitle"]]
-
-[[!template text="""Hello, everyone, and welcome to Speedcubing in Emacs.""" start="00:00:00.000" video="mainVideo-cubing" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Introduction""" start="00:00:00.000" video="mainVideo-cubing" id="subtitle"]]</div>[[!template text="""Hello, everyone, and welcome to Speedcubing in Emacs.""" start="00:00:00.000" video="mainVideo-cubing" id="subtitle"]]
[[!template text="""First of all, a little bit about myself.""" start="00:00:08.360" video="mainVideo-cubing" id="subtitle"]]
[[!template text="""My name is Vasilij Schneidermann. Online, I go by wasamasa.""" start="00:00:10.120" video="mainVideo-cubing" id="subtitle"]]
[[!template text="""I'm 31 years old. I work in information security,""" start="00:00:13.680" video="mainVideo-cubing" id="subtitle"]]
@@ -39,9 +36,7 @@
[[!template text="""for example the cstimer software""" start="00:01:31.240" video="mainVideo-cubing" id="subtitle"]]
[[!template text="""or the twisty-timer app on Android.""" start="00:01:33.240" video="mainVideo-cubing" id="subtitle"]]
-[[!template new="1" text="""Cubing in Emacs""" start="00:01:35.400" video="mainVideo-cubing" id="subtitle"]]
-
-[[!template text="""To my surprise, I did not find a single decent option""" start="00:01:35.400" video="mainVideo-cubing" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Cubing in Emacs""" start="00:01:35.400" video="mainVideo-cubing" id="subtitle"]]</div>[[!template text="""To my surprise, I did not find a single decent option""" start="00:01:35.400" video="mainVideo-cubing" id="subtitle"]]
[[!template text="""inside Emacs, so this is basically a case study""" start="00:01:39.320" video="mainVideo-cubing" id="subtitle"]]
[[!template text="""how to do better. For this, I wanted to make use of""" start="00:01:41.960" video="mainVideo-cubing" id="subtitle"]]
[[!template text="""all the cool new Emacs features that appeared,""" start="00:01:45.000" video="mainVideo-cubing" id="subtitle"]]
@@ -50,9 +45,7 @@
[[!template text="""and the recently added sqlite-mode.""" start="00:01:53.600" video="mainVideo-cubing" id="subtitle"]]
[[!template text="""And most importantly it was about having fun.""" start="00:01:56.440" video="mainVideo-cubing" id="subtitle"]]
-[[!template new="1" text="""Prior art""" start="00:02:01.160" video="mainVideo-cubing" id="subtitle"]]
-
-[[!template text="""So here's a full list of prior art,""" start="00:02:01.160" video="mainVideo-cubing" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Prior art""" start="00:02:01.160" video="mainVideo-cubing" id="subtitle"]]</div>[[!template text="""So here's a full list of prior art,""" start="00:02:01.160" video="mainVideo-cubing" id="subtitle"]]
[[!template text="""I will not go into detail about this,""" start="00:02:02.760" video="mainVideo-cubing" id="subtitle"]]
[[!template text="""but basically we have things solving""" start="00:02:04.280" video="mainVideo-cubing" id="subtitle"]]
[[!template text="""very different parts of this,""" start="00:02:06.240" video="mainVideo-cubing" id="subtitle"]]
@@ -66,9 +59,7 @@
[[!template text="""which kind of surprised me.""" start="00:02:25.920" video="mainVideo-cubing" id="subtitle"]]
[[!template text="""So I present the `wca-prep` package.""" start="00:02:28.120" video="mainVideo-cubing" id="subtitle"]]
-[[!template new="1" text="""The name""" start="00:02:32.040" video="mainVideo-cubing" id="subtitle"]]
-
-[[!template text="""So the name, I found it difficult""" start="00:02:32.040" video="mainVideo-cubing" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""The name""" start="00:02:32.040" video="mainVideo-cubing" id="subtitle"]]</div>[[!template text="""So the name, I found it difficult""" start="00:02:32.040" video="mainVideo-cubing" id="subtitle"]]
[[!template text="""to come up with a good name and so I looked""" start="00:02:35.560" video="mainVideo-cubing" id="subtitle"]]
[[!template text="""and I saw, well there's this World Cube Association""" start="00:02:39.960" video="mainVideo-cubing" id="subtitle"]]
[[!template text="""that holds these competitions where you compete.""" start="00:02:42.560" video="mainVideo-cubing" id="subtitle"]]
@@ -86,9 +77,7 @@
[[!template text="""because it helps me prepare for this kind of competition""" start="00:03:10.920" video="mainVideo-cubing" id="subtitle"]]
[[!template text="""and this limited the scope significantly,""" start="00:03:13.640" video="mainVideo-cubing" id="subtitle"]]
-[[!template new="1" text="""What's in wca-prep""" start="00:03:16.520" video="mainVideo-cubing" id="subtitle"]]
-
-[[!template text="""I have a scrambler, visualization of the scramble,""" start="00:03:16.520" video="mainVideo-cubing" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""What's in wca-prep""" start="00:03:16.520" video="mainVideo-cubing" id="subtitle"]]</div>[[!template text="""I have a scrambler, visualization of the scramble,""" start="00:03:16.520" video="mainVideo-cubing" id="subtitle"]]
[[!template text="""timer, and statistics.""" start="00:03:19.000" video="mainVideo-cubing" id="subtitle"]]
[[!template text="""I excluded pretty much everything else I've seen.""" start="00:03:23.320" video="mainVideo-cubing" id="subtitle"]]
[[!template text="""For this reason, I only tried to focus on""" start="00:03:25.560" video="mainVideo-cubing" id="subtitle"]]
@@ -99,15 +88,11 @@
[[!template text="""no exotic events, and no specialized scrambles""" start="00:03:40.480" video="mainVideo-cubing" id="subtitle"]]
[[!template text="""that are only good for practicing specific algorithms.""" start="00:03:43.920" video="mainVideo-cubing" id="subtitle"]]
-[[!template new="1" text="""Demo""" start="00:03:49.240" video="mainVideo-cubing" id="subtitle"]]
-
-[[!template text="""So at this point the organizer should hopefully show""" start="00:03:49.240" video="mainVideo-cubing" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Demo""" start="00:03:49.240" video="mainVideo-cubing" id="subtitle"]]</div>[[!template text="""So at this point the organizer should hopefully show""" start="00:03:49.240" video="mainVideo-cubing" id="subtitle"]]
[[!template text="""a small video I've prepared, a one minute video showing how""" start="00:03:54.200" video="mainVideo-cubing" id="subtitle"]]
[[!template text="""I actually use this to solve a cube and to time my solve.""" start="00:03:58.000" video="mainVideo-cubing" id="subtitle"]]
-[[!template new="1" text="""Challenges: Representing the cube""" start="00:05:15.240" video="mainVideo-cubing" id="subtitle"]]
-
-[[!template text="""Okay, so building this thing, there were several challenges.""" start="00:05:15.240" video="mainVideo-cubing" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Challenges: Representing the cube""" start="00:05:15.240" video="mainVideo-cubing" id="subtitle"]]</div>[[!template text="""Okay, so building this thing, there were several challenges.""" start="00:05:15.240" video="mainVideo-cubing" id="subtitle"]]
[[!template text="""The first one was how do I even represent""" start="00:05:18.509" video="mainVideo-cubing" id="subtitle"]]
[[!template text="""the state of a Rubik's cube.""" start="00:05:20.509" video="mainVideo-cubing" id="subtitle"]]
[[!template text="""For this there are many possible representations,""" start="00:05:22.469" video="mainVideo-cubing" id="subtitle"]]
@@ -148,9 +133,7 @@
[[!template text="""mathematically speaking, they are the same thing,""" start="00:07:03.869" video="mainVideo-cubing" id="subtitle"]]
[[!template text="""they just look very, very different.""" start="00:07:07.349" video="mainVideo-cubing" id="subtitle"]]
-[[!template new="1" text="""Scrambling""" start="00:07:09.269" video="mainVideo-cubing" id="subtitle"]]
-
-[[!template text="""So the scramble algorithm itself,""" start="00:07:09.269" video="mainVideo-cubing" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Scrambling""" start="00:07:09.269" video="mainVideo-cubing" id="subtitle"]]</div>[[!template text="""So the scramble algorithm itself,""" start="00:07:09.269" video="mainVideo-cubing" id="subtitle"]]
[[!template text="""I pondered how this would even be done. In the competitions,""" start="00:07:14.309" video="mainVideo-cubing" id="subtitle"]]
[[!template text="""They do this in a very, very elaborate way.""" start="00:07:19.429" video="mainVideo-cubing" id="subtitle"]]
[[!template text="""They generate a random cube,""" start="00:07:21.589" video="mainVideo-cubing" id="subtitle"]]
@@ -172,9 +155,7 @@
[[!template text="""canonicalizing and repeating""" start="00:08:02.389" video="mainVideo-cubing" id="subtitle"]]
[[!template text="""until enough have been generated.""" start="00:08:04.029" video="mainVideo-cubing" id="subtitle"]]
-[[!template new="1" text="""Visualization""" start="00:08:09.549" video="mainVideo-cubing" id="subtitle"]]
-
-[[!template text="""For the visualization I had to figure out""" start="00:08:09.549" video="mainVideo-cubing" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Visualization""" start="00:08:09.549" video="mainVideo-cubing" id="subtitle"]]</div>[[!template text="""For the visualization I had to figure out""" start="00:08:09.549" video="mainVideo-cubing" id="subtitle"]]
[[!template text="""something else too complicated.""" start="00:08:13.149" video="mainVideo-cubing" id="subtitle"]]
[[!template text="""For this, I tried to figure out""" start="00:08:14.509" video="mainVideo-cubing" id="subtitle"]]
[[!template text="""where every facelift would end up in the puzzle view""" start="00:08:17.229" video="mainVideo-cubing" id="subtitle"]]
@@ -192,9 +173,7 @@
[[!template text="""that does not have the same color mappings as I do,""" start="00:08:51.589" video="mainVideo-cubing" id="subtitle"]]
[[!template text="""then you should be able to fix this.""" start="00:08:54.690" video="mainVideo-cubing" id="subtitle"]]
-[[!template new="1" text="""UI with Transient""" start="00:08:56.469" video="mainVideo-cubing" id="subtitle"]]
-
-[[!template text="""Next challenge was to build""" start="00:08:56.469" video="mainVideo-cubing" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""UI with Transient""" start="00:08:56.469" video="mainVideo-cubing" id="subtitle"]]</div>[[!template text="""Next challenge was to build""" start="00:08:56.469" video="mainVideo-cubing" id="subtitle"]]
[[!template text="""a beautiful intuitive UI with Transient.""" start="00:09:01.429" video="mainVideo-cubing" id="subtitle"]]
[[!template text="""The reason why I chose this is""" start="00:09:03.949" video="mainVideo-cubing" id="subtitle"]]
[[!template text="""because it would be self-documenting and Magit-style,""" start="00:09:06.869" video="mainVideo-cubing" id="subtitle"]]
@@ -217,9 +196,7 @@
[[!template text="""to have an executable reference basically""" start="00:09:50.589" video="mainVideo-cubing" id="subtitle"]]
[[!template text="""and try to improve my use of it.""" start="00:09:53.429" video="mainVideo-cubing" id="subtitle"]]
-[[!template new="1" text="""Book-keeping with SQLite""" start="00:09:55.629" video="mainVideo-cubing" id="subtitle"]]
-
-[[!template text="""For the book-keeping, I used SQLite.""" start="00:09:55.629" video="mainVideo-cubing" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Book-keeping with SQLite""" start="00:09:55.629" video="mainVideo-cubing" id="subtitle"]]</div>[[!template text="""For the book-keeping, I used SQLite.""" start="00:09:55.629" video="mainVideo-cubing" id="subtitle"]]
[[!template text="""This is a very recent addition to Emacs,""" start="00:10:01.549" video="mainVideo-cubing" id="subtitle"]]
[[!template text="""it only appeared in the current major version.""" start="00:10:04.549" video="mainVideo-cubing" id="subtitle"]]
[[!template text="""It's still very early days.""" start="00:10:07.309" video="mainVideo-cubing" id="subtitle"]]
@@ -247,9 +224,7 @@
[[!template text="""and don't have to run into foot guns""" start="00:11:07.389" video="mainVideo-cubing" id="subtitle"]]
[[!template text="""with Lisp-style serialization, deserialization.""" start="00:11:10.469" video="mainVideo-cubing" id="subtitle"]]
-[[!template new="1" text="""Conclusion""" start="00:11:12.629" video="mainVideo-cubing" id="subtitle"]]
-
-[[!template text="""So yes, that concludes it so far.""" start="00:11:12.629" video="mainVideo-cubing" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Conclusion""" start="00:11:12.629" video="mainVideo-cubing" id="subtitle"]]</div>[[!template text="""So yes, that concludes it so far.""" start="00:11:12.629" video="mainVideo-cubing" id="subtitle"]]
[[!template text="""So what did I learn from this exercise?""" start="00:11:18.189" video="mainVideo-cubing" id="subtitle"]]
[[!template text="""Well, there are still plenty of packages""" start="00:11:22.189" video="mainVideo-cubing" id="subtitle"]]
[[!template text="""for Emacs to be written.""" start="00:11:24.509" video="mainVideo-cubing" id="subtitle"]]
@@ -300,7 +275,7 @@
[[!template text="""And this concludes the talk.""" start="00:13:22.429" video="mainVideo-cubing" id="subtitle"]]
[[!template text="""Thank you very much.""" start="00:13:26.629" video="mainVideo-cubing" id="subtitle"]]
-
+</div>
Captioner: sachac
diff --git a/2023/info/cubing-before.md b/2023/info/cubing-before.md
index c1dbf0c3..3a3af241 100644
--- a/2023/info/cubing-before.md
+++ b/2023/info/cubing-before.md
@@ -1,13 +1,13 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
[[!toc ]]
-Format: 14-min talk; Q&A: IRC
+Format: 14-min talk ; Q&A: IRC
Status: All done
-<div class="vid"><video controls preload="none" id="cubing-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="cubing-mainVideo" data="""
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-cubing"><source src="https://media.emacsconf.org/2023/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="mainVideo-cubing" data="""
00:00.000 Introduction
01:35.400 Cubing in Emacs
02:01.160 Prior art
@@ -21,6 +21,6 @@ Status: All done
09:55.580 Book-keeping with SQLite
11:12.580 Conclusion
-"""]]<div></div>Duration: 13:35 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--alternative.webm">Download --alternative.webm (16MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--main.opus">Download --main.opus (8.6MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--main.webm">Download --main.webm (57MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--pad.md">Download --pad.md</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--presentation.webm">Download --presentation.webm (16MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--solve-demo.webm">Download --solve-demo.webm (11MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann.pdf">Download .pdf</a></li><li><a href="https://toobnix.org/w/2DYX2o8kB1Rv8Mqaj7H1Dx">View on Toobnix</a></li></ul></div></div>
+"""]]<div></div>Duration: 13:35 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2023-cubing">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--alternative.webm">Download --alternative.webm (16MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--main.opus">Download --main.opus (8.6MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--main.webm">Download --main.webm (57MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--presentation.webm">Download --presentation.webm (16MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--solve-demo.webm">Download --solve-demo.webm (11MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann.pdf">Download .pdf</a></li><li><a href="https://toobnix.org/w/2DYX2o8kB1Rv8Mqaj7H1Dx">View on Toobnix</a></li><li><a href="https://www.youtube.com/watch?v=Q5HPmyaiu4g">View on Youtube</a></li></ul></div></div>
# Description
<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/info/cubing-nav.md b/2023/info/cubing-nav.md
index 3f0e5db3..b0bbb1cf 100644
--- a/2023/info/cubing-nav.md
+++ b/2023/info/cubing-nav.md
@@ -3,5 +3,5 @@
Back to the [[talks]]
Previous by track: <a href="/2023/talks/poltys">The browser in a buffer</a>
Next by track: <a href="/2023/talks/emms">Emacs MultiMedia System (EMMS)</a>
-Track: <span class="sched-track General">General</span>
+Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2023/watch/gen">Watch</a></strong>
</div>
diff --git a/2023/info/devel-after.md b/2023/info/devel-after.md
index 297fbe3d..afb832aa 100644
--- a/2023/info/devel-after.md
+++ b/2023/info/devel-after.md
@@ -1,8 +1,7 @@
<!-- Automatically generated by emacsconf-publish-after-page -->
-<a name="devel-mainVideo-transcript"></a>
-# Transcript (unedited)
+<div class="transcript transcript-mainVideo"><a name="devel-mainVideo-transcript"></a><h1>Transcript (unedited)</h1>
[[!template text="""2 seconds. All right. I think we are live.""" start="00:00:02.419" video="mainVideo-devel" id="subtitle"]]
[[!template text="""Yes. So, hi again, everyone.""" start="00:00:08.480" video="mainVideo-devel" id="subtitle"]]
@@ -555,7 +554,7 @@
[[!template text="""All right, John. Thank you so much.""" start="00:23:19.700" video="mainVideo-devel" id="subtitle"]]
[[!template text="""Bye bye. Bye bye.""" start="00:23:20.860" video="mainVideo-devel" id="subtitle"]]
-Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202023%20devel%3A%20Emacs%20development%20updates)
+</div>Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202023%20devel%3A%20Emacs%20development%20updates)
<!-- End of emacsconf-publish-after-page -->
diff --git a/2023/info/devel-before.md b/2023/info/devel-before.md
index 5429f360..99d2796d 100644
--- a/2023/info/devel-before.md
+++ b/2023/info/devel-before.md
@@ -1,12 +1,12 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
[[!toc ]]
-Format: 24-min talk; Q&A: BigBlueButton conference room
+Format: 24-min talk ; Q&A: BigBlueButton conference room
Status: Q&A to be extracted from the room recordings
-<div class="vid"><video controls preload="none" id="devel-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-devel--emacs-development-updates--john-wiegley--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-devel--emacs-development-updates--john-wiegley--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 23:22 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-devel--emacs-development-updates--john-wiegley--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-devel--emacs-development-updates--john-wiegley--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-devel--emacs-development-updates--john-wiegley--main.json">Download --main.json</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-devel--emacs-development-updates--john-wiegley--main.opus">Download --main.opus (7.8MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-devel--emacs-development-updates--john-wiegley--main.vtt">Download --main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-devel--emacs-development-updates--john-wiegley--main.webm">Download --main.webm (38MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-devel--emacs-development-updates--john-wiegley--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-devel--emacs-development-updates--john-wiegley--pad.md">Download --pad.md</a></li><li><a href="https://toobnix.org/w/57HSebb9a9JZynh2B3ehze">View on Toobnix</a></li></ul></div></div>
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-devel"><source src="https://media.emacsconf.org/2023/emacsconf-2023-devel--emacs-development-updates--john-wiegley--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-devel--emacs-development-updates--john-wiegley--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 23:22 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2023-devel">Open Etherpad</a></li><li><a href="https://bbb.emacsverse.org/playback/presentation/2.0/playback.html?meetingId=f81dbb8e579499f903915b7fbead3f1f959d3019-1701547477151">Play recording from BigBlueButton</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-devel--emacs-development-updates--john-wiegley--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-devel--emacs-development-updates--john-wiegley--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-devel--emacs-development-updates--john-wiegley--main.json">Download --main.json</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-devel--emacs-development-updates--john-wiegley--main.opus">Download --main.opus (7.8MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-devel--emacs-development-updates--john-wiegley--main.vtt">Download --main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-devel--emacs-development-updates--john-wiegley--main.webm">Download --main.webm (38MB)</a></li><li><a href="https://toobnix.org/w/57HSebb9a9JZynh2B3ehze">View on Toobnix</a></li><li><a href="https://www.youtube.com/watch?v=SPSoRZVJUf8">View on Youtube</a></li></ul></div></div>
# Description
<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/info/devel-nav.md b/2023/info/devel-nav.md
index 451e821f..f8671bdc 100644
--- a/2023/info/devel-nav.md
+++ b/2023/info/devel-nav.md
@@ -3,5 +3,5 @@
Back to the [[talks]]
Previous by track: <a href="/2023/talks/unentangling">(Un)entangling projects and repos</a>
Next by track: <a href="/2023/talks/core">Emacs core development: how it works</a>
-Track: <span class="sched-track General">General</span>
+Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2023/watch/gen">Watch</a></strong>
</div>
diff --git a/2023/info/doc-after.md b/2023/info/doc-after.md
index 7df3351e..761d1803 100644
--- a/2023/info/doc-after.md
+++ b/2023/info/doc-after.md
@@ -1,13 +1,10 @@
<!-- Automatically generated by emacsconf-publish-after-page -->
-<a name="doc-mainVideo-transcript"></a>
-# Transcript
+<div class="transcript transcript-mainVideo"><a name="doc-mainVideo-transcript"></a><h1>Transcript</h1>
-[[!template new="1" text="""Introduction""" start="00:00:00.000" video="mainVideo-doc" id="subtitle"]]
-
-[[!template text="""Hello, everyone.""" start="00:00:00.000" video="mainVideo-doc" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Introduction""" start="00:00:00.000" video="mainVideo-doc" id="subtitle"]]</div>[[!template text="""Hello, everyone.""" start="00:00:00.000" video="mainVideo-doc" id="subtitle"]]
[[!template text="""This talk is on literate documentation""" start="00:00:04.320" video="mainVideo-doc" id="subtitle"]]
[[!template text="""with Emacs and org-mode.""" start="00:00:07.280" video="mainVideo-doc" id="subtitle"]]
[[!template text="""I'm going to take just a moment here""" start="00:00:10.320" video="mainVideo-doc" id="subtitle"]]
@@ -27,9 +24,7 @@
[[!template text="""It can be an outliner, a to-do list manager,""" start="00:00:51.160" video="mainVideo-doc" id="subtitle"]]
[[!template text="""an agenda, organizer, and much more.""" start="00:00:54.240" video="mainVideo-doc" id="subtitle"]]
-[[!template new="1" text="""Org Babel and literate programming""" start="00:00:57.760" video="mainVideo-doc" id="subtitle"]]
-
-[[!template text="""Today, we're going to be demonstrating""" start="00:00:57.760" video="mainVideo-doc" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Org Babel and literate programming""" start="00:00:57.760" video="mainVideo-doc" id="subtitle"]]</div>[[!template text="""Today, we're going to be demonstrating""" start="00:00:57.760" video="mainVideo-doc" id="subtitle"]]
[[!template text="""what I consider to be org-mode's killer feature called""" start="00:00:59.600" video="mainVideo-doc" id="subtitle"]]
[[!template text="""Org Babel.""" start="00:01:03.360" video="mainVideo-doc" id="subtitle"]]
[[!template text="""Babel allows you to take human language prose,""" start="00:01:04.840" video="mainVideo-doc" id="subtitle"]]
@@ -57,9 +52,7 @@
[[!template text="""tangled out of the document and submitted to the machine""" start="00:02:04.800" video="mainVideo-doc" id="subtitle"]]
[[!template text="""either to be compiled or interpreted and ultimately run.""" start="00:02:08.440" video="mainVideo-doc" id="subtitle"]]
-[[!template new="1" text="""This presentation""" start="00:02:14.080" video="mainVideo-doc" id="subtitle"]]
-
-[[!template text="""Throughout this presentation, you'll""" start="00:02:14.080" video="mainVideo-doc" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""This presentation""" start="00:02:14.080" video="mainVideo-doc" id="subtitle"]]</div>[[!template text="""Throughout this presentation, you'll""" start="00:02:14.080" video="mainVideo-doc" id="subtitle"]]
[[!template text="""see my browser window here on the left side of the screen.""" start="00:02:15.600" video="mainVideo-doc" id="subtitle"]]
[[!template text="""And on the right side, I've got a terminal session""" start="00:02:19.400" video="mainVideo-doc" id="subtitle"]]
[[!template text="""running tmux.""" start="00:02:22.240" video="mainVideo-doc" id="subtitle"]]
@@ -109,9 +102,7 @@
[[!template text="""it to export a RedHat-specific version of my building""" start="00:04:44.800" video="mainVideo-doc" id="subtitle"]]
[[!template text="""Emacs from source essay or a Debian-specific version.""" start="00:04:48.720" video="mainVideo-doc" id="subtitle"]]
-[[!template new="1" text="""Getting started""" start="00:04:53.480" video="mainVideo-doc" id="subtitle"]]
-
-[[!template text="""All right, let's get started.""" start="00:04:53.480" video="mainVideo-doc" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Getting started""" start="00:04:53.480" video="mainVideo-doc" id="subtitle"]]</div>[[!template text="""All right, let's get started.""" start="00:04:53.480" video="mainVideo-doc" id="subtitle"]]
[[!template text="""We'll begin by firing up a new terminal Emacs session""" start="00:04:55.320" video="mainVideo-doc" id="subtitle"]]
[[!template text="""on my Ubuntu machine.""" start="00:04:58.720" video="mainVideo-doc" id="subtitle"]]
[[!template text="""Now, I installed Emacs on this machine using apt-get.""" start="00:05:00.640" video="mainVideo-doc" id="subtitle"]]
@@ -156,9 +147,7 @@
[[!template text="""you can see all the possible completions.""" start="00:06:50.360" video="mainVideo-doc" id="subtitle"]]
[[!template text="""And as you can see, there's a lot.""" start="00:06:53.120" video="mainVideo-doc" id="subtitle"]]
-[[!template new="1" text="""README""" start="00:06:55.780" video="mainVideo-doc" id="subtitle"]]
-
-[[!template text="""The next thing we're gonna do is make a README section""" start="00:06:55.780" video="mainVideo-doc" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""README""" start="00:06:55.780" video="mainVideo-doc" id="subtitle"]]</div>[[!template text="""The next thing we're gonna do is make a README section""" start="00:06:55.780" video="mainVideo-doc" id="subtitle"]]
[[!template text="""at the top of this document.""" start="00:06:58.520" video="mainVideo-doc" id="subtitle"]]
[[!template text="""This section is intended for folks""" start="00:06:59.760" video="mainVideo-doc" id="subtitle"]]
[[!template text="""who are looking at the org-mode document,""" start="00:07:02.240" video="mainVideo-doc" id="subtitle"]]
@@ -170,9 +159,7 @@
[[!template text="""can potentially execute code""" start="00:07:17.760" video="mainVideo-doc" id="subtitle"]]
[[!template text="""and just a little something about what the document is for.""" start="00:07:19.800" video="mainVideo-doc" id="subtitle"]]
-[[!template new="1" text="""Writing a code block""" start="00:07:23.500" video="mainVideo-doc" id="subtitle"]]
-
-[[!template text="""Okay, so now that we've written some text,""" start="00:07:23.500" video="mainVideo-doc" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Writing a code block""" start="00:07:23.500" video="mainVideo-doc" id="subtitle"]]</div>[[!template text="""Okay, so now that we've written some text,""" start="00:07:23.500" video="mainVideo-doc" id="subtitle"]]
[[!template text="""let's try our hand at writing a code block.""" start="00:07:26.060" video="mainVideo-doc" id="subtitle"]]
[[!template text="""I'm getting pretty sick of looking at""" start="00:07:29.600" video="mainVideo-doc" id="subtitle"]]
[[!template text="""the default Emacs theme.""" start="00:07:31.289" video="mainVideo-doc" id="subtitle"]]
@@ -192,9 +179,7 @@
[[!template text="""So that's great and all,""" start="00:08:06.980" video="mainVideo-doc" id="subtitle"]]
[[!template text="""but there are a couple of things I don't like.""" start="00:08:08.080" video="mainVideo-doc" id="subtitle"]]
-[[!template new="1" text=""":results none""" start="00:08:10.460" video="mainVideo-doc" id="subtitle"]]
-
-[[!template text="""First of all, we don't need to see a #+RESULTS block here,""" start="00:08:10.460" video="mainVideo-doc" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text=""":results none""" start="00:08:10.460" video="mainVideo-doc" id="subtitle"]]</div>[[!template text="""First of all, we don't need to see a #+RESULTS block here,""" start="00:08:10.460" video="mainVideo-doc" id="subtitle"]]
[[!template text="""and that's because we're not really interested""" start="00:08:13.600" video="mainVideo-doc" id="subtitle"]]
[[!template text="""in what the Emacs Lisp function `load-theme` returns.""" start="00:08:15.280" video="mainVideo-doc" id="subtitle"]]
[[!template text="""I mean, it's great it returned t and all to indicate success,""" start="00:08:18.720" video="mainVideo-doc" id="subtitle"]]
@@ -206,9 +191,7 @@
[[!template text="""So I'll always refer back to the org-mode manual""" start="00:08:35.360" video="mainVideo-doc" id="subtitle"]]
[[!template text="""when working with them.""" start="00:08:38.920" video="mainVideo-doc" id="subtitle"]]
-[[!template new="1" text="""Confirmation""" start="00:08:40.320" video="mainVideo-doc" id="subtitle"]]
-
-[[!template text="""The second thing I don't like is that""" start="00:08:40.320" video="mainVideo-doc" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Confirmation""" start="00:08:40.320" video="mainVideo-doc" id="subtitle"]]</div>[[!template text="""The second thing I don't like is that""" start="00:08:40.320" video="mainVideo-doc" id="subtitle"]]
[[!template text="""when we hit C-c C-c to execute the block,""" start="00:08:42.160" video="mainVideo-doc" id="subtitle"]]
[[!template text="""Emacs prompted us if we really wanted to run the block.""" start="00:08:46.000" video="mainVideo-doc" id="subtitle"]]
[[!template text="""Emacs Lisp is Emacs' mother tongue,""" start="00:08:49.600" video="mainVideo-doc" id="subtitle"]]
@@ -246,9 +229,7 @@
[[!template text="""you can see that Emacs' customize tooling""" start="00:10:29.560" video="mainVideo-doc" id="subtitle"]]
[[!template text="""helpfully updated this variable in our config file for us.""" start="00:10:32.520" video="mainVideo-doc" id="subtitle"]]
-[[!template new="1" text="""Running blocks automatically""" start="00:10:36.960" video="mainVideo-doc" id="subtitle"]]
-
-[[!template text="""Now that's great and all,""" start="00:10:36.960" video="mainVideo-doc" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Running blocks automatically""" start="00:10:36.960" video="mainVideo-doc" id="subtitle"]]</div>[[!template text="""Now that's great and all,""" start="00:10:36.960" video="mainVideo-doc" id="subtitle"]]
[[!template text="""but I really don't like having to hit `C-c C-c`""" start="00:10:38.120" video="mainVideo-doc" id="subtitle"]]
[[!template text="""on that source block every time I open this document""" start="00:10:42.120" video="mainVideo-doc" id="subtitle"]]
[[!template text="""just to bring up the Leuven theme.""" start="00:10:45.160" video="mainVideo-doc" id="subtitle"]]
@@ -323,9 +304,7 @@
[[!template text="""and explain to the reader of the exported document""" start="00:13:47.880" video="mainVideo-doc" id="subtitle"]]
[[!template text="""what this is all about.""" start="00:13:51.440" video="mainVideo-doc" id="subtitle"]]
-[[!template new="1" text="""Export options""" start="00:13:53.000" video="mainVideo-doc" id="subtitle"]]
-
-[[!template text="""Now as you can see, we've actually hard-coded""" start="00:13:53.000" video="mainVideo-doc" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Export options""" start="00:13:53.000" video="mainVideo-doc" id="subtitle"]]</div>[[!template text="""Now as you can see, we've actually hard-coded""" start="00:13:53.000" video="mainVideo-doc" id="subtitle"]]
[[!template text="""the name of the Linux distro in our prose.""" start="00:13:55.640" video="mainVideo-doc" id="subtitle"]]
[[!template text="""I promised you a single document that could be""" start="00:13:58.280" video="mainVideo-doc" id="subtitle"]]
[[!template text="""for either RedHat or Debian distros,""" start="00:14:00.880" video="mainVideo-doc" id="subtitle"]]
@@ -379,9 +358,7 @@
[[!template text="""Now when we export the document again,""" start="00:16:00.980" video="mainVideo-doc" id="subtitle"]]
[[!template text="""it should look a lot better.""" start="00:16:03.120" video="mainVideo-doc" id="subtitle"]]
-[[!template new="1" text="""Substituting constants""" start="00:16:05.700" video="mainVideo-doc" id="subtitle"]]
-
-[[!template text="""Now that we've cleaned up the look of the exported document,""" start="00:16:05.700" video="mainVideo-doc" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Substituting constants""" start="00:16:05.700" video="mainVideo-doc" id="subtitle"]]</div>[[!template text="""Now that we've cleaned up the look of the exported document,""" start="00:16:05.700" video="mainVideo-doc" id="subtitle"]]
[[!template text="""we'll take a look at a better way""" start="00:16:09.060" video="mainVideo-doc" id="subtitle"]]
[[!template text="""of solving the problem with the introduction.""" start="00:16:10.640" video="mainVideo-doc" id="subtitle"]]
[[!template text="""Thinking like a programmer for a moment,""" start="00:16:13.378" video="mainVideo-doc" id="subtitle"]]
@@ -405,9 +382,7 @@
[[!template text="""And that's where we'll put the properties drawer""" start="00:17:14.000" video="mainVideo-doc" id="subtitle"]]
[[!template text="""with the &quot;distro&quot; property.""" start="00:17:19.560" video="mainVideo-doc" id="subtitle"]]
-[[!template new="1" text="""Getting the properties""" start="00:17:25.740" video="mainVideo-doc" id="subtitle"]]
-
-[[!template text="""Now the question is,""" start="00:17:25.740" video="mainVideo-doc" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Getting the properties""" start="00:17:25.740" video="mainVideo-doc" id="subtitle"]]</div>[[!template text="""Now the question is,""" start="00:17:25.740" video="mainVideo-doc" id="subtitle"]]
[[!template text="""how do we reference these properties in the document?""" start="00:17:27.120" video="mainVideo-doc" id="subtitle"]]
[[!template text="""It turns out there's an Elisp function""" start="00:17:30.100" video="mainVideo-doc" id="subtitle"]]
[[!template text="""called `org-property-values`, which does what we want.""" start="00:17:32.520" video="mainVideo-doc" id="subtitle"]]
@@ -466,9 +441,7 @@
[[!template text="""it looks like what we'd expect.""" start="00:19:58.240" video="mainVideo-doc" id="subtitle"]]
[[!template text="""Now this is getting better, but it's still not great.""" start="00:20:00.290" video="mainVideo-doc" id="subtitle"]]
-[[!template new="1" text="""Macros""" start="00:20:03.060" video="mainVideo-doc" id="subtitle"]]
-
-[[!template text="""The `call_` syntax is pretty cumbersome,""" start="00:20:03.060" video="mainVideo-doc" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Macros""" start="00:20:03.060" video="mainVideo-doc" id="subtitle"]]</div>[[!template text="""The `call_` syntax is pretty cumbersome,""" start="00:20:03.060" video="mainVideo-doc" id="subtitle"]]
[[!template text="""and it's a lot to type every time we want""" start="00:20:05.840" video="mainVideo-doc" id="subtitle"]]
[[!template text="""to reference a constant""" start="00:20:08.560" video="mainVideo-doc" id="subtitle"]]
[[!template text="""and not have it be marked up as verbatim.""" start="00:20:09.850" video="mainVideo-doc" id="subtitle"]]
@@ -491,9 +464,7 @@
[[!template text="""That's six curly braces in total we're typing,""" start="00:20:58.700" video="mainVideo-doc" id="subtitle"]]
[[!template text="""which still takes up a fair amount of space.""" start="00:21:01.280" video="mainVideo-doc" id="subtitle"]]
-[[!template new="1" text="""Properties in practice""" start="00:21:05.240" video="mainVideo-doc" id="subtitle"]]
-
-[[!template text="""Now let's take a look at how we might use""" start="00:21:05.240" video="mainVideo-doc" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Properties in practice""" start="00:21:05.240" video="mainVideo-doc" id="subtitle"]]</div>[[!template text="""Now let's take a look at how we might use""" start="00:21:05.240" video="mainVideo-doc" id="subtitle"]]
[[!template text="""these properties in practice.""" start="00:21:07.120" video="mainVideo-doc" id="subtitle"]]
[[!template text="""Debian and RedHat distros differ""" start="00:21:09.160" video="mainVideo-doc" id="subtitle"]]
[[!template text="""on how they install packages.""" start="00:21:11.120" video="mainVideo-doc" id="subtitle"]]
@@ -516,9 +487,7 @@
[[!template text="""a bunch of different properties,""" start="00:22:05.200" video="mainVideo-doc" id="subtitle"]]
[[!template text="""which is pretty janky.""" start="00:22:06.990" video="mainVideo-doc" id="subtitle"]]
-[[!template new="1" text="""Using a prefix""" start="00:22:09.020" video="mainVideo-doc" id="subtitle"]]
-
-[[!template text="""Luckily we can solve this problem""" start="00:22:09.020" video="mainVideo-doc" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Using a prefix""" start="00:22:09.020" video="mainVideo-doc" id="subtitle"]]</div>[[!template text="""Luckily we can solve this problem""" start="00:22:09.020" video="mainVideo-doc" id="subtitle"]]
[[!template text="""with a little bit of Emacs Lisp.""" start="00:22:11.080" video="mainVideo-doc" id="subtitle"]]
[[!template text="""We'll start by modifying our properties,""" start="00:22:14.440" video="mainVideo-doc" id="subtitle"]]
[[!template text="""so their property names are prefixed""" start="00:22:16.880" video="mainVideo-doc" id="subtitle"]]
@@ -551,9 +520,7 @@
[[!template text="""Let's see that in action.""" start="00:23:35.330" video="mainVideo-doc" id="subtitle"]]
[[!template text="""All right, now we're talking.""" start="00:23:40.000" video="mainVideo-doc" id="subtitle"]]
-[[!template new="1" text="""Switching distributions""" start="00:23:42.010" video="mainVideo-doc" id="subtitle"]]
-
-[[!template text="""This setup is starting to look pretty good,""" start="00:23:42.010" video="mainVideo-doc" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Switching distributions""" start="00:23:42.010" video="mainVideo-doc" id="subtitle"]]</div>[[!template text="""This setup is starting to look pretty good,""" start="00:23:42.010" video="mainVideo-doc" id="subtitle"]]
[[!template text="""but there are just a few things""" start="00:23:44.420" video="mainVideo-doc" id="subtitle"]]
[[!template text="""that I want to add before we move on.""" start="00:23:46.040" video="mainVideo-doc" id="subtitle"]]
[[!template text="""First of all, I think the document should have a subtitle,""" start="00:23:48.660" video="mainVideo-doc" id="subtitle"]]
@@ -632,9 +599,7 @@
[[!template text="""which I hope is a point that folks take away from this talk.""" start="00:27:06.680" video="mainVideo-doc" id="subtitle"]]
[[!template text="""All right, that was a lot.""" start="00:27:12.150" video="mainVideo-doc" id="subtitle"]]
-[[!template new="1" text="""A tour""" start="00:27:14.150" video="mainVideo-doc" id="subtitle"]]
-
-[[!template text="""Now that we've spent the past 20 minutes or so""" start="00:27:14.150" video="mainVideo-doc" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""A tour""" start="00:27:14.150" video="mainVideo-doc" id="subtitle"]]</div>[[!template text="""Now that we've spent the past 20 minutes or so""" start="00:27:14.150" video="mainVideo-doc" id="subtitle"]]
[[!template text="""digging into some of the tips and tricks I used""" start="00:27:16.840" video="mainVideo-doc" id="subtitle"]]
[[!template text="""when creating my build Emacs from source document,""" start="00:27:19.410" video="mainVideo-doc" id="subtitle"]]
[[!template text="""we'll say goodbye to this document we've been working on""" start="00:27:22.880" video="mainVideo-doc" id="subtitle"]]
@@ -704,9 +669,7 @@
[[!template text="""and the section on executing""" start="00:30:12.330" video="mainVideo-doc" id="subtitle"]]
[[!template text="""the document's various code blocks.""" start="00:30:14.080" video="mainVideo-doc" id="subtitle"]]
-[[!template new="1" text="""TeX and LaTeX""" start="00:30:16.200" video="mainVideo-doc" id="subtitle"]]
-
-[[!template text="""The latter two sections we'll take a look at now.""" start="00:30:16.200" video="mainVideo-doc" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""TeX and LaTeX""" start="00:30:16.200" video="mainVideo-doc" id="subtitle"]]</div>[[!template text="""The latter two sections we'll take a look at now.""" start="00:30:16.200" video="mainVideo-doc" id="subtitle"]]
[[!template text="""Out of the box on Fedora and Ubuntu server distros,""" start="00:30:19.200" video="mainVideo-doc" id="subtitle"]]
[[!template text="""the TeX typesetting system""" start="00:30:22.580" video="mainVideo-doc" id="subtitle"]]
[[!template text="""also by noted computer scientist Donald Knuth""" start="00:30:24.710" video="mainVideo-doc" id="subtitle"]]
@@ -725,9 +688,7 @@
[[!template text="""that knows how to run LaTeX multiple times""" start="00:31:02.400" video="mainVideo-doc" id="subtitle"]]
[[!template text="""in order to properly deal with intra-document links.""" start="00:31:05.140" video="mainVideo-doc" id="subtitle"]]
-[[!template new="1" text="""Other prerequisites""" start="00:31:09.250" video="mainVideo-doc" id="subtitle"]]
-
-[[!template text="""But wait, there's more.""" start="00:31:09.250" video="mainVideo-doc" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Other prerequisites""" start="00:31:09.250" video="mainVideo-doc" id="subtitle"]]</div>[[!template text="""But wait, there's more.""" start="00:31:09.250" video="mainVideo-doc" id="subtitle"]]
[[!template text="""We're also gonna need Inkscape""" start="00:31:11.070" video="mainVideo-doc" id="subtitle"]]
[[!template text="""to rasterize our SeaGL vector logo""" start="00:31:12.960" video="mainVideo-doc" id="subtitle"]]
[[!template text="""at different resolutions.""" start="00:31:15.520" video="mainVideo-doc" id="subtitle"]]
@@ -748,9 +709,7 @@
[[!template text="""to work on bog-standard Emacs setups,""" start="00:31:55.760" video="mainVideo-doc" id="subtitle"]]
[[!template text="""I didn't get around to it.""" start="00:31:58.000" video="mainVideo-doc" id="subtitle"]]
-[[!template new="1" text="""Caching""" start="00:32:00.060" video="mainVideo-doc" id="subtitle"]]
-
-[[!template text="""Before we get into talking about running the document,""" start="00:32:00.060" video="mainVideo-doc" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Caching""" start="00:32:00.060" video="mainVideo-doc" id="subtitle"]]</div>[[!template text="""Before we get into talking about running the document,""" start="00:32:00.060" video="mainVideo-doc" id="subtitle"]]
[[!template text="""let's talk briefly about results caching.""" start="00:32:03.140" video="mainVideo-doc" id="subtitle"]]
[[!template text="""We'll take a look at the section of the document""" start="00:32:06.450" video="mainVideo-doc" id="subtitle"]]
[[!template text="""where we talk about Git tags for an example.""" start="00:32:08.840" video="mainVideo-doc" id="subtitle"]]
@@ -838,9 +797,7 @@
[[!template text="""Ooh, those are the words I love to see in the status area,""" start="00:36:14.040" video="mainVideo-doc" id="subtitle"]]
[[!template text="""PDF file produced!""" start="00:36:17.560" video="mainVideo-doc" id="subtitle"]]
-[[!template new="1" text="""Looking at the PDF""" start="00:36:20.610" video="mainVideo-doc" id="subtitle"]]
-
-[[!template text="""Now I can't use my web browser""" start="00:36:20.610" video="mainVideo-doc" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Looking at the PDF""" start="00:36:20.610" video="mainVideo-doc" id="subtitle"]]</div>[[!template text="""Now I can't use my web browser""" start="00:36:20.610" video="mainVideo-doc" id="subtitle"]]
[[!template text="""to take a look at this PDF file""" start="00:36:22.600" video="mainVideo-doc" id="subtitle"]]
[[!template text="""because I haven't set up a web server""" start="00:36:24.960" video="mainVideo-doc" id="subtitle"]]
[[!template text="""or anything like that on the Ubuntu virtual machine.""" start="00:36:27.080" video="mainVideo-doc" id="subtitle"]]
@@ -902,9 +859,7 @@
[[!template text="""And this is dynamically generated based on what we saw here.""" start="00:39:22.780" video="mainVideo-doc" id="subtitle"]]
[[!template text="""So that's what we use here.""" start="00:39:27.480" video="mainVideo-doc" id="subtitle"]]
-[[!template new="1" text="""Errors""" start="00:39:29.440" video="mainVideo-doc" id="subtitle"]]
-
-[[!template text="""In this case, we're piping standard error""" start="00:39:29.440" video="mainVideo-doc" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Errors""" start="00:39:29.440" video="mainVideo-doc" id="subtitle"]]</div>[[!template text="""In this case, we're piping standard error""" start="00:39:29.440" video="mainVideo-doc" id="subtitle"]]
[[!template text="""to where standard out goes.""" start="00:39:32.920" video="mainVideo-doc" id="subtitle"]]
[[!template text="""That's another trick.""" start="00:39:35.100" video="mainVideo-doc" id="subtitle"]]
[[!template text="""If you want to actually see an error get created,""" start="00:39:36.070" video="mainVideo-doc" id="subtitle"]]
@@ -970,20 +925,17 @@
[[!template text="""like the file sizes of everything in the home directory.""" start="00:42:23.980" video="mainVideo-doc" id="subtitle"]]
[[!template text="""And then we, you know, show the binaries that got installed.""" start="00:42:27.720" video="mainVideo-doc" id="subtitle"]]
-[[!template new="1" text="""Final thoughts""" start="00:42:31.990" video="mainVideo-doc" id="subtitle"]]
-
-[[!template text="""Anyway, so this is the final thoughts section.""" start="00:42:31.990" video="mainVideo-doc" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Final thoughts""" start="00:42:31.990" video="mainVideo-doc" id="subtitle"]]</div>[[!template text="""Anyway, so this is the final thoughts section.""" start="00:42:31.990" video="mainVideo-doc" id="subtitle"]]
[[!template text="""And my final thoughts are, is I hope you enjoyed this talk""" start="00:42:35.600" video="mainVideo-doc" id="subtitle"]]
[[!template text="""and I hope you actually learned a thing or two.""" start="00:42:39.220" video="mainVideo-doc" id="subtitle"]]
[[!template text="""All right, thanks everybody.""" start="00:42:42.380" video="mainVideo-doc" id="subtitle"]]
[[!template text="""And I'll see you all next time.""" start="00:42:43.360" video="mainVideo-doc" id="subtitle"]]
-
+</div>
Captioner: jc
-<a name="doc-qanda-transcript"></a>
-# Q&A transcript (unedited)
+<div class="transcript transcript-qanda"><a name="doc-qanda-transcript"></a><h1>Q&A transcript (unedited)</h1>
[[!template text="""[Speaker 0]: Well, we have about, I think,""" start="00:00:03.639" video="qanda-doc" id="subtitle"]]
[[!template text="""10 or 15 minutes of on-stream Q&A time.""" start="00:00:06.339" video="qanda-doc" id="subtitle"]]
@@ -1183,7 +1135,7 @@ Captioner: jc
[[!template text="""watching. You""" start="00:22:45.060" video="qanda-doc" id="subtitle"]]
[[!template text="""you""" start="00:23:00.260" video="qanda-doc" id="subtitle"]]
-Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202023%20doc%3A%20Literate%20Documentation%20with%20Emacs%20and%20Org%20Mode)
+</div>Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202023%20doc%3A%20Literate%20Documentation%20with%20Emacs%20and%20Org%20Mode)
<!-- End of emacsconf-publish-after-page -->
diff --git a/2023/info/doc-before.md b/2023/info/doc-before.md
index 8e799bc4..18772fdb 100644
--- a/2023/info/doc-before.md
+++ b/2023/info/doc-before.md
@@ -2,7 +2,7 @@
Actually a general-audience talk; just on the development track for scheduling purposes
[[!toc ]]
-Format: 43-min talk; Q&A: BigBlueButton conference room
+Format: 43-min talk ; Q&A: BigBlueButton conference room
Status: Q&A to be extracted from the room recordings
@@ -11,7 +11,7 @@ Status: Q&A to be extracted from the room recordings
# Talk
-<div class="vid"><video controls preload="none" id="doc-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="doc-mainVideo" data="""
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-doc"><source src="https://media.emacsconf.org/2023/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="mainVideo-doc" data="""
00:00.000 Introduction
00:57.760 Org Babel and literate programming
02:14.080 This presentation
@@ -36,10 +36,10 @@ Status: Q&A to be extracted from the room recordings
39:29.440 Errors
42:31.990 Final thoughts
-"""]]<div></div>Duration: 42:45 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--main.opus">Download --main.opus (23MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--main.webm">Download --main.webm (133MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--pad.md">Download --pad.md</a></li><li><a href="https://toobnix.org/w/8ak16Qy1tjeFEqmcnan6MQ">View on Toobnix</a></li></ul></div></div>
+"""]]<div></div>Duration: 42:45 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2023-doc">Open Etherpad</a></li><li><a href="https://bbb.emacsverse.org/playback/presentation/2.0/playback.html?meetingId=37169783fc35bab0d36d00ed912e4c31ebef8fb0-1701548380496">Play recording from BigBlueButton</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--main.opus">Download --main.opus (23MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--main.webm">Download --main.webm (133MB)</a></li><li><a href="https://toobnix.org/w/8ak16Qy1tjeFEqmcnan6MQ">View on Toobnix</a></li><li><a href="https://www.youtube.com/watch?v=BAFZ-vTnfSo">View on Youtube</a></li></ul></div></div>
# Q&A
-<div class="vid"><video controls preload="none" id="doc-qanda"><source src="https://media.emacsconf.org/2023/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--answers.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div>Listen to just the audio:<br /><audio controls preload="none" id="doc-qanda-audio" src="https://media.emacsconf.org/2023/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--answers.opus"></audio></div><div></div>Duration: 11:00 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--answers.json">Download --answers.json (1.5MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--answers.opus">Download --answers.opus (18MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--answers.webm">Download --answers.webm (69MB)</a></li></ul></div></div>
+<div class="vid qanda"><video controls preload="none" id="qanda-doc"><source src="https://media.emacsconf.org/2023/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--answers.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div>Listen to just the audio:<br /><audio controls preload="none" id="qanda-doc-audio" src="https://media.emacsconf.org/2023/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--answers.opus"></audio></div><div></div>Duration: 11:00 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2023-doc">Open Etherpad</a></li><li><a href="https://bbb.emacsverse.org/playback/presentation/2.0/playback.html?meetingId=37169783fc35bab0d36d00ed912e4c31ebef8fb0-1701548380496">Play recording from BigBlueButton</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--answers.json">Download --answers.json (1.5MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--answers.opus">Download --answers.opus (18MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--answers.webm">Download --answers.webm (69MB)</a></li></ul></div></div>
# Description
<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/info/doc-nav.md b/2023/info/doc-nav.md
index 5f8eaf6b..8c04bf51 100644
--- a/2023/info/doc-nav.md
+++ b/2023/info/doc-nav.md
@@ -3,5 +3,5 @@
Back to the [[talks]]
Previous by track: <a href="/2023/talks/repl">REPLs in strange places: Lua, LaTeX, LPeg, LPegRex, TikZ</a>
Next by track: <a href="/2023/talks/windows">Windows into Freedom</a>
-Track: <span class="sched-track Development">Development</span>
+Track: <span class="sched-track Development">Development</span> - <strong><a href="https://emacsconf.org/2023/watch/dev">Watch</a></strong>
</div>
diff --git a/2023/info/eat-after.md b/2023/info/eat-after.md
index 41bfbc90..3358e962 100644
--- a/2023/info/eat-after.md
+++ b/2023/info/eat-after.md
@@ -1,20 +1,15 @@
<!-- Automatically generated by emacsconf-publish-after-page -->
-<a name="eat-mainVideo-transcript"></a>
-# Transcript
+<div class="transcript transcript-mainVideo"><a name="eat-mainVideo-transcript"></a><h1>Transcript</h1>
-[[!template new="1" text="""Intro""" start="00:00:00.000" video="mainVideo-eat" id="subtitle"]]
-
-[[!template text="""Hello everyone. Welcome to my talk.""" start="00:00:00.000" video="mainVideo-eat" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Intro""" start="00:00:00.000" video="mainVideo-eat" id="subtitle"]]</div>[[!template text="""Hello everyone. Welcome to my talk.""" start="00:00:00.000" video="mainVideo-eat" id="subtitle"]]
[[!template text="""I am Akib Azmain Turja and my talk is titled""" start="00:00:04.200" video="mainVideo-eat" id="subtitle"]]
[[!template text="""&quot;Eat and Eat-powered Eshell:""" start="00:00:09.360" video="mainVideo-eat" id="subtitle"]]
[[!template text="""Fast, featureful terminal inside Emacs.&quot;""" start="00:00:11.520" video="mainVideo-eat" id="subtitle"]]
-[[!template new="1" text="""Benchmarking""" start="00:00:15.440" video="mainVideo-eat" id="subtitle"]]
-
-[[!template text="""So I just claimed that Eat is a fast terminal emulator.""" start="00:00:15.440" video="mainVideo-eat" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Benchmarking""" start="00:00:15.440" video="mainVideo-eat" id="subtitle"]]</div>[[!template text="""So I just claimed that Eat is a fast terminal emulator.""" start="00:00:15.440" video="mainVideo-eat" id="subtitle"]]
[[!template text="""Let me show you that. I will print a 1-megabyte sized file""" start="00:00:22.840" video="mainVideo-eat" id="subtitle"]]
[[!template text="""in the terminal using this command.""" start="00:00:33.280" video="mainVideo-eat" id="subtitle"]]
[[!template text="""It takes 0.76 seconds. Now let's benchmark term-mode.""" start="00:00:39.040" video="mainVideo-eat" id="subtitle"]]
@@ -27,9 +22,7 @@
[[!template text="""Why? That shouldn't happen.""" start="00:01:36.160" video="mainVideo-eat" id="subtitle"]]
[[!template text="""Anyway, hopefully that shows how fast Eat is.""" start="00:01:41.800" video="mainVideo-eat" id="subtitle"]]
-[[!template new="1" text="""Running programs""" start="00:01:49.720" video="mainVideo-eat" id="subtitle"]]
-
-[[!template text="""So let's run some extra programs in Eat,""" start="00:01:49.720" video="mainVideo-eat" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Running programs""" start="00:01:49.720" video="mainVideo-eat" id="subtitle"]]</div>[[!template text="""So let's run some extra programs in Eat,""" start="00:01:49.720" video="mainVideo-eat" id="subtitle"]]
[[!template text="""like top. You can also run htop or even btop.""" start="00:01:54.440" video="mainVideo-eat" id="subtitle"]]
[[!template text="""There is a fancy version of top.""" start="00:02:05.640" video="mainVideo-eat" id="subtitle"]]
[[!template text="""And obviously you can run Emacs in it.""" start="00:02:08.560" video="mainVideo-eat" id="subtitle"]]
@@ -37,39 +30,29 @@
[[!template text="""You can show any color in the terminal""" start="00:02:33.880" video="mainVideo-eat" id="subtitle"]]
[[!template text="""as long as your main display supports it.""" start="00:02:38.800" video="mainVideo-eat" id="subtitle"]]
-[[!template new="1" text="""Shell integration""" start="00:02:47.080" video="mainVideo-eat" id="subtitle"]]
-
-[[!template text="""And then there is shell integration.""" start="00:02:47.080" video="mainVideo-eat" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Shell integration""" start="00:02:47.080" video="mainVideo-eat" id="subtitle"]]</div>[[!template text="""And then there is shell integration.""" start="00:02:47.080" video="mainVideo-eat" id="subtitle"]]
[[!template text="""For example, directory tracking.""" start="00:02:50.360" video="mainVideo-eat" id="subtitle"]]
[[!template text="""Like, I can switch to some other directory""" start="00:02:52.400" video="mainVideo-eat" id="subtitle"]]
[[!template text="""and Emacs follows the shell directory.""" start="00:03:07.480" video="mainVideo-eat" id="subtitle"]]
-[[!template new="1" text="""Prompt annotation""" start="00:03:11.920" video="mainVideo-eat" id="subtitle"]]
-
-[[!template text="""Then there is prompt annotation,""" start="00:03:11.920" video="mainVideo-eat" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Prompt annotation""" start="00:03:11.920" video="mainVideo-eat" id="subtitle"]]</div>[[!template text="""Then there is prompt annotation,""" start="00:03:11.920" video="mainVideo-eat" id="subtitle"]]
[[!template text="""this column. These zeros indicate""" start="00:03:16.440" video="mainVideo-eat" id="subtitle"]]
[[!template text="""that the command has executed successfully.""" start="00:03:20.320" video="mainVideo-eat" id="subtitle"]]
[[!template text="""Then you can navigate between commands like this.""" start="00:03:27.080" video="mainVideo-eat" id="subtitle"]]
-[[!template new="1" text="""Message passing""" start="00:03:37.680" video="mainVideo-eat" id="subtitle"]]
-
-[[!template text="""There is message passing.""" start="00:03:37.680" video="mainVideo-eat" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Message passing""" start="00:03:37.680" video="mainVideo-eat" id="subtitle"]]</div>[[!template text="""There is message passing.""" start="00:03:37.680" video="mainVideo-eat" id="subtitle"]]
[[!template text="""By message passing, I mean sending something""" start="00:03:39.400" video="mainVideo-eat" id="subtitle"]]
[[!template text="""from the terminal to the host Emacs.""" start="00:03:44.120" video="mainVideo-eat" id="subtitle"]]
[[!template text="""By host Emacs, I mean Emacs running the terminal.""" start="00:03:46.960" video="mainVideo-eat" id="subtitle"]]
[[!template text="""For example I can say &quot;hi&quot; and it's showing &quot;hi&quot;""" start="00:03:52.120" video="mainVideo-eat" id="subtitle"]]
[[!template text="""in this echo area of my Emacs.""" start="00:03:57.440" video="mainVideo-eat" id="subtitle"]]
-[[!template new="1" text="""Shell integration""" start="00:04:03.520" video="mainVideo-eat" id="subtitle"]]
-
-[[!template text="""Then let's show you the killer feature of Eat,""" start="00:04:03.520" video="mainVideo-eat" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Shell integration""" start="00:04:03.520" video="mainVideo-eat" id="subtitle"]]</div>[[!template text="""Then let's show you the killer feature of Eat,""" start="00:04:03.520" video="mainVideo-eat" id="subtitle"]]
[[!template text="""Eat's shell integration.""" start="00:04:08.680" video="mainVideo-eat" id="subtitle"]]
[[!template text="""You can run any program in it. For example: top, btop,""" start="00:04:20.240" video="mainVideo-eat" id="subtitle"]]
[[!template text="""and obviously Emacs itself.""" start="00:04:37.840" video="mainVideo-eat" id="subtitle"]]
-[[!template new="1" text="""Input modes""" start="00:04:52.160" video="mainVideo-eat" id="subtitle"]]
-
-[[!template text="""So let's discuss how to use Eat. There are four input modes.""" start="00:04:52.160" video="mainVideo-eat" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Input modes""" start="00:04:52.160" video="mainVideo-eat" id="subtitle"]]</div>[[!template text="""So let's discuss how to use Eat. There are four input modes.""" start="00:04:52.160" video="mainVideo-eat" id="subtitle"]]
[[!template text="""The first one is semi-char mode. That is the default mode.""" start="00:05:03.160" video="mainVideo-eat" id="subtitle"]]
[[!template text="""This is like vterm. All keys are the same to your terminal""" start="00:05:07.320" video="mainVideo-eat" id="subtitle"]]
[[!template text="""except these keys: C-c, C-x, C-g, M-x, etc.""" start="00:05:10.920" video="mainVideo-eat" id="subtitle"]]
@@ -88,9 +71,7 @@
[[!template text="""when eat-eshell integration is enabled""" start="00:06:20.160" video="mainVideo-eat" id="subtitle"]]
[[!template text="""inside the eshell buffer.""" start="00:06:23.145" video="mainVideo-eat" id="subtitle"]]
-[[!template new="1" text="""Documentation""" start="00:06:33.760" video="mainVideo-eat" id="subtitle"]]
-
-[[!template text="""There is an info manual,""" start="00:06:33.760" video="mainVideo-eat" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Documentation""" start="00:06:33.760" video="mainVideo-eat" id="subtitle"]]</div>[[!template text="""There is an info manual,""" start="00:06:33.760" video="mainVideo-eat" id="subtitle"]]
[[!template text="""And also the README is quite informative""" start="00:06:36.720" video="mainVideo-eat" id="subtitle"]]
[[!template text="""for you to get started.""" start="00:06:51.600" video="mainVideo-eat" id="subtitle"]]
[[!template text="""If you hit any problem,""" start="00:06:55.000" video="mainVideo-eat" id="subtitle"]]
@@ -107,7 +88,7 @@
[[!template text="""Hopefully you enjoyed my talk. That was all.""" start="00:08:03.480" video="mainVideo-eat" id="subtitle"]]
[[!template text="""Enjoy EmacsConf. Goodbye.""" start="00:08:10.760" video="mainVideo-eat" id="subtitle"]]
-Questions or comments? Please e-mail [akib@disroot.org](mailto:akib@disroot.org?subject=Comment%20for%20EmacsConf%202023%20eat%3A%20Eat%20and%20Eat%20powered%20Eshell%2C%20fast%20featureful%20terminal%20inside%20Emacs)
+</div>Questions or comments? Please e-mail [akib@disroot.org](mailto:akib@disroot.org?subject=Comment%20for%20EmacsConf%202023%20eat%3A%20Eat%20and%20Eat%20powered%20Eshell%2C%20fast%20featureful%20terminal%20inside%20Emacs)
<!-- End of emacsconf-publish-after-page -->
diff --git a/2023/info/eat-before.md b/2023/info/eat-before.md
index 5620d10d..daab0281 100644
--- a/2023/info/eat-before.md
+++ b/2023/info/eat-before.md
@@ -1,12 +1,12 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
[[!toc ]]
-Format: 9-min talk; Q&A: Etherpad
+Format: 9-min talk ; Q&A: Etherpad
Status: Q&A to be extracted from the room recordings
-<div class="vid"><video controls preload="none" id="eat-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-eat--eat-and-eat-powered-eshell-fast-featureful-terminal-inside-emacs--akib-azmain-turja--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-eat--eat-and-eat-powered-eshell-fast-featureful-terminal-inside-emacs--akib-azmain-turja--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 08:13 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-eat--eat-and-eat-powered-eshell-fast-featureful-terminal-inside-emacs--akib-azmain-turja--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-eat--eat-and-eat-powered-eshell-fast-featureful-terminal-inside-emacs--akib-azmain-turja--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-eat--eat-and-eat-powered-eshell-fast-featureful-terminal-inside-emacs--akib-azmain-turja--main.opus">Download --main.opus</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-eat--eat-and-eat-powered-eshell-fast-featureful-terminal-inside-emacs--akib-azmain-turja--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-eat--eat-and-eat-powered-eshell-fast-featureful-terminal-inside-emacs--akib-azmain-turja--main.webm">Download --main.webm (39MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-eat--eat-and-eat-powered-eshell-fast-featureful-terminal-inside-emacs--akib-azmain-turja--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-eat--eat-and-eat-powered-eshell-fast-featureful-terminal-inside-emacs--akib-azmain-turja--pad.md">Download --pad.md</a></li><li><a href="https://toobnix.org/w/t4pPDtbXiZdHHEyWJVUtNs">View on Toobnix</a></li></ul></div></div>
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-eat"><source src="https://media.emacsconf.org/2023/emacsconf-2023-eat--eat-and-eat-powered-eshell-fast-featureful-terminal-inside-emacs--akib-azmain-turja--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-eat--eat-and-eat-powered-eshell-fast-featureful-terminal-inside-emacs--akib-azmain-turja--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 08:13 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2023-eat">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-eat--eat-and-eat-powered-eshell-fast-featureful-terminal-inside-emacs--akib-azmain-turja--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-eat--eat-and-eat-powered-eshell-fast-featureful-terminal-inside-emacs--akib-azmain-turja--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-eat--eat-and-eat-powered-eshell-fast-featureful-terminal-inside-emacs--akib-azmain-turja--main.opus">Download --main.opus</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-eat--eat-and-eat-powered-eshell-fast-featureful-terminal-inside-emacs--akib-azmain-turja--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-eat--eat-and-eat-powered-eshell-fast-featureful-terminal-inside-emacs--akib-azmain-turja--main.webm">Download --main.webm (39MB)</a></li><li><a href="https://toobnix.org/w/t4pPDtbXiZdHHEyWJVUtNs">View on Toobnix</a></li><li><a href="https://www.youtube.com/watch?v=KQ5Jt-63G9U">View on Youtube</a></li></ul></div></div>
# Description
<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/info/eat-nav.md b/2023/info/eat-nav.md
index 3d8f174b..535ff9da 100644
--- a/2023/info/eat-nav.md
+++ b/2023/info/eat-nav.md
@@ -3,5 +3,5 @@
Back to the [[talks]]
Previous by track: <a href="/2023/talks/parallel">Parallel text replacement</a>
Next by track: <a href="/2023/talks/poltys">The browser in a buffer</a>
-Track: <span class="sched-track General">General</span>
+Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2023/watch/gen">Watch</a></strong>
</div>
diff --git a/2023/info/emacsconf-after.md b/2023/info/emacsconf-after.md
index d84a94cd..bc5d9066 100644
--- a/2023/info/emacsconf-after.md
+++ b/2023/info/emacsconf-after.md
@@ -1,21 +1,16 @@
<!-- Automatically generated by emacsconf-publish-after-page -->
-<a name="emacsconf-mainVideo-transcript"></a>
-# Transcript
+<div class="transcript transcript-mainVideo"><a name="emacsconf-mainVideo-transcript"></a><h1>Transcript</h1>
-[[!template new="1" text="""Intro""" start="00:00:00.000" video="mainVideo-emacsconf" id="subtitle"]]
-
-[[!template text="""Hi, I'm Sacha Chua. This presentation is a quick tour""" start="00:00:00.000" video="mainVideo-emacsconf" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Intro""" start="00:00:00.000" video="mainVideo-emacsconf" id="subtitle"]]</div>[[!template text="""Hi, I'm Sacha Chua. This presentation is a quick tour""" start="00:00:00.000" video="mainVideo-emacsconf" id="subtitle"]]
[[!template text="""of some of the things we do to run EmacsConf.""" start="00:00:04.840" video="mainVideo-emacsconf" id="subtitle"]]
[[!template text="""Since 2019, we've run it as an entirely online conference,""" start="00:00:07.960" video="mainVideo-emacsconf" id="subtitle"]]
[[!template text="""and we do as much of the organization as possible""" start="00:00:12.240" video="mainVideo-emacsconf" id="subtitle"]]
[[!template text="""within Emacs itself.""" start="00:00:14.700" video="mainVideo-emacsconf" id="subtitle"]]
-[[!template new="1" text="""Reasons""" start="00:00:16.580" video="mainVideo-emacsconf" id="subtitle"]]
-
-[[!template text="""I have three reasons for making this presentation.""" start="00:00:16.580" video="mainVideo-emacsconf" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Reasons""" start="00:00:16.580" video="mainVideo-emacsconf" id="subtitle"]]</div>[[!template text="""I have three reasons for making this presentation.""" start="00:00:16.580" video="mainVideo-emacsconf" id="subtitle"]]
[[!template text="""The first is entirely selfish: I need to figure out""" start="00:00:19.760" video="mainVideo-emacsconf" id="subtitle"]]
[[!template text="""all the stuff I built for last year's EmacsConf,""" start="00:00:22.760" video="mainVideo-emacsconf" id="subtitle"]]
[[!template text="""since it was a bit of a crazy scramble.""" start="00:00:25.360" video="mainVideo-emacsconf" id="subtitle"]]
@@ -35,9 +30,7 @@
[[!template text="""There are a lot of different parts,""" start="00:01:04.440" video="mainVideo-emacsconf" id="subtitle"]]
[[!template text="""so I'll try to use this map to help make sense of it all.""" start="00:01:06.320" video="mainVideo-emacsconf" id="subtitle"]]
-[[!template new="1" text="""Information""" start="00:01:09.400" video="mainVideo-emacsconf" id="subtitle"]]
-
-[[!template text="""There's so much information to work with,""" start="00:01:09.400" video="mainVideo-emacsconf" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Information""" start="00:01:09.400" video="mainVideo-emacsconf" id="subtitle"]]</div>[[!template text="""There's so much information to work with,""" start="00:01:09.400" video="mainVideo-emacsconf" id="subtitle"]]
[[!template text="""so it probably doesn't surprise you that we use Org Mode a lot.""" start="00:01:11.200" video="mainVideo-emacsconf" id="subtitle"]]
[[!template text="""Most of the conference coordination happens over e-mail,""" start="00:01:14.920" video="mainVideo-emacsconf" id="subtitle"]]
[[!template text="""which I can quickly search with notmuch.""" start="00:01:18.000" video="mainVideo-emacsconf" id="subtitle"]]
@@ -62,9 +55,7 @@
[[!template text="""And there's all the other stuff that goes into running EmacsConf,""" start="00:02:03.120" video="mainVideo-emacsconf" id="subtitle"]]
[[!template text="""like shell scripts and configuration files.""" start="00:02:06.320" video="mainVideo-emacsconf" id="subtitle"]]
-[[!template new="1" text="""Properties""" start="00:02:09.160" video="mainVideo-emacsconf" id="subtitle"]]
-
-[[!template text="""First, speakers propose a talk by sending an e-mail.""" start="00:02:09.160" video="mainVideo-emacsconf" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Properties""" start="00:02:09.160" video="mainVideo-emacsconf" id="subtitle"]]</div>[[!template text="""First, speakers propose a talk by sending an e-mail.""" start="00:02:09.160" video="mainVideo-emacsconf" id="subtitle"]]
[[!template text="""We take the info from that e-mail and store it in Org properties""" start="00:02:12.320" video="mainVideo-emacsconf" id="subtitle"]]
[[!template text="""so that we can work with it later.""" start="00:02:15.800" video="mainVideo-emacsconf" id="subtitle"]]
[[!template text="""Every talk is identified with an ID,""" start="00:02:18.200" video="mainVideo-emacsconf" id="subtitle"]]
@@ -101,9 +92,7 @@
[[!template text="""... then I can extract the data with `jq`""" start="00:03:48.960" video="mainVideo-emacsconf" id="subtitle"]]
[[!template text="""and use it in shell scripts.""" start="00:03:51.120" video="mainVideo-emacsconf" id="subtitle"]]
-[[!template new="1" text="""Timezones""" start="00:03:53.120" video="mainVideo-emacsconf" id="subtitle"]]
-
-[[!template text="""Another example of semi-structured information""" start="00:03:53.120" video="mainVideo-emacsconf" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Timezones""" start="00:03:53.120" video="mainVideo-emacsconf" id="subtitle"]]</div>[[!template text="""Another example of semi-structured information""" start="00:03:53.120" video="mainVideo-emacsconf" id="subtitle"]]
[[!template text="""is speaker availability.""" start="00:03:55.640" video="mainVideo-emacsconf" id="subtitle"]]
[[!template text="""We have speakers from all over the world,""" start="00:03:57.300" video="mainVideo-emacsconf" id="subtitle"]]
[[!template text="""so we try to schedule live Q&A sessions when they're around.""" start="00:03:59.620" video="mainVideo-emacsconf" id="subtitle"]]
@@ -118,9 +107,7 @@
[[!template text="""I can use those availability constraints to report errors""" start="00:04:24.400" video="mainVideo-emacsconf" id="subtitle"]]
[[!template text="""when I'm experimenting with the schedule.""" start="00:04:27.440" video="mainVideo-emacsconf" id="subtitle"]]
-[[!template new="1" text="""Scheduling""" start="00:04:29.720" video="mainVideo-emacsconf" id="subtitle"]]
-
-[[!template text="""Now that I have the availability information,""" start="00:04:29.720" video="mainVideo-emacsconf" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Scheduling""" start="00:04:29.720" video="mainVideo-emacsconf" id="subtitle"]]</div>[[!template text="""Now that I have the availability information,""" start="00:04:29.720" video="mainVideo-emacsconf" id="subtitle"]]
[[!template text="""I can think about scheduling.""" start="00:04:31.680" video="mainVideo-emacsconf" id="subtitle"]]
[[!template text="""When we were planning EmacsConf 2022, the schedule was so full,""" start="00:04:33.941" video="mainVideo-emacsconf" id="subtitle"]]
[[!template text="""I wanted to see if we could make it more manageable""" start="00:04:38.240" video="mainVideo-emacsconf" id="subtitle"]]
@@ -147,9 +134,7 @@
[[!template text="""to the speaker's local timezone when I e-mail them.""" start="00:05:34.800" video="mainVideo-emacsconf" id="subtitle"]]
[[!template text="""That's mostly a matter of using `format-time-string` with a timezone.""" start="00:05:37.820" video="mainVideo-emacsconf" id="subtitle"]]
-[[!template new="1" text="""Templates""" start="00:05:41.780" video="mainVideo-emacsconf" id="subtitle"]]
-
-[[!template text="""There's a lot of text to work with,""" start="00:05:41.780" video="mainVideo-emacsconf" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Templates""" start="00:05:41.780" video="mainVideo-emacsconf" id="subtitle"]]</div>[[!template text="""There's a lot of text to work with,""" start="00:05:41.780" video="mainVideo-emacsconf" id="subtitle"]]
[[!template text="""which means templates are super handy.""" start="00:05:43.160" video="mainVideo-emacsconf" id="subtitle"]]
[[!template text="""There are a number of templating functions for Emacs Lisp,""" start="00:05:45.700" video="mainVideo-emacsconf" id="subtitle"]]
[[!template text="""like the built-in `tempo.el` or `s-lex-format` from `s.el`.""" start="00:05:48.120" video="mainVideo-emacsconf" id="subtitle"]]
@@ -174,9 +159,7 @@
[[!template text="""like when I export the organizers notebook.""" start="00:06:43.500" video="mainVideo-emacsconf" id="subtitle"]]
[[!template text="""Memoize caches recent values.""" start="00:06:45.960" video="mainVideo-emacsconf" id="subtitle"]]
-[[!template new="1" text="""Wiki""" start="00:06:48.400" video="mainVideo-emacsconf" id="subtitle"]]
-
-[[!template text="""We combine this templating function""" start="00:06:48.400" video="mainVideo-emacsconf" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Wiki""" start="00:06:48.400" video="mainVideo-emacsconf" id="subtitle"]]</div>[[!template text="""We combine this templating function""" start="00:06:48.400" video="mainVideo-emacsconf" id="subtitle"]]
[[!template text="""with the talk information""" start="00:06:50.240" video="mainVideo-emacsconf" id="subtitle"]]
[[!template text="""to fill in the conference wiki,""" start="00:06:51.480" video="mainVideo-emacsconf" id="subtitle"]]
[[!template text="""since that's a matter of writing templated strings to files.""" start="00:06:53.440" video="mainVideo-emacsconf" id="subtitle"]]
@@ -211,9 +194,7 @@
[[!template text="""Then we can use the heads of those lists""" start="00:08:00.360" video="mainVideo-emacsconf" id="subtitle"]]
[[!template text="""for next/previous links.""" start="00:08:02.440" video="mainVideo-emacsconf" id="subtitle"]]
-[[!template new="1" text="""Etherpad""" start="00:08:04.380" video="mainVideo-emacsconf" id="subtitle"]]
-
-[[!template text="""Links to the next talks are also handy""" start="00:08:04.380" video="mainVideo-emacsconf" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Etherpad""" start="00:08:04.380" video="mainVideo-emacsconf" id="subtitle"]]</div>[[!template text="""Links to the next talks are also handy""" start="00:08:04.380" video="mainVideo-emacsconf" id="subtitle"]]
[[!template text="""on the collaborative Etherpad documents""" start="00:08:06.680" video="mainVideo-emacsconf" id="subtitle"]]
[[!template text="""that we use for collecting questions, answers, and notes""" start="00:08:08.640" video="mainVideo-emacsconf" id="subtitle"]]
[[!template text="""during each talk.""" start="00:08:12.040" video="mainVideo-emacsconf" id="subtitle"]]
@@ -225,9 +206,7 @@
[[!template text="""We can save the timestamp of the last modification""" start="00:08:22.940" video="mainVideo-emacsconf" id="subtitle"]]
[[!template text="""and then compare it before overwriting.""" start="00:08:25.720" video="mainVideo-emacsconf" id="subtitle"]]
-[[!template new="1" text="""E-mail""" start="00:08:28.200" video="mainVideo-emacsconf" id="subtitle"]]
-
-[[!template text="""Templates are also very handy when it comes to e-mail.""" start="00:08:28.200" video="mainVideo-emacsconf" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""E-mail""" start="00:08:28.200" video="mainVideo-emacsconf" id="subtitle"]]</div>[[!template text="""Templates are also very handy when it comes to e-mail.""" start="00:08:28.200" video="mainVideo-emacsconf" id="subtitle"]]
[[!template text="""Sometimes we send e-mails one at a time,""" start="00:08:31.240" video="mainVideo-emacsconf" id="subtitle"]]
[[!template text="""like when we let a speaker know""" start="00:08:33.600" video="mainVideo-emacsconf" id="subtitle"]]
[[!template text="""that we've received their proposal.""" start="00:08:35.200" video="mainVideo-emacsconf" id="subtitle"]]
@@ -243,9 +222,7 @@
[[!template text="""if more than one person is associated with a talk).""" start="00:08:59.800" video="mainVideo-emacsconf" id="subtitle"]]
[[!template text="""That gives me an opportunity to personalize it further.""" start="00:09:02.600" video="mainVideo-emacsconf" id="subtitle"]]
-[[!template new="1" text="""BigBlueButton web conferences""" start="00:09:05.920" video="mainVideo-emacsconf" id="subtitle"]]
-
-[[!template text="""Many speakers answer questions live""" start="00:09:05.920" video="mainVideo-emacsconf" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""BigBlueButton web conferences""" start="00:09:05.920" video="mainVideo-emacsconf" id="subtitle"]]</div>[[!template text="""Many speakers answer questions live""" start="00:09:05.920" video="mainVideo-emacsconf" id="subtitle"]]
[[!template text="""in BigBlueButton web conference rooms.""" start="00:09:08.120" video="mainVideo-emacsconf" id="subtitle"]]
[[!template text="""Setting up one room per group of speakers""" start="00:09:10.440" video="mainVideo-emacsconf" id="subtitle"]]
[[!template text="""makes it easy to give the speakers the details""" start="00:09:12.640" video="mainVideo-emacsconf" id="subtitle"]]
@@ -271,9 +248,7 @@
[[!template text="""That way, I don't have to count on Emacs being able to""" start="00:10:04.300" video="mainVideo-emacsconf" id="subtitle"]]
[[!template text="""publish them over TRAMP.""" start="00:10:06.680" video="mainVideo-emacsconf" id="subtitle"]]
-[[!template new="1" text="""Shortcuts""" start="00:10:08.121" video="mainVideo-emacsconf" id="subtitle"]]
-
-[[!template text="""During the conference, I'm often jumping from talk to talk.""" start="00:10:08.121" video="mainVideo-emacsconf" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Shortcuts""" start="00:10:08.121" video="mainVideo-emacsconf" id="subtitle"]]</div>[[!template text="""During the conference, I'm often jumping from talk to talk.""" start="00:10:08.121" video="mainVideo-emacsconf" id="subtitle"]]
[[!template text="""Instead of going to the Org file""" start="00:10:11.660" video="mainVideo-emacsconf" id="subtitle"]]
[[!template text="""and then searching for the talk,""" start="00:10:13.200" video="mainVideo-emacsconf" id="subtitle"]]
[[!template text="""I've made a little Hydra with keyboard shortcuts.""" start="00:10:14.520" video="mainVideo-emacsconf" id="subtitle"]]
@@ -286,9 +261,7 @@
[[!template text="""For example, I might want to jump to the wiki page""" start="00:10:32.080" video="mainVideo-emacsconf" id="subtitle"]]
[[!template text="""or e-mail the speaker.""" start="00:10:35.080" video="mainVideo-emacsconf" id="subtitle"]]
-[[!template new="1" text="""Logbook""" start="00:10:36.700" video="mainVideo-emacsconf" id="subtitle"]]
-
-[[!template text="""I can also add notes to a talk while looking at an email,""" start="00:10:36.700" video="mainVideo-emacsconf" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Logbook""" start="00:10:36.700" video="mainVideo-emacsconf" id="subtitle"]]</div>[[!template text="""I can also add notes to a talk while looking at an email,""" start="00:10:36.700" video="mainVideo-emacsconf" id="subtitle"]]
[[!template text="""like when a speaker lets me know""" start="00:10:40.100" video="mainVideo-emacsconf" id="subtitle"]]
[[!template text="""that their video will be late.""" start="00:10:41.640" video="mainVideo-emacsconf" id="subtitle"]]
[[!template text="""Making it easy to add a note turns Emacs into""" start="00:10:43.280" video="mainVideo-emacsconf" id="subtitle"]]
@@ -299,9 +272,7 @@
[[!template text="""look up the author of the current email,""" start="00:10:57.920" video="mainVideo-emacsconf" id="subtitle"]]
[[!template text="""prompt the user for the talk to add the note to, and add the note.""" start="00:10:59.960" video="mainVideo-emacsconf" id="subtitle"]]
-[[!template new="1" text="""Captions""" start="00:11:03.680" video="mainVideo-emacsconf" id="subtitle"]]
-
-[[!template text="""On to captions.""" start="00:11:03.680" video="mainVideo-emacsconf" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Captions""" start="00:11:03.680" video="mainVideo-emacsconf" id="subtitle"]]</div>[[!template text="""On to captions.""" start="00:11:03.680" video="mainVideo-emacsconf" id="subtitle"]]
[[!template text="""We've been doing captions for the last couple of years,""" start="00:11:04.680" video="mainVideo-emacsconf" id="subtitle"]]
[[!template text="""and now we have a small army of volunteer captioners.""" start="00:11:07.240" video="mainVideo-emacsconf" id="subtitle"]]
[[!template text="""They get early access to the recorded talks""" start="00:11:10.420" video="mainVideo-emacsconf" id="subtitle"]]
@@ -326,9 +297,7 @@
[[!template text="""at emacsconf.org/captioning.""" start="00:12:06.680" video="mainVideo-emacsconf" id="subtitle"]]
[[!template text="""I like using subed to edit subtitles within Emacs.""" start="00:12:09.040" video="mainVideo-emacsconf" id="subtitle"]]
-[[!template new="1" text="""Crontabs and playing the talks""" start="00:12:13.220" video="mainVideo-emacsconf" id="subtitle"]]
-
-[[!template text="""Let's talk about actually playing the talks.""" start="00:12:13.220" video="mainVideo-emacsconf" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Crontabs and playing the talks""" start="00:12:13.220" video="mainVideo-emacsconf" id="subtitle"]]</div>[[!template text="""Let's talk about actually playing the talks.""" start="00:12:13.220" video="mainVideo-emacsconf" id="subtitle"]]
[[!template text="""For EmacsConf 2022, we tried using Emacs timers""" start="00:12:16.060" video="mainVideo-emacsconf" id="subtitle"]]
[[!template text="""to run the talks.""" start="00:12:19.560" video="mainVideo-emacsconf" id="subtitle"]]
[[!template text="""It turns out that you can't call TRAMP from a timer""" start="00:12:20.940" video="mainVideo-emacsconf" id="subtitle"]]
@@ -353,9 +322,7 @@
[[!template text="""The shell scripts we run from the crontab""" start="00:13:06.520" video="mainVideo-emacsconf" id="subtitle"]]
[[!template text="""can also update the talk status themselves.""" start="00:13:08.720" video="mainVideo-emacsconf" id="subtitle"]]
-[[!template new="1" text="""Transitions""" start="00:13:11.280" video="mainVideo-emacsconf" id="subtitle"]]
-
-[[!template text="""Then a bunch of things automatically happen based on""" start="00:13:11.280" video="mainVideo-emacsconf" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Transitions""" start="00:13:11.280" video="mainVideo-emacsconf" id="subtitle"]]</div>[[!template text="""Then a bunch of things automatically happen based on""" start="00:13:11.280" video="mainVideo-emacsconf" id="subtitle"]]
[[!template text="""the talk status changes.""" start="00:13:14.320" video="mainVideo-emacsconf" id="subtitle"]]
[[!template text="""This uses `org-after-todo-state-change-hook`.""" start="00:13:15.600" video="mainVideo-emacsconf" id="subtitle"]]
[[!template text="""We get the talk information""" start="00:13:18.960" video="mainVideo-emacsconf" id="subtitle"]]
@@ -372,9 +339,7 @@
[[!template text="""because (of course!) Emacs has an IRC client.""" start="00:13:45.800" video="mainVideo-emacsconf" id="subtitle"]]
[[!template text="""In fact, it has several.""" start="00:13:48.520" video="mainVideo-emacsconf" id="subtitle"]]
-[[!template new="1" text="""Wrapping up""" start="00:13:49.880" video="mainVideo-emacsconf" id="subtitle"]]
-
-[[!template text="""It seems like a lot of automation and Emacs Lisp,""" start="00:13:49.880" video="mainVideo-emacsconf" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Wrapping up""" start="00:13:49.880" video="mainVideo-emacsconf" id="subtitle"]]</div>[[!template text="""It seems like a lot of automation and Emacs Lisp,""" start="00:13:49.880" video="mainVideo-emacsconf" id="subtitle"]]
[[!template text="""but really, all of this was just built up little by little.""" start="00:13:53.140" video="mainVideo-emacsconf" id="subtitle"]]
[[!template text="""And tinkering with this is *fun*, you know?""" start="00:13:56.900" video="mainVideo-emacsconf" id="subtitle"]]
[[!template text="""It's like always being able to ask,""" start="00:13:59.280" video="mainVideo-emacsconf" id="subtitle"]]
@@ -403,12 +368,11 @@
[[!template text="""from this talk's webpage at emacsconf.org/2023/talks/emacsconf .""" start="00:14:51.000" video="mainVideo-emacsconf" id="subtitle"]]
[[!template text="""Let's figure out how to make Emacsconf even awesomer next year!""" start="00:14:59.120" video="mainVideo-emacsconf" id="subtitle"]]
-
+</div>
Captioner: sachac
-<a name="emacsconf-qanda-transcript"></a>
-# Q&A transcript (unedited)
+<div class="transcript transcript-qanda"><a name="emacsconf-qanda-transcript"></a><h1>Q&A transcript (unedited)</h1>
[[!template text="""[Speaker 0]: All right. I have unmuted.""" start="00:00:53.489" video="qanda-emacsconf" id="subtitle"]]
[[!template text="""It's been a while since I've actually done an""" start="00:00:59.860" video="qanda-emacsconf" id="subtitle"]]
@@ -3164,7 +3128,7 @@ Captioner: sachac
[[!template text="""[Speaker 7]: Take care Corwin""" start="01:59:51.900" video="qanda-emacsconf" id="subtitle"]]
[[!template text="""[Speaker 4]: Bye Stefan. Bye. Bye all""" start="01:59:56.520" video="qanda-emacsconf" id="subtitle"]]
-Questions or comments? Please e-mail [sacha@sachachua.com](mailto:sacha@sachachua.com?subject=Comment%20for%20EmacsConf%202023%20emacsconf%3A%20EmacsConf.org%3A%20How%20we%20use%20Org%20Mode%20and%20TRAMP%20to%20organize%20and%20run%20a%20multi-track%20conference)
+</div>Questions or comments? Please e-mail [sacha@sachachua.com](mailto:sacha@sachachua.com?subject=Comment%20for%20EmacsConf%202023%20emacsconf%3A%20EmacsConf.org%3A%20How%20we%20use%20Org%20Mode%20and%20TRAMP%20to%20organize%20and%20run%20a%20multi-track%20conference)
<!-- End of emacsconf-publish-after-page -->
diff --git a/2023/info/emacsconf-before.md b/2023/info/emacsconf-before.md
index 817bc045..c10d5bd4 100644
--- a/2023/info/emacsconf-before.md
+++ b/2023/info/emacsconf-before.md
@@ -1,6 +1,6 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
[[!toc ]]
-Format: 16-min talk; Q&A: BigBlueButton conference room
+Format: 16-min talk ; Q&A: BigBlueButton conference room
Status: Q&A to be extracted from the room recordings
@@ -9,7 +9,7 @@ Status: Q&A to be extracted from the room recordings
# Talk
-<div class="vid"><video controls preload="none" id="emacsconf-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="emacsconf-mainVideo" data="""
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-emacsconf"><source src="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="mainVideo-emacsconf" data="""
00:00.000 Intro
00:16.580 Reasons
01:09.400 Information
@@ -28,10 +28,10 @@ Status: Q&A to be extracted from the room recordings
13:11.280 Transitions
13:49.880 Wrapping up
-"""]]<div></div>Duration: 15:05 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--main.opus">Download --main.opus (8.3MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--main.webm">Download --main.webm (37MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--pad.md">Download --pad.md</a></li><li><a href="https://toobnix.org/w/eX2dXG3xMtUHuuBz4fssGT">View on Toobnix</a></li></ul></div></div>
+"""]]<div></div>Duration: 15:05 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2023-emacsconf">Open Etherpad</a></li><li><a href="https://bbb.emacsverse.org/playback/presentation/2.0/playback.html?meetingId=5f07e2b967f71ad503ac367ea43866abeaad63b6-1701636099684">Play recording from BigBlueButton</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--main.opus">Download --main.opus (8.3MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--main.webm">Download --main.webm (37MB)</a></li><li><a href="https://toobnix.org/w/eX2dXG3xMtUHuuBz4fssGT">View on Toobnix</a></li><li><a href="https://www.youtube.com/watch?v=uTregv3rNl0">View on Youtube</a></li></ul></div></div>
# Q&A
-<div class="vid"><video controls preload="none" id="emacsconf-qanda"><source src="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--answers.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div>Listen to just the audio:<br /><audio controls preload="none" id="emacsconf-qanda-audio" src="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--answers.opus"></audio></div><div></div>Duration: 2:00:43 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--answers.json">Download --answers.json (5.8MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--answers.opus">Download --answers.opus (71MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--answers.webm">Download --answers.webm (317MB)</a></li></ul></div></div>
+<div class="vid qanda"><video controls preload="none" id="qanda-emacsconf"><source src="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--answers.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div>Listen to just the audio:<br /><audio controls preload="none" id="qanda-emacsconf-audio" src="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--answers.opus"></audio></div><div></div>Duration: 2:00:43 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2023-emacsconf">Open Etherpad</a></li><li><a href="https://bbb.emacsverse.org/playback/presentation/2.0/playback.html?meetingId=5f07e2b967f71ad503ac367ea43866abeaad63b6-1701636099684">Play recording from BigBlueButton</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--answers.json">Download --answers.json (5.8MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--answers.opus">Download --answers.opus (71MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--answers.webm">Download --answers.webm (317MB)</a></li></ul></div></div>
# Description
<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/info/emacsconf-nav.md b/2023/info/emacsconf-nav.md
index a633568d..04302650 100644
--- a/2023/info/emacsconf-nav.md
+++ b/2023/info/emacsconf-nav.md
@@ -3,5 +3,5 @@
Back to the [[talks]]
Previous by track: <a href="/2023/talks/test">What I learned by writing test cases for GNU Hyperbole</a>
Next by track: <a href="/2023/talks/sat-open">Saturday opening remarks</a>
-Track: <span class="sched-track Development">Development</span>
+Track: <span class="sched-track Development">Development</span> - <strong><a href="https://emacsconf.org/2023/watch/dev">Watch</a></strong>
</div>
diff --git a/2023/info/emacsen-after.md b/2023/info/emacsen-after.md
index d45b44d7..c103787e 100644
--- a/2023/info/emacsen-after.md
+++ b/2023/info/emacsen-after.md
@@ -1,21 +1,16 @@
<!-- Automatically generated by emacsconf-publish-after-page -->
-<a name="emacsen-mainVideo-transcript"></a>
-# Transcript
+<div class="transcript transcript-mainVideo"><a name="emacsen-mainVideo-transcript"></a><h1>Transcript</h1>
-[[!template new="1" text="""Introduction""" start="00:00:00.000" video="mainVideo-emacsen" id="subtitle"]]
-
-[[!template text="""Hello, my name is Fermin.""" start="00:00:00.000" video="mainVideo-emacsen" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Introduction""" start="00:00:00.000" video="mainVideo-emacsen" id="subtitle"]]</div>[[!template text="""Hello, my name is Fermin.""" start="00:00:00.000" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""Today, I'm going to talk about the Emacsen family,""" start="00:00:03.200" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""the design of an Emacs, and the importance of Lisp.""" start="00:00:06.960" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""So we're going to talk about Lisp.""" start="00:00:11.160" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""I want to start from the end.""" start="00:00:13.520" video="mainVideo-emacsen" id="subtitle"]]
-[[!template new="1" text="""Why Lisp matters""" start="00:00:17.000" video="mainVideo-emacsen" id="subtitle"]]
-
-[[!template text="""The first question I want to ask is""" start="00:00:17.000" video="mainVideo-emacsen" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Why Lisp matters""" start="00:00:17.000" video="mainVideo-emacsen" id="subtitle"]]</div>[[!template text="""The first question I want to ask is""" start="00:00:17.000" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""why I think Lisp matters.""" start="00:00:19.040" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""When I'm talking about Lisp here,""" start="00:00:21.400" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""I'm talking about the idea of Lisp,""" start="00:00:22.880" video="mainVideo-emacsen" id="subtitle"]]
@@ -37,9 +32,7 @@
[[!template text="""Scheme by Guile, Common Lisp by Common Lisp,""" start="00:01:13.840" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""and Clojure by Clojure or ClojureScript.""" start="00:01:19.675" video="mainVideo-emacsen" id="subtitle"]]
-[[!template new="1" text="""Why Emacs Lisp was chosen""" start="00:01:26.640" video="mainVideo-emacsen" id="subtitle"]]
-
-[[!template text="""So let's talk about Emacs Lisp.""" start="00:01:26.640" video="mainVideo-emacsen" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Why Emacs Lisp was chosen""" start="00:01:26.640" video="mainVideo-emacsen" id="subtitle"]]</div>[[!template text="""So let's talk about Emacs Lisp.""" start="00:01:26.640" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""I didn't mention Emacs Lisp.""" start="00:01:28.080" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""I'm going to talk about why Emacs Lisp""" start="00:01:29.680" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""was chosen for an Emacs editor.""" start="00:01:32.520" video="mainVideo-emacsen" id="subtitle"]]
@@ -65,9 +58,7 @@
[[!template text="""It's not that bad. At that time, it was mostly nice.""" start="00:02:44.200" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""Today, it's good enough, I think.""" start="00:02:50.240" video="mainVideo-emacsen" id="subtitle"]]
-[[!template new="1" text="""Other "Emacsen"""" start="00:02:54.841" video="mainVideo-emacsen" id="subtitle"]]
-
-[[!template text="""He wasn't the first one, the GNU Emacs,""" start="00:02:54.841" video="mainVideo-emacsen" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Other "Emacsen"""" start="00:02:54.841" video="mainVideo-emacsen" id="subtitle"]]</div>[[!template text="""He wasn't the first one, the GNU Emacs,""" start="00:02:54.841" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""nor the only one, of course.""" start="00:02:59.461" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""There were others: Hemlock, Zmacs, and Climacs...""" start="00:03:02.541" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""Two of them, I think, were written in Common Lisp,""" start="00:03:06.440" video="mainVideo-emacsen" id="subtitle"]]
@@ -83,9 +74,7 @@
[[!template text="""Zmacs was because of the Lisp machine market crash,""" start="00:03:33.640" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""and yeah, it also failed.""" start="00:03:37.880" video="mainVideo-emacsen" id="subtitle"]]
-[[!template new="1" text="""Why not Common Lisp?""" start="00:03:38.581" video="mainVideo-emacsen" id="subtitle"]]
-
-[[!template text="""So Emacs got alone. And in the 90s, interesting to explore,""" start="00:03:38.581" video="mainVideo-emacsen" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Why not Common Lisp?""" start="00:03:38.581" video="mainVideo-emacsen" id="subtitle"]]</div>[[!template text="""So Emacs got alone. And in the 90s, interesting to explore,""" start="00:03:38.581" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""some people suggest that why""" start="00:03:44.040" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""now that we have a standard Lisp, right,""" start="00:03:46.480" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""because Common Lisp was standardized in '94,""" start="00:03:49.680" video="mainVideo-emacsen" id="subtitle"]]
@@ -137,9 +126,7 @@
[[!template text="""It makes sense that it's very good""" start="00:06:29.400" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""for a system administration perspective.""" start="00:06:31.080" video="mainVideo-emacsen" id="subtitle"]]
-[[!template new="1" text="""Common Lisp is still not dead or is always dead""" start="00:06:39.120" video="mainVideo-emacsen" id="subtitle"]]
-
-[[!template text="""But I think Common Lisp is not dead yet.""" start="00:06:39.120" video="mainVideo-emacsen" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Common Lisp is still not dead or is always dead""" start="00:06:39.120" video="mainVideo-emacsen" id="subtitle"]]</div>[[!template text="""But I think Common Lisp is not dead yet.""" start="00:06:39.120" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""Or some people say that it's always dead,""" start="00:06:43.320" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""so you cannot kill the something that is always dead.""" start="00:06:45.720" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""So I don't always code in C,""" start="00:06:48.400" video="mainVideo-emacsen" id="subtitle"]]
@@ -178,18 +165,14 @@
[[!template text="""which in today's standard is nothing.""" start="00:08:23.800" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""There's pictures in your phone larger than 20 MB.""" start="00:08:26.600" video="mainVideo-emacsen" id="subtitle"]]
-[[!template new="1" text="""Lem is a nice Emacsen implementation""" start="00:08:30.080" video="mainVideo-emacsen" id="subtitle"]]
-
-[[!template text="""So there's a new Emacs in town--well, Emacs, not Emacs,""" start="00:08:30.080" video="mainVideo-emacsen" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Lem is a nice Emacsen implementation""" start="00:08:30.080" video="mainVideo-emacsen" id="subtitle"]]</div>[[!template text="""So there's a new Emacs in town--well, Emacs, not Emacs,""" start="00:08:30.080" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""Which is Lem. I think it's a very good Emacs implementation.""" start="00:08:39.240" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""What I mean by &quot;Emacs&quot; here is not a clone of GNU Emacs,""" start="00:08:43.440" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""but an Emacs-inspired editor with similar characteristics,""" start="00:08:46.680" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""and written in a Lisp,""" start="00:08:51.560" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""which is why I said that Lisp was very important.""" start="00:08:53.520" video="mainVideo-emacsen" id="subtitle"]]
-[[!template new="1" text="""Why not just use GNU Emacs?""" start="00:08:58.260" video="mainVideo-emacsen" id="subtitle"]]
-
-[[!template text="""So first, I'm going to address the elephant in the room,""" start="00:08:58.260" video="mainVideo-emacsen" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Why not just use GNU Emacs?""" start="00:08:58.260" video="mainVideo-emacsen" id="subtitle"]]</div>[[!template text="""So first, I'm going to address the elephant in the room,""" start="00:08:58.260" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""and the question that maybe most""" start="00:09:01.560" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""of you are now thinking.""" start="00:09:05.040" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""Why not just use GNU Emacs? It's the project.""" start="00:09:06.160" video="mainVideo-emacsen" id="subtitle"]]
@@ -218,9 +201,7 @@
[[!template text="""Getting this out of the way.""" start="00:10:27.760" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""Why I think Lem is interesting.""" start="00:10:29.200" video="mainVideo-emacsen" id="subtitle"]]
-[[!template new="1" text="""Why Lem""" start="00:10:31.080" video="mainVideo-emacsen" id="subtitle"]]
-
-[[!template text="""I'm going to show why Lem.""" start="00:10:31.080" video="mainVideo-emacsen" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Why Lem""" start="00:10:31.080" video="mainVideo-emacsen" id="subtitle"]]</div>[[!template text="""I'm going to show why Lem.""" start="00:10:31.080" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""Why? You can try Lem, and maybe you like it.""" start="00:10:32.360" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""First thing, these are the features""" start="00:10:37.760" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""that I really like from it.""" start="00:10:41.320" video="mainVideo-emacsen" id="subtitle"]]
@@ -292,9 +273,7 @@
[[!template text="""So yeah, that's the thing that I think Lem brings to""" start="00:13:59.160" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""the table and that's really interesting.""" start="00:14:01.960" video="mainVideo-emacsen" id="subtitle"]]
-[[!template new="1" text="""Similarities and differences""" start="00:14:03.080" video="mainVideo-emacsen" id="subtitle"]]
-
-[[!template text="""So I'm going to do a small demo of Lem, a Emacs example.""" start="00:14:03.080" video="mainVideo-emacsen" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Similarities and differences""" start="00:14:03.080" video="mainVideo-emacsen" id="subtitle"]]</div>[[!template text="""So I'm going to do a small demo of Lem, a Emacs example.""" start="00:14:03.080" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""First, the similarities,""" start="00:14:10.520" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""the nomenclature is very similar: modes, buffers,""" start="00:14:11.680" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""commands... The commands are very similar in nature.""" start="00:14:14.120" video="mainVideo-emacsen" id="subtitle"]]
@@ -332,9 +311,7 @@
[[!template text="""one of the best-documented software ever.""" start="00:15:39.720" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""We're trying to go there, but we're still not there.""" start="00:15:41.760" video="mainVideo-emacsen" id="subtitle"]]
-[[!template new="1" text="""Demo""" start="00:15:49.600" video="mainVideo-emacsen" id="subtitle"]]
-
-[[!template text="""Let's do the demo. So to open Lem, you compile it,""" start="00:15:49.600" video="mainVideo-emacsen" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Demo""" start="00:15:49.600" video="mainVideo-emacsen" id="subtitle"]]</div>[[!template text="""Let's do the demo. So to open Lem, you compile it,""" start="00:15:49.600" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""and then you have it available,""" start="00:15:54.080" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""and you open Lem. As you can see,""" start="00:15:55.760" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""we have the temporary buffer. On the top left is the mode--""" start="00:15:57.720" video="mainVideo-emacsen" id="subtitle"]]
@@ -390,12 +367,11 @@
[[!template text="""So thank you all very much.""" start="00:18:21.200" video="mainVideo-emacsen" id="subtitle"]]
[[!template text="""I'll be answering the question now. And happy hacking.""" start="00:18:23.120" video="mainVideo-emacsen" id="subtitle"]]
-
+</div>
Captioner: sachac
-<a name="emacsen-qanda-transcript"></a>
-# Q&A transcript (unedited)
+<div class="transcript transcript-qanda"><a name="emacsen-qanda-transcript"></a><h1>Q&A transcript (unedited)</h1>
[[!template text="""[Speaker 0]: Here.""" start="00:00:00.040" video="qanda-emacsen" id="subtitle"]]
[[!template text="""[Speaker 1]: All right. Yeah. So thanks,""" start="00:00:05.140" video="qanda-emacsen" id="subtitle"]]
@@ -1665,7 +1641,7 @@ Captioner: sachac
[[!template text="""I'm going to go do that.""" start="01:08:09.360" video="qanda-emacsen" id="subtitle"]]
[[!template text="""[Speaker 0]: See you.""" start="01:08:10.640" video="qanda-emacsen" id="subtitle"]]
-Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202023%20emacsen%3A%20The%20Emacsen%20family%2C%20the%20design%20of%20an%20Emacs%20and%20the%20importance%20of%20Lisp)
+</div>Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202023%20emacsen%3A%20The%20Emacsen%20family%2C%20the%20design%20of%20an%20Emacs%20and%20the%20importance%20of%20Lisp)
<!-- End of emacsconf-publish-after-page -->
diff --git a/2023/info/emacsen-before.md b/2023/info/emacsen-before.md
index 151dac9d..4334b31b 100644
--- a/2023/info/emacsen-before.md
+++ b/2023/info/emacsen-before.md
@@ -1,6 +1,6 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
[[!toc ]]
-Format: 19-min talk; Q&A: BigBlueButton conference room
+Format: 19-min talk ; Q&A: BigBlueButton conference room
Status: TO_INDEX_QA
@@ -9,7 +9,7 @@ Status: TO_INDEX_QA
# Talk
-<div class="vid"><video controls preload="none" id="emacsen-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="emacsen-mainVideo" data="""
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-emacsen"><source src="https://media.emacsconf.org/2023/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="mainVideo-emacsen" data="""
00:00.000 Introduction
00:17.000 Why Lisp matters
01:26.640 Why Emacs Lisp was chosen
@@ -22,10 +22,10 @@ Status: TO_INDEX_QA
14:03.080 Similarities and differences
15:49.600 Demo
-"""]]<div></div>Duration: 18:28 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--main.opus">Download --main.opus (11MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--main.webm">Download --main.webm (32MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--pad.md">Download --pad.md</a></li><li><a href="https://toobnix.org/w/qgJ84RLV2FZYyeSusDskwU">View on Toobnix</a></li></ul></div></div>
+"""]]<div></div>Duration: 18:28 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2023-emacsen">Open Etherpad</a></li><li><a href="https://bbb.emacsverse.org/playback/presentation/2.0/playback.html?meetingId=93478b7dbe4fb34ded741ea7c8dfefa78a3ce8fd-1701620297196">Play recording from BigBlueButton</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--main.opus">Download --main.opus (11MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--main.webm">Download --main.webm (32MB)</a></li><li><a href="https://toobnix.org/w/qgJ84RLV2FZYyeSusDskwU">View on Toobnix</a></li><li><a href="https://www.youtube.com/watch?v=7SGcLpjC5CE">View on Youtube</a></li></ul></div></div>
# Q&A
-<div class="vid"><video controls preload="none" id="emacsen-qanda"><source src="https://media.emacsconf.org/2023/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--answers.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div>Listen to just the audio:<br /><audio controls preload="none" id="emacsen-qanda-audio" src="https://media.emacsconf.org/2023/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--answers.opus"></audio></div><div></div>Duration: 1:08:14 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--answers.opus">Download --answers.opus (39MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--answers.webm">Download --answers.webm (253MB)</a></li></ul></div></div>
+<div class="vid qanda"><video controls preload="none" id="qanda-emacsen"><source src="https://media.emacsconf.org/2023/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--answers.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div>Listen to just the audio:<br /><audio controls preload="none" id="qanda-emacsen-audio" src="https://media.emacsconf.org/2023/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--answers.opus"></audio></div><div></div>Duration: 1:08:14 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2023-emacsen">Open Etherpad</a></li><li><a href="https://bbb.emacsverse.org/playback/presentation/2.0/playback.html?meetingId=93478b7dbe4fb34ded741ea7c8dfefa78a3ce8fd-1701620297196">Play recording from BigBlueButton</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--answers.opus">Download --answers.opus (39MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--answers.webm">Download --answers.webm (253MB)</a></li></ul></div></div>
# Description
<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/info/emacsen-nav.md b/2023/info/emacsen-nav.md
index 976d9935..c89089bd 100644
--- a/2023/info/emacsen-nav.md
+++ b/2023/info/emacsen-nav.md
@@ -3,5 +3,5 @@
Back to the [[talks]]
Previous by track: <a href="/2023/talks/flat">A modern Emacs look-and-feel without pain</a>
Next by track: <a href="/2023/talks/gc">emacs-gc-stats: Does garbage collection actually slow down Emacs?</a>
-Track: <span class="sched-track Development">Development</span>
+Track: <span class="sched-track Development">Development</span> - <strong><a href="https://emacsconf.org/2023/watch/dev">Watch</a></strong>
</div>
diff --git a/2023/info/emms-after.md b/2023/info/emms-after.md
index a9b97368..532fc6a2 100644
--- a/2023/info/emms-after.md
+++ b/2023/info/emms-after.md
@@ -1,13 +1,10 @@
<!-- Automatically generated by emacsconf-publish-after-page -->
-<a name="emms-mainVideo-transcript"></a>
-# Transcript
+<div class="transcript transcript-mainVideo"><a name="emms-mainVideo-transcript"></a><h1>Transcript</h1>
-[[!template new="1" text="""Introduction""" start="00:00:00.000" video="mainVideo-emms" id="subtitle"]]
-
-[[!template text="""The Sound of Emacs, Emms, The Emacs Multimedia System.""" start="00:00:00.000" video="mainVideo-emms" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Introduction""" start="00:00:00.000" video="mainVideo-emms" id="subtitle"]]</div>[[!template text="""The Sound of Emacs, Emms, The Emacs Multimedia System.""" start="00:00:00.000" video="mainVideo-emms" id="subtitle"]]
[[!template text="""Hi, I'm Yoni Rabkin and I'll be talking about Emms;""" start="00:00:05.400" video="mainVideo-emms" id="subtitle"]]
[[!template text="""the Emacs Multimedia System.""" start="00:00:09.160" video="mainVideo-emms" id="subtitle"]]
[[!template text="""What is Emms?""" start="00:00:11.520" video="mainVideo-emms" id="subtitle"]]
@@ -27,17 +24,13 @@
[[!template text="""and gets ever more features.""" start="00:00:56.560" video="mainVideo-emms" id="subtitle"]]
[[!template text="""Perhaps Emms will one day even have a text editor.""" start="00:00:58.480" video="mainVideo-emms" id="subtitle"]]
-[[!template new="1" text="""The structure of this talk""" start="00:01:03.320" video="mainVideo-emms" id="subtitle"]]
-
-[[!template text="""The structure of this talk:""" start="00:01:03.320" video="mainVideo-emms" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""The structure of this talk""" start="00:01:03.320" video="mainVideo-emms" id="subtitle"]]</div>[[!template text="""The structure of this talk:""" start="00:01:03.320" video="mainVideo-emms" id="subtitle"]]
[[!template text="""We'll start with an introduction to Emms.""" start="00:01:05.600" video="mainVideo-emms" id="subtitle"]]
[[!template text="""This is the practical part.""" start="00:01:08.160" video="mainVideo-emms" id="subtitle"]]
[[!template text="""Then, a bit about how Emms works. That's the technical part.""" start="00:01:10.560" video="mainVideo-emms" id="subtitle"]]
[[!template text="""Finally, how we work. All about Emms development.""" start="00:01:15.880" video="mainVideo-emms" id="subtitle"]]
-[[!template new="1" text="""Introduction to Emms: The practical part""" start="00:01:21.320" video="mainVideo-emms" id="subtitle"]]
-
-[[!template text="""Introduction to Emms: The practical part:""" start="00:01:21.320" video="mainVideo-emms" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Introduction to Emms: The practical part""" start="00:01:21.320" video="mainVideo-emms" id="subtitle"]]</div>[[!template text="""Introduction to Emms: The practical part:""" start="00:01:21.320" video="mainVideo-emms" id="subtitle"]]
[[!template text="""I want this talk to be of immediate use to people,""" start="00:01:25.021" video="mainVideo-emms" id="subtitle"]]
[[!template text="""so I'm going to present a quick TL;DR of the Emms manual""" start="00:01:28.680" video="mainVideo-emms" id="subtitle"]]
[[!template text="""concerning installation and use.""" start="00:01:33.520" video="mainVideo-emms" id="subtitle"]]
@@ -137,9 +130,7 @@
[[!template text="""than the ability to play, stop, and seek,""" start="00:07:56.600" video="mainVideo-emms" id="subtitle"]]
[[!template text="""but others may implement a plethora of commands.""" start="00:07:59.560" video="mainVideo-emms" id="subtitle"]]
-[[!template new="1" text="""The modeline""" start="00:08:04.240" video="mainVideo-emms" id="subtitle"]]
-
-[[!template text="""The Modeline: Emms will by default display""" start="00:08:04.240" video="mainVideo-emms" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""The modeline""" start="00:08:04.240" video="mainVideo-emms" id="subtitle"]]</div>[[!template text="""The Modeline: Emms will by default display""" start="00:08:04.240" video="mainVideo-emms" id="subtitle"]]
[[!template text="""the name of the currently playing track in the mode line""" start="00:08:08.880" video="mainVideo-emms" id="subtitle"]]
[[!template text="""with information such as playing time.""" start="00:08:11.840" video="mainVideo-emms" id="subtitle"]]
[[!template text="""The mode line format is controlled""" start="00:08:15.000" video="mainVideo-emms" id="subtitle"]]
@@ -190,9 +181,7 @@
[[!template text="""and that URL will be passed on to the media player backend,""" start="00:10:52.640" video="mainVideo-emms" id="subtitle"]]
[[!template text="""which can play it, if any.""" start="00:10:56.720" video="mainVideo-emms" id="subtitle"]]
-[[!template new="1" text="""Meta-playlist mode""" start="00:11:01.200" video="mainVideo-emms" id="subtitle"]]
-
-[[!template text="""Meta-playlist mode:""" start="00:11:01.200" video="mainVideo-emms" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Meta-playlist mode""" start="00:11:01.200" video="mainVideo-emms" id="subtitle"]]</div>[[!template text="""Meta-playlist mode:""" start="00:11:01.200" video="mainVideo-emms" id="subtitle"]]
[[!template text="""Emms also has meta-playlist mode""" start="00:11:03.680" video="mainVideo-emms" id="subtitle"]]
[[!template text="""to help manage multiple playlists.""" start="00:11:08.300" video="mainVideo-emms" id="subtitle"]]
[[!template text="""When you invoke meta-playlist mode,""" start="00:11:11.960" video="mainVideo-emms" id="subtitle"]]
@@ -200,9 +189,7 @@
[[!template text="""and this mode binds a handful of useful keybindings""" start="00:11:16.960" video="mainVideo-emms" id="subtitle"]]
[[!template text="""to help manage those playlists.""" start="00:11:22.000" video="mainVideo-emms" id="subtitle"]]
-[[!template new="1" text="""The browser""" start="00:11:29.860" video="mainVideo-emms" id="subtitle"]]
-
-[[!template text="""The Browser:""" start="00:11:29.860" video="mainVideo-emms" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""The browser""" start="00:11:29.860" video="mainVideo-emms" id="subtitle"]]</div>[[!template text="""The Browser:""" start="00:11:29.860" video="mainVideo-emms" id="subtitle"]]
[[!template text="""Music doesn't always lend itself to being viewed""" start="00:11:31.760" video="mainVideo-emms" id="subtitle"]]
[[!template text="""as a series of discrete files.""" start="00:11:35.440" video="mainVideo-emms" id="subtitle"]]
[[!template text="""While there may be a good taxonomy of music""" start="00:11:38.200" video="mainVideo-emms" id="subtitle"]]
@@ -238,9 +225,7 @@
[[!template text="""bookmarks, GNU FM, and Dbus/Mpris support.""" start="00:13:07.040" video="mainVideo-emms" id="subtitle"]]
[[!template text="""I hope this was a useful introduction to Emms.""" start="00:13:13.360" video="mainVideo-emms" id="subtitle"]]
-[[!template new="1" text="""How Emms works: The technical part""" start="00:13:19.920" video="mainVideo-emms" id="subtitle"]]
-
-[[!template text="""How Emms Works: The technical part:""" start="00:13:19.920" video="mainVideo-emms" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""How Emms works: The technical part""" start="00:13:19.920" video="mainVideo-emms" id="subtitle"]]</div>[[!template text="""How Emms Works: The technical part:""" start="00:13:19.920" video="mainVideo-emms" id="subtitle"]]
[[!template text="""This part is an overview of how Emms works.""" start="00:13:23.220" video="mainVideo-emms" id="subtitle"]]
[[!template text="""By the end of this, you should be familiar enough""" start="00:13:26.820" video="mainVideo-emms" id="subtitle"]]
[[!template text="""with Emms internals to hack on it. Hint hint.""" start="00:13:29.760" video="mainVideo-emms" id="subtitle"]]
@@ -295,16 +280,12 @@
[[!template text="""if you want to hack on Emacs.""" start="00:16:18.880" video="mainVideo-emms" id="subtitle"]]
[[!template text="""Another hint.""" start="00:16:21.560" video="mainVideo-emms" id="subtitle"]]
-[[!template new="1" text="""The Emms core""" start="00:16:23.820" video="mainVideo-emms" id="subtitle"]]
-
-[[!template text="""The Emms core.""" start="00:16:23.820" video="mainVideo-emms" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""The Emms core""" start="00:16:23.820" video="mainVideo-emms" id="subtitle"]]</div>[[!template text="""The Emms core.""" start="00:16:23.820" video="mainVideo-emms" id="subtitle"]]
[[!template text="""The core defines tracks, playlists,""" start="00:16:25.360" video="mainVideo-emms" id="subtitle"]]
[[!template text="""a way to start and stop playback,""" start="00:16:29.080" video="mainVideo-emms" id="subtitle"]]
[[!template text="""as well as ways to proceed to the next track.""" start="00:16:31.760" video="mainVideo-emms" id="subtitle"]]
-[[!template new="1" text="""Tracks""" start="00:16:36.440" video="mainVideo-emms" id="subtitle"]]
-
-[[!template text="""Tracks:""" start="00:16:36.440" video="mainVideo-emms" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Tracks""" start="00:16:36.440" video="mainVideo-emms" id="subtitle"]]</div>[[!template text="""Tracks:""" start="00:16:36.440" video="mainVideo-emms" id="subtitle"]]
[[!template text="""Emms tracks consist of a list whose CAR is the symbol track,""" start="00:16:38.460" video="mainVideo-emms" id="subtitle"]]
[[!template text="""and CADR is an alist starting with""" start="00:16:44.780" video="mainVideo-emms" id="subtitle"]]
[[!template text="""the association of `type'.""" start="00:16:47.080" video="mainVideo-emms" id="subtitle"]]
@@ -316,9 +297,7 @@
[[!template text="""from the perspective of computational steps required""" start="00:17:11.080" video="mainVideo-emms" id="subtitle"]]
[[!template text="""to find any particular association.""" start="00:17:14.200" video="mainVideo-emms" id="subtitle"]]
-[[!template new="1" text="""Playlist""" start="00:17:18.460" video="mainVideo-emms" id="subtitle"]]
-
-[[!template text="""Playlist:""" start="00:17:18.460" video="mainVideo-emms" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Playlist""" start="00:17:18.460" video="mainVideo-emms" id="subtitle"]]</div>[[!template text="""Playlist:""" start="00:17:18.460" video="mainVideo-emms" id="subtitle"]]
[[!template text="""An Emms playlist consists of an Emacs buffer""" start="00:17:20.620" video="mainVideo-emms" id="subtitle"]]
[[!template text="""with a buffer-local non-nil variable,""" start="00:17:23.480" video="mainVideo-emms" id="subtitle"]]
[[!template text="""`emms-playlist-buffer-p`.""" start="00:17:26.460" video="mainVideo-emms" id="subtitle"]]
@@ -336,9 +315,7 @@
[[!template text="""to look like anything as long as that anything consists of""" start="00:18:11.600" video="mainVideo-emms" id="subtitle"]]
[[!template text="""one or more `emms-track` text properties.""" start="00:18:15.320" video="mainVideo-emms" id="subtitle"]]
-[[!template new="1" text="""Sources""" start="00:18:22.080" video="mainVideo-emms" id="subtitle"]]
-
-[[!template text="""Sources:""" start="00:18:22.080" video="mainVideo-emms" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Sources""" start="00:18:22.080" video="mainVideo-emms" id="subtitle"]]</div>[[!template text="""Sources:""" start="00:18:22.080" video="mainVideo-emms" id="subtitle"]]
[[!template text="""A source is how you tell Emms:""" start="00:18:23.580" video="mainVideo-emms" id="subtitle"]]
[[!template text="""&quot;Go and get those things and turn them into tracks.&quot;""" start="00:18:25.840" video="mainVideo-emms" id="subtitle"]]
[[!template text="""More specifically, an Emms source is a function called in""" start="00:18:29.780" video="mainVideo-emms" id="subtitle"]]
@@ -357,9 +334,7 @@
[[!template text="""playlists of various formats,""" start="00:19:15.040" video="mainVideo-emms" id="subtitle"]]
[[!template text="""files from dired mode, and etc.""" start="00:19:17.320" video="mainVideo-emms" id="subtitle"]]
-[[!template new="1" text="""Players""" start="00:19:22.160" video="mainVideo-emms" id="subtitle"]]
-
-[[!template text="""Players:""" start="00:19:22.160" video="mainVideo-emms" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Players""" start="00:19:22.160" video="mainVideo-emms" id="subtitle"]]</div>[[!template text="""Players:""" start="00:19:22.160" video="mainVideo-emms" id="subtitle"]]
[[!template text="""An Emms player is, at its simplest, a data structure""" start="00:19:24.880" video="mainVideo-emms" id="subtitle"]]
[[!template text="""with three functions.""" start="00:19:28.960" video="mainVideo-emms" id="subtitle"]]
[[!template text="""One to start playing, one to stop,""" start="00:19:30.840" video="mainVideo-emms" id="subtitle"]]
@@ -376,9 +351,7 @@
[[!template text="""on each file in our playlist""" start="00:20:12.960" video="mainVideo-emms" id="subtitle"]]
[[!template text="""with the image file extension we listed.""" start="00:20:15.640" video="mainVideo-emms" id="subtitle"]]
-[[!template new="1" text="""Info""" start="00:20:20.520" video="mainVideo-emms" id="subtitle"]]
-
-[[!template text="""Info:""" start="00:20:20.520" video="mainVideo-emms" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Info""" start="00:20:20.520" video="mainVideo-emms" id="subtitle"]]</div>[[!template text="""Info:""" start="00:20:20.520" video="mainVideo-emms" id="subtitle"]]
[[!template text="""As previously described, Emms comes with info methods,""" start="00:20:23.060" video="mainVideo-emms" id="subtitle"]]
[[!template text="""which are functions to add""" start="00:20:28.020" video="mainVideo-emms" id="subtitle"]]
[[!template text="""descriptive information to tracks.""" start="00:20:29.640" video="mainVideo-emms" id="subtitle"]]
@@ -400,9 +373,7 @@
[[!template text="""the binary data in the media file headers""" start="00:21:29.320" video="mainVideo-emms" id="subtitle"]]
[[!template text="""and parsing the data layout specifications.""" start="00:21:32.040" video="mainVideo-emms" id="subtitle"]]
-[[!template new="1" text="""The cache""" start="00:21:36.660" video="mainVideo-emms" id="subtitle"]]
-
-[[!template text="""The Cache:""" start="00:21:36.660" video="mainVideo-emms" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""The cache""" start="00:21:36.660" video="mainVideo-emms" id="subtitle"]]</div>[[!template text="""The Cache:""" start="00:21:36.660" video="mainVideo-emms" id="subtitle"]]
[[!template text="""The Emms cache is a mapping between a full path name""" start="00:21:38.880" video="mainVideo-emms" id="subtitle"]]
[[!template text="""and its associated information.""" start="00:21:43.280" video="mainVideo-emms" id="subtitle"]]
[[!template text="""Once information is extracted from a file""" start="00:21:45.720" video="mainVideo-emms" id="subtitle"]]
@@ -429,9 +400,7 @@
[[!template text="""for the majority of situations.""" start="00:22:45.000" video="mainVideo-emms" id="subtitle"]]
[[!template text="""Which is to say, nobody complained.""" start="00:22:47.060" video="mainVideo-emms" id="subtitle"]]
-[[!template new="1" text="""Healthy back and forth: mpv, mpd, and GNU.FM""" start="00:22:51.620" video="mainVideo-emms" id="subtitle"]]
-
-[[!template text="""Healthy back and forth. MPV, MPD, GNU.FM""" start="00:22:51.620" video="mainVideo-emms" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Healthy back and forth: mpv, mpd, and GNU.FM""" start="00:22:51.620" video="mainVideo-emms" id="subtitle"]]</div>[[!template text="""Healthy back and forth. MPV, MPD, GNU.FM""" start="00:22:51.620" video="mainVideo-emms" id="subtitle"]]
[[!template text="""Process communication with a simple media player""" start="00:22:56.240" video="mainVideo-emms" id="subtitle"]]
[[!template text="""can be as straightforward""" start="00:23:00.120" video="mainVideo-emms" id="subtitle"]]
[[!template text="""as starting an asynchronous process""" start="00:23:01.760" video="mainVideo-emms" id="subtitle"]]
@@ -444,9 +413,7 @@
[[!template text="""A simple example of this would be sending strings""" start="00:23:20.300" video="mainVideo-emms" id="subtitle"]]
[[!template text="""to a running process such as the pause command to VLC.""" start="00:23:23.960" video="mainVideo-emms" id="subtitle"]]
-[[!template new="1" text="""MPV""" start="00:23:31.560" video="mainVideo-emms" id="subtitle"]]
-
-[[!template text="""MPV:""" start="00:23:31.560" video="mainVideo-emms" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""MPV""" start="00:23:31.560" video="mainVideo-emms" id="subtitle"]]</div>[[!template text="""MPV:""" start="00:23:31.560" video="mainVideo-emms" id="subtitle"]]
[[!template text="""MPV is a popular media player forked""" start="00:23:33.380" video="mainVideo-emms" id="subtitle"]]
[[!template text="""in a roundabout way from mplayer.""" start="00:23:37.040" video="mainVideo-emms" id="subtitle"]]
[[!template text="""One of its most notable features is""" start="00:23:39.900" video="mainVideo-emms" id="subtitle"]]
@@ -467,9 +434,7 @@
[[!template text="""in fewer than 1,000 lines of legible Emacs Lisp""" start="00:24:37.920" video="mainVideo-emms" id="subtitle"]]
[[!template text="""is a testament to some serious coding ability.""" start="00:24:42.640" video="mainVideo-emms" id="subtitle"]]
-[[!template new="1" text="""MPD""" start="00:24:47.470" video="mainVideo-emms" id="subtitle"]]
-
-[[!template text="""MPD:""" start="00:24:47.470" video="mainVideo-emms" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""MPD""" start="00:24:47.470" video="mainVideo-emms" id="subtitle"]]</div>[[!template text="""MPD:""" start="00:24:47.470" video="mainVideo-emms" id="subtitle"]]
[[!template text="""Similar to MPV but potentially""" start="00:24:49.610" video="mainVideo-emms" id="subtitle"]]
[[!template text="""on a completely different machine""" start="00:24:52.400" video="mainVideo-emms" id="subtitle"]]
[[!template text="""is Emms support for the Music Player Daemon.""" start="00:24:54.120" video="mainVideo-emms" id="subtitle"]]
@@ -491,9 +456,7 @@
[[!template text="""Unless of course someone volunteers to beat me to it.""" start="00:26:01.510" video="mainVideo-emms" id="subtitle"]]
[[!template text="""Hint hint.""" start="00:26:05.340" video="mainVideo-emms" id="subtitle"]]
-[[!template new="1" text="""GNU FM and Libre FM""" start="00:26:07.440" video="mainVideo-emms" id="subtitle"]]
-
-[[!template text="""GNU FM and Libre FM:""" start="00:26:07.440" video="mainVideo-emms" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""GNU FM and Libre FM""" start="00:26:07.440" video="mainVideo-emms" id="subtitle"]]</div>[[!template text="""GNU FM and Libre FM:""" start="00:26:07.440" video="mainVideo-emms" id="subtitle"]]
[[!template text="""Libre FM is a music community which allows you""" start="00:26:10.960" video="mainVideo-emms" id="subtitle"]]
[[!template text="""to share your listening habits with other users of the site.""" start="00:26:13.640" video="mainVideo-emms" id="subtitle"]]
[[!template text="""A kind of online listening party.""" start="00:26:17.450" video="mainVideo-emms" id="subtitle"]]
@@ -514,9 +477,7 @@
[[!template text="""while interacting with a remote network server.""" start="00:27:07.040" video="mainVideo-emms" id="subtitle"]]
[[!template text="""How myopic!""" start="00:27:09.820" video="mainVideo-emms" id="subtitle"]]
-[[!template new="1" text="""How we work: Emms development""" start="00:27:12.560" video="mainVideo-emms" id="subtitle"]]
-
-[[!template text="""How we work: Emms development:""" start="00:27:12.560" video="mainVideo-emms" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""How we work: Emms development""" start="00:27:12.560" video="mainVideo-emms" id="subtitle"]]</div>[[!template text="""How we work: Emms development:""" start="00:27:12.560" video="mainVideo-emms" id="subtitle"]]
[[!template text="""This part is an overview of how Emms is developed.""" start="00:27:15.700" video="mainVideo-emms" id="subtitle"]]
[[!template text="""By the end of this part you should be able to understand""" start="00:27:19.620" video="mainVideo-emms" id="subtitle"]]
[[!template text="""how we hacked this project, and how you can too.""" start="00:27:23.900" video="mainVideo-emms" id="subtitle"]]
@@ -543,17 +504,13 @@
[[!template text="""but didn't feel like the volume of incoming patches""" start="00:28:45.560" video="mainVideo-emms" id="subtitle"]]
[[!template text="""justified a separate mailing list.""" start="00:28:48.280" video="mainVideo-emms" id="subtitle"]]
-[[!template new="1" text="""The Rime Of The Ancient Maintainer""" start="00:28:52.590" video="mainVideo-emms" id="subtitle"]]
-
-[[!template text="""The Rime Of The Ancient Maintainer:""" start="00:28:52.590" video="mainVideo-emms" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""The Rime Of The Ancient Maintainer""" start="00:28:52.590" video="mainVideo-emms" id="subtitle"]]</div>[[!template text="""The Rime Of The Ancient Maintainer:""" start="00:28:52.590" video="mainVideo-emms" id="subtitle"]]
[[!template text="""There are a number of activities""" start="00:28:55.720" video="mainVideo-emms" id="subtitle"]]
[[!template text="""particular to being a maintainer.""" start="00:28:57.480" video="mainVideo-emms" id="subtitle"]]
[[!template text="""These are all part of a project's lifecycle.""" start="00:29:00.100" video="mainVideo-emms" id="subtitle"]]
[[!template text="""Let's review some of them.""" start="00:29:03.390" video="mainVideo-emms" id="subtitle"]]
-[[!template new="1" text="""The life and times of an Emms patch""" start="00:29:06.080" video="mainVideo-emms" id="subtitle"]]
-
-[[!template text="""The life and times of an Emms patch:""" start="00:29:06.080" video="mainVideo-emms" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""The life and times of an Emms patch""" start="00:29:06.080" video="mainVideo-emms" id="subtitle"]]</div>[[!template text="""The life and times of an Emms patch:""" start="00:29:06.080" video="mainVideo-emms" id="subtitle"]]
[[!template text="""A maintainer needs to be able to accept, critique,""" start="00:29:10.000" video="mainVideo-emms" id="subtitle"]]
[[!template text="""and integrate patches from contributors and developers.""" start="00:29:13.240" video="mainVideo-emms" id="subtitle"]]
[[!template text="""This means, among other things, that the maintainer""" start="00:29:17.560" video="mainVideo-emms" id="subtitle"]]
@@ -595,9 +552,7 @@
[[!template text="""If you have ever sent a patch, feature request,""" start="00:31:13.630" video="mainVideo-emms" id="subtitle"]]
[[!template text="""or bug report into Emms (small or large), we thank you.""" start="00:31:16.880" video="mainVideo-emms" id="subtitle"]]
-[[!template new="1" text="""Let It Go: The release process""" start="00:31:24.080" video="mainVideo-emms" id="subtitle"]]
-
-[[!template text="""Let It Go, The Release Process:""" start="00:31:24.080" video="mainVideo-emms" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Let It Go: The release process""" start="00:31:24.080" video="mainVideo-emms" id="subtitle"]]</div>[[!template text="""Let It Go, The Release Process:""" start="00:31:24.080" video="mainVideo-emms" id="subtitle"]]
[[!template text="""The maintainer is responsible for the release process.""" start="00:31:27.790" video="mainVideo-emms" id="subtitle"]]
[[!template text="""I found that a consistent schedule works well,""" start="00:31:31.610" video="mainVideo-emms" id="subtitle"]]
[[!template text="""which is not to say that we have to release on schedule,""" start="00:31:35.130" video="mainVideo-emms" id="subtitle"]]
@@ -615,9 +570,7 @@
[[!template text="""will remain safely in their branch on the Git repo""" start="00:32:13.500" video="mainVideo-emms" id="subtitle"]]
[[!template text="""until after the ELPA release.""" start="00:32:18.200" video="mainVideo-emms" id="subtitle"]]
-[[!template new="1" text="""It Is Not In Our Stars, But In Ourselves: Future directions""" start="00:32:23.400" video="mainVideo-emms" id="subtitle"]]
-
-[[!template text="""It Is Not In Our Stars, But In Ourselves; Future Directions:""" start="00:32:23.400" video="mainVideo-emms" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""It Is Not In Our Stars, But In Ourselves: Future directions""" start="00:32:23.400" video="mainVideo-emms" id="subtitle"]]</div>[[!template text="""It Is Not In Our Stars, But In Ourselves; Future Directions:""" start="00:32:23.400" video="mainVideo-emms" id="subtitle"]]
[[!template text="""One aspect of Emms that needs to improve is ease of setup.""" start="00:32:29.630" video="mainVideo-emms" id="subtitle"]]
[[!template text="""Now that might surprise you, since at the time of writing,""" start="00:32:34.900" video="mainVideo-emms" id="subtitle"]]
[[!template text="""it's already pretty easy.""" start="00:32:37.720" video="mainVideo-emms" id="subtitle"]]
@@ -665,9 +618,7 @@
[[!template text="""It is typical of the kind of issue you have to have in mind""" start="00:34:38.020" video="mainVideo-emms" id="subtitle"]]
[[!template text="""when you're maintaining a package.""" start="00:34:41.560" video="mainVideo-emms" id="subtitle"]]
-[[!template new="1" text="""Development policies: Interface language""" start="00:34:44.849" video="mainVideo-emms" id="subtitle"]]
-
-[[!template text="""Development Policies: Interface Language.""" start="00:34:44.849" video="mainVideo-emms" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Development policies: Interface language""" start="00:34:44.849" video="mainVideo-emms" id="subtitle"]]</div>[[!template text="""Development Policies: Interface Language.""" start="00:34:44.849" video="mainVideo-emms" id="subtitle"]]
[[!template text="""A maintainer of an interactive program such as Emms""" start="00:34:49.160" video="mainVideo-emms" id="subtitle"]]
[[!template text="""needs to think about user interaction.""" start="00:34:52.360" video="mainVideo-emms" id="subtitle"]]
[[!template text="""Emms doesn't use key bindings which are familiar""" start="00:34:55.360" video="mainVideo-emms" id="subtitle"]]
@@ -692,9 +643,7 @@
[[!template text="""and should integrate into Emacs,""" start="00:35:59.440" video="mainVideo-emms" id="subtitle"]]
[[!template text="""and serve Emacs users first and foremost.""" start="00:36:01.400" video="mainVideo-emms" id="subtitle"]]
-[[!template new="1" text="""Development policies: Freedom""" start="00:36:05.980" video="mainVideo-emms" id="subtitle"]]
-
-[[!template text="""Development policies: Freedom.""" start="00:36:05.980" video="mainVideo-emms" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Development policies: Freedom""" start="00:36:05.980" video="mainVideo-emms" id="subtitle"]]</div>[[!template text="""Development policies: Freedom.""" start="00:36:05.980" video="mainVideo-emms" id="subtitle"]]
[[!template text="""Another maintainer job is to think of Emms' posture""" start="00:36:10.290" video="mainVideo-emms" id="subtitle"]]
[[!template text="""in regards to software freedom.""" start="00:36:15.000" video="mainVideo-emms" id="subtitle"]]
[[!template text="""Here are a few examples.""" start="00:36:17.380" video="mainVideo-emms" id="subtitle"]]
@@ -735,9 +684,7 @@
[[!template text="""chances are that there is something you can do for Emms.""" start="00:38:06.760" video="mainVideo-emms" id="subtitle"]]
[[!template text="""Just saying.""" start="00:38:09.940" video="mainVideo-emms" id="subtitle"]]
-[[!template new="1" text="""Acknowledgements""" start="00:38:12.370" video="mainVideo-emms" id="subtitle"]]
-
-[[!template text="""Acknowledgements:""" start="00:38:12.370" video="mainVideo-emms" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Acknowledgements""" start="00:38:12.370" video="mainVideo-emms" id="subtitle"]]</div>[[!template text="""Acknowledgements:""" start="00:38:12.370" video="mainVideo-emms" id="subtitle"]]
[[!template text="""I'd like to express my deep gratitude for all of the people""" start="00:38:14.190" video="mainVideo-emms" id="subtitle"]]
[[!template text="""who have hacked on Emms""" start="00:38:18.080" video="mainVideo-emms" id="subtitle"]]
[[!template text="""during my time as a maintainer and before it.""" start="00:38:19.560" video="mainVideo-emms" id="subtitle"]]
@@ -748,12 +695,11 @@
[[!template text="""which actually moves the ship forward.""" start="00:38:33.180" video="mainVideo-emms" id="subtitle"]]
[[!template text="""Thank you to all.""" start="00:38:36.370" video="mainVideo-emms" id="subtitle"]]
-
+</div>
Captioner: yoni
-<a name="emms-qanda-transcript"></a>
-# Q&A transcript (unedited)
+<div class="transcript transcript-qanda"><a name="emms-qanda-transcript"></a><h1>Q&A transcript (unedited)</h1>
[[!template text="""[Speaker 0]: And I think we are live.""" start="00:00:06.140" video="qanda-emms" id="subtitle"]]
[[!template text="""Hi, Yanny, how are you doing?""" start="00:00:07.580" video="qanda-emms" id="subtitle"]]
@@ -1365,7 +1311,7 @@ Captioner: yoni
[[!template text="""see.""" start="00:31:09.020" video="qanda-emms" id="subtitle"]]
[[!template text="""[Speaker 2]: You""" start="00:31:15.060" video="qanda-emms" id="subtitle"]]
-Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202023%20emms%3A%20Emacs%20MultiMedia%20System%20%28EMMS%29)
+</div>Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202023%20emms%3A%20Emacs%20MultiMedia%20System%20%28EMMS%29)
<!-- End of emacsconf-publish-after-page -->
diff --git a/2023/info/emms-before.md b/2023/info/emms-before.md
index d45449c6..876b22c8 100644
--- a/2023/info/emms-before.md
+++ b/2023/info/emms-before.md
@@ -1,6 +1,6 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
[[!toc ]]
-Format: 39-min talk; Q&A: BigBlueButton conference room
+Format: 39-min talk ; Q&A: BigBlueButton conference room
Status: Q&A to be extracted from the room recordings
@@ -9,7 +9,7 @@ Status: Q&A to be extracted from the room recordings
# Talk
-<div class="vid"><video controls preload="none" id="emms-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="emms-mainVideo" data="""
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-emms"><source src="https://media.emacsconf.org/2023/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="mainVideo-emms" data="""
00:00.000 Introduction
01:03.320 The structure of this talk
01:21.320 Introduction to Emms: The practical part
@@ -37,10 +37,10 @@ Status: Q&A to be extracted from the room recordings
36:05.980 Development policies: Freedom
38:12.370 Acknowledgements
-"""]]<div></div>Duration: 38:38 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--main.opus">Download --main.opus (21MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--main.webm">Download --main.webm (139MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--pad.md">Download --pad.md</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin.outline">Download .outline</a></li><li><a href="https://toobnix.org/w/ppdF62LysvxpXgZVaeF9wk">View on Toobnix</a></li></ul></div></div>
+"""]]<div></div>Duration: 38:38 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2023-emms">Open Etherpad</a></li><li><a href="https://bbb.emacsverse.org/playback/presentation/2.0/playback.html?meetingId=8b33cba3581e35350526d5dfcaf8fdacae21884f-1701622838637">Play recording from BigBlueButton</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--main.opus">Download --main.opus (21MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--main.webm">Download --main.webm (139MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin.outline">Download .outline</a></li><li><a href="https://toobnix.org/w/ppdF62LysvxpXgZVaeF9wk">View on Toobnix</a></li><li><a href="https://www.youtube.com/watch?v=kII413hkyis">View on Youtube</a></li></ul></div></div>
# Q&A
-<div class="vid"><video controls preload="none" id="emms-qanda"><source src="https://media.emacsconf.org/2023/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--answers.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div>Listen to just the audio:<br /><audio controls preload="none" id="emms-qanda-audio" src="https://media.emacsconf.org/2023/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--answers.opus"></audio></div><div></div>Duration: 32:38 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--answers.json">Download --answers.json (1.3MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--answers.opus">Download --answers.opus (19MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--answers.webm">Download --answers.webm (52MB)</a></li></ul></div></div>
+<div class="vid qanda"><video controls preload="none" id="qanda-emms"><source src="https://media.emacsconf.org/2023/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--answers.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div>Listen to just the audio:<br /><audio controls preload="none" id="qanda-emms-audio" src="https://media.emacsconf.org/2023/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--answers.opus"></audio></div><div></div>Duration: 32:38 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2023-emms">Open Etherpad</a></li><li><a href="https://bbb.emacsverse.org/playback/presentation/2.0/playback.html?meetingId=8b33cba3581e35350526d5dfcaf8fdacae21884f-1701622838637">Play recording from BigBlueButton</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--answers.json">Download --answers.json (1.3MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--answers.opus">Download --answers.opus (19MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--answers.webm">Download --answers.webm (52MB)</a></li></ul></div></div>
# Description
<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/info/emms-nav.md b/2023/info/emms-nav.md
index 31d2bfad..b38582cc 100644
--- a/2023/info/emms-nav.md
+++ b/2023/info/emms-nav.md
@@ -3,5 +3,5 @@
Back to the [[talks]]
Previous by track: <a href="/2023/talks/cubing">Speedcubing in Emacs</a>
Next by track: <a href="/2023/talks/steno">Programming with steno</a>
-Track: <span class="sched-track General">General</span>
+Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2023/watch/gen">Watch</a></strong>
</div>
diff --git a/2023/info/eval-after.md b/2023/info/eval-after.md
index d82abf2a..780cdf3c 100644
--- a/2023/info/eval-after.md
+++ b/2023/info/eval-after.md
@@ -1,13 +1,10 @@
<!-- Automatically generated by emacsconf-publish-after-page -->
-<a name="eval-mainVideo-transcript"></a>
-# Transcript
+<div class="transcript transcript-mainVideo"><a name="eval-mainVideo-transcript"></a><h1>Transcript</h1>
-[[!template new="1" text="""Introduction""" start="00:00:04.880" video="mainVideo-eval" id="subtitle"]]
-
-[[!template text="""Hello, and welcome to EmacsConf 2023!""" start="00:00:04.880" video="mainVideo-eval" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Introduction""" start="00:00:04.880" video="mainVideo-eval" id="subtitle"]]</div>[[!template text="""Hello, and welcome to EmacsConf 2023!""" start="00:00:04.880" video="mainVideo-eval" id="subtitle"]]
[[!template text="""My name is Musa Al-hassy,""" start="00:00:10.001" video="mainVideo-eval" id="subtitle"]]
[[!template text="""and I will be talking about &quot;REPL-driven development.&quot;""" start="00:00:12.109" video="mainVideo-eval" id="subtitle"]]
[[!template text="""I like programming languages so much.""" start="00:00:15.549" video="mainVideo-eval" id="subtitle"]]
@@ -19,9 +16,7 @@
[[!template text="""Links to longer videos and GIFs""" start="00:00:31.309" video="mainVideo-eval" id="subtitle"]]
[[!template text="""for those who are interested.""" start="00:00:33.469" video="mainVideo-eval" id="subtitle"]]
-[[!template new="1" text="""The wonders of C-x C-e""" start="00:00:35.989" video="mainVideo-eval" id="subtitle"]]
-
-[[!template text="""So the wonderful thing about Emacs""" start="00:00:35.989" video="mainVideo-eval" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""The wonders of C-x C-e""" start="00:00:35.989" video="mainVideo-eval" id="subtitle"]]</div>[[!template text="""So the wonderful thing about Emacs""" start="00:00:35.989" video="mainVideo-eval" id="subtitle"]]
[[!template text="""is that you can execute Lisp anywhere.""" start="00:00:37.309" video="mainVideo-eval" id="subtitle"]]
[[!template text="""For example, I can go to this piece of Lisp,""" start="00:00:40.589" video="mainVideo-eval" id="subtitle"]]
[[!template text="""press Ctrl-x Ctrl-e (`C-x C-e`)""" start="00:00:42.829" video="mainVideo-eval" id="subtitle"]]
@@ -89,9 +84,7 @@
[[!template text="""you can insert them, and do as you like.""" start="00:03:28.343" video="mainVideo-eval" id="subtitle"]]
[[!template text="""I think that's really neat.""" start="00:03:30.789" video="mainVideo-eval" id="subtitle"]]
-[[!template new="1" text="""An overview of REPL Driven Development""" start="00:03:35.809" video="mainVideo-eval" id="subtitle"]]
-
-[[!template text="""This package allows you to do""" start="00:03:35.809" video="mainVideo-eval" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""An overview of REPL Driven Development""" start="00:03:35.809" video="mainVideo-eval" id="subtitle"]]</div>[[!template text="""This package allows you to do""" start="00:03:35.809" video="mainVideo-eval" id="subtitle"]]
[[!template text="""REPL driven development.""" start="00:03:37.209" video="mainVideo-eval" id="subtitle"]]
[[!template text="""In that, you can use it to grow your program.""" start="00:03:39.109" video="mainVideo-eval" id="subtitle"]]
[[!template text="""You don't need to restart it.""" start="00:03:42.309" video="mainVideo-eval" id="subtitle"]]
@@ -121,9 +114,7 @@
[[!template text="""but unfortunately, we're running short on time.""" start="00:04:43.909" video="mainVideo-eval" id="subtitle"]]
[[!template text="""Apologies.""" start="00:04:46.509" video="mainVideo-eval" id="subtitle"]]
-[[!template new="1" text="""REPL Driven Development with Java""" start="00:04:51.143" video="mainVideo-eval" id="subtitle"]]
-
-[[!template text="""The neat thing here is: this package tries to""" start="00:04:51.143" video="mainVideo-eval" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""REPL Driven Development with Java""" start="00:04:51.143" video="mainVideo-eval" id="subtitle"]]</div>[[!template text="""The neat thing here is: this package tries to""" start="00:04:51.143" video="mainVideo-eval" id="subtitle"]]
[[!template text="""bring the feeling of Lisp to other languages.""" start="00:04:56.209" video="mainVideo-eval" id="subtitle"]]
[[!template text="""So the idea of a REPL, or a Read Eval Print Loop""" start="00:05:00.269" video="mainVideo-eval" id="subtitle"]]
[[!template text="""is R and P are data interchange protocols.""" start="00:05:03.509" video="mainVideo-eval" id="subtitle"]]
@@ -171,9 +162,7 @@
[[!template text="""In a browser, in a LaTeX file, in an Org mode (file),""" start="00:07:22.229" video="mainVideo-eval" id="subtitle"]]
[[!template text="""however we really desire.""" start="00:07:26.749" video="mainVideo-eval" id="subtitle"]]
-[[!template new="1" text="""Bring your own Read Protocol""" start="00:07:28.029" video="mainVideo-eval" id="subtitle"]]
-
-[[!template text="""And if our language doesn't have an easy protocol,""" start="00:07:28.029" video="mainVideo-eval" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Bring your own Read Protocol""" start="00:07:28.029" video="mainVideo-eval" id="subtitle"]]</div>[[!template text="""And if our language doesn't have an easy protocol,""" start="00:07:28.029" video="mainVideo-eval" id="subtitle"]]
[[!template text="""so what I did for Java in particular was:""" start="00:07:32.989" video="mainVideo-eval" id="subtitle"]]
[[!template text="""you take a blob, and you use some""" start="00:07:36.143" video="mainVideo-eval" id="subtitle"]]
[[!template text="""parsing expression grammars, or if you really want""" start="00:07:38.643" video="mainVideo-eval" id="subtitle"]]
@@ -184,9 +173,7 @@
[[!template text="""It's nice that you can do these kind of things""" start="00:07:53.149" video="mainVideo-eval" id="subtitle"]]
[[!template text="""and that this software encourages you to do them.""" start="00:07:56.749" video="mainVideo-eval" id="subtitle"]]
-[[!template new="1" text="""Use Case: RDD & Job Interviews""" start="00:07:59.669" video="mainVideo-eval" id="subtitle"]]
-
-[[!template text="""So one use case I actually use""" start="00:07:59.669" video="mainVideo-eval" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Use Case: RDD & Job Interviews""" start="00:07:59.669" video="mainVideo-eval" id="subtitle"]]</div>[[!template text="""So one use case I actually use""" start="00:07:59.669" video="mainVideo-eval" id="subtitle"]]
[[!template text="""besides learning things is…""" start="00:08:07.549" video="mainVideo-eval" id="subtitle"]]
[[!template text="""oops oops oopsies oopsies showing you metadata""" start="00:08:10.909" video="mainVideo-eval" id="subtitle"]]
[[!template text="""you shouldn't be looking at.""" start="00:08:14.776" video="mainVideo-eval" id="subtitle"]]
@@ -221,7 +208,7 @@
[[!template text="""And have a wonderful December Saturday.""" start="00:09:29.069" video="mainVideo-eval" id="subtitle"]]
[[!template text="""Take care! Bye bye, everyone.""" start="00:09:34.389" video="mainVideo-eval" id="subtitle"]]
-
+</div>
Captioner: bhavin192
diff --git a/2023/info/eval-before.md b/2023/info/eval-before.md
index 3ea735b8..18c605cc 100644
--- a/2023/info/eval-before.md
+++ b/2023/info/eval-before.md
@@ -1,13 +1,13 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
[[!toc ]]
-Format: 10-min talk; Q&A: ask questions via Etherpad/IRC; we'll e-mail the speaker and post answers on this wiki page after the conference
+Format: 10-min talk ; Q&A: ask questions via Etherpad/IRC; we'll e-mail the speaker and post answers on this wiki page after the conference
Status: All done
-<div class="vid"><video controls preload="none" id="eval-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-eval--editor-integrated-repl-driven-development-for-all-languages--musa-alhassy--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-eval--editor-integrated-repl-driven-development-for-all-languages--musa-alhassy--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-eval--editor-integrated-repl-driven-development-for-all-languages--musa-alhassy--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="eval-mainVideo" data="""
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-eval"><source src="https://media.emacsconf.org/2023/emacsconf-2023-eval--editor-integrated-repl-driven-development-for-all-languages--musa-alhassy--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-eval--editor-integrated-repl-driven-development-for-all-languages--musa-alhassy--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-eval--editor-integrated-repl-driven-development-for-all-languages--musa-alhassy--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="mainVideo-eval" data="""
00:04.880 Introduction
00:35.989 The wonders of C-x C-e
03:35.809 An overview of REPL Driven Development
@@ -15,6 +15,6 @@ Status: All done
07:28.029 Bring your own Read Protocol
07:59.669 Use Case: RDD & Job Interviews
-"""]]<div></div>Duration: 09:37 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-eval--editor-integrated-repl-driven-development-for-all-languages--musa-alhassy--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-eval--editor-integrated-repl-driven-development-for-all-languages--musa-alhassy--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-eval--editor-integrated-repl-driven-development-for-all-languages--musa-alhassy--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-eval--editor-integrated-repl-driven-development-for-all-languages--musa-alhassy--main.opus">Download --main.opus (4.2MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-eval--editor-integrated-repl-driven-development-for-all-languages--musa-alhassy--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-eval--editor-integrated-repl-driven-development-for-all-languages--musa-alhassy--main.webm">Download --main.webm (29MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-eval--editor-integrated-repl-driven-development-for-all-languages--musa-alhassy--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-eval--editor-integrated-repl-driven-development-for-all-languages--musa-alhassy--pad.md">Download --pad.md</a></li><li><a href="https://toobnix.org/w/74srjNx1cgMr5MsJ9NWNNi">View on Toobnix</a></li></ul></div></div>
+"""]]<div></div>Duration: 09:37 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2023-eval">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-eval--editor-integrated-repl-driven-development-for-all-languages--musa-alhassy--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-eval--editor-integrated-repl-driven-development-for-all-languages--musa-alhassy--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-eval--editor-integrated-repl-driven-development-for-all-languages--musa-alhassy--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-eval--editor-integrated-repl-driven-development-for-all-languages--musa-alhassy--main.opus">Download --main.opus (4.2MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-eval--editor-integrated-repl-driven-development-for-all-languages--musa-alhassy--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-eval--editor-integrated-repl-driven-development-for-all-languages--musa-alhassy--main.webm">Download --main.webm (29MB)</a></li><li><a href="https://toobnix.org/w/74srjNx1cgMr5MsJ9NWNNi">View on Toobnix</a></li><li><a href="https://www.youtube.com/watch?v=1bk0pqpMCfQ">View on Youtube</a></li></ul></div></div>
# Description
<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/info/eval-nav.md b/2023/info/eval-nav.md
index 346bbc65..2a1de627 100644
--- a/2023/info/eval-nav.md
+++ b/2023/info/eval-nav.md
@@ -3,5 +3,5 @@
Back to the [[talks]]
Previous by track: <a href="/2023/talks/overlay">Improving compiler diagnostics with overlays</a>
Next by track: <a href="/2023/talks/repl">REPLs in strange places: Lua, LaTeX, LPeg, LPegRex, TikZ</a>
-Track: <span class="sched-track Development">Development</span>
+Track: <span class="sched-track Development">Development</span> - <strong><a href="https://emacsconf.org/2023/watch/dev">Watch</a></strong>
</div>
diff --git a/2023/info/flat-after.md b/2023/info/flat-after.md
index c743ddf6..8135bc6c 100644
--- a/2023/info/flat-after.md
+++ b/2023/info/flat-after.md
@@ -1,8 +1,7 @@
<!-- Automatically generated by emacsconf-publish-after-page -->
-<a name="flat-mainVideo-transcript"></a>
-# Transcript (unedited)
+<div class="transcript transcript-mainVideo"><a name="flat-mainVideo-transcript"></a><h1>Transcript (unedited)</h1>
[[!template text="""That's how I came into this.""" start="00:00:01.880" video="mainVideo-flat" id="subtitle"]]
[[!template text="""Finally, the next big thing was starting""" start="00:00:10.120" video="mainVideo-flat" id="subtitle"]]
@@ -256,7 +255,7 @@
[[!template text="""Awesome. Take care. Bye.""" start="00:22:01.640" video="mainVideo-flat" id="subtitle"]]
[[!template text="""Bye. Bye.""" start="00:22:02.720" video="mainVideo-flat" id="subtitle"]]
-Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202023%20flat%3A%20A%20modern%20Emacs%20look-and-feel%20without%20pain)
+</div>Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202023%20flat%3A%20A%20modern%20Emacs%20look-and-feel%20without%20pain)
<!-- End of emacsconf-publish-after-page -->
diff --git a/2023/info/flat-before.md b/2023/info/flat-before.md
index fdae80b7..d3827603 100644
--- a/2023/info/flat-before.md
+++ b/2023/info/flat-before.md
@@ -1,12 +1,12 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
[[!toc ]]
-Format: 23-min talk; Q&A: BigBlueButton conference room
+Format: 23-min talk ; Q&A: BigBlueButton conference room
Status: Q&A to be extracted from the room recordings
-<div class="vid"><video controls preload="none" id="flat-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-flat--a-modern-emacs-lookandfeel-without-pain--pedro-a-aranda--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-flat--a-modern-emacs-lookandfeel-without-pain--pedro-a-aranda--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 22:20 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-flat--a-modern-emacs-lookandfeel-without-pain--pedro-a-aranda--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-flat--a-modern-emacs-lookandfeel-without-pain--pedro-a-aranda--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-flat--a-modern-emacs-lookandfeel-without-pain--pedro-a-aranda--main.json">Download --main.json</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-flat--a-modern-emacs-lookandfeel-without-pain--pedro-a-aranda--main.opus">Download --main.opus (10MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-flat--a-modern-emacs-lookandfeel-without-pain--pedro-a-aranda--main.vtt">Download --main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-flat--a-modern-emacs-lookandfeel-without-pain--pedro-a-aranda--main.webm">Download --main.webm (121MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-flat--a-modern-emacs-lookandfeel-without-pain--pedro-a-aranda--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-flat--a-modern-emacs-lookandfeel-without-pain--pedro-a-aranda--pad.md">Download --pad.md</a></li><li><a href="https://toobnix.org/w/1DRDY8vZK3SW5M8zAPJQSp">View on Toobnix</a></li></ul></div></div>
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-flat"><source src="https://media.emacsconf.org/2023/emacsconf-2023-flat--a-modern-emacs-lookandfeel-without-pain--pedro-a-aranda--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-flat--a-modern-emacs-lookandfeel-without-pain--pedro-a-aranda--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 22:20 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2023-flat">Open Etherpad</a></li><li><a href="https://bbb.emacsverse.org/playback/presentation/2.0/playback.html?meetingId=865d185560bbda4ee85399dc236c6f7eb2ee635d-1701616925579">Play recording from BigBlueButton</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-flat--a-modern-emacs-lookandfeel-without-pain--pedro-a-aranda--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-flat--a-modern-emacs-lookandfeel-without-pain--pedro-a-aranda--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-flat--a-modern-emacs-lookandfeel-without-pain--pedro-a-aranda--main.json">Download --main.json</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-flat--a-modern-emacs-lookandfeel-without-pain--pedro-a-aranda--main.opus">Download --main.opus (10MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-flat--a-modern-emacs-lookandfeel-without-pain--pedro-a-aranda--main.vtt">Download --main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-flat--a-modern-emacs-lookandfeel-without-pain--pedro-a-aranda--main.webm">Download --main.webm (121MB)</a></li><li><a href="https://toobnix.org/w/1DRDY8vZK3SW5M8zAPJQSp">View on Toobnix</a></li><li><a href="https://www.youtube.com/watch?v=E1u6DcHis9M">View on Youtube</a></li></ul></div></div>
# Description
<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/info/flat-nav.md b/2023/info/flat-nav.md
index 02ba0748..a3ff71bc 100644
--- a/2023/info/flat-nav.md
+++ b/2023/info/flat-nav.md
@@ -3,5 +3,5 @@
Back to the [[talks]]
Previous by track: <a href="/2023/talks/world">GNU Emacs: A World of Possibilities</a>
Next by track: <a href="/2023/talks/emacsen">The Emacsen family, the design of an Emacs and the importance of Lisp</a>
-Track: <span class="sched-track Development">Development</span>
+Track: <span class="sched-track Development">Development</span> - <strong><a href="https://emacsconf.org/2023/watch/dev">Watch</a></strong>
</div>
diff --git a/2023/info/gc-after.md b/2023/info/gc-after.md
index 90c0a853..f4eef3e2 100644
--- a/2023/info/gc-after.md
+++ b/2023/info/gc-after.md
@@ -1,13 +1,10 @@
<!-- Automatically generated by emacsconf-publish-after-page -->
-<a name="gc-mainVideo-transcript"></a>
-# Transcript
+<div class="transcript transcript-mainVideo"><a name="gc-mainVideo-transcript"></a><h1>Transcript</h1>
-[[!template new="1" text="""Introduction""" start="00:00:00.000" video="mainVideo-gc" id="subtitle"]]
-
-[[!template text="""Hello everyone, my name is Ihor Radchenko,""" start="00:00:00.000" video="mainVideo-gc" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Introduction""" start="00:00:00.000" video="mainVideo-gc" id="subtitle"]]</div>[[!template text="""Hello everyone, my name is Ihor Radchenko,""" start="00:00:00.000" video="mainVideo-gc" id="subtitle"]]
[[!template text="""and you may know me from Org Mailing List.""" start="00:00:04.640" video="mainVideo-gc" id="subtitle"]]
[[!template text="""However, today I'm not going to talk about Org Mode.""" start="00:00:07.600" video="mainVideo-gc" id="subtitle"]]
[[!template text="""Today I'm going to talk about""" start="00:00:09.800" video="mainVideo-gc" id="subtitle"]]
@@ -22,9 +19,7 @@
[[!template text="""to optimize Emacs performance""" start="00:00:44.720" video="mainVideo-gc" id="subtitle"]]
[[!template text="""and when it's necessary or not to do.""" start="00:00:47.480" video="mainVideo-gc" id="subtitle"]]
-[[!template new="1" text="""About garbage collection in Emacs""" start="00:00:51.080" video="mainVideo-gc" id="subtitle"]]
-
-[[!template text="""Let's begin. What is garbage collection?""" start="00:00:51.080" video="mainVideo-gc" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""About garbage collection in Emacs""" start="00:00:51.080" video="mainVideo-gc" id="subtitle"]]</div>[[!template text="""Let's begin. What is garbage collection?""" start="00:00:51.080" video="mainVideo-gc" id="subtitle"]]
[[!template text="""To understand what is garbage collection,""" start="00:00:54.520" video="mainVideo-gc" id="subtitle"]]
[[!template text="""we need to realize that anything you do in Emacs""" start="00:00:56.520" video="mainVideo-gc" id="subtitle"]]
[[!template text="""is some kind of command. Any command is most likely""" start="00:00:59.040" video="mainVideo-gc" id="subtitle"]]
@@ -51,9 +46,7 @@
[[!template text="""The first term of the list is not used""" start="00:02:05.000" video="mainVideo-gc" id="subtitle"]]
[[!template text="""and it might be cleared at some point.""" start="00:02:07.680" video="mainVideo-gc" id="subtitle"]]
-[[!template new="1" text="""Garbage collection in Emacs""" start="00:02:09.760" video="mainVideo-gc" id="subtitle"]]
-
-[[!template text="""So that's what Emacs does.""" start="00:02:09.760" video="mainVideo-gc" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Garbage collection in Emacs""" start="00:02:09.760" video="mainVideo-gc" id="subtitle"]]</div>[[!template text="""So that's what Emacs does.""" start="00:02:09.760" video="mainVideo-gc" id="subtitle"]]
[[!template text="""Every now and then, Emacs goes through all the memory""" start="00:02:12.240" video="mainVideo-gc" id="subtitle"]]
[[!template text="""and identifies which part of the memory are not used""" start="00:02:15.920" video="mainVideo-gc" id="subtitle"]]
[[!template text="""and then clear them so that it can free up the RAM.""" start="00:02:19.120" video="mainVideo-gc" id="subtitle"]]
@@ -605,360 +598,7 @@
[[!template text="""and you can reproduce all the statistic graphs if you wish""" start="00:33:11.840" video="mainVideo-gc" id="subtitle"]]
[[!template text="""and thank you for attention""" start="00:33:17.080" video="mainVideo-gc" id="subtitle"]]
-<a name="gc-qanda-transcript"></a>
-# Q&A transcript (unedited)
-
-[[!template text="""[Speaker 0]: And then, hi everyone.""" start="00:00:01.620" video="qanda-gc" id="subtitle"]]
-[[!template text="""Thank you for your nice talk,""" start="00:00:03.760" video="qanda-gc" id="subtitle"]]
-[[!template text="""I can say it's the Emacs GC.""" start="00:00:05.900" video="qanda-gc" id="subtitle"]]
-[[!template text="""We have some questions on the pad and maybe""" start="00:00:09.280" video="qanda-gc" id="subtitle"]]
-[[!template text="""before I would like to ask you something to""" start="00:00:11.580" video="qanda-gc" id="subtitle"]]
-[[!template text="""the last 1 you have said,""" start="00:00:12.780" video="qanda-gc" id="subtitle"]]
-[[!template text="""concerning changing the GC strategy,""" start="00:00:15.200" video="qanda-gc" id="subtitle"]]
-[[!template text="""that it's unlikely that it will be happening""" start="00:00:18.500" video="qanda-gc" id="subtitle"]]
-[[!template text="""in the next time. Yeah.""" start="00:00:20.380" video="qanda-gc" id="subtitle"]]
-[[!template text="""Is there any discussion going on or why does""" start="00:00:22.760" video="qanda-gc" id="subtitle"]]
-[[!template text="""the case it's not changing the strategy?""" start="00:00:24.320" video="qanda-gc" id="subtitle"]]
-[[!template text="""[Speaker 1]: It's mostly because it's difficult.""" start="00:00:26.640" video="qanda-gc" id="subtitle"]]
-[[!template text="""I think, yesterday you heard from,""" start="00:00:29.439" video="qanda-gc" id="subtitle"]]
-[[!template text="""1 of the dev talks that like there was 1""" start="00:00:33.400" video="qanda-gc" id="subtitle"]]
-[[!template text="""small, short comment that,""" start="00:00:34.980" video="qanda-gc" id="subtitle"]]
-[[!template text="""oh yeah, it would be nice to change this""" start="00:00:36.780" video="qanda-gc" id="subtitle"]]
-[[!template text="""algorithm but it's hard.""" start="00:00:39.059" video="qanda-gc" id="subtitle"]]
-[[!template text="""[Speaker 0]: So I""" start="00:00:40.760" video="qanda-gc" id="subtitle"]]
-[[!template text="""[Speaker 1]: mean it's hard not because the algorithm is""" start="00:00:43.260" video="qanda-gc" id="subtitle"]]
-[[!template text="""that hard but because it's a very low level""" start="00:00:45.400" video="qanda-gc" id="subtitle"]]
-[[!template text="""code and it must be like very carefully""" start="00:00:48.000" video="qanda-gc" id="subtitle"]]
-[[!template text="""weighted. So that can be,""" start="00:00:49.960" video="qanda-gc" id="subtitle"]]
-[[!template text="""it needs to be made sure that the carousel""" start="00:00:53.239" video="qanda-gc" id="subtitle"]]
-[[!template text="""will work. It's all bugs.""" start="00:00:55.280" video="qanda-gc" id="subtitle"]]
-[[!template text="""If you have bugs and you can see that,""" start="00:00:57.440" video="qanda-gc" id="subtitle"]]
-[[!template text="""so it's nothing to work anymore.""" start="00:00:58.660" video="qanda-gc" id="subtitle"]]
-[[!template text="""[Speaker 0]: So We have a lot of RAM usage.""" start="00:01:00.720" video="qanda-gc" id="subtitle"]]
-[[!template text="""Yeah. Maybe sometime.""" start="00:01:02.240" video="qanda-gc" id="subtitle"]]
-[[!template text="""[Speaker 1]: There was like years ago,""" start="00:01:06.180" video="qanda-gc" id="subtitle"]]
-[[!template text="""there was a branch on generational DC,""" start="00:01:09.640" video="qanda-gc" id="subtitle"]]
-[[!template text="""if I remember correctly,""" start="00:01:11.100" video="qanda-gc" id="subtitle"]]
-[[!template text="""but they didn't go anywhere,""" start="00:01:13.380" video="qanda-gc" id="subtitle"]]
-[[!template text="""unfortunately.""" start="00:01:14.760" video="qanda-gc" id="subtitle"]]
-[[!template text="""[Speaker 0]: That's a pity. But let's come to the""" start="00:01:18.900" video="qanda-gc" id="subtitle"]]
-[[!template text="""questions on the pad. So the first 1 is,""" start="00:01:21.500" video="qanda-gc" id="subtitle"]]
-[[!template text="""are the GC duration statistics correlated""" start="00:01:24.340" video="qanda-gc" id="subtitle"]]
-[[!template text="""with users? I mean, does the same user""" start="00:01:27.340" video="qanda-gc" id="subtitle"]]
-[[!template text="""experience GC of various durations?""" start="00:01:29.440" video="qanda-gc" id="subtitle"]]
-[[!template text="""Or Do some users experience GC of a greater""" start="00:01:32.900" video="qanda-gc" id="subtitle"]]
-[[!template text="""0.26 exclusively, while others never""" start="00:01:36.680" video="qanda-gc" id="subtitle"]]
-[[!template text="""experience them? So is it correlated to user""" start="00:01:40.440" video="qanda-gc" id="subtitle"]]
-[[!template text="""behavior? I guess you said it in your talk.""" start="00:01:43.780" video="qanda-gc" id="subtitle"]]
-[[!template text="""[Speaker 1]: Well, If you talk formally,""" start="00:01:46.160" video="qanda-gc" id="subtitle"]]
-[[!template text="""then almost every user has like 1 or 2""" start="00:01:49.340" video="qanda-gc" id="subtitle"]]
-[[!template text="""occasions when GC takes more than 0.2""" start="00:01:51.500" video="qanda-gc" id="subtitle"]]
-[[!template text="""seconds, but it's like,""" start="00:01:53.040" video="qanda-gc" id="subtitle"]]
-[[!template text="""maybe something else is using CPU and that's""" start="00:01:56.720" video="qanda-gc" id="subtitle"]]
-[[!template text="""why, but in practice, there are users who""" start="00:02:00.720" video="qanda-gc" id="subtitle"]]
-[[!template text="""don't have problem. Half of them that that's""" start="00:02:04.200" video="qanda-gc" id="subtitle"]]
-[[!template text="""who that's what I looked from statistics.""" start="00:02:05.800" video="qanda-gc" id="subtitle"]]
-[[!template text="""And dry users who have like really big""" start="00:02:10.240" video="qanda-gc" id="subtitle"]]
-[[!template text="""problems, like 1 second GC time.""" start="00:02:12.520" video="qanda-gc" id="subtitle"]]
-[[!template text="""[Speaker 0]: This is dependent on you make some comments""" start="00:02:17.280" video="qanda-gc" id="subtitle"]]
-[[!template text="""on us in the talk, but could you like extract""" start="00:02:19.960" video="qanda-gc" id="subtitle"]]
-[[!template text="""on if it's a package, that's a problem or we""" start="00:02:23.000" video="qanda-gc" id="subtitle"]]
-[[!template text="""as a user behavior are there.""" start="00:02:24.780" video="qanda-gc" id="subtitle"]]
-[[!template text="""[Speaker 1]: Usually it's something that is,""" start="00:02:30.720" video="qanda-gc" id="subtitle"]]
-[[!template text="""okay. I'm sharing my screen now,""" start="00:02:33.760" video="qanda-gc" id="subtitle"]]
-[[!template text="""[Speaker 0]: It's coming on, give it like 2 to 3 seconds.""" start="00:02:37.580" video="qanda-gc" id="subtitle"]]
-[[!template text="""[Speaker 1]: right? Yeah. So I can just click through""" start="00:02:41.480" video="qanda-gc" id="subtitle"]]
-[[!template text="""different user statistics.""" start="00:02:42.940" video="qanda-gc" id="subtitle"]]
-[[!template text="""So like you can see this duration for each""" start="00:02:48.840" video="qanda-gc" id="subtitle"]]
-[[!template text="""individual user basically.""" start="00:02:49.960" video="qanda-gc" id="subtitle"]]
-[[!template text="""So you can see like here for example it's""" start="00:02:54.240" video="qanda-gc" id="subtitle"]]
-[[!template text="""like averages around 0.25""" start="00:02:56.320" video="qanda-gc" id="subtitle"]]
-[[!template text="""seconds which is noticeable and here is like""" start="00:03:00.040" video="qanda-gc" id="subtitle"]]
-[[!template text="""0.1 like someone is all over the place,""" start="00:03:03.640" video="qanda-gc" id="subtitle"]]
-[[!template text="""probably some. Then like,""" start="00:03:09.560" video="qanda-gc" id="subtitle"]]
-[[!template text="""what else can we see here?""" start="00:03:11.520" video="qanda-gc" id="subtitle"]]
-[[!template text="""Yeah, some users like have sub 0.1,""" start="00:03:15.140" video="qanda-gc" id="subtitle"]]
-[[!template text="""no problem at all. And I have seen some that""" start="00:03:23.320" video="qanda-gc" id="subtitle"]]
-[[!template text="""really, really bad. I mean,""" start="00:03:30.180" video="qanda-gc" id="subtitle"]]
-[[!template text="""[Speaker 0]: if it's noticeable, it's all bad.""" start="00:03:31.880" video="qanda-gc" id="subtitle"]]
-[[!template text="""[Speaker 1]: So yeah. For example, here it's like 0.8""" start="00:03:36.960" video="qanda-gc" id="subtitle"]]
-[[!template text="""seconds, 0.5 seconds. I don't know how that""" start="00:03:41.680" video="qanda-gc" id="subtitle"]]
-[[!template text="""guy uses ZMax. Yeah. you can see it varies.""" start="00:03:48.600" video="qanda-gc" id="subtitle"]]
-[[!template text="""[Speaker 0]: So It varies quite a lot.""" start="00:03:51.160" video="qanda-gc" id="subtitle"]]
-[[!template text="""[Speaker 1]: What it depends on, like,""" start="00:03:52.760" video="qanda-gc" id="subtitle"]]
-[[!template text="""usually the number of packages,""" start="00:03:54.120" video="qanda-gc" id="subtitle"]]
-[[!template text="""like all kinds of timers going on under the""" start="00:03:58.440" video="qanda-gc" id="subtitle"]]
-[[!template text="""hood. I think I tried to list...""" start="00:04:01.720" video="qanda-gc" id="subtitle"]]
-[[!template text="""I'll go through this. I briefly outlined some""" start="00:04:12.520" video="qanda-gc" id="subtitle"]]
-[[!template text="""important parts. Here,""" start="00:04:15.440" video="qanda-gc" id="subtitle"]]
-[[!template text="""when you have something like an org agenda,""" start="00:04:18.480" video="qanda-gc" id="subtitle"]]
-[[!template text="""it will most likely trigger a lot of GCs.""" start="00:04:20.680" video="qanda-gc" id="subtitle"]]
-[[!template text="""When you have a lot of timers,""" start="00:04:23.900" video="qanda-gc" id="subtitle"]]
-[[!template text="""when you have something calculated on""" start="00:04:27.800" video="qanda-gc" id="subtitle"]]
-[[!template text="""modline, it will be frequently triggered.""" start="00:04:29.700" video="qanda-gc" id="subtitle"]]
-[[!template text="""[Speaker 0]: Well,""" start="00:04:30.900" video="qanda-gc" id="subtitle"]]
-[[!template text="""[Speaker 1]: yeah. When you have so many packages and""" start="00:04:34.080" video="qanda-gc" id="subtitle"]]
-[[!template text="""these packages are using a lot of memory.""" start="00:04:35.760" video="qanda-gc" id="subtitle"]]
-[[!template text="""Like I remember I was surprised by this,""" start="00:04:41.120" video="qanda-gc" id="subtitle"]]
-[[!template text="""package, home org that was,""" start="00:04:44.640" video="qanda-gc" id="subtitle"]]
-[[!template text="""caching all the results.""" start="00:04:46.560" video="qanda-gc" id="subtitle"]]
-[[!template text="""And for large org files,""" start="00:04:48.960" video="qanda-gc" id="subtitle"]]
-[[!template text="""it was like several hundred megabytes of""" start="00:04:51.540" video="qanda-gc" id="subtitle"]]
-[[!template text="""data. Well, it just becomes slower.""" start="00:04:55.160" video="qanda-gc" id="subtitle"]]
-[[!template text="""Yeah.""" start="00:04:55.900" video="qanda-gc" id="subtitle"]]
-[[!template text="""[Speaker 0]: Yeah. Maybe, maybe a short side note.""" start="00:05:00.020" video="qanda-gc" id="subtitle"]]
-[[!template text="""Someone asks, what software you're using for""" start="00:05:02.600" video="qanda-gc" id="subtitle"]]
-[[!template text="""flipping through the PNGs.""" start="00:05:03.480" video="qanda-gc" id="subtitle"]]
-[[!template text="""Maybe you could shortly throws it in.""" start="00:05:06.660" video="qanda-gc" id="subtitle"]]
-[[!template text="""[Speaker 1]: What do you mean? Here,""" start="00:05:08.800" video="qanda-gc" id="subtitle"]]
-[[!template text="""[Speaker 0]: I guess it was just simply,""" start="00:05:11.000" video="qanda-gc" id="subtitle"]]
-[[!template text="""[Speaker 1]: this, It's it's far. Yeah.""" start="00:05:13.480" video="qanda-gc" id="subtitle"]]
-[[!template text="""So""" start="00:05:16.660" video="qanda-gc" id="subtitle"]]
-[[!template text="""[Speaker 0]: yeah. So, question 1 and 2 answered.""" start="00:05:23.900" video="qanda-gc" id="subtitle"]]
-[[!template text="""To 1 statement you have made,""" start="00:05:35.740" video="qanda-gc" id="subtitle"]]
-[[!template text="""there was a question concerning the timings.""" start="00:05:37.500" video="qanda-gc" id="subtitle"]]
-[[!template text="""So you said, okay, everything above 0.1""" start="00:05:41.180" video="qanda-gc" id="subtitle"]]
-[[!template text="""second is fine. Maybe There's a short story""" start="00:05:45.800" video="qanda-gc" id="subtitle"]]
-[[!template text="""of someone who asked a question.""" start="00:05:48.480" video="qanda-gc" id="subtitle"]]
-[[!template text="""[Speaker 1]: I see the question is about scrolling,""" start="00:05:50.380" video="qanda-gc" id="subtitle"]]
-[[!template text="""[Speaker 0]: Yeah, exactly.""" start="00:05:51.820" video="qanda-gc" id="subtitle"]]
-[[!template text="""[Speaker 1]: right? Again, there's not much you can do in""" start="00:05:55.580" video="qanda-gc" id="subtitle"]]
-[[!template text="""terms of trying to adjust the GC time.""" start="00:05:58.620" video="qanda-gc" id="subtitle"]]
-[[!template text="""I mean, if you make GCs less frequent,""" start="00:06:02.320" video="qanda-gc" id="subtitle"]]
-[[!template text="""you increase the individual GC time.""" start="00:06:07.540" video="qanda-gc" id="subtitle"]]
-[[!template text="""If you make them more frequent,""" start="00:06:08.860" video="qanda-gc" id="subtitle"]]
-[[!template text="""you decrease the individual GC time,""" start="00:06:11.280" video="qanda-gc" id="subtitle"]]
-[[!template text="""but then they are more frequent.""" start="00:06:12.400" video="qanda-gc" id="subtitle"]]
-[[!template text="""So what is the point? I think the way to go""" start="00:06:15.920" video="qanda-gc" id="subtitle"]]
-[[!template text="""here is you can rise to see the short for the""" start="00:06:19.940" video="qanda-gc" id="subtitle"]]
-[[!template text="""duration of scrolling,""" start="00:06:20.740" video="qanda-gc" id="subtitle"]]
-[[!template text="""like just for a comment.""" start="00:06:22.500" video="qanda-gc" id="subtitle"]]
-[[!template text="""I think it's a recommendation from Emacs""" start="00:06:26.320" video="qanda-gc" id="subtitle"]]
-[[!template text="""devs. So like You do something along the""" start="00:06:31.480" video="qanda-gc" id="subtitle"]]
-[[!template text="""lines.""" start="00:06:31.660" video="qanda-gc" id="subtitle"]]
-[[!template text="""Yeah, I'm surely doing something on my screen""" start="00:06:53.480" video="qanda-gc" id="subtitle"]]
-[[!template text="""and I forgot that I'm not sharing anything.""" start="00:06:55.680" video="qanda-gc" id="subtitle"]]
-[[!template text="""[Speaker 0]: Exactly.""" start="00:06:56.680" video="qanda-gc" id="subtitle"]]
-[[!template text="""[Speaker 1]: Simply something like this.""" start="00:07:00.700" video="qanda-gc" id="subtitle"]]
-[[!template text="""So, basically, if you have some command that""" start="00:07:08.140" video="qanda-gc" id="subtitle"]]
-[[!template text="""is very important that it should run very""" start="00:07:10.920" video="qanda-gc" id="subtitle"]]
-[[!template text="""quickly. You temporary increase that""" start="00:07:13.860" video="qanda-gc" id="subtitle"]]
-[[!template text="""threshold, you run that comment,""" start="00:07:15.740" video="qanda-gc" id="subtitle"]]
-[[!template text="""then that's all. That's probably the best.""" start="00:07:19.940" video="qanda-gc" id="subtitle"]]
-[[!template text="""So basically, the best you can do is to delay""" start="00:07:21.660" video="qanda-gc" id="subtitle"]]
-[[!template text="""it after the command.""" start="00:07:23.760" video="qanda-gc" id="subtitle"]]
-[[!template text="""[Speaker 0]: So afterwards, it takes a lot of time to do""" start="00:07:27.500" video="qanda-gc" id="subtitle"]]
-[[!template text="""its stuff. OK. The third 1 has been already""" start="00:07:36.140" video="qanda-gc" id="subtitle"]]
-[[!template text="""answered, but I just want to get your""" start="00:07:40.520" video="qanda-gc" id="subtitle"]]
-[[!template text="""information from it. Opinions on the GCMH""" start="00:07:42.780" video="qanda-gc" id="subtitle"]]
-[[!template text="""mode.""" start="00:07:43.940" video="qanda-gc" id="subtitle"]]
-[[!template text="""[Speaker 1]: Okay. Yeah, I see that problem,""" start="00:07:48.280" video="qanda-gc" id="subtitle"]]
-[[!template text="""but that's more like a technical problem.""" start="00:07:49.920" video="qanda-gc" id="subtitle"]]
-[[!template text="""But there's another problem there.""" start="00:07:52.360" video="qanda-gc" id="subtitle"]]
-[[!template text="""Yeah, I prepared a small snippet here.""" start="00:07:57.340" video="qanda-gc" id="subtitle"]]
-[[!template text="""So if you look at the GCMH mode,""" start="00:08:02.160" video="qanda-gc" id="subtitle"]]
-[[!template text="""it has this concept of low threshold and high""" start="00:08:05.800" video="qanda-gc" id="subtitle"]]
-[[!template text="""threshold and most of the time it's running""" start="00:08:08.200" video="qanda-gc" id="subtitle"]]
-[[!template text="""high threshold and then when Emacs is idle,""" start="00:08:14.120" video="qanda-gc" id="subtitle"]]
-[[!template text="""it falls back to lower threshold and then it""" start="00:08:17.320" video="qanda-gc" id="subtitle"]]
-[[!template text="""does the GC while Emacs is not used.""" start="00:08:19.400" video="qanda-gc" id="subtitle"]]
-[[!template text="""That's a good idea, of course.""" start="00:08:22.040" video="qanda-gc" id="subtitle"]]
-[[!template text="""That's the core idea of GCMH mode.""" start="00:08:24.380" video="qanda-gc" id="subtitle"]]
-[[!template text="""Unfortunately, the most annoying GC is when""" start="00:08:30.520" video="qanda-gc" id="subtitle"]]
-[[!template text="""you're actively using max.""" start="00:08:31.760" video="qanda-gc" id="subtitle"]]
-[[!template text="""And then you have this huge value of GC""" start="00:08:37.120" video="qanda-gc" id="subtitle"]]
-[[!template text="""counter show and look at the doc stream.""" start="00:08:38.799" video="qanda-gc" id="subtitle"]]
-[[!template text="""This would be sector value that makes GC""" start="00:08:41.760" video="qanda-gc" id="subtitle"]]
-[[!template text="""unlikely but does not cost OSP Asian.""" start="00:08:43.980" video="qanda-gc" id="subtitle"]]
-[[!template text="""So yeah, no wonder like if you don't do GC,""" start="00:08:46.480" video="qanda-gc" id="subtitle"]]
-[[!template text="""your arm usage will skyrocket.""" start="00:08:49.640" video="qanda-gc" id="subtitle"]]
-[[!template text="""So they don't, they cannot put it too much,""" start="00:08:54.360" video="qanda-gc" id="subtitle"]]
-[[!template text="""but this is like already like,""" start="00:08:57.720" video="qanda-gc" id="subtitle"]]
-[[!template text="""how much was it?""" start="00:08:59.220" video="qanda-gc" id="subtitle"]]
-[[!template text="""1 gigabyte, that's the default.""" start="00:09:10.800" video="qanda-gc" id="subtitle"]]
-[[!template text="""And the problem is when you have 1 gigabyte""" start="00:09:15.220" video="qanda-gc" id="subtitle"]]
-[[!template text="""to garbage collect, it causes really long GC""" start="00:09:18.680" video="qanda-gc" id="subtitle"]]
-[[!template text="""time. So in GC image mode,""" start="00:09:22.040" video="qanda-gc" id="subtitle"]]
-[[!template text="""when you're actually using Emacs,""" start="00:09:23.560" video="qanda-gc" id="subtitle"]]
-[[!template text="""really heavily, the GCs become terrible,""" start="00:09:28.860" video="qanda-gc" id="subtitle"]]
-[[!template text="""terribly slow. So it may help in case you""" start="00:09:34.640" video="qanda-gc" id="subtitle"]]
-[[!template text="""don't have too much problems with GC,""" start="00:09:37.200" video="qanda-gc" id="subtitle"]]
-[[!template text="""but I will say that in such situation,""" start="00:09:39.280" video="qanda-gc" id="subtitle"]]
-[[!template text="""you can simply increase GC cost percentage,""" start="00:09:41.920" video="qanda-gc" id="subtitle"]]
-[[!template text="""as I recommend, and it should do it.""" start="00:09:44.540" video="qanda-gc" id="subtitle"]]
-[[!template text="""But in case of really big problems with""" start="00:09:48.480" video="qanda-gc" id="subtitle"]]
-[[!template text="""garbage collection, no,""" start="00:09:50.080" video="qanda-gc" id="subtitle"]]
-[[!template text="""I don't think that will help much.""" start="00:09:51.740" video="qanda-gc" id="subtitle"]]
-[[!template text="""I used it myself and it didn't help much for""" start="00:09:54.800" video="qanda-gc" id="subtitle"]]
-[[!template text="""my stuff.""" start="00:09:55.200" video="qanda-gc" id="subtitle"]]
-[[!template text="""[Speaker 0]: All right. The next question is concerning""" start="00:09:59.680" video="qanda-gc" id="subtitle"]]
-[[!template text="""freeing up memory. Is there some way to free""" start="00:10:04.600" video="qanda-gc" id="subtitle"]]
-[[!template text="""up memory such as via unload feature on""" start="00:10:07.200" video="qanda-gc" id="subtitle"]]
-[[!template text="""Emacs? Often I only need a package loaded for""" start="00:10:09.960" video="qanda-gc" id="subtitle"]]
-[[!template text="""a single task or short period by the""" start="00:10:12.240" video="qanda-gc" id="subtitle"]]
-[[!template text="""persistent memory afterwards.""" start="00:10:13.320" video="qanda-gc" id="subtitle"]]
-[[!template text="""[Speaker 1]: So the packages are usually not that much of""" start="00:10:19.780" video="qanda-gc" id="subtitle"]]
-[[!template text="""a problem. I mean, the libraries,""" start="00:10:22.060" video="qanda-gc" id="subtitle"]]
-[[!template text="""the problem is some extra,""" start="00:10:25.280" video="qanda-gc" id="subtitle"]]
-[[!template text="""like some variable contents or some""" start="00:10:30.060" video="qanda-gc" id="subtitle"]]
-[[!template text="""histories, some caches.""" start="00:10:31.800" video="qanda-gc" id="subtitle"]]
-[[!template text="""That's what's eating most of the memory.""" start="00:10:35.280" video="qanda-gc" id="subtitle"]]
-[[!template text="""There is a package called memory usage and""" start="00:10:40.240" video="qanda-gc" id="subtitle"]]
-[[!template text="""built in MX memory report.""" start="00:10:45.440" video="qanda-gc" id="subtitle"]]
-[[!template text="""They allow to see which variables take a lot""" start="00:10:50.900" video="qanda-gc" id="subtitle"]]
-[[!template text="""of memory. And that way you can try to see""" start="00:10:56.000" video="qanda-gc" id="subtitle"]]
-[[!template text="""which packages are actually problematic.""" start="00:10:58.520" video="qanda-gc" id="subtitle"]]
-[[!template text="""So for example, I recall,""" start="00:11:03.340" video="qanda-gc" id="subtitle"]]
-[[!template text="""and that was not exactly,""" start="00:11:05.640" video="qanda-gc" id="subtitle"]]
-[[!template text="""I remember there was a package that was""" start="00:11:09.720" video="qanda-gc" id="subtitle"]]
-[[!template text="""literally in command line,""" start="00:11:11.040" video="qanda-gc" id="subtitle"]]
-[[!template text="""like prompt history. I think it was in""" start="00:11:14.020" video="qanda-gc" id="subtitle"]]
-[[!template text="""command. And when you do like,""" start="00:11:17.540" video="qanda-gc" id="subtitle"]]
-[[!template text="""when you save every message in your chart""" start="00:11:20.440" video="qanda-gc" id="subtitle"]]
-[[!template text="""into prompt history, that can grow very fast""" start="00:11:25.280" video="qanda-gc" id="subtitle"]]
-[[!template text="""and can go to several hundred megabytes just""" start="00:11:29.220" video="qanda-gc" id="subtitle"]]
-[[!template text="""in that history. And that can cause major""" start="00:11:31.720" video="qanda-gc" id="subtitle"]]
-[[!template text="""problems. So, yes, profiling the largest""" start="00:11:37.960" video="qanda-gc" id="subtitle"]]
-[[!template text="""variables with the largest buffers that might""" start="00:11:41.200" video="qanda-gc" id="subtitle"]]
-[[!template text="""give some clues. Again,""" start="00:11:42.660" video="qanda-gc" id="subtitle"]]
-[[!template text="""there is no silver bullet.""" start="00:11:43.740" video="qanda-gc" id="subtitle"]]
-[[!template text="""[Speaker 0]: Right. I think the last question on the""" start="00:11:49.080" video="qanda-gc" id="subtitle"]]
-[[!template text="""patterns. At first, very nice presentation.""" start="00:11:51.000" video="qanda-gc" id="subtitle"]]
-[[!template text="""[Speaker 1]: I can""" start="00:11:51.620" video="qanda-gc" id="subtitle"]]
-[[!template text="""[Speaker 0]: also only agree with that.""" start="00:11:53.980" video="qanda-gc" id="subtitle"]]
-[[!template text="""I just experienced with a threshold and""" start="00:11:56.480" video="qanda-gc" id="subtitle"]]
-[[!template text="""lowered my GCE lapse from 1.1""" start="00:11:58.200" video="qanda-gc" id="subtitle"]]
-[[!template text="""to 0.06 seconds during startup.""" start="00:12:01.440" video="qanda-gc" id="subtitle"]]
-[[!template text="""Interestingly, going to 10 megabytes""" start="00:12:03.600" video="qanda-gc" id="subtitle"]]
-[[!template text="""increased the time. 4 megabytes was a sweet""" start="00:12:06.100" video="qanda-gc" id="subtitle"]]
-[[!template text="""spot for my system. What is the recommended""" start="00:12:07.800" video="qanda-gc" id="subtitle"]]
-[[!template text="""way to lower the value back to the default""" start="00:12:10.840" video="qanda-gc" id="subtitle"]]
-[[!template text="""value after startup is completed?""" start="00:12:12.340" video="qanda-gc" id="subtitle"]]
-[[!template text="""[Speaker 1]: I think you just use after init hook.""" start="00:12:16.160" video="qanda-gc" id="subtitle"]]
-[[!template text="""[Speaker 0]: This was a relatively fast answer.""" start="00:12:23.940" video="qanda-gc" id="subtitle"]]
-[[!template text="""[Speaker 1]: So basically for example Doom does this,""" start="00:12:29.180" video="qanda-gc" id="subtitle"]]
-[[!template text="""it temporary writes a gcconcert hold during""" start="00:12:31.940" video="qanda-gc" id="subtitle"]]
-[[!template text="""startup and yeah after init hook the code is""" start="00:12:37.260" video="qanda-gc" id="subtitle"]]
-[[!template text="""like it's 1 of the commonly suggested""" start="00:12:39.880" video="qanda-gc" id="subtitle"]]
-[[!template text="""approaches and is I believe it's the right 1.""" start="00:12:43.940" video="qanda-gc" id="subtitle"]]
-[[!template text="""[Speaker 0]: Right. To have joined us 1 was a microphone.""" start="00:12:49.180" video="qanda-gc" id="subtitle"]]
-[[!template text="""So Peter, do you have any questions that you""" start="00:12:52.200" video="qanda-gc" id="subtitle"]]
-[[!template text="""want to question? And maybe as a side note,""" start="00:12:55.240" video="qanda-gc" id="subtitle"]]
-[[!template text="""we only have 4 minutes left and afterwards""" start="00:12:57.380" video="qanda-gc" id="subtitle"]]
-[[!template text="""this happy weekend will still be open,""" start="00:12:59.240" video="qanda-gc" id="subtitle"]]
-[[!template text="""but we will switch back to the talks.""" start="00:13:01.400" video="qanda-gc" id="subtitle"]]
-[[!template text="""[Speaker 2]: Yeah, no more questions on garbage""" start="00:13:05.380" video="qanda-gc" id="subtitle"]]
-[[!template text="""collection, but I just wanted to thank Ihor""" start="00:13:07.640" video="qanda-gc" id="subtitle"]]
-[[!template text="""for his engagement in the community.""" start="00:13:10.440" video="qanda-gc" id="subtitle"]]
-[[!template text="""And especially with, I'm a co-maintainer on""" start="00:13:15.300" video="qanda-gc" id="subtitle"]]
-[[!template text="""orgnotor and he's helped us a lot with""" start="00:13:17.600" video="qanda-gc" id="subtitle"]]
-[[!template text="""getting us up to date with newer versions of""" start="00:13:21.680" video="qanda-gc" id="subtitle"]]
-[[!template text="""org and stuff like that.""" start="00:13:22.680" video="qanda-gc" id="subtitle"]]
-[[!template text="""So just wanted to thank you in person.""" start="00:13:24.680" video="qanda-gc" id="subtitle"]]
-[[!template text="""[Speaker 1]: Right.""" start="00:13:25.140" video="qanda-gc" id="subtitle"]]
-[[!template text="""[Speaker 0]: Maybe 1 question for me,""" start="00:13:33.540" video="qanda-gc" id="subtitle"]]
-[[!template text="""you had some bit talked about memory""" start="00:13:35.460" video="qanda-gc" id="subtitle"]]
-[[!template text="""fragmentation. So is there any way to or is""" start="00:13:40.640" video="qanda-gc" id="subtitle"]]
-[[!template text="""it fixed by Emacs itself?""" start="00:13:42.080" video="qanda-gc" id="subtitle"]]
-[[!template text="""So you have like""" start="00:13:43.740" video="qanda-gc" id="subtitle"]]
-[[!template text="""[Speaker 1]: a chunk of memory fragmentation is basically""" start="00:13:46.520" video="qanda-gc" id="subtitle"]]
-[[!template text="""your OS. Yeah, Emacs releases the memory and""" start="00:13:51.420" video="qanda-gc" id="subtitle"]]
-[[!template text="""then OS can rearrange it depending on the""" start="00:13:55.020" video="qanda-gc" id="subtitle"]]
-[[!template text="""implementation of its memory manager.""" start="00:13:58.320" video="qanda-gc" id="subtitle"]]
-[[!template text="""[Speaker 0]: Okay, so the GC just releases it really and""" start="00:14:01.520" video="qanda-gc" id="subtitle"]]
-[[!template text="""not so it could be that a mix is like""" start="00:14:04.400" video="qanda-gc" id="subtitle"]]
-[[!template text="""[Speaker 1]: doing it. You have like memory pages,""" start="00:14:07.420" video="qanda-gc" id="subtitle"]]
-[[!template text="""right? Yeah. And you see,""" start="00:14:09.560" video="qanda-gc" id="subtitle"]]
-[[!template text="""can release a part of this page just like""" start="00:14:12.140" video="qanda-gc" id="subtitle"]]
-[[!template text="""here and there. And depending on the exact""" start="00:14:14.760" video="qanda-gc" id="subtitle"]]
-[[!template text="""situation is your arm at each moment of time,""" start="00:14:17.720" video="qanda-gc" id="subtitle"]]
-[[!template text="""or as may or may not be able to arrange""" start="00:14:20.240" video="qanda-gc" id="subtitle"]]
-[[!template text="""[Speaker 0]: so""" start="00:14:25.160" video="qanda-gc" id="subtitle"]]
-[[!template text="""[Speaker 1]: things. So, how the exact the data you cannot""" start="00:14:27.620" video="qanda-gc" id="subtitle"]]
-[[!template text="""really predict it. It really varies like you""" start="00:14:30.160" video="qanda-gc" id="subtitle"]]
-[[!template text="""use Windows, you use Linux,""" start="00:14:31.120" video="qanda-gc" id="subtitle"]]
-[[!template text="""you use like malloc, something else,""" start="00:14:33.240" video="qanda-gc" id="subtitle"]]
-[[!template text="""but it has nothing to do with Emacs.""" start="00:14:36.260" video="qanda-gc" id="subtitle"]]
-[[!template text="""It's just something you have to deal with.""" start="00:14:38.040" video="qanda-gc" id="subtitle"]]
-[[!template text="""[Speaker 0]: Yeah, but my question was in the way that we""" start="00:14:41.780" video="qanda-gc" id="subtitle"]]
-[[!template text="""are giving the memory back to the operating""" start="00:14:43.460" video="qanda-gc" id="subtitle"]]
-[[!template text="""system, not just holding it as used and then""" start="00:14:46.020" video="qanda-gc" id="subtitle"]]
-[[!template text="""to our own memory, like stuff as Emacs that""" start="00:14:49.960" video="qanda-gc" id="subtitle"]]
-[[!template text="""we do not need to interact with the operating""" start="00:14:51.680" video="qanda-gc" id="subtitle"]]
-[[!template text="""[Speaker 1]: Yeah. Emacs does not really hold anything.""" start="00:14:56.040" video="qanda-gc" id="subtitle"]]
-[[!template text="""[Speaker 0]: system. That was the question.""" start="00:14:59.160" video="qanda-gc" id="subtitle"]]
-[[!template text="""[Speaker 1]: Okay. I was really hoping it does,""" start="00:15:01.920" video="qanda-gc" id="subtitle"]]
-[[!template text="""but yeah, unfortunately,""" start="00:15:02.760" video="qanda-gc" id="subtitle"]]
-[[!template text="""because nothing much can be done on Emacs.""" start="00:15:05.640" video="qanda-gc" id="subtitle"]]
-[[!template text="""[Speaker 0]: Okay. it's not Probably a lot faster if it's""" start="00:15:08.800" video="qanda-gc" id="subtitle"]]
-[[!template text="""just holding it and when it needs more,""" start="00:15:10.580" video="qanda-gc" id="subtitle"]]
-[[!template text="""then just get more from the OS.""" start="00:15:12.380" video="qanda-gc" id="subtitle"]]
-[[!template text="""[Speaker 1]: There are certain caveats,""" start="00:15:14.220" video="qanda-gc" id="subtitle"]]
-[[!template text="""for example, there's something called image""" start="00:15:16.720" video="qanda-gc" id="subtitle"]]
-[[!template text="""cache. And because Emacs stores images in""" start="00:15:20.560" video="qanda-gc" id="subtitle"]]
-[[!template text="""uncompressed format, it can occupy quite a""" start="00:15:23.720" video="qanda-gc" id="subtitle"]]
-[[!template text="""lot of memory. In particular,""" start="00:15:25.020" video="qanda-gc" id="subtitle"]]
-[[!template text="""when you will like view PDFs,""" start="00:15:26.520" video="qanda-gc" id="subtitle"]]
-[[!template text="""like you open 10, like 20 PDFs in 1 session,""" start="00:15:30.140" video="qanda-gc" id="subtitle"]]
-[[!template text="""you may have like some image cache blowing""" start="00:15:33.460" video="qanda-gc" id="subtitle"]]
-[[!template text="""up, But that's not common for people.""" start="00:15:36.720" video="qanda-gc" id="subtitle"]]
-[[!template text="""[Speaker 0]: So, guess we are on our time exactly.""" start="00:15:41.420" video="qanda-gc" id="subtitle"]]
-[[!template text="""So in the next""" start="00:15:43.580" video="qanda-gc" id="subtitle"]]
-[[!template text="""[Speaker 1]: I think I was not exactly accurate.""" start="00:15:46.680" video="qanda-gc" id="subtitle"]]
-[[!template text="""This 1 command, which is,""" start="00:15:49.200" video="qanda-gc" id="subtitle"]]
-[[!template text="""I think, Nemax 30, is called a malloc trim.""" start="00:15:53.500" video="qanda-gc" id="subtitle"]]
-[[!template text="""A max malloc trim. It's interactive.""" start="00:15:57.520" video="qanda-gc" id="subtitle"]]
-[[!template text="""So that can help to release some memory.""" start="00:16:04.080" video="qanda-gc" id="subtitle"]]
-[[!template text="""I think the way it works is like forces OS to""" start="00:16:08.200" video="qanda-gc" id="subtitle"]]
-[[!template text="""make use of the released memory.""" start="00:16:12.040" video="qanda-gc" id="subtitle"]]
-[[!template text="""[Speaker 0]: Okay. That would be like,""" start="00:16:14.960" video="qanda-gc" id="subtitle"]]
-[[!template text="""we are by the way, switch back to the next""" start="00:16:18.420" video="qanda-gc" id="subtitle"]]
-[[!template text="""talk. But""" start="00:16:21.420" video="qanda-gc" id="subtitle"]]
-[[!template text="""[Speaker 1]: so basically what happens here is that OS may""" start="00:16:24.220" video="qanda-gc" id="subtitle"]]
-[[!template text="""not release like, even Emacs says,""" start="00:16:27.440" video="qanda-gc" id="subtitle"]]
-[[!template text="""okay, this memory is free,""" start="00:16:28.740" video="qanda-gc" id="subtitle"]]
-[[!template text="""depending on the implementation,""" start="00:16:30.060" video="qanda-gc" id="subtitle"]]
-[[!template text="""I might think, okay, but I still hold that""" start="00:16:32.760" video="qanda-gc" id="subtitle"]]
-[[!template text="""memory associated with Emacs just in case""" start="00:16:34.860" video="qanda-gc" id="subtitle"]]
-[[!template text="""Emacs needs more memories,""" start="00:16:35.800" video="qanda-gc" id="subtitle"]]
-[[!template text="""and I can immediately put the data there""" start="00:16:38.940" video="qanda-gc" id="subtitle"]]
-[[!template text="""without like more arrangement to allocate""" start="00:16:41.420" video="qanda-gc" id="subtitle"]]
-[[!template text="""more. And this analog stream basically forces""" start="00:16:45.480" video="qanda-gc" id="subtitle"]]
-[[!template text="""the OS to release it, like no matter what.""" start="00:16:48.740" video="qanda-gc" id="subtitle"]]
-[[!template text="""[Speaker 0]: Because most people, when they are using""" start="00:16:52.360" video="qanda-gc" id="subtitle"]]
-[[!template text="""Emacs, I have the feeling they are only using""" start="00:16:54.320" video="qanda-gc" id="subtitle"]]
-[[!template text="""Emacs. So it would be kind of interesting if""" start="00:16:56.160" video="qanda-gc" id="subtitle"]]
-[[!template text="""you just take like, I don't know,""" start="00:16:57.880" video="qanda-gc" id="subtitle"]]
-[[!template text="""2 gigabytes or something of memory and Emacs""" start="00:17:00.060" video="qanda-gc" id="subtitle"]]
-[[!template text="""like does what it wants on that and the OS""" start="00:17:02.900" video="qanda-gc" id="subtitle"]]
-[[!template text="""cannot really take it back.""" start="00:17:04.079" video="qanda-gc" id="subtitle"]]
-[[!template text="""This was my idea when I""" start="00:17:05.920" video="qanda-gc" id="subtitle"]]
-[[!template text="""[Speaker 1]: was So when you see 2 gigabytes in OS,""" start="00:17:08.000" video="qanda-gc" id="subtitle"]]
-[[!template text="""it doesn't mean that OS cannot take it back.""" start="00:17:10.359" video="qanda-gc" id="subtitle"]]
-[[!template text="""It may still like allocate certain portion,""" start="00:17:13.859" video="qanda-gc" id="subtitle"]]
-[[!template text="""even technically free,""" start="00:17:15.640" video="qanda-gc" id="subtitle"]]
-[[!template text="""but just for future. So this is where Malloc""" start="00:17:20.940" video="qanda-gc" id="subtitle"]]
-[[!template text="""Dream works. It's like,""" start="00:17:22.339" video="qanda-gc" id="subtitle"]]
-[[!template text="""it says, yes, OS, I really not going to hold""" start="00:17:25.319" video="qanda-gc" id="subtitle"]]
-[[!template text="""this for this free memory.""" start="00:17:26.500" video="qanda-gc" id="subtitle"]]
-[[!template text="""For sure. If you try this MX Malloc Gene,""" start="00:17:31.700" video="qanda-gc" id="subtitle"]]
-[[!template text="""you will see like a few times to hundreds of""" start="00:17:33.960" video="qanda-gc" id="subtitle"]]
-[[!template text="""megabytes of read immediately.""" start="00:17:35.200" video="qanda-gc" id="subtitle"]]
-[[!template text="""[Speaker 0]: Have a look when I have the time.""" start="00:17:38.560" video="qanda-gc" id="subtitle"]]
-[[!template text="""[Speaker 1]: I""" start="00:17:41.480" video="qanda-gc" id="subtitle"]]
-[[!template text="""[Speaker 0]: guess if nobody has any questions,""" start="00:17:43.260" video="qanda-gc" id="subtitle"]]
-[[!template text="""I guess on the pad, there was Nothing else.""" start="00:17:45.660" video="qanda-gc" id="subtitle"]]
-[[!template text="""I guess we can just close it.""" start="00:17:47.900" video="qanda-gc" id="subtitle"]]
-[[!template text="""Thanks for the discussion.""" start="00:17:49.140" video="qanda-gc" id="subtitle"]]
-[[!template text="""Thanks for answering the questions.""" start="00:17:50.640" video="qanda-gc" id="subtitle"]]
-[[!template text="""[Speaker 1]: Thank you for the great conference.""" start="00:17:56.020" video="qanda-gc" id="subtitle"]]
-[[!template text="""And yeah, for your volunteer work.""" start="00:17:59.340" video="qanda-gc" id="subtitle"]]
-[[!template text="""And yeah, for quietly panicking in the""" start="00:18:02.230" video="qanda-gc" id="subtitle"]]
-[[!template text="""background, right? Yeah,""" start="00:18:02.262" video="qanda-gc" id="subtitle"]]
-[[!template text="""I mean... You have to be quiet,""" start="00:18:02.337" video="qanda-gc" id="subtitle"]]
-[[!template text="""you're panicking in the background.""" start="00:18:02.560" video="qanda-gc" id="subtitle"]]
-
-Questions or comments? Please e-mail [yantar92@posteo.net](mailto:yantar92@posteo.net?subject=Comment%20for%20EmacsConf%202023%20gc%3A%20emacs-gc-stats%3A%20Does%20garbage%20collection%20actually%20slow%20down%20Emacs%3F)
+</div>Questions or comments? Please e-mail [yantar92@posteo.net](mailto:yantar92@posteo.net?subject=Comment%20for%20EmacsConf%202023%20gc%3A%20emacs-gc-stats%3A%20Does%20garbage%20collection%20actually%20slow%20down%20Emacs%3F)
<!-- End of emacsconf-publish-after-page -->
diff --git a/2023/info/gc-before.md b/2023/info/gc-before.md
index 035db20a..8167b2a4 100644
--- a/2023/info/gc-before.md
+++ b/2023/info/gc-before.md
@@ -1,12 +1,12 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
[[!toc ]]
-Format: 34-min talk; Q&A: BigBlueButton conference room
+Format: 34-min talk ; Q&A: BigBlueButton conference room
Status: Q&A to be extracted from the room recordings
-<div class="vid"><video controls preload="none" id="gc-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-gc--emacsgcstats-does-garbage-collection-actually-slow-down-emacs--ihor-radchenko--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-gc--emacsgcstats-does-garbage-collection-actually-slow-down-emacs--ihor-radchenko--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 33:22 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-gc--emacsgcstats-does-garbage-collection-actually-slow-down-emacs--ihor-radchenko--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-gc--emacsgcstats-does-garbage-collection-actually-slow-down-emacs--ihor-radchenko--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-gc--emacsgcstats-does-garbage-collection-actually-slow-down-emacs--ihor-radchenko--main.opus">Download --main.opus (22MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-gc--emacsgcstats-does-garbage-collection-actually-slow-down-emacs--ihor-radchenko--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-gc--emacsgcstats-does-garbage-collection-actually-slow-down-emacs--ihor-radchenko--main.webm">Download --main.webm (80MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-gc--emacsgcstats-does-garbage-collection-actually-slow-down-emacs--ihor-radchenko--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-gc--emacsgcstats-does-garbage-collection-actually-slow-down-emacs--ihor-radchenko--pad.md">Download --pad.md</a></li><li><a href="https://toobnix.org/w/ngenUPBLDDkZGmsxK8vimJ">View on Toobnix</a></li></ul></div></div>
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-gc"><source src="https://media.emacsconf.org/2023/emacsconf-2023-gc--emacsgcstats-does-garbage-collection-actually-slow-down-emacs--ihor-radchenko--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-gc--emacsgcstats-does-garbage-collection-actually-slow-down-emacs--ihor-radchenko--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 33:22 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2023-gc">Open Etherpad</a></li><li><a href="https://bbb.emacsverse.org/playback/presentation/2.0/playback.html?meetingId=b0f325d396963155a01854970e055fe7440abf61-1701624602181">Play recording from BigBlueButton</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-gc--emacsgcstats-does-garbage-collection-actually-slow-down-emacs--ihor-radchenko--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-gc--emacsgcstats-does-garbage-collection-actually-slow-down-emacs--ihor-radchenko--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-gc--emacsgcstats-does-garbage-collection-actually-slow-down-emacs--ihor-radchenko--main.opus">Download --main.opus (22MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-gc--emacsgcstats-does-garbage-collection-actually-slow-down-emacs--ihor-radchenko--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-gc--emacsgcstats-does-garbage-collection-actually-slow-down-emacs--ihor-radchenko--main.webm">Download --main.webm (80MB)</a></li><li><a href="https://toobnix.org/w/ngenUPBLDDkZGmsxK8vimJ">View on Toobnix</a></li><li><a href="https://www.youtube.com/watch?v=YA1RJxH4xfQ">View on Youtube</a></li></ul></div></div>
# Description
<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/info/gc-nav.md b/2023/info/gc-nav.md
index 0bef707f..59675d1e 100644
--- a/2023/info/gc-nav.md
+++ b/2023/info/gc-nav.md
@@ -3,5 +3,5 @@
Back to the [[talks]]
Previous by track: <a href="/2023/talks/emacsen">The Emacsen family, the design of an Emacs and the importance of Lisp</a>
Next by track: <a href="/2023/talks/hyperdrive">hyperdrive.el: Peer-to-peer filesystem in Emacs</a>
-Track: <span class="sched-track Development">Development</span>
+Track: <span class="sched-track Development">Development</span> - <strong><a href="https://emacsconf.org/2023/watch/dev">Watch</a></strong>
</div>
diff --git a/2023/info/hyperamp-after.md b/2023/info/hyperamp-after.md
index 051a5dad..044bc930 100644
--- a/2023/info/hyperamp-after.md
+++ b/2023/info/hyperamp-after.md
@@ -1,8 +1,7 @@
<!-- Automatically generated by emacsconf-publish-after-page -->
-<a name="hyperamp-mainVideo-transcript"></a>
-# Transcript (unedited)
+<div class="transcript transcript-mainVideo"><a name="hyperamp-mainVideo-transcript"></a><h1>Transcript (unedited)</h1>
[[!template text="""[Speaker 0]: 5 seconds. Oh, actually,""" start="00:00:01.719" video="mainVideo-hyperamp" id="subtitle"]]
[[!template text="""[Speaker 1]: Sorry, I keep delaying.""" start="00:00:07.279" video="mainVideo-hyperamp" id="subtitle"]]
@@ -1345,7 +1344,7 @@
[[!template text="""Thanks a lot. Bye-bye.""" start="01:05:15.060" video="mainVideo-hyperamp" id="subtitle"]]
[[!template text="""Bye-bye.""" start="01:05:15.750" video="mainVideo-hyperamp" id="subtitle"]]
-Questions or comments? Please e-mail [rsw@gnu.org](mailto:rsw@gnu.org?subject=Comment%20for%20EmacsConf%202023%20hyperamp%3A%20Top%2010%20ways%20Hyperbole%20amps%20up%20Emacs)
+</div>Questions or comments? Please e-mail [rsw@gnu.org](mailto:rsw@gnu.org?subject=Comment%20for%20EmacsConf%202023%20hyperamp%3A%20Top%2010%20ways%20Hyperbole%20amps%20up%20Emacs)
<!-- End of emacsconf-publish-after-page -->
diff --git a/2023/info/hyperamp-before.md b/2023/info/hyperamp-before.md
index 12a070f0..5d534f44 100644
--- a/2023/info/hyperamp-before.md
+++ b/2023/info/hyperamp-before.md
@@ -1,6 +1,6 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
[[!toc ]]
-Format: 66-min talk; Q&A: BigBlueButton conference room
+Format: 66-min talk ; Q&A: BigBlueButton conference room
Status: TO_REVIEW_QA
@@ -9,10 +9,10 @@ Status: TO_REVIEW_QA
# Talk
-<div class="vid"><video controls preload="none" id="hyperamp-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--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:05:16 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--main.json">Download --main.json (2.9MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--main.opus">Download --main.opus (37MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--main.vtt">Download --main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--main.webm">Download --main.webm (234MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--pad.md">Download --pad.md</a></li><li><a href="https://toobnix.org/w/4Cpb89zHKgQjob3gHUs73C">View on Toobnix</a></li></ul></div></div>
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-hyperamp"><source src="https://media.emacsconf.org/2023/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--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:05:16 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2023-hyperamp">Open Etherpad</a></li><li><a href="https://bbb.emacsverse.org/playback/presentation/2.0/playback.html?meetingId=b91c2833d3add0175ea8f55e9026f1ba6e744918-1701610376838">Play recording from BigBlueButton</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--main.json">Download --main.json (2.9MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--main.opus">Download --main.opus (37MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--main.vtt">Download --main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--main.webm">Download --main.webm (234MB)</a></li><li><a href="https://toobnix.org/w/4Cpb89zHKgQjob3gHUs73C">View on Toobnix</a></li><li><a href="https://www.youtube.com/watch?v=BysjfL25Nlc">View on Youtube</a></li></ul></div></div>
# Q&A
-<div class="vid"><div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--main.json">Download --main.json (2.9MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--main.opus">Download --main.opus (37MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--main.vtt">Download --main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--main.webm">Download --main.webm (234MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--pad.md">Download --pad.md</a></li></ul></div></div>
+<div class="vid qanda"><div></div><div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2023-hyperamp">Open Etherpad</a></li><li><a href="https://bbb.emacsverse.org/playback/presentation/2.0/playback.html?meetingId=b91c2833d3add0175ea8f55e9026f1ba6e744918-1701610376838">Play recording from BigBlueButton</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--main.json">Download --main.json (2.9MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--main.opus">Download --main.opus (37MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--main.vtt">Download --main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--main.webm">Download --main.webm (234MB)</a></li></ul></div></div>
# Description
<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/info/hyperamp-nav.md b/2023/info/hyperamp-nav.md
index f56bde9c..f72e2832 100644
--- a/2023/info/hyperamp-nav.md
+++ b/2023/info/hyperamp-nav.md
@@ -3,5 +3,5 @@
Back to the [[talks]]
Previous by track: <a href="/2023/talks/core">Emacs core development: how it works</a>
Next by track: <a href="/2023/talks/koutline">Using Koutline for stream of thought journaling</a>
-Track: <span class="sched-track General">General</span>
+Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2023/watch/gen">Watch</a></strong>
</div>
diff --git a/2023/info/hyperdrive-after.md b/2023/info/hyperdrive-after.md
index 8c26acc8..f93b30c5 100644
--- a/2023/info/hyperdrive-after.md
+++ b/2023/info/hyperdrive-after.md
@@ -1,8 +1,7 @@
<!-- Automatically generated by emacsconf-publish-after-page -->
-<a name="hyperdrive-mainVideo-transcript"></a>
-# Transcript
+<div class="transcript transcript-mainVideo"><a name="hyperdrive-mainVideo-transcript"></a><h1>Transcript</h1>
[[!template text="""Hello, I'm Joseph Turner.""" start="00:00:00.000" video="mainVideo-hyperdrive" id="subtitle"]]
[[!template text="""This talk is about hyperdrive.el,""" start="00:00:02.600" video="mainVideo-hyperdrive" id="subtitle"]]
@@ -12,9 +11,7 @@
[[!template text="""for sharing files on a peer-to-peer network.""" start="00:00:13.360" video="mainVideo-hyperdrive" id="subtitle"]]
[[!template text="""It's released under the Apache 2.0 license.""" start="00:00:16.500" video="mainVideo-hyperdrive" id="subtitle"]]
-[[!template new="1" text="""Hyperdrives introduction""" start="00:00:19.840" video="mainVideo-hyperdrive" id="subtitle"]]
-
-[[!template text="""Here's how it works.""" start="00:00:19.840" video="mainVideo-hyperdrive" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Hyperdrives introduction""" start="00:00:19.840" video="mainVideo-hyperdrive" id="subtitle"]]</div>[[!template text="""Here's how it works.""" start="00:00:19.840" video="mainVideo-hyperdrive" id="subtitle"]]
[[!template text="""To participate as a peer, you run a node,""" start="00:00:21.640" video="mainVideo-hyperdrive" id="subtitle"]]
[[!template text="""a lightweight local server that allows you""" start="00:00:24.581" video="mainVideo-hyperdrive" id="subtitle"]]
[[!template text="""to connect with other nodes on the network.""" start="00:00:27.281" video="mainVideo-hyperdrive" id="subtitle"]]
@@ -76,9 +73,7 @@
[[!template text="""of the hyperdrive when the file still existed""" start="00:02:55.067" video="mainVideo-hyperdrive" id="subtitle"]]
[[!template text="""or existed in a previous state.""" start="00:02:58.167" video="mainVideo-hyperdrive" id="subtitle"]]
-[[!template new="1" text="""About USHIN and the contributors""" start="00:03:04.600" video="mainVideo-hyperdrive" id="subtitle"]]
-
-[[!template text="""I'm presenting this talk on behalf of USHIN.""" start="00:03:04.600" video="mainVideo-hyperdrive" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""About USHIN and the contributors""" start="00:03:04.600" video="mainVideo-hyperdrive" id="subtitle"]]</div>[[!template text="""I'm presenting this talk on behalf of USHIN.""" start="00:03:04.600" video="mainVideo-hyperdrive" id="subtitle"]]
[[!template text="""USHIN is a tiny nonprofit whose mission is to""" start="00:03:07.380" video="mainVideo-hyperdrive" id="subtitle"]]
[[!template text="""promote personal, community and global health""" start="00:03:10.680" video="mainVideo-hyperdrive" id="subtitle"]]
[[!template text="""through free and open universal shared information""" start="00:03:14.032" video="mainVideo-hyperdrive" id="subtitle"]]
@@ -112,9 +107,7 @@
[[!template text="""but he created a wonderful""" start="00:04:25.000" video="mainVideo-hyperdrive" id="subtitle"]]
[[!template text="""basic introduction to Hyperdrive. Take a look.""" start="00:04:27.120" video="mainVideo-hyperdrive" id="subtitle"]]
-[[!template new="1" text="""Basic introduction to Hyperdrive""" start="00:04:32.646" video="mainVideo-hyperdrive" id="subtitle"]]
-
-[[!template text="""[Prot]: Hello everyone!""" start="00:04:32.646" video="mainVideo-hyperdrive" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Basic introduction to Hyperdrive""" start="00:04:32.646" video="mainVideo-hyperdrive" id="subtitle"]]</div>[[!template text="""[Prot]: Hello everyone!""" start="00:04:32.646" video="mainVideo-hyperdrive" id="subtitle"]]
[[!template text="""My name is Protesilaos, also known as Prot.""" start="00:04:33.586" video="mainVideo-hyperdrive" id="subtitle"]]
[[!template text="""In this video, I want to show you""" start="00:04:36.366" video="mainVideo-hyperdrive" id="subtitle"]]
[[!template text="""the basics of hyperdrive.el.""" start="00:04:37.806" video="mainVideo-hyperdrive" id="subtitle"]]
@@ -144,9 +137,7 @@
[[!template text="""I won't cover everything in that regard,""" start="00:06:00.053" video="mainVideo-hyperdrive" id="subtitle"]]
[[!template text="""but please bear this fact in mind.""" start="00:06:02.980" video="mainVideo-hyperdrive" id="subtitle"]]
-[[!template new="1" text="""Managing files with Hyperdrive.el""" start="00:06:06.133" video="mainVideo-hyperdrive" id="subtitle"]]
-
-[[!template text="""Let's start then with what I have here""" start="00:06:06.133" video="mainVideo-hyperdrive" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Managing files with Hyperdrive.el""" start="00:06:06.133" video="mainVideo-hyperdrive" id="subtitle"]]</div>[[!template text="""Let's start then with what I have here""" start="00:06:06.133" video="mainVideo-hyperdrive" id="subtitle"]]
[[!template text="""in this other tab, which is a set of files.""" start="00:06:09.213" video="mainVideo-hyperdrive" id="subtitle"]]
[[!template text="""I have prepared in my local file system - a hyperdrive.""" start="00:06:13.853" video="mainVideo-hyperdrive" id="subtitle"]]
[[!template text="""This contains a set of files""" start="00:06:18.473" video="mainVideo-hyperdrive" id="subtitle"]]
@@ -278,9 +269,7 @@
[[!template text="""This will take me to the parent directory,""" start="00:12:50.513" video="mainVideo-hyperdrive" id="subtitle"]]
[[!template text="""in this case, the root directory of my hyperdrive.""" start="00:12:53.173" video="mainVideo-hyperdrive" id="subtitle"]]
-[[!template new="1" text="""Dired like interface""" start="00:12:56.573" video="mainVideo-hyperdrive" id="subtitle"]]
-
-[[!template text="""Let me do it a bit differently.""" start="00:12:56.573" video="mainVideo-hyperdrive" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Dired like interface""" start="00:12:56.573" video="mainVideo-hyperdrive" id="subtitle"]]</div>[[!template text="""Let me do it a bit differently.""" start="00:12:56.573" video="mainVideo-hyperdrive" id="subtitle"]]
[[!template text="""The same idea, a bit differently.""" start="00:12:58.353" video="mainVideo-hyperdrive" id="subtitle"]]
[[!template text="""For those of you who are familiar with""" start="00:13:00.193" video="mainVideo-hyperdrive" id="subtitle"]]
[[!template text="""Dired and the `dired-jump` command,""" start="00:13:02.733" video="mainVideo-hyperdrive" id="subtitle"]]
@@ -325,9 +314,7 @@
[[!template text="""And then you can jump to it,""" start="00:14:55.994" video="mainVideo-hyperdrive" id="subtitle"]]
[[!template text="""the way bookmarks in Emacs always work.""" start="00:14:57.734" video="mainVideo-hyperdrive" id="subtitle"]]
-[[!template new="1" text="""History in hyperdrive""" start="00:15:01.234" video="mainVideo-hyperdrive" id="subtitle"]]
-
-[[!template text="""What I want to show you now""" start="00:15:01.234" video="mainVideo-hyperdrive" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""History in hyperdrive""" start="00:15:01.234" video="mainVideo-hyperdrive" id="subtitle"]]</div>[[!template text="""What I want to show you now""" start="00:15:01.234" video="mainVideo-hyperdrive" id="subtitle"]]
[[!template text="""a little bit is the history.""" start="00:15:02.893" video="mainVideo-hyperdrive" id="subtitle"]]
[[!template text="""History in Hyperdrive""" start="00:15:06.313" video="mainVideo-hyperdrive" id="subtitle"]]
[[!template text="""has to do with the drive itself.""" start="00:15:09.013" video="mainVideo-hyperdrive" id="subtitle"]]
@@ -376,9 +363,7 @@
[[!template text="""at that version of the hyperdrive.""" start="00:17:31.214" video="mainVideo-hyperdrive" id="subtitle"]]
[[!template text="""So this is the basic idea of it, folks.""" start="00:17:35.973" video="mainVideo-hyperdrive" id="subtitle"]]
-[[!template new="1" text="""Use case of sharing large files""" start="00:17:39.973" video="mainVideo-hyperdrive" id="subtitle"]]
-
-[[!template text="""What I want to do then is""" start="00:17:39.973" video="mainVideo-hyperdrive" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Use case of sharing large files""" start="00:17:39.973" video="mainVideo-hyperdrive" id="subtitle"]]</div>[[!template text="""What I want to do then is""" start="00:17:39.973" video="mainVideo-hyperdrive" id="subtitle"]]
[[!template text="""continue with my process here.""" start="00:17:42.234" video="mainVideo-hyperdrive" id="subtitle"]]
[[!template text="""Let me actually do it like this so that you can see.""" start="00:17:46.254" video="mainVideo-hyperdrive" id="subtitle"]]
[[!template text="""Continue with the process of""" start="00:17:51.973" video="mainVideo-hyperdrive" id="subtitle"]]
@@ -415,9 +400,7 @@
[[!template text="""That's all for today. Take care. Goodbye.""" start="00:19:13.073" video="mainVideo-hyperdrive" id="subtitle"]]
[[!template text="""[Joseph]: Thank you, Prot.""" start="00:19:19.461" video="mainVideo-hyperdrive" id="subtitle"]]
-[[!template new="1" text="""Drive creation with hyperdrive.el""" start="00:19:20.913" video="mainVideo-hyperdrive" id="subtitle"]]
-
-[[!template text="""Another fundamental feature of hyperdrive.el""" start="00:19:20.913" video="mainVideo-hyperdrive" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Drive creation with hyperdrive.el""" start="00:19:20.913" video="mainVideo-hyperdrive" id="subtitle"]]</div>[[!template text="""Another fundamental feature of hyperdrive.el""" start="00:19:20.913" video="mainVideo-hyperdrive" id="subtitle"]]
[[!template text="""is drive creation.""" start="00:19:23.980" video="mainVideo-hyperdrive" id="subtitle"]]
[[!template text="""The first step, as always,""" start="00:19:26.319" video="mainVideo-hyperdrive" id="subtitle"]]
[[!template text="""is to make sure that the gateway is running.""" start="00:19:28.339" video="mainVideo-hyperdrive" id="subtitle"]]
@@ -496,9 +479,7 @@
[[!template text="""at the top of the screen,""" start="00:23:19.459" video="mainVideo-hyperdrive" id="subtitle"]]
[[!template text="""I see that it's identified with the petname &quot;Prot.&quot;""" start="00:23:20.539" video="mainVideo-hyperdrive" id="subtitle"]]
-[[!template new="1" text="""hyperdrive-mirror""" start="00:23:26.199" video="mainVideo-hyperdrive" id="subtitle"]]
-
-[[!template text="""Now I'll show off `hyperdrive-mirror`.""" start="00:23:26.199" video="mainVideo-hyperdrive" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""hyperdrive-mirror""" start="00:23:26.199" video="mainVideo-hyperdrive" id="subtitle"]]</div>[[!template text="""Now I'll show off `hyperdrive-mirror`.""" start="00:23:26.199" video="mainVideo-hyperdrive" id="subtitle"]]
[[!template text="""`hyperdrive-mirror` is like `hyperdrive-upload-file`,""" start="00:23:28.719" video="mainVideo-hyperdrive" id="subtitle"]]
[[!template text="""except that it allows you to upload""" start="00:23:32.159" video="mainVideo-hyperdrive" id="subtitle"]]
[[!template text="""an entire directory full of files recursively.""" start="00:23:33.879" video="mainVideo-hyperdrive" id="subtitle"]]
@@ -614,9 +595,7 @@
[[!template text="""There's going to be a link to the USHIN hyperdrive""" start="00:30:00.319" video="mainVideo-hyperdrive" id="subtitle"]]
[[!template text="""as well as the website at the end of the video.""" start="00:30:03.019" video="mainVideo-hyperdrive" id="subtitle"]]
-[[!template new="1" text="""hyperdrive history""" start="00:30:06.819" video="mainVideo-hyperdrive" id="subtitle"]]
-
-[[!template text="""Now I'll go into a little more detail""" start="00:30:06.819" video="mainVideo-hyperdrive" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""hyperdrive history""" start="00:30:06.819" video="mainVideo-hyperdrive" id="subtitle"]]</div>[[!template text="""Now I'll go into a little more detail""" start="00:30:06.819" video="mainVideo-hyperdrive" id="subtitle"]]
[[!template text="""about the Hyperdrive history buffer""" start="00:30:09.079" video="mainVideo-hyperdrive" id="subtitle"]]
[[!template text="""by showing off the README file in Prot's hyperdrive.""" start="00:30:11.219" video="mainVideo-hyperdrive" id="subtitle"]]
[[!template text="""I'll press `C-c h` to open the menu,""" start="00:30:15.819" video="mainVideo-hyperdrive" id="subtitle"]]
@@ -693,9 +672,7 @@
[[!template text="""Prot changed the link to his own hyperdrive""" start="00:34:14.220" video="mainVideo-hyperdrive" id="subtitle"]]
[[!template text="""to be a relative link.""" start="00:34:17.340" video="mainVideo-hyperdrive" id="subtitle"]]
-[[!template new="1" text="""Streaming video from hyperdrive""" start="00:34:20.880" video="mainVideo-hyperdrive" id="subtitle"]]
-
-[[!template text="""Now, I'll stream a video from the USHIN hyperdrive""" start="00:34:20.880" video="mainVideo-hyperdrive" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Streaming video from hyperdrive""" start="00:34:20.880" video="mainVideo-hyperdrive" id="subtitle"]]</div>[[!template text="""Now, I'll stream a video from the USHIN hyperdrive""" start="00:34:20.880" video="mainVideo-hyperdrive" id="subtitle"]]
[[!template text="""that shows off a prototype interface we created""" start="00:34:24.300" video="mainVideo-hyperdrive" id="subtitle"]]
[[!template text="""for exploring networks of sources of information.""" start="00:34:27.900" video="mainVideo-hyperdrive" id="subtitle"]]
[[!template text="""I'll open up `hyperdrive-menu`.""" start="00:34:31.720" video="mainVideo-hyperdrive" id="subtitle"]]
@@ -711,9 +688,7 @@
[[!template text="""[Joseph]: There it is.""" start="00:35:02.500" video="mainVideo-hyperdrive" id="subtitle"]]
[[!template text="""Streaming a video from Hyperdrive.""" start="00:35:04.080" video="mainVideo-hyperdrive" id="subtitle"]]
-[[!template new="1" text="""hyperdrive.el under the hood""" start="00:35:08.746" video="mainVideo-hyperdrive" id="subtitle"]]
-
-[[!template text="""Here's how hyperdrive.el works under the hood.""" start="00:35:08.746" video="mainVideo-hyperdrive" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""hyperdrive.el under the hood""" start="00:35:08.746" video="mainVideo-hyperdrive" id="subtitle"]]</div>[[!template text="""Here's how hyperdrive.el works under the hood.""" start="00:35:08.746" video="mainVideo-hyperdrive" id="subtitle"]]
[[!template text="""It uses plz [Please],""" start="00:35:13.027" video="mainVideo-hyperdrive" id="subtitle"]]
[[!template text="""the HTTP library that Adam Porter wrote,""" start="00:35:14.727" video="mainVideo-hyperdrive" id="subtitle"]]
[[!template text="""to send requests via curl to hyper-gateway.""" start="00:35:18.080" video="mainVideo-hyperdrive" id="subtitle"]]
@@ -771,9 +746,7 @@
[[!template text="""because it's built-in, and it has some features""" start="00:38:44.941" video="mainVideo-hyperdrive" id="subtitle"]]
[[!template text="""that persist.el doesn't have.""" start="00:38:50.161" video="mainVideo-hyperdrive" id="subtitle"]]
-[[!template new="1" text="""Next steps""" start="00:38:57.541" video="mainVideo-hyperdrive" id="subtitle"]]
-
-[[!template text="""Thank you for listening to this talk.""" start="00:38:57.541" video="mainVideo-hyperdrive" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Next steps""" start="00:38:57.541" video="mainVideo-hyperdrive" id="subtitle"]]</div>[[!template text="""Thank you for listening to this talk.""" start="00:38:57.541" video="mainVideo-hyperdrive" id="subtitle"]]
[[!template text="""I hope you get a chance to try out hyperdrive.el.""" start="00:39:00.001" video="mainVideo-hyperdrive" id="subtitle"]]
[[!template text="""Here is a link to the hyperdrive.el manual""" start="00:39:03.681" video="mainVideo-hyperdrive" id="subtitle"]]
[[!template text="""in the USHIN hyperdrive.""" start="00:39:08.621" video="mainVideo-hyperdrive" id="subtitle"]]
@@ -793,12 +766,11 @@
[[!template text="""and I look forward to hearing the rest of the talks.""" start="00:39:55.161" video="mainVideo-hyperdrive" id="subtitle"]]
[[!template text="""Have a good day.""" start="00:39:57.614" video="mainVideo-hyperdrive" id="subtitle"]]
-
+</div>
Captioner: bhavin192
-<a name="hyperdrive-qanda-transcript"></a>
-# Q&A transcript (unedited)
+<div class="transcript transcript-qanda"><a name="hyperdrive-qanda-transcript"></a><h1>Q&A transcript (unedited)</h1>
[[!template text="""[Speaker 0]: I guess we are now live.""" start="00:00:12.660" video="qanda-hyperdrive" id="subtitle"]]
[[!template text="""So Joseph, thanks for being here.""" start="00:00:15.360" video="qanda-hyperdrive" id="subtitle"]]
@@ -1332,7 +1304,7 @@ Captioner: bhavin192
[[!template text="""you know, upstream how they develop it as""" start="00:28:09.920" video="qanda-hyperdrive" id="subtitle"]]
[[!template text="""well and yeah, so exciting times.""" start="00:28:14.340" video="qanda-hyperdrive" id="subtitle"]]
-Questions or comments? Please e-mail [joseph@ushin.org](mailto:joseph@ushin.org?subject=Comment%20for%20EmacsConf%202023%20hyperdrive%3A%20hyperdrive.el%3A%20Peer-to-peer%20filesystem%20in%20Emacs)
+</div>Questions or comments? Please e-mail [joseph@ushin.org](mailto:joseph@ushin.org?subject=Comment%20for%20EmacsConf%202023%20hyperdrive%3A%20hyperdrive.el%3A%20Peer-to-peer%20filesystem%20in%20Emacs)
<!-- End of emacsconf-publish-after-page -->
diff --git a/2023/info/hyperdrive-before.md b/2023/info/hyperdrive-before.md
index 944b9184..f5b9cca5 100644
--- a/2023/info/hyperdrive-before.md
+++ b/2023/info/hyperdrive-before.md
@@ -2,7 +2,7 @@
Actually a general-audience talk; just on the development track for scheduling purposes
[[!toc ]]
-Format: 41-min talk; Q&A: BigBlueButton conference room
+Format: 41-min talk ; Q&A: BigBlueButton conference room
Status: Q&A to be extracted from the room recordings
@@ -11,10 +11,25 @@ Status: Q&A to be extracted from the room recordings
# Talk
-<div class="vid"><video controls preload="none" id="hyperdrive-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 40:03 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--intro.webm">Download --intro.webm (996kB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--main.opus">Download --main.opus (18MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--main.webm">Download --main.webm (149MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--pad.md">Download --pad.md</a></li><li><a href="https://toobnix.org/w/9wLA55XACiGnS3nNBNwsV5">View on Toobnix</a></li></ul></div></div>
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-hyperdrive"><source src="https://media.emacsconf.org/2023/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="mainVideo-hyperdrive" data="""
+00:19.840 Hyperdrives introduction
+03:04.600 About USHIN and the contributors
+04:32.646 Basic introduction to Hyperdrive
+06:06.133 Managing files with Hyperdrive.el
+12:56.573 Dired like interface
+15:01.234 History in hyperdrive
+17:39.973 Use case of sharing large files
+19:20.913 Drive creation with hyperdrive.el
+23:26.199 hyperdrive-mirror
+30:06.819 hyperdrive history
+34:20.880 Streaming video from hyperdrive
+35:08.746 hyperdrive.el under the hood
+38:57.541 Next steps
+
+"""]]<div></div>Duration: 40:03 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2023-hyperdrive">Open Etherpad</a></li><li><a href="https://bbb.emacsverse.org/playback/presentation/2.0/playback.html?meetingId=c241079bd42ae794ee15bbe2b1d3f3670e4247a8-1701629401873">Play recording from BigBlueButton</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--intro.webm">Download --intro.webm (996kB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--main.opus">Download --main.opus (18MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--main.webm">Download --main.webm (149MB)</a></li><li><a href="https://toobnix.org/w/9wLA55XACiGnS3nNBNwsV5">View on Toobnix</a></li><li><a href="https://www.youtube.com/watch?v=OOA9rs5qteU">View on Youtube</a></li></ul></div></div>
# Q&A
-<div class="vid"><video controls preload="none" id="hyperdrive-qanda"><source src="https://media.emacsconf.org/2023/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--answers.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div>Listen to just the audio:<br /><audio controls preload="none" id="hyperdrive-qanda-audio" src="https://media.emacsconf.org/2023/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--answers.opus"></audio></div><div></div>Duration: 28:15 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--answers.json">Download --answers.json (1.1MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--answers.opus">Download --answers.opus (9MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--answers.webm">Download --answers.webm (48MB)</a></li></ul></div></div>
+<div class="vid qanda"><video controls preload="none" id="qanda-hyperdrive"><source src="https://media.emacsconf.org/2023/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--answers.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div>Listen to just the audio:<br /><audio controls preload="none" id="qanda-hyperdrive-audio" src="https://media.emacsconf.org/2023/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--answers.opus"></audio></div><div></div>Duration: 28:15 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2023-hyperdrive">Open Etherpad</a></li><li><a href="https://bbb.emacsverse.org/playback/presentation/2.0/playback.html?meetingId=c241079bd42ae794ee15bbe2b1d3f3670e4247a8-1701629401873">Play recording from BigBlueButton</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--answers.json">Download --answers.json (1.1MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--answers.opus">Download --answers.opus (9MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--answers.webm">Download --answers.webm (48MB)</a></li></ul></div></div>
# Description
<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/info/hyperdrive-nav.md b/2023/info/hyperdrive-nav.md
index 9634dd75..f8521281 100644
--- a/2023/info/hyperdrive-nav.md
+++ b/2023/info/hyperdrive-nav.md
@@ -3,5 +3,5 @@
Back to the [[talks]]
Previous by track: <a href="/2023/talks/gc">emacs-gc-stats: Does garbage collection actually slow down Emacs?</a>
Next by track: <a href="/2023/talks/lspocaml">Writing a language server in OCaml for Emacs, fun, and profit</a>
-Track: <span class="sched-track Development">Development</span>
+Track: <span class="sched-track Development">Development</span> - <strong><a href="https://emacsconf.org/2023/watch/dev">Watch</a></strong>
</div>
diff --git a/2023/info/koutline-after.md b/2023/info/koutline-after.md
index a48d8b9d..ea86bfa9 100644
--- a/2023/info/koutline-after.md
+++ b/2023/info/koutline-after.md
@@ -1,8 +1,7 @@
<!-- Automatically generated by emacsconf-publish-after-page -->
-<a name="koutline-mainVideo-transcript"></a>
-# Transcript (unedited)
+<div class="transcript transcript-mainVideo"><a name="koutline-mainVideo-transcript"></a><h1>Transcript (unedited)</h1>
[[!template text="""Today I will share a nice workflow I have""" start="00:00:03.340" video="mainVideo-koutline" id="subtitle"]]
[[!template text="""developed for stream of consciousness""" start="00:00:04.400" video="mainVideo-koutline" id="subtitle"]]
@@ -122,7 +121,7 @@
[[!template text="""will reliably fix itself to the center when""" start="00:06:33.420" video="mainVideo-koutline" id="subtitle"]]
[[!template text="""the cursor position is not there.""" start="00:06:36.280" video="mainVideo-koutline" id="subtitle"]]
-Questions or comments? Please e-mail [plasmastrike@voiddragon.me](mailto:plasmastrike@voiddragon.me?subject=Comment%20for%20EmacsConf%202023%20koutline%3A%20Using%20Koutline%20for%20stream%20of%20thought%20journaling)
+</div>Questions or comments? Please e-mail [plasmastrike@voiddragon.me](mailto:plasmastrike@voiddragon.me?subject=Comment%20for%20EmacsConf%202023%20koutline%3A%20Using%20Koutline%20for%20stream%20of%20thought%20journaling)
<!-- End of emacsconf-publish-after-page -->
diff --git a/2023/info/koutline-before.md b/2023/info/koutline-before.md
index f6b7cc81..07f01166 100644
--- a/2023/info/koutline-before.md
+++ b/2023/info/koutline-before.md
@@ -1,12 +1,12 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
[[!toc ]]
-Format: 7-min talk; Q&A: BigBlueButton conference room
+Format: 7-min talk ; Q&A: BigBlueButton conference room
Status: Q&A to be extracted from the room recordings
-<div class="vid"><video controls preload="none" id="koutline-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-koutline--using-koutline-for-stream-of-thought-journaling--matthew-jorgensen-plasmastrike--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-koutline--using-koutline-for-stream-of-thought-journaling--matthew-jorgensen-plasmastrike--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 06:44 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-koutline--using-koutline-for-stream-of-thought-journaling--matthew-jorgensen-plasmastrike--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-koutline--using-koutline-for-stream-of-thought-journaling--matthew-jorgensen-plasmastrike--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-koutline--using-koutline-for-stream-of-thought-journaling--matthew-jorgensen-plasmastrike--main.json">Download --main.json</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-koutline--using-koutline-for-stream-of-thought-journaling--matthew-jorgensen-plasmastrike--main.opus">Download --main.opus (4.5MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-koutline--using-koutline-for-stream-of-thought-journaling--matthew-jorgensen-plasmastrike--main.vtt">Download --main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-koutline--using-koutline-for-stream-of-thought-journaling--matthew-jorgensen-plasmastrike--main.webm">Download --main.webm (23MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-koutline--using-koutline-for-stream-of-thought-journaling--matthew-jorgensen-plasmastrike--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-koutline--using-koutline-for-stream-of-thought-journaling--matthew-jorgensen-plasmastrike--pad.md">Download --pad.md</a></li><li><a href="https://toobnix.org/w/vV7qtK176DVE6RLXrZ18Ee">View on Toobnix</a></li></ul></div></div>
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-koutline"><source src="https://media.emacsconf.org/2023/emacsconf-2023-koutline--using-koutline-for-stream-of-thought-journaling--matthew-jorgensen-plasmastrike--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-koutline--using-koutline-for-stream-of-thought-journaling--matthew-jorgensen-plasmastrike--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 06:44 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2023-koutline">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-koutline--using-koutline-for-stream-of-thought-journaling--matthew-jorgensen-plasmastrike--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-koutline--using-koutline-for-stream-of-thought-journaling--matthew-jorgensen-plasmastrike--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-koutline--using-koutline-for-stream-of-thought-journaling--matthew-jorgensen-plasmastrike--main.json">Download --main.json</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-koutline--using-koutline-for-stream-of-thought-journaling--matthew-jorgensen-plasmastrike--main.opus">Download --main.opus (4.5MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-koutline--using-koutline-for-stream-of-thought-journaling--matthew-jorgensen-plasmastrike--main.vtt">Download --main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-koutline--using-koutline-for-stream-of-thought-journaling--matthew-jorgensen-plasmastrike--main.webm">Download --main.webm (23MB)</a></li><li><a href="https://toobnix.org/w/vV7qtK176DVE6RLXrZ18Ee">View on Toobnix</a></li><li><a href="https://www.youtube.com/watch?v=dO-gv898Vmg">View on Youtube</a></li></ul></div></div>
# Description
<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/info/koutline-nav.md b/2023/info/koutline-nav.md
index 247cf825..6a814ef9 100644
--- a/2023/info/koutline-nav.md
+++ b/2023/info/koutline-nav.md
@@ -3,5 +3,5 @@
Back to the [[talks]]
Previous by track: <a href="/2023/talks/hyperamp">Top 10 ways Hyperbole amps up Emacs</a>
Next by track: <a href="/2023/talks/parallel">Parallel text replacement</a>
-Track: <span class="sched-track General">General</span>
+Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2023/watch/gen">Watch</a></strong>
</div>
diff --git a/2023/info/llm-after.md b/2023/info/llm-after.md
index 5a020a0b..506f010d 100644
--- a/2023/info/llm-after.md
+++ b/2023/info/llm-after.md
@@ -1,13 +1,10 @@
<!-- Automatically generated by emacsconf-publish-after-page -->
-<a name="llm-mainVideo-transcript"></a>
-# Transcript
+<div class="transcript transcript-mainVideo"><a name="llm-mainVideo-transcript"></a><h1>Transcript</h1>
-[[!template new="1" text="""Intro to the Talk""" start="00:00:00.000" video="mainVideo-llm" id="subtitle"]]
-
-[[!template text="""Hello, I'm Andrew Hyatt and I'm going to talk to you""" start="00:00:00.000" video="mainVideo-llm" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Intro to the Talk""" start="00:00:00.000" video="mainVideo-llm" id="subtitle"]]</div>[[!template text="""Hello, I'm Andrew Hyatt and I'm going to talk to you""" start="00:00:00.000" video="mainVideo-llm" id="subtitle"]]
[[!template text="""about large language models and how""" start="00:00:04.160" video="mainVideo-llm" id="subtitle"]]
[[!template text="""they relate to Emacs.""" start="00:00:06.440" video="mainVideo-llm" id="subtitle"]]
[[!template text="""And I'm going to talk to you about the technology""" start="00:00:11.080" video="mainVideo-llm" id="subtitle"]]
@@ -16,9 +13,7 @@
[[!template text="""I'll finish up by kind of talking about where""" start="00:00:21.160" video="mainVideo-llm" id="subtitle"]]
[[!template text="""I think this should go in the future.""" start="00:00:22.880" video="mainVideo-llm" id="subtitle"]]
-[[!template new="1" text="""What are LLMs?""" start="00:00:25.080" video="mainVideo-llm" id="subtitle"]]
-
-[[!template text="""So to start off with, let's just talk like,""" start="00:00:25.080" video="mainVideo-llm" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""What are LLMs?""" start="00:00:25.080" video="mainVideo-llm" id="subtitle"]]</div>[[!template text="""So to start off with, let's just talk like,""" start="00:00:25.080" video="mainVideo-llm" id="subtitle"]]
[[!template text="""I just want to make sure everyone's on the same page.""" start="00:00:28.240" video="mainVideo-llm" id="subtitle"]]
[[!template text="""What are large language models?""" start="00:00:29.760" video="mainVideo-llm" id="subtitle"]]
[[!template text="""Not everyone may be caught up on this.""" start="00:00:30.920" video="mainVideo-llm" id="subtitle"]]
@@ -51,9 +46,7 @@
[[!template text="""probably in my lifetime,""" start="00:01:49.080" video="mainVideo-llm" id="subtitle"]]
[[!template text="""or at least my lifetime as my working lifetime.""" start="00:01:51.560" video="mainVideo-llm" id="subtitle"]]
-[[!template new="1" text="""Power of LLMs (Magit Demo)""" start="00:01:56.360" video="mainVideo-llm" id="subtitle"]]
-
-[[!template text="""So let me give you a demonstration of""" start="00:01:56.360" video="mainVideo-llm" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Power of LLMs (Magit Demo)""" start="00:01:56.360" video="mainVideo-llm" id="subtitle"]]</div>[[!template text="""So let me give you a demonstration of""" start="00:01:56.360" video="mainVideo-llm" id="subtitle"]]
[[!template text="""what kinds of stuff it could do in Emacs.""" start="00:02:02.560" video="mainVideo-llm" id="subtitle"]]
[[!template text="""So here I have a Emacs file.""" start="00:02:06.680" video="mainVideo-llm" id="subtitle"]]
[[!template text="""So this is my Emacs init file.""" start="00:02:09.040" video="mainVideo-llm" id="subtitle"]]
@@ -87,9 +80,7 @@
[[!template text="""understanding something and outputting text based on that,""" start="00:03:27.760" video="mainVideo-llm" id="subtitle"]]
[[!template text="""which is just useful for Emacs.""" start="00:03:30.320" video="mainVideo-llm" id="subtitle"]]
-[[!template new="1" text="""Drawbacks of LLMs (regex demo)""" start="00:03:32.240" video="mainVideo-llm" id="subtitle"]]
-
-[[!template text="""So the drawback is, yeah, it's good,""" start="00:03:32.240" video="mainVideo-llm" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Drawbacks of LLMs (regex demo)""" start="00:03:32.240" video="mainVideo-llm" id="subtitle"]]</div>[[!template text="""So the drawback is, yeah, it's good,""" start="00:03:32.240" video="mainVideo-llm" id="subtitle"]]
[[!template text="""but it's not that reliable.""" start="00:03:39.920" video="mainVideo-llm" id="subtitle"]]
[[!template text="""And you'd think it's very easy to get caught up in like,""" start="00:03:43.360" video="mainVideo-llm" id="subtitle"]]
[[!template text="""oh my gosh, like this is so powerful.""" start="00:03:45.680" video="mainVideo-llm" id="subtitle"]]
@@ -130,9 +121,7 @@
[[!template text="""that is repeatably, that's, that is always good.""" start="00:05:09.000" video="mainVideo-llm" id="subtitle"]]
[[!template text="""So yeah, that's currently the problem.""" start="00:05:13.880" video="mainVideo-llm" id="subtitle"]]
-[[!template new="1" text="""Embeddings""" start="00:05:20.120" video="mainVideo-llm" id="subtitle"]]
-
-[[!template text="""So I want to talk about embeddings.""" start="00:05:20.120" video="mainVideo-llm" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Embeddings""" start="00:05:20.120" video="mainVideo-llm" id="subtitle"]]</div>[[!template text="""So I want to talk about embeddings.""" start="00:05:20.120" video="mainVideo-llm" id="subtitle"]]
[[!template text="""They're another thing that LLMs offer""" start="00:05:23.400" video="mainVideo-llm" id="subtitle"]]
[[!template text="""and that are extremely useful.""" start="00:05:26.920" video="mainVideo-llm" id="subtitle"]]
[[!template text="""They are, what they do is they encode from""" start="00:05:28.600" video="mainVideo-llm" id="subtitle"]]
@@ -181,9 +170,7 @@
[[!template text="""So no one has done this yet,""" start="00:07:28.720" video="mainVideo-llm" id="subtitle"]]
[[!template text="""but that should not be hard to do.""" start="00:07:30.000" video="mainVideo-llm" id="subtitle"]]
-[[!template new="1" text="""Image Generation""" start="00:07:32.800" video="mainVideo-llm" id="subtitle"]]
-
-[[!template text="""Image generation is something that's, you know,""" start="00:07:32.800" video="mainVideo-llm" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Image Generation""" start="00:07:32.800" video="mainVideo-llm" id="subtitle"]]</div>[[!template text="""Image generation is something that's, you know,""" start="00:07:32.800" video="mainVideo-llm" id="subtitle"]]
[[!template text="""it's not quite an LLM in the sense of...""" start="00:07:34.880" video="mainVideo-llm" id="subtitle"]]
[[!template text="""These are... It's a different technology,""" start="00:07:38.480" video="mainVideo-llm" id="subtitle"]]
[[!template text="""but these things are kind of packaged together""" start="00:07:43.080" video="mainVideo-llm" id="subtitle"]]
@@ -212,9 +199,7 @@
[[!template text="""but instead of outputting a text,""" start="00:08:43.360" video="mainVideo-llm" id="subtitle"]]
[[!template text="""you're outputting a picture.""" start="00:08:44.800" video="mainVideo-llm" id="subtitle"]]
-[[!template new="1" text="""Fine-tuning""" start="00:08:48.480" video="mainVideo-llm" id="subtitle"]]
-
-[[!template text="""There's also, I want to mention the concept of fine-tuning.""" start="00:08:48.480" video="mainVideo-llm" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Fine-tuning""" start="00:08:48.480" video="mainVideo-llm" id="subtitle"]]</div>[[!template text="""There's also, I want to mention the concept of fine-tuning.""" start="00:08:48.480" video="mainVideo-llm" id="subtitle"]]
[[!template text="""Fine-tuning is a way to take your--""" start="00:08:51.080" video="mainVideo-llm" id="subtitle"]]
[[!template text="""take a corpus of inputs and outputs and just from""" start="00:08:55.200" video="mainVideo-llm" id="subtitle"]]
[[!template text="""a large language model, you're like, okay,""" start="00:08:59.760" video="mainVideo-llm" id="subtitle"]]
@@ -267,9 +252,7 @@
[[!template text="""to do the correct calculations.""" start="00:10:59.600" video="mainVideo-llm" id="subtitle"]]
[[!template text="""So pretty, pretty useful stuff.""" start="00:11:01.040" video="mainVideo-llm" id="subtitle"]]
-[[!template new="1" text="""Open Source""" start="00:11:08.160" video="mainVideo-llm" id="subtitle"]]
-
-[[!template text="""So I also want to mention open source""" start="00:11:08.160" video="mainVideo-llm" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Open Source""" start="00:11:08.160" video="mainVideo-llm" id="subtitle"]]</div>[[!template text="""So I also want to mention open source""" start="00:11:08.160" video="mainVideo-llm" id="subtitle"]]
[[!template text="""and basically free software here.""" start="00:11:10.400" video="mainVideo-llm" id="subtitle"]]
[[!template text="""These LLMs are mostly not free software.""" start="00:11:12.680" video="mainVideo-llm" id="subtitle"]]
[[!template text="""They're sometimes open source,""" start="00:11:17.600" video="mainVideo-llm" id="subtitle"]]
@@ -291,9 +274,7 @@
[[!template text="""They're just not as good yet.""" start="00:11:58.000" video="mainVideo-llm" id="subtitle"]]
[[!template text="""And I think that might change in the future.""" start="00:11:59.520" video="mainVideo-llm" id="subtitle"]]
-[[!template new="1" text="""The Future""" start="00:12:02.840" video="mainVideo-llm" id="subtitle"]]
-
-[[!template text="""So speaking of the future,""" start="00:12:02.840" video="mainVideo-llm" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""The Future""" start="00:12:02.840" video="mainVideo-llm" id="subtitle"]]</div>[[!template text="""So speaking of the future,""" start="00:12:02.840" video="mainVideo-llm" id="subtitle"]]
[[!template text="""one of the things I'd like to point out""" start="00:12:04.120" video="mainVideo-llm" id="subtitle"]]
[[!template text="""is that like the demos I showed you are based on,""" start="00:12:07.520" video="mainVideo-llm" id="subtitle"]]
[[!template text="""I'm using OpenAI 3.5 model.""" start="00:12:09.640" video="mainVideo-llm" id="subtitle"]]
@@ -342,9 +323,7 @@
[[!template text="""I think this is why we should be""" start="00:14:01.240" video="mainVideo-llm" id="subtitle"]]
[[!template text="""paying attention to this stuff.""" start="00:14:02.280" video="mainVideo-llm" id="subtitle"]]
-[[!template new="1" text="""LLMs in Emacs - existing packages""" start="00:14:08.200" video="mainVideo-llm" id="subtitle"]]
-
-[[!template text="""Let's talk about the existing packages.""" start="00:14:08.200" video="mainVideo-llm" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""LLMs in Emacs - existing packages""" start="00:14:08.200" video="mainVideo-llm" id="subtitle"]]</div>[[!template text="""Let's talk about the existing packages.""" start="00:14:08.200" video="mainVideo-llm" id="subtitle"]]
[[!template text="""Because there's a lot out there, people have,""" start="00:14:11.040" video="mainVideo-llm" id="subtitle"]]
[[!template text="""I think people have been integrating with""" start="00:14:13.200" video="mainVideo-llm" id="subtitle"]]
[[!template text="""these LLMs that often have a relatively easy to use API.""" start="00:14:17.040" video="mainVideo-llm" id="subtitle"]]
@@ -432,9 +411,7 @@
[[!template text="""It's really just there as a library""" start="00:18:09.880" video="mainVideo-llm" id="subtitle"]]
[[!template text="""to use by other things offering functionality. Okay.""" start="00:18:11.720" video="mainVideo-llm" id="subtitle"]]
-[[!template new="1" text="""Abstracting LLM challenges""" start="00:18:15.960" video="mainVideo-llm" id="subtitle"]]
-
-[[!template text="""And it's a little bit difficult to abstract.""" start="00:18:15.960" video="mainVideo-llm" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Abstracting LLM challenges""" start="00:18:15.960" video="mainVideo-llm" id="subtitle"]]</div>[[!template text="""And it's a little bit difficult to abstract.""" start="00:18:15.960" video="mainVideo-llm" id="subtitle"]]
[[!template text="""I want to point this out""" start="00:18:19.840" video="mainVideo-llm" id="subtitle"]]
[[!template text="""because I think it's an important point""" start="00:18:21.160" video="mainVideo-llm" id="subtitle"]]
[[!template text="""is that the, it's, some of these LLMs, for example,""" start="00:18:23.600" video="mainVideo-llm" id="subtitle"]]
@@ -455,9 +432,7 @@
[[!template text="""So it's compatible, but there's definitely""" start="00:18:57.521" video="mainVideo-llm" id="subtitle"]]
[[!template text="""limits to that compatibility.""" start="00:19:02.161" video="mainVideo-llm" id="subtitle"]]
-[[!template new="1" text="""Emacs is the ideal interface for LLMs""" start="00:19:04.080" video="mainVideo-llm" id="subtitle"]]
-
-[[!template text="""I want to point out just to finish off,""" start="00:19:04.080" video="mainVideo-llm" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Emacs is the ideal interface for LLMs""" start="00:19:04.080" video="mainVideo-llm" id="subtitle"]]</div>[[!template text="""I want to point out just to finish off,""" start="00:19:04.080" video="mainVideo-llm" id="subtitle"]]
[[!template text="""Emacs is the, Emacs has real power here""" start="00:19:06.161" video="mainVideo-llm" id="subtitle"]]
[[!template text="""that nothing else I think in the industry is offering.""" start="00:19:12.880" video="mainVideo-llm" id="subtitle"]]
[[!template text="""First of all, people that use Emacs""" start="00:19:15.680" video="mainVideo-llm" id="subtitle"]]
@@ -483,9 +458,7 @@
[[!template text="""as your agent in the editor.""" start="00:19:57.080" video="mainVideo-llm" id="subtitle"]]
[[!template text="""I think we need to explore ideas like this.""" start="00:19:58.680" video="mainVideo-llm" id="subtitle"]]
-[[!template new="1" text="""Outro""" start="00:20:01.960" video="mainVideo-llm" id="subtitle"]]
-
-[[!template text="""And I think we need to share these ideas""" start="00:20:01.960" video="mainVideo-llm" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Outro""" start="00:20:01.960" video="mainVideo-llm" id="subtitle"]]</div>[[!template text="""And I think we need to share these ideas""" start="00:20:01.960" video="mainVideo-llm" id="subtitle"]]
[[!template text="""and we need to make sure that we're pushing the""" start="00:20:04.280" video="mainVideo-llm" id="subtitle"]]
[[!template text="""envelope for Emacs and actually, you know, doing things,""" start="00:20:07.040" video="mainVideo-llm" id="subtitle"]]
[[!template text="""sharing ideas, sharing progress,""" start="00:20:10.520" video="mainVideo-llm" id="subtitle"]]
@@ -494,12 +467,11 @@
[[!template text="""take advantage of this super powerful technique.""" start="00:20:20.640" video="mainVideo-llm" id="subtitle"]]
[[!template text="""Thank you for listening.""" start="00:20:24.520" video="mainVideo-llm" id="subtitle"]]
-
+</div>
Captioner: bala
-<a name="llm-qanda-transcript"></a>
-# Q&A transcript (unedited)
+<div class="transcript transcript-qanda"><a name="llm-qanda-transcript"></a><h1>Q&A transcript (unedited)</h1>
[[!template text="""[Speaker 0]: Okay. Hello, everyone.""" start="00:00:13.099" video="qanda-llm" id="subtitle"]]
[[!template text="""I think this is the start of the Q&A session.""" start="00:00:16.560" video="qanda-llm" id="subtitle"]]
@@ -1138,7 +1110,7 @@ Captioner: bala
[[!template text="""So thank""" start="00:28:19.620" video="qanda-llm" id="subtitle"]]
[[!template text="""you""" start="00:28:30.060" video="qanda-llm" id="subtitle"]]
-Questions or comments? Please e-mail [ahyatt@gmail.com](mailto:ahyatt@gmail.com?subject=Comment%20for%20EmacsConf%202023%20llm%3A%20LLM%20clients%20in%20Emacs%2C%20functionality%20and%20standardization)
+</div>Questions or comments? Please e-mail [ahyatt@gmail.com](mailto:ahyatt@gmail.com?subject=Comment%20for%20EmacsConf%202023%20llm%3A%20LLM%20clients%20in%20Emacs%2C%20functionality%20and%20standardization)
<!-- End of emacsconf-publish-after-page -->
diff --git a/2023/info/llm-before.md b/2023/info/llm-before.md
index 2371bd44..5ec20c14 100644
--- a/2023/info/llm-before.md
+++ b/2023/info/llm-before.md
@@ -1,6 +1,6 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
[[!toc ]]
-Format: 21-min talk; Q&A: BigBlueButton conference room
+Format: 21-min talk ; Q&A: BigBlueButton conference room
Status: Q&A to be extracted from the room recordings
@@ -9,7 +9,7 @@ Status: Q&A to be extracted from the room recordings
# Talk
-<div class="vid"><video controls preload="none" id="llm-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="llm-mainVideo" data="""
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-llm"><source src="https://media.emacsconf.org/2023/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="mainVideo-llm" data="""
00:00.000 Intro to the Talk
00:25.080 What are LLMs?
01:56.360 Power of LLMs (Magit Demo)
@@ -24,10 +24,10 @@ Status: Q&A to be extracted from the room recordings
19:04.080 Emacs is the ideal interface for LLMs
20:01.960 Outro
-"""]]<div></div>Duration: 20:26 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--main.opus">Download --main.opus (12MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--main.webm">Download --main.webm (50MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--pad.md">Download --pad.md</a></li><li><a href="https://toobnix.org/w/ck1LWXvRiAGNLWFA8s4Ymi">View on Toobnix</a></li></ul></div></div>
+"""]]<div></div>Duration: 20:26 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2023-llm">Open Etherpad</a></li><li><a href="https://bbb.emacsverse.org/playback/presentation/2.0/playback.html?meetingId=1d02948a0834c0b349de5931bf9535b534b39d27-1701533045559">Play recording from BigBlueButton</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--main.opus">Download --main.opus (12MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--main.webm">Download --main.webm (50MB)</a></li><li><a href="https://toobnix.org/w/ck1LWXvRiAGNLWFA8s4Ymi">View on Toobnix</a></li><li><a href="https://www.youtube.com/watch?v=HN3Y75D4tEs">View on Youtube</a></li></ul></div></div>
# Q&A
-<div class="vid"><video controls preload="none" id="llm-qanda"><source src="https://media.emacsconf.org/2023/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--answers.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div>Listen to just the audio:<br /><audio controls preload="none" id="llm-qanda-audio" src="https://media.emacsconf.org/2023/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--answers.opus"></audio></div><div></div>Duration: 28:32 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--answers.json">Download --answers.json (1.3MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--answers.opus">Download --answers.opus (17MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--answers.webm">Download --answers.webm (46MB)</a></li></ul></div></div>
+<div class="vid qanda"><video controls preload="none" id="qanda-llm"><source src="https://media.emacsconf.org/2023/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--answers.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div>Listen to just the audio:<br /><audio controls preload="none" id="qanda-llm-audio" src="https://media.emacsconf.org/2023/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--answers.opus"></audio></div><div></div>Duration: 28:32 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2023-llm">Open Etherpad</a></li><li><a href="https://bbb.emacsverse.org/playback/presentation/2.0/playback.html?meetingId=1d02948a0834c0b349de5931bf9535b534b39d27-1701533045559">Play recording from BigBlueButton</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--answers.json">Download --answers.json (1.3MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--answers.opus">Download --answers.opus (17MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--answers.webm">Download --answers.webm (46MB)</a></li></ul></div></div>
# Description
<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/info/llm-nav.md b/2023/info/llm-nav.md
index 13555b70..92173270 100644
--- a/2023/info/llm-nav.md
+++ b/2023/info/llm-nav.md
@@ -3,5 +3,5 @@
Back to the [[talks]]
Previous by track: <a href="/2023/talks/voice">Enhancing productivity with voice computing</a>
Next by track: <a href="/2023/talks/overlay">Improving compiler diagnostics with overlays</a>
-Track: <span class="sched-track Development">Development</span>
+Track: <span class="sched-track Development">Development</span> - <strong><a href="https://emacsconf.org/2023/watch/dev">Watch</a></strong>
</div>
diff --git a/2023/info/lspocaml-after.md b/2023/info/lspocaml-after.md
index 56d6ba54..bc5bdc22 100644
--- a/2023/info/lspocaml-after.md
+++ b/2023/info/lspocaml-after.md
@@ -1,13 +1,10 @@
<!-- Automatically generated by emacsconf-publish-after-page -->
-<a name="lspocaml-mainVideo-transcript"></a>
-# Transcript
+<div class="transcript transcript-mainVideo"><a name="lspocaml-mainVideo-transcript"></a><h1>Transcript</h1>
-[[!template new="1" text="""Introduction""" start="00:00:00.000" video="mainVideo-lspocaml" id="subtitle"]]
-
-[[!template text="""Hi, I'm Austin Theriault,""" start="00:00:00.000" video="mainVideo-lspocaml" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Introduction""" start="00:00:00.000" video="mainVideo-lspocaml" id="subtitle"]]</div>[[!template text="""Hi, I'm Austin Theriault,""" start="00:00:00.000" video="mainVideo-lspocaml" id="subtitle"]]
[[!template text="""and this is writing a language server in OCaml""" start="00:00:01.840" video="mainVideo-lspocaml" id="subtitle"]]
[[!template text="""for Emacs, fun, and profit.""" start="00:00:04.160" video="mainVideo-lspocaml" id="subtitle"]]
[[!template text="""Real quick, who am I?""" start="00:00:07.640" video="mainVideo-lspocaml" id="subtitle"]]
@@ -16,9 +13,7 @@
[[!template text="""and I love working on programming languages, editors,""" start="00:00:13.240" video="mainVideo-lspocaml" id="subtitle"]]
[[!template text="""and cryptography.""" start="00:00:15.360" video="mainVideo-lspocaml" id="subtitle"]]
-[[!template new="1" text="""What is Semgrep?""" start="00:00:16.540" video="mainVideo-lspocaml" id="subtitle"]]
-
-[[!template text="""What is Semgrep?""" start="00:00:16.540" video="mainVideo-lspocaml" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""What is Semgrep?""" start="00:00:16.540" video="mainVideo-lspocaml" id="subtitle"]]</div>[[!template text="""What is Semgrep?""" start="00:00:16.540" video="mainVideo-lspocaml" id="subtitle"]]
[[!template text="""We're a small cybersecurity startup""" start="00:00:17.800" video="mainVideo-lspocaml" id="subtitle"]]
[[!template text="""whose core product is a SaaS tool,""" start="00:00:20.040" video="mainVideo-lspocaml" id="subtitle"]]
[[!template text="""which is static application security testing.""" start="00:00:21.920" video="mainVideo-lspocaml" id="subtitle"]]
@@ -30,9 +25,7 @@
[[!template text="""and we have lots of customers all using different IDEs.""" start="00:00:36.960" video="mainVideo-lspocaml" id="subtitle"]]
[[!template text="""Why does that matter?""" start="00:00:39.320" video="mainVideo-lspocaml" id="subtitle"]]
-[[!template new="1" text="""How do we show security bugs early?""" start="00:00:40.720" video="mainVideo-lspocaml" id="subtitle"]]
-
-[[!template text="""Well, our goal is to show security bugs""" start="00:00:40.720" video="mainVideo-lspocaml" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""How do we show security bugs early?""" start="00:00:40.720" video="mainVideo-lspocaml" id="subtitle"]]</div>[[!template text="""Well, our goal is to show security bugs""" start="00:00:40.720" video="mainVideo-lspocaml" id="subtitle"]]
[[!template text="""as early as possible in the development cycle.""" start="00:00:42.780" video="mainVideo-lspocaml" id="subtitle"]]
[[!template text="""In the industry, we call this shifting left.""" start="00:00:45.240" video="mainVideo-lspocaml" id="subtitle"]]
[[!template text="""And so how far left can we shift? The editor.""" start="00:00:48.480" video="mainVideo-lspocaml" id="subtitle"]]
@@ -55,9 +48,7 @@
[[!template text="""and then plug it into all of them.""" start="00:01:33.880" video="mainVideo-lspocaml" id="subtitle"]]
[[!template text="""So how can we do that, though?""" start="00:01:35.800" video="mainVideo-lspocaml" id="subtitle"]]
-[[!template new="1" text="""What is the Language Server Protocol?""" start="00:01:37.880" video="mainVideo-lspocaml" id="subtitle"]]
-
-[[!template text="""Well, in the process of working on this stuff,""" start="00:01:37.880" video="mainVideo-lspocaml" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""What is the Language Server Protocol?""" start="00:01:37.880" video="mainVideo-lspocaml" id="subtitle"]]</div>[[!template text="""Well, in the process of working on this stuff,""" start="00:01:37.880" video="mainVideo-lspocaml" id="subtitle"]]
[[!template text="""I found out about""" start="00:01:40.680" video="mainVideo-lspocaml" id="subtitle"]]
[[!template text="""the Language Server Protocol.""" start="00:01:43.000" video="mainVideo-lspocaml" id="subtitle"]]
[[!template text="""And what's great about the Language Server Protocol is""" start="00:01:44.880" video="mainVideo-lspocaml" id="subtitle"]]
@@ -76,9 +67,7 @@
[[!template text="""and you can hook it up to a bunch of language clients""" start="00:02:25.440" video="mainVideo-lspocaml" id="subtitle"]]
[[!template text="""and it'll just work.""" start="00:02:27.440" video="mainVideo-lspocaml" id="subtitle"]]
-[[!template new="1" text="""Case study: Rust Analyzer""" start="00:02:29.040" video="mainVideo-lspocaml" id="subtitle"]]
-
-[[!template text="""So let's do a quick case study on language servers in LSP,""" start="00:02:29.040" video="mainVideo-lspocaml" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Case study: Rust Analyzer""" start="00:02:29.040" video="mainVideo-lspocaml" id="subtitle"]]</div>[[!template text="""So let's do a quick case study on language servers in LSP,""" start="00:02:29.040" video="mainVideo-lspocaml" id="subtitle"]]
[[!template text="""just so you get an idea of why this is super cool.""" start="00:02:34.040" video="mainVideo-lspocaml" id="subtitle"]]
[[!template text="""So there's this language server called Rust Analyzer.""" start="00:02:37.240" video="mainVideo-lspocaml" id="subtitle"]]
[[!template text="""It's a language server for the Rust language.""" start="00:02:40.440" video="mainVideo-lspocaml" id="subtitle"]]
@@ -105,9 +94,7 @@
[[!template text="""So you can develop Rust in a way that's relatively efficient""" start="00:03:35.240" video="mainVideo-lspocaml" id="subtitle"]]
[[!template text="""without having to give up your favorite editor.""" start="00:03:39.080" video="mainVideo-lspocaml" id="subtitle"]]
-[[!template new="1" text="""Rust Analyzer in action""" start="00:03:42.760" video="mainVideo-lspocaml" id="subtitle"]]
-
-[[!template text="""So here's a quick little demo""" start="00:03:42.760" video="mainVideo-lspocaml" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Rust Analyzer in action""" start="00:03:42.760" video="mainVideo-lspocaml" id="subtitle"]]</div>[[!template text="""So here's a quick little demo""" start="00:03:42.760" video="mainVideo-lspocaml" id="subtitle"]]
[[!template text="""of all the cool things it can do.""" start="00:03:44.400" video="mainVideo-lspocaml" id="subtitle"]]
[[!template text="""So you can see I typed an error.""" start="00:03:46.320" video="mainVideo-lspocaml" id="subtitle"]]
[[!template text="""It tells me that I wrote an error.""" start="00:03:48.120" video="mainVideo-lspocaml" id="subtitle"]]
@@ -122,9 +109,7 @@
[[!template text="""I didn't have to go and type any commands or anything.""" start="00:04:05.440" video="mainVideo-lspocaml" id="subtitle"]]
[[!template text="""It just worked.""" start="00:04:07.840" video="mainVideo-lspocaml" id="subtitle"]]
-[[!template new="1" text="""Why is this useful?""" start="00:04:09.960" video="mainVideo-lspocaml" id="subtitle"]]
-
-[[!template text="""So why is this just useful in general for a user?""" start="00:04:09.960" video="mainVideo-lspocaml" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Why is this useful?""" start="00:04:09.960" video="mainVideo-lspocaml" id="subtitle"]]</div>[[!template text="""So why is this just useful in general for a user?""" start="00:04:09.960" video="mainVideo-lspocaml" id="subtitle"]]
[[!template text="""Well, you get the same experience across editors.""" start="00:04:13.400" video="mainVideo-lspocaml" id="subtitle"]]
[[!template text="""Like I was saying, you don't have to give up""" start="00:04:15.800" video="mainVideo-lspocaml" id="subtitle"]]
[[!template text="""one editor for another""" start="00:04:17.120" video="mainVideo-lspocaml" id="subtitle"]]
@@ -160,9 +145,7 @@
[[!template text="""It's great to have just one set of tests""" start="00:05:31.960" video="mainVideo-lspocaml" id="subtitle"]]
[[!template text="""that you have to pass.""" start="00:05:33.840" video="mainVideo-lspocaml" id="subtitle"]]
-[[!template new="1" text="""So what about Emacs?""" start="00:05:36.220" video="mainVideo-lspocaml" id="subtitle"]]
-
-[[!template text="""So why does a language server protocol matter with Emacs?""" start="00:05:36.220" video="mainVideo-lspocaml" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""So what about Emacs?""" start="00:05:36.220" video="mainVideo-lspocaml" id="subtitle"]]</div>[[!template text="""So why does a language server protocol matter with Emacs?""" start="00:05:36.220" video="mainVideo-lspocaml" id="subtitle"]]
[[!template text="""Well, like I was saying before,""" start="00:05:40.160" video="mainVideo-lspocaml" id="subtitle"]]
[[!template text="""Emacs gets the benefit from work put into other editors.""" start="00:05:42.380" video="mainVideo-lspocaml" id="subtitle"]]
[[!template text="""So we get all this language support,""" start="00:05:45.480" video="mainVideo-lspocaml" id="subtitle"]]
@@ -188,9 +171,7 @@
[[!template text="""but I would imagine a lot of this stuff is very similar.""" start="00:06:33.300" video="mainVideo-lspocaml" id="subtitle"]]
[[!template text="""Here's a list of some supported languages.""" start="00:06:37.780" video="mainVideo-lspocaml" id="subtitle"]]
-[[!template new="1" text="""Technical part - Brief communication overview""" start="00:06:40.700" video="mainVideo-lspocaml" id="subtitle"]]
-
-[[!template text="""Now let's get into the technical part.""" start="00:06:40.700" video="mainVideo-lspocaml" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Technical part - Brief communication overview""" start="00:06:40.700" video="mainVideo-lspocaml" id="subtitle"]]</div>[[!template text="""Now let's get into the technical part.""" start="00:06:40.700" video="mainVideo-lspocaml" id="subtitle"]]
[[!template text="""How does LSP actually work?""" start="00:06:42.640" video="mainVideo-lspocaml" id="subtitle"]]
[[!template text="""So let's go over how it communicates first.""" start="00:06:45.040" video="mainVideo-lspocaml" id="subtitle"]]
[[!template text="""It uses JSONRPC,""" start="00:06:47.160" video="mainVideo-lspocaml" id="subtitle"]]
@@ -226,14 +207,10 @@
[[!template text="""and the communication is relatively simple,""" start="00:07:55.400" video="mainVideo-lspocaml" id="subtitle"]]
[[!template text="""which is great.""" start="00:07:57.720" video="mainVideo-lspocaml" id="subtitle"]]
-[[!template new="1" text="""Example request""" start="00:07:58.760" video="mainVideo-lspocaml" id="subtitle"]]
-
-[[!template text="""This is what it looks like, what a request looks like.""" start="00:07:58.760" video="mainVideo-lspocaml" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Example request""" start="00:07:58.760" video="mainVideo-lspocaml" id="subtitle"]]</div>[[!template text="""This is what it looks like, what a request looks like.""" start="00:07:58.760" video="mainVideo-lspocaml" id="subtitle"]]
[[!template text="""Notifications look somewhat similar.""" start="00:08:01.240" video="mainVideo-lspocaml" id="subtitle"]]
-[[!template new="1" text="""LSP capabilities""" start="00:08:03.380" video="mainVideo-lspocaml" id="subtitle"]]
-
-[[!template text="""So now we know how LSP communication works,""" start="00:08:03.380" video="mainVideo-lspocaml" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""LSP capabilities""" start="00:08:03.380" video="mainVideo-lspocaml" id="subtitle"]]</div>[[!template text="""So now we know how LSP communication works,""" start="00:08:03.380" video="mainVideo-lspocaml" id="subtitle"]]
[[!template text="""but how does the actual protocol work?""" start="00:08:05.880" video="mainVideo-lspocaml" id="subtitle"]]
[[!template text="""Well, almost all of the protocol is opt-in,""" start="00:08:09.860" video="mainVideo-lspocaml" id="subtitle"]]
[[!template text="""meaning you don't have to support the entire specification,""" start="00:08:12.400" video="mainVideo-lspocaml" id="subtitle"]]
@@ -267,9 +244,7 @@
[[!template text="""And that's a little bit more work,""" start="00:09:18.700" video="mainVideo-lspocaml" id="subtitle"]]
[[!template text="""but it's better than where we were without LSP.""" start="00:09:20.400" video="mainVideo-lspocaml" id="subtitle"]]
-[[!template new="1" text="""Tips on writing a LS""" start="00:09:23.380" video="mainVideo-lspocaml" id="subtitle"]]
-
-[[!template text="""So some quick tips on writing a language server.""" start="00:09:23.380" video="mainVideo-lspocaml" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Tips on writing a LS""" start="00:09:23.380" video="mainVideo-lspocaml" id="subtitle"]]</div>[[!template text="""So some quick tips on writing a language server.""" start="00:09:23.380" video="mainVideo-lspocaml" id="subtitle"]]
[[!template text="""I'm not going to get too into this""" start="00:09:25.440" video="mainVideo-lspocaml" id="subtitle"]]
[[!template text="""because it's very application-specific.""" start="00:09:27.480" video="mainVideo-lspocaml" id="subtitle"]]
[[!template text="""I wrote Semgrep's in OCaml""" start="00:09:30.800" video="mainVideo-lspocaml" id="subtitle"]]
@@ -312,9 +287,7 @@
[[!template text="""this stuff is really easy.""" start="00:11:00.320" video="mainVideo-lspocaml" id="subtitle"]]
[[!template text="""You're basically just wiring stuff up.""" start="00:11:01.680" video="mainVideo-lspocaml" id="subtitle"]]
-[[!template new="1" text="""Supporting a LS through LSP mode in Emacs""" start="00:11:03.480" video="mainVideo-lspocaml" id="subtitle"]]
-
-[[!template text="""But, yeah. So, now we know all about""" start="00:11:03.480" video="mainVideo-lspocaml" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Supporting a LS through LSP mode in Emacs""" start="00:11:03.480" video="mainVideo-lspocaml" id="subtitle"]]</div>[[!template text="""But, yeah. So, now we know all about""" start="00:11:03.480" video="mainVideo-lspocaml" id="subtitle"]]
[[!template text="""LSP and language servers.""" start="00:11:08.360" video="mainVideo-lspocaml" id="subtitle"]]
[[!template text="""Say you want to actually""" start="00:11:10.800" video="mainVideo-lspocaml" id="subtitle"]]
[[!template text="""add support for a language server in Emacs.""" start="00:11:11.880" video="mainVideo-lspocaml" id="subtitle"]]
@@ -337,9 +310,7 @@
[[!template text="""to the list of clients, and then do some documentation,""" start="00:12:01.320" video="mainVideo-lspocaml" id="subtitle"]]
[[!template text="""because documentation's great.""" start="00:12:03.720" video="mainVideo-lspocaml" id="subtitle"]]
-[[!template new="1" text="""Create a client""" start="00:12:06.000" video="mainVideo-lspocaml" id="subtitle"]]
-
-[[!template text="""First, creating a client.""" start="00:12:06.000" video="mainVideo-lspocaml" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Create a client""" start="00:12:06.000" video="mainVideo-lspocaml" id="subtitle"]]</div>[[!template text="""First, creating a client.""" start="00:12:06.000" video="mainVideo-lspocaml" id="subtitle"]]
[[!template text="""In the `clients/` folder in `lsp-mode/`,""" start="00:12:07.640" video="mainVideo-lspocaml" id="subtitle"]]
[[!template text="""literally just add, like, `lsp-` whatever it is,""" start="00:12:09.640" video="mainVideo-lspocaml" id="subtitle"]]
[[!template text="""`require` the library, and register a client.""" start="00:12:12.920" video="mainVideo-lspocaml" id="subtitle"]]
@@ -363,9 +334,7 @@
[[!template text="""but just know that these aren't your only options,""" start="00:13:01.200" video="mainVideo-lspocaml" id="subtitle"]]
[[!template text="""and then finally provide your client.""" start="00:13:03.800" video="mainVideo-lspocaml" id="subtitle"]]
-[[!template new="1" text="""Add to list of client packages""" start="00:13:07.300" video="mainVideo-lspocaml" id="subtitle"]]
-
-[[!template text="""Next, you just have to add your client""" start="00:13:07.300" video="mainVideo-lspocaml" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Add to list of client packages""" start="00:13:07.300" video="mainVideo-lspocaml" id="subtitle"]]</div>[[!template text="""Next, you just have to add your client""" start="00:13:07.300" video="mainVideo-lspocaml" id="subtitle"]]
[[!template text="""to the list of clients that `lsp-mode` supports,""" start="00:13:09.800" video="mainVideo-lspocaml" id="subtitle"]]
[[!template text="""and now you've added support for a whole new language,""" start="00:13:12.160" video="mainVideo-lspocaml" id="subtitle"]]
[[!template text="""whole new framework, whole new tool to Emacs,""" start="00:13:15.640" video="mainVideo-lspocaml" id="subtitle"]]
@@ -392,14 +361,10 @@
[[!template text="""and it's similar to LSP but for debuggers,""" start="00:14:07.320" video="mainVideo-lspocaml" id="subtitle"]]
[[!template text="""which is very cool,""" start="00:14:09.680" video="mainVideo-lspocaml" id="subtitle"]]
-[[!template new="1" text="""Add documentation!""" start="00:14:11.680" video="mainVideo-lspocaml" id="subtitle"]]
-
-[[!template text="""and then finally link to your documentation.""" start="00:14:11.680" video="mainVideo-lspocaml" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Add documentation!""" start="00:14:11.680" video="mainVideo-lspocaml" id="subtitle"]]</div>[[!template text="""and then finally link to your documentation.""" start="00:14:11.680" video="mainVideo-lspocaml" id="subtitle"]]
[[!template text="""Please, please document your stuff.""" start="00:14:14.600" video="mainVideo-lspocaml" id="subtitle"]]
-[[!template new="1" text="""Adding commands and custom capabilities""" start="00:14:17.880" video="mainVideo-lspocaml" id="subtitle"]]
-
-[[!template text="""If you want to add, like, a custom Emacs function""" start="00:14:17.880" video="mainVideo-lspocaml" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Adding commands and custom capabilities""" start="00:14:17.880" video="mainVideo-lspocaml" id="subtitle"]]</div>[[!template text="""If you want to add, like, a custom Emacs function""" start="00:14:17.880" video="mainVideo-lspocaml" id="subtitle"]]
[[!template text="""or custom capabilities, it's super easy.""" start="00:14:20.480" video="mainVideo-lspocaml" id="subtitle"]]
[[!template text="""It's literally just, like, calling a normal Emacs function.""" start="00:14:22.680" video="mainVideo-lspocaml" id="subtitle"]]
[[!template text="""For example, Semgrep normally only scans files""" start="00:14:27.640" video="mainVideo-lspocaml" id="subtitle"]]
@@ -414,9 +379,7 @@
[[!template text="""and do something with the result,""" start="00:14:56.080" video="mainVideo-lspocaml" id="subtitle"]]
[[!template text="""and so that's adding custom capabilities.""" start="00:14:58.460" video="mainVideo-lspocaml" id="subtitle"]]
-[[!template new="1" text="""Thanks for listening""" start="00:15:01.360" video="mainVideo-lspocaml" id="subtitle"]]
-
-[[!template text="""That's pretty much it. Thank you for listening.""" start="00:15:01.360" video="mainVideo-lspocaml" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Thanks for listening""" start="00:15:01.360" video="mainVideo-lspocaml" id="subtitle"]]</div>[[!template text="""That's pretty much it. Thank you for listening.""" start="00:15:01.360" video="mainVideo-lspocaml" id="subtitle"]]
[[!template text="""Some resources here.""" start="00:15:04.320" video="mainVideo-lspocaml" id="subtitle"]]
[[!template text="""These links are clickable if you get the PDF,""" start="00:15:05.640" video="mainVideo-lspocaml" id="subtitle"]]
[[!template text="""if you get the slides. Semgrep: we're hiring!""" start="00:15:08.240" video="mainVideo-lspocaml" id="subtitle"]]
@@ -440,12 +403,11 @@
[[!template text="""but hopefully this is sufficient for y'all,""" start="00:15:58.440" video="mainVideo-lspocaml" id="subtitle"]]
[[!template text="""and now it's time for some Q&A.""" start="00:16:01.480" video="mainVideo-lspocaml" id="subtitle"]]
-
+</div>
Captioner: sachac
-<a name="lspocaml-qanda-transcript"></a>
-# Q&A transcript (unedited)
+<div class="transcript transcript-qanda"><a name="lspocaml-qanda-transcript"></a><h1>Q&A transcript (unedited)</h1>
[[!template text="""[Speaker 0]: I would invite all on the,""" start="00:00:03.540" video="qanda-lspocaml" id="subtitle"]]
[[!template text="""who are currently watching,""" start="00:00:04.600" video="qanda-lspocaml" id="subtitle"]]
@@ -787,7 +749,7 @@ Captioner: sachac
[[!template text="""[Speaker 1]: Oh yeah, definitely.""" start="00:14:21.560" video="qanda-lspocaml" id="subtitle"]]
[[!template text="""[Speaker 0]: Dan?""" start="00:14:23.500" video="qanda-lspocaml" id="subtitle"]]
-Questions or comments? Please e-mail [austin@cutedogs.org](mailto:austin@cutedogs.org?subject=Comment%20for%20EmacsConf%202023%20lspocaml%3A%20Writing%20a%20language%20server%20in%20OCaml%20for%20Emacs%2C%20fun%2C%20and%20profit)
+</div>Questions or comments? Please e-mail [austin@cutedogs.org](mailto:austin@cutedogs.org?subject=Comment%20for%20EmacsConf%202023%20lspocaml%3A%20Writing%20a%20language%20server%20in%20OCaml%20for%20Emacs%2C%20fun%2C%20and%20profit)
<!-- End of emacsconf-publish-after-page -->
diff --git a/2023/info/lspocaml-before.md b/2023/info/lspocaml-before.md
index d3f225c8..cdb010e5 100644
--- a/2023/info/lspocaml-before.md
+++ b/2023/info/lspocaml-before.md
@@ -1,6 +1,6 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
[[!toc ]]
-Format: 17-min talk; Q&A: BigBlueButton conference room
+Format: 17-min talk ; Q&A: BigBlueButton conference room
Status: Q&A to be extracted from the room recordings
@@ -9,7 +9,7 @@ Status: Q&A to be extracted from the room recordings
# Talk
-<div class="vid"><video controls preload="none" id="lspocaml-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="lspocaml-mainVideo" data="""
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-lspocaml"><source src="https://media.emacsconf.org/2023/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="mainVideo-lspocaml" data="""
00:00.000 Introduction
00:16.540 What is Semgrep?
00:40.720 How do we show security bugs early?
@@ -29,10 +29,10 @@ Status: Q&A to be extracted from the room recordings
14:17.880 Adding commands and custom capabilities
15:01.360 Thanks for listening
-"""]]<div></div>Duration: 16:04 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--main.opus">Download --main.opus (8.7MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--main.webm">Download --main.webm (29MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--pad.md">Download --pad.md</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault.pdf">Download .pdf (87MB)</a></li><li><a href="https://toobnix.org/w/jgMzmGyx4H1YDwc5n1eRZu">View on Toobnix</a></li></ul></div></div>
+"""]]<div></div>Duration: 16:04 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2023-lspocaml">Open Etherpad</a></li><li><a href="https://bbb.emacsverse.org/playback/presentation/2.0/playback.html?meetingId=6c21ce25eae19932bf370829bd0e9dcba9e18e27-1701631387142">Play recording from BigBlueButton</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--main.opus">Download --main.opus (8.7MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--main.webm">Download --main.webm (29MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault.pdf">Download .pdf (87MB)</a></li><li><a href="https://toobnix.org/w/jgMzmGyx4H1YDwc5n1eRZu">View on Toobnix</a></li><li><a href="https://www.youtube.com/watch?v=VhUIS55UbQs">View on Youtube</a></li></ul></div></div>
# Q&A
-<div class="vid"><video controls preload="none" id="lspocaml-qanda"><source src="https://media.emacsconf.org/2023/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--answers.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div>Listen to just the audio:<br /><audio controls preload="none" id="lspocaml-qanda-audio" src="https://media.emacsconf.org/2023/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--answers.opus"></audio></div><div></div>Duration: 14:24 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--answers.json">Download --answers.json</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--answers.opus">Download --answers.opus (8.2MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--answers.webm">Download --answers.webm (23MB)</a></li></ul></div></div>
+<div class="vid qanda"><video controls preload="none" id="qanda-lspocaml"><source src="https://media.emacsconf.org/2023/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--answers.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div>Listen to just the audio:<br /><audio controls preload="none" id="qanda-lspocaml-audio" src="https://media.emacsconf.org/2023/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--answers.opus"></audio></div><div></div>Duration: 14:24 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2023-lspocaml">Open Etherpad</a></li><li><a href="https://bbb.emacsverse.org/playback/presentation/2.0/playback.html?meetingId=6c21ce25eae19932bf370829bd0e9dcba9e18e27-1701631387142">Play recording from BigBlueButton</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--answers.json">Download --answers.json</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--answers.opus">Download --answers.opus (8.2MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--answers.webm">Download --answers.webm (23MB)</a></li></ul></div></div>
# Description
<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/info/lspocaml-nav.md b/2023/info/lspocaml-nav.md
index a705e389..73a7feb2 100644
--- a/2023/info/lspocaml-nav.md
+++ b/2023/info/lspocaml-nav.md
@@ -3,5 +3,5 @@
Back to the [[talks]]
Previous by track: <a href="/2023/talks/hyperdrive">hyperdrive.el: Peer-to-peer filesystem in Emacs</a>
Next by track: <a href="/2023/talks/test">What I learned by writing test cases for GNU Hyperbole</a>
-Track: <span class="sched-track Development">Development</span>
+Track: <span class="sched-track Development">Development</span> - <strong><a href="https://emacsconf.org/2023/watch/dev">Watch</a></strong>
</div>
diff --git a/2023/info/matplotllm-after.md b/2023/info/matplotllm-after.md
index 2471df19..b498528d 100644
--- a/2023/info/matplotllm-after.md
+++ b/2023/info/matplotllm-after.md
@@ -1,13 +1,10 @@
<!-- Automatically generated by emacsconf-publish-after-page -->
-<a name="matplotllm-mainVideo-transcript"></a>
-# Transcript
+<div class="transcript transcript-mainVideo"><a name="matplotllm-mainVideo-transcript"></a><h1>Transcript</h1>
-[[!template new="1" text="""Introduction""" start="00:00:00.000" video="mainVideo-matplotllm" id="subtitle"]]
-
-[[!template text="""Hi, my name is Abhinav and I'm going to talk about""" start="00:00:00.000" video="mainVideo-matplotllm" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Introduction""" start="00:00:00.000" video="mainVideo-matplotllm" id="subtitle"]]</div>[[!template text="""Hi, my name is Abhinav and I'm going to talk about""" start="00:00:00.000" video="mainVideo-matplotllm" id="subtitle"]]
[[!template text="""this tool that I've been working on called MatplotLLM.""" start="00:00:03.040" video="mainVideo-matplotllm" id="subtitle"]]
[[!template text="""MatplotLLM is a natural language interface""" start="00:00:06.200" video="mainVideo-matplotllm" id="subtitle"]]
[[!template text="""over matplotlib, which is a library I use a lot""" start="00:00:09.520" video="mainVideo-matplotllm" id="subtitle"]]
@@ -46,9 +43,7 @@
[[!template text="""to get rid of the complexity of the library""" start="00:01:35.200" video="mainVideo-matplotllm" id="subtitle"]]
[[!template text="""by working via an LLM.""" start="00:01:38.480" video="mainVideo-matplotllm" id="subtitle"]]
-[[!template new="1" text="""What is an LLM?""" start="00:01:40.720" video="mainVideo-matplotllm" id="subtitle"]]
-
-[[!template text="""So an LLM is a large language model.""" start="00:01:40.720" video="mainVideo-matplotllm" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""What is an LLM?""" start="00:01:40.720" video="mainVideo-matplotllm" id="subtitle"]]</div>[[!template text="""So an LLM is a large language model.""" start="00:01:40.720" video="mainVideo-matplotllm" id="subtitle"]]
[[!template text="""These are models which are""" start="00:01:43.400" video="mainVideo-matplotllm" id="subtitle"]]
[[!template text="""trained to produce text, generate text.""" start="00:01:45.080" video="mainVideo-matplotllm" id="subtitle"]]
[[!template text="""And just by doing that,""" start="00:01:49.400" video="mainVideo-matplotllm" id="subtitle"]]
@@ -65,9 +60,7 @@
[[!template text="""So that's a problem that it has.""" start="00:02:17.920" video="mainVideo-matplotllm" id="subtitle"]]
[[!template text="""But for this version, we are going to use that.""" start="00:02:21.120" video="mainVideo-matplotllm" id="subtitle"]]
-[[!template new="1" text="""Using this library""" start="00:02:23.600" video="mainVideo-matplotllm" id="subtitle"]]
-
-[[!template text="""Using this library is pretty simple.""" start="00:02:23.600" video="mainVideo-matplotllm" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Using this library""" start="00:02:23.600" video="mainVideo-matplotllm" id="subtitle"]]</div>[[!template text="""Using this library is pretty simple.""" start="00:02:23.600" video="mainVideo-matplotllm" id="subtitle"]]
[[!template text="""You basically require the library""" start="00:02:25.480" video="mainVideo-matplotllm" id="subtitle"]]
[[!template text="""and then you set up your OpenAI API key here.""" start="00:02:27.400" video="mainVideo-matplotllm" id="subtitle"]]
[[!template text="""Then you get a code block""" start="00:02:30.720" video="mainVideo-matplotllm" id="subtitle"]]
@@ -122,9 +115,7 @@
[[!template text="""which is plotting what I specified it to do,""" start="00:05:04.120" video="mainVideo-matplotllm" id="subtitle"]]
[[!template text="""though it looks a little dense.""" start="00:05:08.880" video="mainVideo-matplotllm" id="subtitle"]]
-[[!template new="1" text="""Further instructions""" start="00:05:11.701" video="mainVideo-matplotllm" id="subtitle"]]
-
-[[!template text="""What I can do is""" start="00:05:11.701" video="mainVideo-matplotllm" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Further instructions""" start="00:05:11.701" video="mainVideo-matplotllm" id="subtitle"]]</div>[[!template text="""What I can do is""" start="00:05:11.701" video="mainVideo-matplotllm" id="subtitle"]]
[[!template text="""I can provide further instructions as feedback.""" start="00:05:12.641" video="mainVideo-matplotllm" id="subtitle"]]
[[!template text="""I try to feed back on this. So I can say,""" start="00:05:16.001" video="mainVideo-matplotllm" id="subtitle"]]
[[!template text="""&quot;Can you only show points where year is the multiple of 50?&quot;""" start="00:05:18.401" video="mainVideo-matplotllm" id="subtitle"]]
@@ -175,9 +166,7 @@
[[!template text="""so probably it could be done better,""" start="00:07:56.680" video="mainVideo-matplotllm" id="subtitle"]]
[[!template text="""but the box is removed.""" start="00:07:58.560" video="mainVideo-matplotllm" id="subtitle"]]
-[[!template new="1" text="""Room for improvement""" start="00:08:00.160" video="mainVideo-matplotllm" id="subtitle"]]
-
-[[!template text="""Now, as you can see, the system is...""" start="00:08:00.160" video="mainVideo-matplotllm" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Room for improvement""" start="00:08:00.160" video="mainVideo-matplotllm" id="subtitle"]]</div>[[!template text="""Now, as you can see, the system is...""" start="00:08:00.160" video="mainVideo-matplotllm" id="subtitle"]]
[[!template text="""You will be able to see this""" start="00:08:03.360" video="mainVideo-matplotllm" id="subtitle"]]
[[!template text="""that the system is not really robust.""" start="00:08:04.880" video="mainVideo-matplotllm" id="subtitle"]]
[[!template text="""So the GitHub repository has some examples""" start="00:08:07.480" video="mainVideo-matplotllm" id="subtitle"]]
@@ -217,7 +206,7 @@
[[!template text="""You can find more details in the repository link.""" start="00:09:27.600" video="mainVideo-matplotllm" id="subtitle"]]
[[!template text="""Thank you for listening. Goodbye.""" start="00:09:29.760" video="mainVideo-matplotllm" id="subtitle"]]
-
+</div>
Captioner: sachac
diff --git a/2023/info/matplotllm-before.md b/2023/info/matplotllm-before.md
index 8286a486..3359850a 100644
--- a/2023/info/matplotllm-before.md
+++ b/2023/info/matplotllm-before.md
@@ -1,19 +1,19 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
[[!toc ]]
-Format: 10-min talk; Q&A: Etherpad
+Format: 10-min talk ; Q&A: Etherpad
Status: All done
-<div class="vid"><video controls preload="none" id="matplotllm-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-matplotllm--matplotllm-iterative-natural-language-data-visualization-in-orgbabel--abhinav-tushar--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-matplotllm--matplotllm-iterative-natural-language-data-visualization-in-orgbabel--abhinav-tushar--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-matplotllm--matplotllm-iterative-natural-language-data-visualization-in-orgbabel--abhinav-tushar--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="matplotllm-mainVideo" data="""
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-matplotllm"><source src="https://media.emacsconf.org/2023/emacsconf-2023-matplotllm--matplotllm-iterative-natural-language-data-visualization-in-orgbabel--abhinav-tushar--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-matplotllm--matplotllm-iterative-natural-language-data-visualization-in-orgbabel--abhinav-tushar--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-matplotllm--matplotllm-iterative-natural-language-data-visualization-in-orgbabel--abhinav-tushar--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="mainVideo-matplotllm" data="""
00:00.000 Introduction
01:40.720 What is an LLM?
02:23.600 Using this library
05:11.701 Further instructions
08:00.160 Room for improvement
-"""]]<div></div>Duration: 09:34 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-matplotllm--matplotllm-iterative-natural-language-data-visualization-in-orgbabel--abhinav-tushar--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-matplotllm--matplotllm-iterative-natural-language-data-visualization-in-orgbabel--abhinav-tushar--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-matplotllm--matplotllm-iterative-natural-language-data-visualization-in-orgbabel--abhinav-tushar--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-matplotllm--matplotllm-iterative-natural-language-data-visualization-in-orgbabel--abhinav-tushar--main.opus">Download --main.opus (5MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-matplotllm--matplotllm-iterative-natural-language-data-visualization-in-orgbabel--abhinav-tushar--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-matplotllm--matplotllm-iterative-natural-language-data-visualization-in-orgbabel--abhinav-tushar--main.webm">Download --main.webm (49MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-matplotllm--matplotllm-iterative-natural-language-data-visualization-in-orgbabel--abhinav-tushar--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-matplotllm--matplotllm-iterative-natural-language-data-visualization-in-orgbabel--abhinav-tushar--pad.md">Download --pad.md</a></li><li><a href="https://toobnix.org/w/7bwq1vAqYzY24iEMYAdcB1">View on Toobnix</a></li></ul></div></div>
+"""]]<div></div>Duration: 09:34 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2023-matplotllm">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-matplotllm--matplotllm-iterative-natural-language-data-visualization-in-orgbabel--abhinav-tushar--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-matplotllm--matplotllm-iterative-natural-language-data-visualization-in-orgbabel--abhinav-tushar--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-matplotllm--matplotllm-iterative-natural-language-data-visualization-in-orgbabel--abhinav-tushar--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-matplotllm--matplotllm-iterative-natural-language-data-visualization-in-orgbabel--abhinav-tushar--main.opus">Download --main.opus (5MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-matplotllm--matplotllm-iterative-natural-language-data-visualization-in-orgbabel--abhinav-tushar--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-matplotllm--matplotllm-iterative-natural-language-data-visualization-in-orgbabel--abhinav-tushar--main.webm">Download --main.webm (49MB)</a></li><li><a href="https://toobnix.org/w/7bwq1vAqYzY24iEMYAdcB1">View on Toobnix</a></li><li><a href="https://youtu.be/LhhFA5i_Os4">View on Youtube</a></li></ul></div></div>
# Description
<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/info/matplotllm-nav.md b/2023/info/matplotllm-nav.md
index 340c24f0..ea8b8b70 100644
--- a/2023/info/matplotllm-nav.md
+++ b/2023/info/matplotllm-nav.md
@@ -3,5 +3,5 @@
Back to the [[talks]]
Previous by track: <a href="/2023/talks/sharing">Sharing Emacs is Caring Emacs: Emacs education and why I embraced video</a>
Next by track: <a href="/2023/talks/voice">Enhancing productivity with voice computing</a>
-Track: <span class="sched-track Development">Development</span>
+Track: <span class="sched-track Development">Development</span> - <strong><a href="https://emacsconf.org/2023/watch/dev">Watch</a></strong>
</div>
diff --git a/2023/info/mentor-after.md b/2023/info/mentor-after.md
index f51dfa88..80185de8 100644
--- a/2023/info/mentor-after.md
+++ b/2023/info/mentor-after.md
@@ -1,13 +1,10 @@
<!-- Automatically generated by emacsconf-publish-after-page -->
-<a name="mentor-mainVideo-transcript"></a>
-# Transcript
+<div class="transcript transcript-mainVideo"><a name="mentor-mainVideo-transcript"></a><h1>Transcript</h1>
-[[!template new="1" text="""Introduction""" start="00:00:01.380" video="mainVideo-mentor" id="subtitle"]]
-
-[[!template text="""Hi everyone, my name is Jeremy Friesen, pronouns are he/him,""" start="00:00:01.380" video="mainVideo-mentor" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Introduction""" start="00:00:01.380" video="mainVideo-mentor" id="subtitle"]]</div>[[!template text="""Hi everyone, my name is Jeremy Friesen, pronouns are he/him,""" start="00:00:01.380" video="mainVideo-mentor" id="subtitle"]]
[[!template text="""and today I'll be talking about""" start="00:00:06.320" video="mainVideo-mentor" id="subtitle"]]
[[!template text="""mentoring VS Coders as an Emacs-ian.""" start="00:00:07.880" video="mainVideo-mentor" id="subtitle"]]
[[!template text="""A little bit of background, since 2015, I've mentored""" start="00:00:11.520" video="mainVideo-mentor" id="subtitle"]]
@@ -16,17 +13,13 @@
[[!template text="""oftentimes from boot camps.""" start="00:00:19.240" video="mainVideo-mentor" id="subtitle"]]
[[!template text="""I've also managed a couple of small software development teams.""" start="00:00:21.740" video="mainVideo-mentor" id="subtitle"]]
-[[!template new="1" text="""Framing approaches""" start="00:00:26.740" video="mainVideo-mentor" id="subtitle"]]
-
-[[!template text="""So I want to think about mentoring and the framing approaches.""" start="00:00:26.740" video="mainVideo-mentor" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Framing approaches""" start="00:00:26.740" video="mainVideo-mentor" id="subtitle"]]</div>[[!template text="""So I want to think about mentoring and the framing approaches.""" start="00:00:26.740" video="mainVideo-mentor" id="subtitle"]]
[[!template text="""We all don't know what we don't know.""" start="00:00:30.600" video="mainVideo-mentor" id="subtitle"]]
[[!template text="""So while mentoring, I like to be curious---asking questions,""" start="00:00:32.940" video="mainVideo-mentor" id="subtitle"]]
[[!template text="""I like to be visible,""" start="00:00:36.420" video="mainVideo-mentor" id="subtitle"]]
[[!template text="""and I also like to pair so that we can share.""" start="00:00:37.660" video="mainVideo-mentor" id="subtitle"]]
-[[!template new="1" text="""What are you looking to learn?""" start="00:00:41.940" video="mainVideo-mentor" id="subtitle"]]
-
-[[!template text="""When I start, I like to ask the following type of question:""" start="00:00:41.940" video="mainVideo-mentor" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""What are you looking to learn?""" start="00:00:41.940" video="mainVideo-mentor" id="subtitle"]]</div>[[!template text="""When I start, I like to ask the following type of question:""" start="00:00:41.940" video="mainVideo-mentor" id="subtitle"]]
[[!template text="""&quot;What have you been wanting to learn more of,""" start="00:00:45.300" video="mainVideo-mentor" id="subtitle"]]
[[!template text="""get better at, and improve on?&quot;""" start="00:00:47.120" video="mainVideo-mentor" id="subtitle"]]
[[!template text="""Then I like to ask further questions to get an understanding""" start="00:00:49.360" video="mainVideo-mentor" id="subtitle"]]
@@ -36,9 +29,7 @@
[[!template text="""&quot;where are you getting stuck,&quot;""" start="00:01:00.140" video="mainVideo-mentor" id="subtitle"]]
[[!template text="""and &quot;if you change one thing, what would it be?&quot;""" start="00:01:01.420" video="mainVideo-mentor" id="subtitle"]]
-[[!template new="1" text="""Make the work visible""" start="00:01:06.000" video="mainVideo-mentor" id="subtitle"]]
-
-[[!template text="""So like many people, I shifted to remote work in 2020,""" start="00:01:06.000" video="mainVideo-mentor" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Make the work visible""" start="00:01:06.000" video="mainVideo-mentor" id="subtitle"]]</div>[[!template text="""So like many people, I shifted to remote work in 2020,""" start="00:01:06.000" video="mainVideo-mentor" id="subtitle"]]
[[!template text="""and I've noticed a higher collaboration in remote work,""" start="00:01:09.840" video="mainVideo-mentor" id="subtitle"]]
[[!template text="""when folks make their work visible.""" start="00:01:13.160" video="mainVideo-mentor" id="subtitle"]]
[[!template text="""So to do that I host office hours,""" start="00:01:15.920" video="mainVideo-mentor" id="subtitle"]]
@@ -46,9 +37,7 @@
[[!template text="""and I'll open up a Slack huddle and just code by myself,""" start="00:01:20.680" video="mainVideo-mentor" id="subtitle"]]
[[!template text="""but let folks know, please hop in.""" start="00:01:23.440" video="mainVideo-mentor" id="subtitle"]]
-[[!template new="1" text="""Hop in and be curious""" start="00:01:29.320" video="mainVideo-mentor" id="subtitle"]]
-
-[[!template text="""I like to pay attention to other huddles that start.""" start="00:01:29.320" video="mainVideo-mentor" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Hop in and be curious""" start="00:01:29.320" video="mainVideo-mentor" id="subtitle"]]</div>[[!template text="""I like to pay attention to other huddles that start.""" start="00:01:29.320" video="mainVideo-mentor" id="subtitle"]]
[[!template text="""If they're going still for, like, 45 minutes or so,""" start="00:01:32.040" video="mainVideo-mentor" id="subtitle"]]
[[!template text="""I'll hop in and say hello.""" start="00:01:35.240" video="mainVideo-mentor" id="subtitle"]]
[[!template text="""It's even odds that they're moving along just fine""" start="00:01:36.800" video="mainVideo-mentor" id="subtitle"]]
@@ -66,9 +55,7 @@
[[!template text="""with yes... an agenda, but just to say hi,""" start="00:02:07.160" video="mainVideo-mentor" id="subtitle"]]
[[!template text="""is crucial to help the team members move along.""" start="00:02:10.360" video="mainVideo-mentor" id="subtitle"]]
-[[!template new="1" text="""Pairing is for sharing""" start="00:02:15.880" video="mainVideo-mentor" id="subtitle"]]
-
-[[!template text="""Pairing is for sharing.""" start="00:02:15.880" video="mainVideo-mentor" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Pairing is for sharing""" start="00:02:15.880" video="mainVideo-mentor" id="subtitle"]]</div>[[!template text="""Pairing is for sharing.""" start="00:02:15.880" video="mainVideo-mentor" id="subtitle"]]
[[!template text="""When I pair, I like to let others drive.""" start="00:02:17.240" video="mainVideo-mentor" id="subtitle"]]
[[!template text="""They're typing and working to resolve the problem.""" start="00:02:19.920" video="mainVideo-mentor" id="subtitle"]]
[[!template text="""I'm giving guidance, asking questions,""" start="00:02:22.240" video="mainVideo-mentor" id="subtitle"]]
@@ -87,9 +74,7 @@
[[!template text="""I could learn?&quot;""" start="00:02:58.760" video="mainVideo-mentor" id="subtitle"]]
[[!template text="""I'm working on getting to that point.""" start="00:03:00.960" video="mainVideo-mentor" id="subtitle"]]
-[[!template new="1" text="""Editor functions""" start="00:03:03.860" video="mainVideo-mentor" id="subtitle"]]
-
-[[!template text="""While pairing, I like to pay attention""" start="00:03:03.860" video="mainVideo-mentor" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Editor functions""" start="00:03:03.860" video="mainVideo-mentor" id="subtitle"]]</div>[[!template text="""While pairing, I like to pay attention""" start="00:03:03.860" video="mainVideo-mentor" id="subtitle"]]
[[!template text="""to how folks handle the following.""" start="00:03:05.200" video="mainVideo-mentor" id="subtitle"]]
[[!template text="""Where do they want to go?""" start="00:03:07.440" video="mainVideo-mentor" id="subtitle"]]
[[!template text="""How do they get there?""" start="00:03:08.560" video="mainVideo-mentor" id="subtitle"]]
@@ -99,9 +84,7 @@
[[!template text="""and I assume that VS Code can do something similar.""" start="00:03:15.240" video="mainVideo-mentor" id="subtitle"]]
[[!template text="""It's a matter of helping the mentees find those packages and plugins.""" start="00:03:17.400" video="mainVideo-mentor" id="subtitle"]]
-[[!template new="1" text="""Where do they want to go?""" start="00:03:23.240" video="mainVideo-mentor" id="subtitle"]]
-
-[[!template text="""Where to go?""" start="00:03:23.240" video="mainVideo-mentor" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Where do they want to go?""" start="00:03:23.240" video="mainVideo-mentor" id="subtitle"]]</div>[[!template text="""Where to go?""" start="00:03:23.240" video="mainVideo-mentor" id="subtitle"]]
[[!template text="""Search within a project.""" start="00:03:24.240" video="mainVideo-mentor" id="subtitle"]]
[[!template text="""Everybody knows about this, but one thing""" start="00:03:25.760" video="mainVideo-mentor" id="subtitle"]]
[[!template text="""that has been really critical for me""" start="00:03:28.000" video="mainVideo-mentor" id="subtitle"]]
@@ -132,9 +115,7 @@
[[!template text="""I can type `p` and jump to a different project,""" start="00:04:43.080" video="mainVideo-mentor" id="subtitle"]]
[[!template text="""so it's a quick navigation tool that I've not seen in VS Code.""" start="00:04:47.720" video="mainVideo-mentor" id="subtitle"]]
-[[!template new="1" text="""How do they get there?""" start="00:04:53.440" video="mainVideo-mentor" id="subtitle"]]
-
-[[!template text="""Next up is how do they get there?""" start="00:04:53.440" video="mainVideo-mentor" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""How do they get there?""" start="00:04:53.440" video="mainVideo-mentor" id="subtitle"]]</div>[[!template text="""Next up is how do they get there?""" start="00:04:53.440" video="mainVideo-mentor" id="subtitle"]]
[[!template text="""I like to use LSP for the languages,""" start="00:04:56.520" video="mainVideo-mentor" id="subtitle"]]
[[!template text="""and I bound `M-.` to this""" start="00:04:58.960" video="mainVideo-mentor" id="subtitle"]]
[[!template text="""and jump back and forth to definitions.""" start="00:05:02.880" video="mainVideo-mentor" id="subtitle"]]
@@ -148,9 +129,7 @@
[[!template text="""especially in Ruby, there's an idiom for that.""" start="00:05:28.520" video="mainVideo-mentor" id="subtitle"]]
[[!template text="""There is plugins in VS Code that does this correctly.""" start="00:05:32.120" video="mainVideo-mentor" id="subtitle"]]
-[[!template new="1" text="""Here they are, now what?""" start="00:05:36.640" video="mainVideo-mentor" id="subtitle"]]
-
-[[!template text="""Next up, now I'm here, what do I do?""" start="00:05:36.640" video="mainVideo-mentor" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Here they are, now what?""" start="00:05:36.640" video="mainVideo-mentor" id="subtitle"]]</div>[[!template text="""Next up, now I'm here, what do I do?""" start="00:05:36.640" video="mainVideo-mentor" id="subtitle"]]
[[!template text="""Word completion, Emacs just knocks everything out of the park:""" start="00:05:39.400" video="mainVideo-mentor" id="subtitle"]]
[[!template text="""`dabbrev`, `templates`, `hippie-expand`, `completion-at-point`.""" start="00:05:44.600" video="mainVideo-mentor" id="subtitle"]]
[[!template text="""Sometimes it just hurts to watch people type stuff""" start="00:05:48.200" video="mainVideo-mentor" id="subtitle"]]
@@ -183,9 +162,7 @@
[[!template text="""but I'm used to the Textmate in it.""" start="00:07:01.640" video="mainVideo-mentor" id="subtitle"]]
[[!template text="""I just love it.""" start="00:07:03.840" video="mainVideo-mentor" id="subtitle"]]
-[[!template new="1" text="""How do they summarize?""" start="00:07:06.640" video="mainVideo-mentor" id="subtitle"]]
-
-[[!template text="""Next up is how they summarize.""" start="00:07:06.640" video="mainVideo-mentor" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""How do they summarize?""" start="00:07:06.640" video="mainVideo-mentor" id="subtitle"]]</div>[[!template text="""Next up is how they summarize.""" start="00:07:06.640" video="mainVideo-mentor" id="subtitle"]]
[[!template text="""I've seen a lot of bootcamp graduates write commit messages""" start="00:07:08.680" video="mainVideo-mentor" id="subtitle"]]
[[!template text="""by going to the command line.""" start="00:07:11.720" video="mainVideo-mentor" id="subtitle"]]
[[!template text="""In my experience, commit messages written in the command line""" start="00:07:14.380" video="mainVideo-mentor" id="subtitle"]]
@@ -200,14 +177,10 @@
[[!template text="""the interface for VS Code's commit is trash.""" start="00:07:35.920" video="mainVideo-mentor" id="subtitle"]]
[[!template text="""It is why I stepped away from VS Code when I was exploring editors.""" start="00:07:38.960" video="mainVideo-mentor" id="subtitle"]]
-[[!template new="1" text="""General strategies""" start="00:07:44.440" video="mainVideo-mentor" id="subtitle"]]
-
-[[!template text="""Next up, my goal is to encourage folks to use editors for writing,""" start="00:07:44.440" video="mainVideo-mentor" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""General strategies""" start="00:07:44.440" video="mainVideo-mentor" id="subtitle"]]</div>[[!template text="""Next up, my goal is to encourage folks to use editors for writing,""" start="00:07:44.440" video="mainVideo-mentor" id="subtitle"]]
[[!template text="""to think about owning that tool.""" start="00:07:48.440" video="mainVideo-mentor" id="subtitle"]]
-[[!template new="1" text="""Commit to one item of learning each week""" start="00:07:52.060" video="mainVideo-mentor" id="subtitle"]]
-
-[[!template text="""I have them try to learn one thing a week.""" start="00:07:52.060" video="mainVideo-mentor" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Commit to one item of learning each week""" start="00:07:52.060" video="mainVideo-mentor" id="subtitle"]]</div>[[!template text="""I have them try to learn one thing a week.""" start="00:07:52.060" video="mainVideo-mentor" id="subtitle"]]
[[!template text="""Maybe they aren't going to learn it,""" start="00:07:54.680" video="mainVideo-mentor" id="subtitle"]]
[[!template text="""but just not to overwhelm them""" start="00:07:55.920" video="mainVideo-mentor" id="subtitle"]]
[[!template text="""and find those high-value things.""" start="00:07:57.800" video="mainVideo-mentor" id="subtitle"]]
@@ -218,9 +191,7 @@
[[!template text="""what you're trying to test and what you're trying to define,""" start="00:08:12.760" video="mainVideo-mentor" id="subtitle"]]
[[!template text="""which can get lost if you do the tree navigation.""" start="00:08:15.480" video="mainVideo-mentor" id="subtitle"]]
-[[!template new="1" text="""Practice within your knowledge domain""" start="00:08:18.960" video="mainVideo-mentor" id="subtitle"]]
-
-[[!template text="""Also I encourage people to practice their domain knowledge.""" start="00:08:18.960" video="mainVideo-mentor" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Practice within your knowledge domain""" start="00:08:18.960" video="mainVideo-mentor" id="subtitle"]]</div>[[!template text="""Also I encourage people to practice their domain knowledge.""" start="00:08:18.960" video="mainVideo-mentor" id="subtitle"]]
[[!template text="""I learned a lot about programming by doing a bunch of things""" start="00:08:22.880" video="mainVideo-mentor" id="subtitle"]]
[[!template text="""related to RPGs---role-playing games.""" start="00:08:27.160" video="mainVideo-mentor" id="subtitle"]]
[[!template text="""I did this previously in Ruby---dice rollers, note takers,""" start="00:08:30.020" video="mainVideo-mentor" id="subtitle"]]
@@ -229,9 +200,7 @@
[[!template text="""and then explore how I code""" start="00:08:40.520" video="mainVideo-mentor" id="subtitle"]]
[[!template text="""and how I can implement things differently.""" start="00:08:42.000" video="mainVideo-mentor" id="subtitle"]]
-[[!template new="1" text="""Note-taking""" start="00:08:47.120" video="mainVideo-mentor" id="subtitle"]]
-
-[[!template text="""Note-taking: pay attention to how folks create a fleeting note.""" start="00:08:47.120" video="mainVideo-mentor" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Note-taking""" start="00:08:47.120" video="mainVideo-mentor" id="subtitle"]]</div>[[!template text="""Note-taking: pay attention to how folks create a fleeting note.""" start="00:08:47.120" video="mainVideo-mentor" id="subtitle"]]
[[!template text="""It can be excruciating as they try to figure out""" start="00:08:51.240" video="mainVideo-mentor" id="subtitle"]]
[[!template text="""&quot;where am I going to put this?&quot;""" start="00:08:54.640" video="mainVideo-mentor" id="subtitle"]]
[[!template text="""&quot;What file?&quot;""" start="00:08:55.600" video="mainVideo-mentor" id="subtitle"]]
@@ -239,9 +208,7 @@
[[!template text="""Emacs, we have the *scratch* buffer or anything else,""" start="00:08:57.660" video="mainVideo-mentor" id="subtitle"]]
[[!template text="""but ask them about their note-taking habits""" start="00:09:01.760" video="mainVideo-mentor" id="subtitle"]]
-[[!template new="1" text="""Help them navigate the proprietary software tar pits""" start="00:09:07.120" video="mainVideo-mentor" id="subtitle"]]
-
-[[!template text="""and help them navigate the proprietary software tar pits.""" start="00:09:07.120" video="mainVideo-mentor" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Help them navigate the proprietary software tar pits""" start="00:09:07.120" video="mainVideo-mentor" id="subtitle"]]</div>[[!template text="""and help them navigate the proprietary software tar pits.""" start="00:09:07.120" video="mainVideo-mentor" id="subtitle"]]
[[!template text="""We know that anything that is venture-capital funded""" start="00:09:11.640" video="mainVideo-mentor" id="subtitle"]]
[[!template text="""will eventually collapse.""" start="00:09:14.360" video="mainVideo-mentor" id="subtitle"]]
[[!template text="""We know that things that don't have a sustainable business model""" start="00:09:16.040" video="mainVideo-mentor" id="subtitle"]]
@@ -252,14 +219,10 @@
[[!template text="""or are they things that are kind of ephemeral?""" start="00:09:30.640" video="mainVideo-mentor" id="subtitle"]]
[[!template text="""And then help them find the thing that makes sense for them.""" start="00:09:33.120" video="mainVideo-mentor" id="subtitle"]]
-[[!template new="1" text="""Help show the joy of holisting computering""" start="00:09:38.520" video="mainVideo-mentor" id="subtitle"]]
-
-[[!template text="""Put another way, I want people to think holistically""" start="00:09:38.520" video="mainVideo-mentor" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Help show the joy of holisting computering""" start="00:09:38.520" video="mainVideo-mentor" id="subtitle"]]</div>[[!template text="""Put another way, I want people to think holistically""" start="00:09:38.520" video="mainVideo-mentor" id="subtitle"]]
[[!template text="""about their generalized &quot;computering&quot; environment.""" start="00:09:43.240" video="mainVideo-mentor" id="subtitle"]]
-[[!template new="1" text="""Playing is for staying""" start="00:09:47.740" video="mainVideo-mentor" id="subtitle"]]
-
-[[!template text="""And I also think about the reason why""" start="00:09:47.740" video="mainVideo-mentor" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Playing is for staying""" start="00:09:47.740" video="mainVideo-mentor" id="subtitle"]]</div>[[!template text="""And I also think about the reason why""" start="00:09:47.740" video="mainVideo-mentor" id="subtitle"]]
[[!template text="""I've stayed a software developer for 25-years plus""" start="00:09:50.080" video="mainVideo-mentor" id="subtitle"]]
[[!template text="""is because I approach all of this as play and storytelling.""" start="00:09:53.680" video="mainVideo-mentor" id="subtitle"]]
[[!template text="""Sometimes happy byproduct is that I ship features and documentation""" start="00:09:58.000" video="mainVideo-mentor" id="subtitle"]]
@@ -268,9 +231,7 @@
[[!template text="""Instead, I'm doing my best to show a myriad of reasons""" start="00:10:07.960" video="mainVideo-mentor" id="subtitle"]]
[[!template text="""for why folks should consider Emacs.""" start="00:10:10.720" video="mainVideo-mentor" id="subtitle"]]
-[[!template new="1" text="""Conclusion""" start="00:10:14.900" video="mainVideo-mentor" id="subtitle"]]
-
-[[!template text="""In conclusion, ask questions.""" start="00:10:14.900" video="mainVideo-mentor" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Conclusion""" start="00:10:14.900" video="mainVideo-mentor" id="subtitle"]]</div>[[!template text="""In conclusion, ask questions.""" start="00:10:14.900" video="mainVideo-mentor" id="subtitle"]]
[[!template text="""Find a person who is a VS Coder and just say,""" start="00:10:18.740" video="mainVideo-mentor" id="subtitle"]]
[[!template text="""&quot;hey, I learned something new.&quot;""" start="00:10:22.400" video="mainVideo-mentor" id="subtitle"]]
[[!template text="""We play this game all the time, me and my coworker Kirk.""" start="00:10:23.880" video="mainVideo-mentor" id="subtitle"]]
@@ -281,12 +242,11 @@
[[!template text="""but then again, that's Emacs.""" start="00:10:36.680" video="mainVideo-mentor" id="subtitle"]]
[[!template text="""Thank you, and I look forward to your questions.""" start="00:10:38.720" video="mainVideo-mentor" id="subtitle"]]
-
+</div>
Captioner: hannah
-<a name="mentor-qanda-transcript"></a>
-# Q&A transcript (unedited)
+<div class="transcript transcript-qanda"><a name="mentor-qanda-transcript"></a><h1>Q&A transcript (unedited)</h1>
[[!template text="""[Speaker 0]: 2 seconds. And I think we are live.""" start="00:00:09.480" video="qanda-mentor" id="subtitle"]]
[[!template text="""Hi, Jeremy, how are you doing?""" start="00:00:10.760" video="qanda-mentor" id="subtitle"]]
@@ -784,9 +744,7 @@ Captioner: hannah
[[!template text="""[Speaker 1]: Absolutely. Thank you.""" start="00:23:19.040" video="qanda-mentor" id="subtitle"]]
[[!template text="""[Speaker 0]: Bye-bye. Bye.""" start="00:23:21.220" video="qanda-mentor" id="subtitle"]]
-[[!template new="1" text="""Start of section to review""" start="00:23:26.400" video="qanda-mentor" id="subtitle"]]
-
-[[!template text="""[Speaker 2]: See you. Hello. One of the things with Emacs is""" start="00:23:26.400" video="qanda-mentor" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Start of section to review""" start="00:23:26.400" video="qanda-mentor" id="subtitle"]]</div>[[!template text="""[Speaker 2]: See you. Hello. One of the things with Emacs is""" start="00:23:26.400" video="qanda-mentor" id="subtitle"]]
[[!template text="""it's not... It's like when you change the""" start="00:23:28.740" video="qanda-mentor" id="subtitle"]]
[[!template text="""file management, you just change very,""" start="00:23:30.860" video="qanda-mentor" id="subtitle"]]
[[!template text="""very small amounts of what exactly you need,""" start="00:23:33.480" video="qanda-mentor" id="subtitle"]]
@@ -1786,7 +1744,7 @@ Captioner: hannah
[[!template text="""And now have a good rest of your Sunday.""" start="01:13:41.760" video="qanda-mentor" id="subtitle"]]
[[!template text="""Bye.""" start="01:13:43.100" video="qanda-mentor" id="subtitle"]]
-Questions or comments? Please e-mail [jeremy@jeremyfriesen.com](mailto:jeremy@jeremyfriesen.com?subject=Comment%20for%20EmacsConf%202023%20mentor%3A%20Mentoring%20VS-Coders%20as%20an%20Emacsian%20%28or%20How%20to%20show%20not%20tell%20people%20about%20the%20wonders%20of%20Emacs%29)
+</div>Questions or comments? Please e-mail [jeremy@jeremyfriesen.com](mailto:jeremy@jeremyfriesen.com?subject=Comment%20for%20EmacsConf%202023%20mentor%3A%20Mentoring%20VS-Coders%20as%20an%20Emacsian%20%28or%20How%20to%20show%20not%20tell%20people%20about%20the%20wonders%20of%20Emacs%29)
<!-- End of emacsconf-publish-after-page -->
diff --git a/2023/info/mentor-before.md b/2023/info/mentor-before.md
index bcf457eb..114baf27 100644
--- a/2023/info/mentor-before.md
+++ b/2023/info/mentor-before.md
@@ -1,6 +1,6 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
[[!toc ]]
-Format: 11-min talk; Q&A: BigBlueButton conference room
+Format: 11-min talk ; Q&A: BigBlueButton conference room
Status: TO_INDEX_QA
@@ -9,10 +9,10 @@ Status: TO_INDEX_QA
# Talk
-<div class="vid"><video controls preload="none" id="mentor-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 10:44 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--main.opus">Download --main.opus (6.2MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--main.webm">Download --main.webm (26MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--pad.md">Download --pad.md</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen.pdf">Download .pdf</a></li><li><a href="https://toobnix.org/w/sV9eKtGiPYZi5urxjoqerv">View on Toobnix</a></li></ul></div></div>
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-mentor"><source src="https://media.emacsconf.org/2023/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 10:44 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2023-mentor">Open Etherpad</a></li><li><a href="https://bbb.emacsverse.org/playback/presentation/2.0/playback.html?meetingId=d3faf3bd5abcc5316e6a997b22b29d962480ad5c-1701630488401">Play recording from BigBlueButton</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--main.opus">Download --main.opus (6.2MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--main.webm">Download --main.webm (26MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen.pdf">Download .pdf</a></li><li><a href="https://toobnix.org/w/sV9eKtGiPYZi5urxjoqerv">View on Toobnix</a></li><li><a href="https://www.youtube.com/watch?v=44rt1f1llhQ">View on Youtube</a></li></ul></div></div>
# Q&A
-<div class="vid"><video controls preload="none" id="mentor-qanda"><source src="https://media.emacsconf.org/2023/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--answers.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div>Listen to just the audio:<br /><audio controls preload="none" id="mentor-qanda-audio" src="https://media.emacsconf.org/2023/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--answers.opus"></audio></div><div></div>Duration: 1:13:43 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--answers--trimmed.webm">Download --answers--trimmed.webm (176MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--answers.opus">Download --answers.opus (25MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--answers.webm">Download --answers.webm (176MB)</a></li></ul></div></div>
+<div class="vid qanda"><video controls preload="none" id="qanda-mentor"><source src="https://media.emacsconf.org/2023/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--answers.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div>Listen to just the audio:<br /><audio controls preload="none" id="qanda-mentor-audio" src="https://media.emacsconf.org/2023/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--answers.opus"></audio></div><div></div>Duration: 1:13:43 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2023-mentor">Open Etherpad</a></li><li><a href="https://bbb.emacsverse.org/playback/presentation/2.0/playback.html?meetingId=d3faf3bd5abcc5316e6a997b22b29d962480ad5c-1701630488401">Play recording from BigBlueButton</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--answers--trimmed.webm">Download --answers--trimmed.webm (176MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--answers.opus">Download --answers.opus (25MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--answers.webm">Download --answers.webm (176MB)</a></li></ul></div></div>
# Description
<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/info/mentor-nav.md b/2023/info/mentor-nav.md
index 86a45646..66cf8ef4 100644
--- a/2023/info/mentor-nav.md
+++ b/2023/info/mentor-nav.md
@@ -3,5 +3,5 @@
Back to the [[talks]]
Previous by track: <a href="/2023/talks/steno">Programming with steno</a>
Next by track: <a href="/2023/talks/web">Emacs saves the Web (maybe)</a>
-Track: <span class="sched-track General">General</span>
+Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2023/watch/gen">Watch</a></strong>
</div>
diff --git a/2023/info/nabokov-after.md b/2023/info/nabokov-after.md
index 0e1ccfe4..1e45bfcc 100644
--- a/2023/info/nabokov-after.md
+++ b/2023/info/nabokov-after.md
@@ -1,13 +1,10 @@
<!-- Automatically generated by emacsconf-publish-after-page -->
-<a name="nabokov-mainVideo-transcript"></a>
-# Transcript
+<div class="transcript transcript-mainVideo"><a name="nabokov-mainVideo-transcript"></a><h1>Transcript</h1>
-[[!template new="1" text="""Introduction""" start="00:00:00.000" video="mainVideo-nabokov" id="subtitle"]]
-
-[[!template text="""Hello, fellow Emacs enthusiasts.""" start="00:00:00.000" video="mainVideo-nabokov" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Introduction""" start="00:00:00.000" video="mainVideo-nabokov" id="subtitle"]]</div>[[!template text="""Hello, fellow Emacs enthusiasts.""" start="00:00:00.000" video="mainVideo-nabokov" id="subtitle"]]
[[!template text="""My name is Edmund Jorgensen.""" start="00:00:05.240" video="mainVideo-nabokov" id="subtitle"]]
[[!template text="""I'm a software engineer by day,""" start="00:00:06.800" video="mainVideo-nabokov" id="subtitle"]]
[[!template text="""but by night I love to write novels,""" start="00:00:08.520" video="mainVideo-nabokov" id="subtitle"]]
@@ -32,9 +29,7 @@
[[!template text="""with an interest in literature or Emacs""" start="00:00:42.040" video="mainVideo-nabokov" id="subtitle"]]
[[!template text="""will find something to take away.""" start="00:00:44.080" video="mainVideo-nabokov" id="subtitle"]]
-[[!template new="1" text="""Nabokov's process of writing novels""" start="00:00:45.760" video="mainVideo-nabokov" id="subtitle"]]
-
-[[!template text="""So let's get to it.""" start="00:00:45.760" video="mainVideo-nabokov" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Nabokov's process of writing novels""" start="00:00:45.760" video="mainVideo-nabokov" id="subtitle"]]</div>[[!template text="""So let's get to it.""" start="00:00:45.760" video="mainVideo-nabokov" id="subtitle"]]
[[!template text="""Here's a picture of a man lying on a bed,""" start="00:00:51.120" video="mainVideo-nabokov" id="subtitle"]]
[[!template text="""writing something on an index card.""" start="00:00:53.920" video="mainVideo-nabokov" id="subtitle"]]
[[!template text="""If we didn't know any better,""" start="00:00:56.000" video="mainVideo-nabokov" id="subtitle"]]
@@ -77,9 +72,7 @@
[[!template text="""to three of the most pressing practical problems""" start="00:02:15.200" video="mainVideo-nabokov" id="subtitle"]]
[[!template text="""that every novelist faces.""" start="00:02:18.000" video="mainVideo-nabokov" id="subtitle"]]
-[[!template new="1" text="""Three practical problems novelists face""" start="00:02:24.080" video="mainVideo-nabokov" id="subtitle"]]
-
-[[!template text="""Writing a good novel""" start="00:02:24.080" video="mainVideo-nabokov" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Three practical problems novelists face""" start="00:02:24.080" video="mainVideo-nabokov" id="subtitle"]]</div>[[!template text="""Writing a good novel""" start="00:02:24.080" video="mainVideo-nabokov" id="subtitle"]]
[[!template text="""is artistically difficult, of course.""" start="00:02:25.307" video="mainVideo-nabokov" id="subtitle"]]
[[!template text="""You have to write something interesting""" start="00:02:27.480" video="mainVideo-nabokov" id="subtitle"]]
[[!template text="""with a good story,""" start="00:02:28.960" video="mainVideo-nabokov" id="subtitle"]]
@@ -146,9 +139,7 @@
[[!template text="""So that's why Nabokov loved index cards""" start="00:04:42.000" video="mainVideo-nabokov" id="subtitle"]]
[[!template text="""for writing novels.""" start="00:04:45.307" video="mainVideo-nabokov" id="subtitle"]]
-[[!template new="1" text="""Org mode for writing novels""" start="00:04:46.560" video="mainVideo-nabokov" id="subtitle"]]
-
-[[!template text="""Now I'd love to talk about""" start="00:04:46.560" video="mainVideo-nabokov" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Org mode for writing novels""" start="00:04:46.560" video="mainVideo-nabokov" id="subtitle"]]</div>[[!template text="""Now I'd love to talk about""" start="00:04:46.560" video="mainVideo-nabokov" id="subtitle"]]
[[!template text="""why I love Org mode so much for writing novels""" start="00:04:48.760" video="mainVideo-nabokov" id="subtitle"]]
[[!template text="""and how it helps me tackle those same challenges.""" start="00:04:51.280" video="mainVideo-nabokov" id="subtitle"]]
[[!template text="""The first practical challenge,""" start="00:04:54.000" video="mainVideo-nabokov" id="subtitle"]]
@@ -247,9 +238,7 @@
[[!template text="""novels and other long-form prose,""" start="00:08:51.880" video="mainVideo-nabokov" id="subtitle"]]
[[!template text="""and how Org mode can help tackle them.""" start="00:08:53.600" video="mainVideo-nabokov" id="subtitle"]]
-[[!template new="1" text="""Takeaways and next steps""" start="00:08:55.600" video="mainVideo-nabokov" id="subtitle"]]
-
-[[!template text="""I'd like to leave you with a couple takeaways""" start="00:08:55.600" video="mainVideo-nabokov" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Takeaways and next steps""" start="00:08:55.600" video="mainVideo-nabokov" id="subtitle"]]</div>[[!template text="""I'd like to leave you with a couple takeaways""" start="00:08:55.600" video="mainVideo-nabokov" id="subtitle"]]
[[!template text="""and next steps for those who are interested.""" start="00:08:57.880" video="mainVideo-nabokov" id="subtitle"]]
[[!template text="""First, if you're writing a novel""" start="00:08:59.760" video="mainVideo-nabokov" id="subtitle"]]
[[!template text="""or other long-form prose,""" start="00:09:01.907" video="mainVideo-nabokov" id="subtitle"]]
@@ -272,12 +261,11 @@
[[!template text="""I'll put a link here below. [ewj.io/emacs]""" start="00:09:37.760" video="mainVideo-nabokov" id="subtitle"]]
[[!template text="""Thanks for listening, and Emacs on!""" start="00:09:44.000" video="mainVideo-nabokov" id="subtitle"]]
-
+</div>
Captioner: bhavin192
-<a name="nabokov-qanda-transcript"></a>
-# Q&A transcript (unedited)
+<div class="transcript transcript-qanda"><a name="nabokov-qanda-transcript"></a><h1>Q&A transcript (unedited)</h1>
[[!template text="""[Speaker 0]: About 3""" start="00:00:03.560" video="qanda-nabokov" id="subtitle"]]
[[!template text="""seconds. And I believe we are live.""" start="00:00:16.020" video="qanda-nabokov" id="subtitle"]]
@@ -506,7 +494,7 @@ Captioner: bhavin192
[[!template text="""and thank you again, Edmund.""" start="00:09:19.900" video="qanda-nabokov" id="subtitle"]]
[[!template text="""[Speaker 1]: Cheers.""" start="00:09:20.720" video="qanda-nabokov" id="subtitle"]]
-Questions or comments? Please e-mail [ewj@inkwellandoften.com](mailto:ewj@inkwellandoften.com?subject=Comment%20for%20EmacsConf%202023%20nabokov%3A%20Why%20Nabokov%20would%20use%20Org-Mode%20if%20he%20were%20writing%20today)
+</div>Questions or comments? Please e-mail [ewj@inkwellandoften.com](mailto:ewj@inkwellandoften.com?subject=Comment%20for%20EmacsConf%202023%20nabokov%3A%20Why%20Nabokov%20would%20use%20Org-Mode%20if%20he%20were%20writing%20today)
<!-- End of emacsconf-publish-after-page -->
diff --git a/2023/info/nabokov-before.md b/2023/info/nabokov-before.md
index e9aa2951..b24c82de 100644
--- a/2023/info/nabokov-before.md
+++ b/2023/info/nabokov-before.md
@@ -1,6 +1,6 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
[[!toc ]]
-Format: 10-min talk; Q&A: BigBlueButton conference room
+Format: 10-min talk ; Q&A: BigBlueButton conference room
Status: Q&A to be extracted from the room recordings
@@ -9,17 +9,17 @@ Status: Q&A to be extracted from the room recordings
# Talk
-<div class="vid"><video controls preload="none" id="nabokov-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="nabokov-mainVideo" data="""
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-nabokov"><source src="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="mainVideo-nabokov" data="""
00:00.000 Introduction
00:45.760 Nabokov's process of writing novels
02:24.080 Three practical problems novelists face
04:46.560 Org mode for writing novels
08:55.600 Takeaways and next steps
-"""]]<div></div>Duration: 09:51 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--main.opus">Download --main.opus (6.3MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--main.webm">Download --main.webm (22MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--pad.md">Download --pad.md</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--silence.mkv">Download --silence.mkv (12MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen.org">Download .org</a></li><li><a href="https://toobnix.org/w/bDou9TDETryMt18KcdB56A">View on Toobnix</a></li></ul></div></div>
+"""]]<div></div>Duration: 09:51 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2023-nabokov">Open Etherpad</a></li><li><a href="https://bbb.emacsverse.org/playback/presentation/2.0/playback.html?meetingId=d4fb146b412ea04565adc44dfe1a9162d553b956-1701540322974">Play recording from BigBlueButton</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--main.opus">Download --main.opus (6.3MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--main.webm">Download --main.webm (22MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--silence.mkv">Download --silence.mkv (12MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen.org">Download .org</a></li><li><a href="https://toobnix.org/w/bDou9TDETryMt18KcdB56A">View on Toobnix</a></li><li><a href="https://www.youtube.com/watch?v=-E_uNxwL2_I">View on Youtube</a></li></ul></div></div>
# Q&A
-<div class="vid"><video controls preload="none" id="nabokov-qanda"><source src="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--answers.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div>Listen to just the audio:<br /><audio controls preload="none" id="nabokov-qanda-audio" src="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--answers.opus"></audio></div><div></div>Duration: 09:21 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--answers.json">Download --answers.json</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--answers.opus">Download --answers.opus (3.1MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--answers.webm">Download --answers.webm (9.1MB)</a></li></ul></div></div>
+<div class="vid qanda"><video controls preload="none" id="qanda-nabokov"><source src="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--answers.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div>Listen to just the audio:<br /><audio controls preload="none" id="qanda-nabokov-audio" src="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--answers.opus"></audio></div><div></div>Duration: 09:21 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2023-nabokov">Open Etherpad</a></li><li><a href="https://bbb.emacsverse.org/playback/presentation/2.0/playback.html?meetingId=d4fb146b412ea04565adc44dfe1a9162d553b956-1701540322974">Play recording from BigBlueButton</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--answers.json">Download --answers.json</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--answers.opus">Download --answers.opus (3.1MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--answers.webm">Download --answers.webm (9.1MB)</a></li></ul></div></div>
# Description
<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/info/nabokov-nav.md b/2023/info/nabokov-nav.md
index f7ef3f32..c0a6997d 100644
--- a/2023/info/nabokov-nav.md
+++ b/2023/info/nabokov-nav.md
@@ -3,5 +3,5 @@
Back to the [[talks]]
Previous by track: <a href="/2023/talks/writing">Emacs turbo-charges my writing</a>
Next by track: <a href="/2023/talks/collab">Collaborative data processing and documenting using org-babel</a>
-Track: <span class="sched-track General">General</span>
+Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2023/watch/gen">Watch</a></strong>
</div>
diff --git a/2023/info/one-after.md b/2023/info/one-after.md
index e7b63c57..7af4f390 100644
--- a/2023/info/one-after.md
+++ b/2023/info/one-after.md
@@ -1,13 +1,10 @@
<!-- Automatically generated by emacsconf-publish-after-page -->
-<a name="one-mainVideo-transcript"></a>
-# Transcript
+<div class="transcript transcript-mainVideo"><a name="one-mainVideo-transcript"></a><h1>Transcript</h1>
-[[!template new="1" text="""Introduction""" start="00:00:00.000" video="mainVideo-one" id="subtitle"]]
-
-[[!template text="""Hi, everybody. Welcome to the EmacsConf 2023.""" start="00:00:00.000" video="mainVideo-one" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Introduction""" start="00:00:00.000" video="mainVideo-one" id="subtitle"]]</div>[[!template text="""Hi, everybody. Welcome to the EmacsConf 2023.""" start="00:00:00.000" video="mainVideo-one" id="subtitle"]]
[[!template text="""I hope you're doing well and you're having fun.""" start="00:00:04.160" video="mainVideo-one" id="subtitle"]]
[[!template text="""I'm Tony Aldon, and in this talk,""" start="00:00:06.400" video="mainVideo-one" id="subtitle"]]
[[!template text="""we are going to see how to build a static website""" start="00:00:08.360" video="mainVideo-one" id="subtitle"]]
@@ -16,9 +13,7 @@
[[!template text="""all the people who organized that conference,""" start="00:00:17.600" video="mainVideo-one" id="subtitle"]]
[[!template text="""so thank you all for the great work.""" start="00:00:20.560" video="mainVideo-one" id="subtitle"]]
-[[!template new="1" text="""Documentation""" start="00:00:24.000" video="mainVideo-one" id="subtitle"]]
-
-[[!template text="""Now let's jump into the documentation of one.el,""" start="00:00:24.000" video="mainVideo-one" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Documentation""" start="00:00:24.000" video="mainVideo-one" id="subtitle"]]</div>[[!template text="""Now let's jump into the documentation of one.el,""" start="00:00:24.000" video="mainVideo-one" id="subtitle"]]
[[!template text="""which is built with one.el. In the install page,""" start="00:00:27.720" video="mainVideo-one" id="subtitle"]]
[[!template text="""we can see that we have a sidebar""" start="00:00:31.680" video="mainVideo-one" id="subtitle"]]
[[!template text="""with all of the pages in the documentation,""" start="00:00:33.080" video="mainVideo-one" id="subtitle"]]
@@ -52,9 +47,7 @@
[[!template text="""and if we want to change the layout, CSS and Emacs Lisp.""" start="00:01:55.120" video="mainVideo-one" id="subtitle"]]
[[!template text="""This is one.el.""" start="00:01:58.680" video="mainVideo-one" id="subtitle"]]
-[[!template new="1" text="""Starting a new project""" start="00:02:02.200" video="mainVideo-one" id="subtitle"]]
-
-[[!template text="""Now let's go to our node,""" start="00:02:02.200" video="mainVideo-one" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Starting a new project""" start="00:02:02.200" video="mainVideo-one" id="subtitle"]]</div>[[!template text="""Now let's go to our node,""" start="00:02:02.200" video="mainVideo-one" id="subtitle"]]
[[!template text="""and we are going to start a new project.""" start="00:02:03.880" video="mainVideo-one" id="subtitle"]]
[[!template text="""How do we do that?""" start="00:02:07.160" video="mainVideo-one" id="subtitle"]]
[[!template text="""In a new empty directory,""" start="00:02:09.600" video="mainVideo-one" id="subtitle"]]
@@ -64,9 +57,7 @@
[[!template text="""five default type of pages that we have,""" start="00:02:22.320" video="mainVideo-one" id="subtitle"]]
[[!template text="""and one CSS file.""" start="00:02:25.760" video="mainVideo-one" id="subtitle"]]
-[[!template new="1" text="""Building""" start="00:02:27.400" video="mainVideo-one" id="subtitle"]]
-
-[[!template text="""How to build that website?""" start="00:02:27.400" video="mainVideo-one" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Building""" start="00:02:27.400" video="mainVideo-one" id="subtitle"]]</div>[[!template text="""How to build that website?""" start="00:02:27.400" video="mainVideo-one" id="subtitle"]]
[[!template text="""Okay, so we call the function `one-build`.""" start="00:02:29.440" video="mainVideo-one" id="subtitle"]]
[[!template text="""This builds the website.""" start="00:02:32.840" video="mainVideo-one" id="subtitle"]]
[[!template text="""We jump into a terminal, and now if we run tree,""" start="00:02:33.960" video="mainVideo-one" id="subtitle"]]
@@ -84,9 +75,7 @@
[[!template text="""this will be reloaded in the browser.""" start="00:03:11.760" video="mainVideo-one" id="subtitle"]]
[[!template text="""So one, this is that website, is now this one.""" start="00:03:14.320" video="mainVideo-one" id="subtitle"]]
-[[!template new="1" text="""Side by side""" start="00:03:19.760" video="mainVideo-one" id="subtitle"]]
-
-[[!template text="""So let's put them side by side.""" start="00:03:19.760" video="mainVideo-one" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Side by side""" start="00:03:19.760" video="mainVideo-one" id="subtitle"]]</div>[[!template text="""So let's put them side by side.""" start="00:03:19.760" video="mainVideo-one" id="subtitle"]]
[[!template text="""We go there, and we may do something like that.""" start="00:03:22.560" video="mainVideo-one" id="subtitle"]]
[[!template text="""So one.el, the home page, so our custom ID""" start="00:03:26.320" video="mainVideo-one" id="subtitle"]]
[[!template text="""with the value just a /,""" start="00:03:30.240" video="mainVideo-one" id="subtitle"]]
@@ -108,9 +97,7 @@
[[!template text="""We do a grep in that files,""" start="00:04:25.680" video="mainVideo-one" id="subtitle"]]
[[!template text="""and we see the different default render function.""" start="00:04:28.360" video="mainVideo-one" id="subtitle"]]
-[[!template new="1" text="""Writing a render function""" start="00:04:32.160" video="mainVideo-one" id="subtitle"]]
-
-[[!template text="""In the second part of that talk,""" start="00:04:32.160" video="mainVideo-one" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Writing a render function""" start="00:04:32.160" video="mainVideo-one" id="subtitle"]]</div>[[!template text="""In the second part of that talk,""" start="00:04:32.160" video="mainVideo-one" id="subtitle"]]
[[!template text="""we are going to write a render function.""" start="00:04:34.840" video="mainVideo-one" id="subtitle"]]
[[!template text="""So we are going to see that after.""" start="00:04:38.400" video="mainVideo-one" id="subtitle"]]
[[!template text="""Now maybe we can go to the default page,""" start="00:04:41.080" video="mainVideo-one" id="subtitle"]]
@@ -129,9 +116,7 @@
[[!template text="""If we use that one, this just renders the current page.""" start="00:05:34.080" video="mainVideo-one" id="subtitle"]]
[[!template text="""So we see that we have again &quot;foo bar baz&quot; in the page.""" start="00:05:39.480" video="mainVideo-one" id="subtitle"]]
-[[!template new="1" text="""New page""" start="00:05:44.680" video="mainVideo-one" id="subtitle"]]
-
-[[!template text="""Now let's add a new page. To add a new page,""" start="00:05:44.680" video="mainVideo-one" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""New page""" start="00:05:44.680" video="mainVideo-one" id="subtitle"]]</div>[[!template text="""Now let's add a new page. To add a new page,""" start="00:05:44.680" video="mainVideo-one" id="subtitle"]]
[[!template text="""we just have to copy one of them, maybe the default page.""" start="00:05:47.920" video="mainVideo-one" id="subtitle"]]
[[!template text="""We are going to call it maybe emacsconf-2023.""" start="00:05:52.200" video="mainVideo-one" id="subtitle"]]
[[!template text="""We still use one default render function to render it,""" start="00:05:58.320" video="mainVideo-one" id="subtitle"]]
@@ -145,9 +130,7 @@
[[!template text="""and pass it the path `/blog/emacsconf-2023/.""" start="00:06:33.600" video="mainVideo-one" id="subtitle"]]
[[!template text="""So we have that new page.""" start="00:06:39.280" video="mainVideo-one" id="subtitle"]]
-[[!template new="1" text="""Linking between pages""" start="00:06:41.720" video="mainVideo-one" id="subtitle"]]
-
-[[!template text="""Now, how to link between pages?""" start="00:06:41.720" video="mainVideo-one" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Linking between pages""" start="00:06:41.720" video="mainVideo-one" id="subtitle"]]</div>[[!template text="""Now, how to link between pages?""" start="00:06:41.720" video="mainVideo-one" id="subtitle"]]
[[!template text="""So we are going to write a link""" start="00:06:44.160" video="mainVideo-one" id="subtitle"]]
[[!template text="""that links to the last page,""" start="00:06:46.080" video="mainVideo-one" id="subtitle"]]
[[!template text="""so a page with the table of contents.""" start="00:06:48.000" video="mainVideo-one" id="subtitle"]]
@@ -184,9 +167,7 @@
[[!template text="""that works inside Emacs""" start="00:08:34.440" video="mainVideo-one" id="subtitle"]]
[[!template text="""and that works well also in the browser.""" start="00:08:36.320" video="mainVideo-one" id="subtitle"]]
-[[!template new="1" text="""CSS""" start="00:08:40.000" video="mainVideo-one" id="subtitle"]]
-
-[[!template text="""Now let's say that we want to change the CSS.""" start="00:08:40.000" video="mainVideo-one" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""CSS""" start="00:08:40.000" video="mainVideo-one" id="subtitle"]]</div>[[!template text="""Now let's say that we want to change the CSS.""" start="00:08:40.000" video="mainVideo-one" id="subtitle"]]
[[!template text="""So we've added a page with specific content,""" start="00:08:44.520" video="mainVideo-one" id="subtitle"]]
[[!template text="""and we've done some links.""" start="00:08:50.720" video="mainVideo-one" id="subtitle"]]
[[!template text="""Now we want to modify the CSS file""" start="00:08:51.720" video="mainVideo-one" id="subtitle"]]
@@ -214,9 +195,7 @@
[[!template text="""and this is the user experience""" start="00:10:16.120" video="mainVideo-one" id="subtitle"]]
[[!template text="""that we have with one.el and the default function.""" start="00:10:18.880" video="mainVideo-one" id="subtitle"]]
-[[!template new="1" text="""How to write a render function""" start="00:10:23.160" video="mainVideo-one" id="subtitle"]]
-
-[[!template text="""Now that we've seen that,""" start="00:10:23.160" video="mainVideo-one" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""How to write a render function""" start="00:10:23.160" video="mainVideo-one" id="subtitle"]]</div>[[!template text="""Now that we've seen that,""" start="00:10:23.160" video="mainVideo-one" id="subtitle"]]
[[!template text="""we've done all of that part,""" start="00:10:26.280" video="mainVideo-one" id="subtitle"]]
[[!template text="""and now we are going to see""" start="00:10:30.461" video="mainVideo-one" id="subtitle"]]
[[!template text="""how to write a render function.""" start="00:10:31.920" video="mainVideo-one" id="subtitle"]]
@@ -350,9 +329,7 @@
[[!template text="""and we have access to the date.""" start="00:18:56.560" video="mainVideo-one" id="subtitle"]]
[[!template text="""Really, we can do whatever we want.""" start="00:18:58.800" video="mainVideo-one" id="subtitle"]]
-[[!template new="1" text="""Rendering content""" start="00:19:03.200" video="mainVideo-one" id="subtitle"]]
-
-[[!template text="""Now, we want the content. So far,""" start="00:19:03.200" video="mainVideo-one" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Rendering content""" start="00:19:03.200" video="mainVideo-one" id="subtitle"]]</div>[[!template text="""Now, we want the content. So far,""" start="00:19:03.200" video="mainVideo-one" id="subtitle"]]
[[!template text="""we get the property, but what about the content,""" start="00:19:06.760" video="mainVideo-one" id="subtitle"]]
[[!template text="""so h1, and now we put &quot;Org content&quot;,""" start="00:19:11.600" video="mainVideo-one" id="subtitle"]]
[[!template text="""and this is going to be something in the variable content,""" start="00:19:17.040" video="mainVideo-one" id="subtitle"]]
@@ -377,9 +354,7 @@
[[!template text="""there was this `org-element-contents`, I think,""" start="00:20:27.040" video="mainVideo-one" id="subtitle"]]
[[!template text="""and now we build it, and we must see it here.""" start="00:20:32.840" video="mainVideo-one" id="subtitle"]]
-[[!template new="1" text="""Rendering CSS""" start="00:20:37.160" video="mainVideo-one" id="subtitle"]]
-
-[[!template text="""So we have the content,""" start="00:20:37.160" video="mainVideo-one" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Rendering CSS""" start="00:20:37.160" video="mainVideo-one" id="subtitle"]]</div>[[!template text="""So we have the content,""" start="00:20:37.160" video="mainVideo-one" id="subtitle"]]
[[!template text="""we have the Org values,""" start="00:20:39.960" video="mainVideo-one" id="subtitle"]]
[[!template text="""and last thing that we can do maybe is to put some CSS.""" start="00:20:43.320" video="mainVideo-one" id="subtitle"]]
[[!template text="""Let's have a look to `one-default` function.""" start="00:20:48.400" video="mainVideo-one" id="subtitle"]]
@@ -400,12 +375,11 @@
[[!template text="""I hope you enjoyed the talk, and have a nice day,""" start="00:22:08.960" video="mainVideo-one" id="subtitle"]]
[[!template text="""and a nice conference.""" start="00:22:14.880" video="mainVideo-one" id="subtitle"]]
-
+</div>
Captioner: sachac
-<a name="one-qanda-transcript"></a>
-# Q&A transcript (unedited)
+<div class="transcript transcript-qanda"><a name="one-qanda-transcript"></a><h1>Q&A transcript (unedited)</h1>
[[!template text="""[Speaker 0]: So, will you, when I'm looking at my,""" start="00:00:00.459" video="qanda-one" id="subtitle"]]
[[!template text="""the other screen, I don't see the chat,""" start="00:00:06.279" video="qanda-one" id="subtitle"]]
@@ -898,7 +872,7 @@ Captioner: sachac
[[!template text="""stream. I'm going to need to...""" start="00:27:33.520" video="qanda-one" id="subtitle"]]
[[!template text="""Sorry. I'm going to stop.""" start="00:27:36.160" video="qanda-one" id="subtitle"]]
-Questions or comments? Please e-mail [tony@tonyaldon.com](mailto:tony@tonyaldon.com?subject=Comment%20for%20EmacsConf%202023%20one%3A%20one.el%3A%20the%20static%20site%20generator%20for%20Emacs%20Lisp%20Programmers)
+</div>Questions or comments? Please e-mail [tony@tonyaldon.com](mailto:tony@tonyaldon.com?subject=Comment%20for%20EmacsConf%202023%20one%3A%20one.el%3A%20the%20static%20site%20generator%20for%20Emacs%20Lisp%20Programmers)
<!-- End of emacsconf-publish-after-page -->
diff --git a/2023/info/one-before.md b/2023/info/one-before.md
index 04ae447f..5c64f269 100644
--- a/2023/info/one-before.md
+++ b/2023/info/one-before.md
@@ -1,6 +1,6 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
[[!toc ]]
-Format: 23-min talk; Q&A: BigBlueButton conference room
+Format: 23-min talk ; Q&A: BigBlueButton conference room
Status: Q&A to be extracted from the room recordings
@@ -9,7 +9,7 @@ Status: Q&A to be extracted from the room recordings
# Talk
-<div class="vid"><video controls preload="none" id="one-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="one-mainVideo" data="""
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-one"><source src="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="mainVideo-one" data="""
00:00.000 Introduction
00:24.000 Documentation
02:02.200 Starting a new project
@@ -23,10 +23,10 @@ Status: Q&A to be extracted from the room recordings
19:03.200 Rendering content
20:37.160 Rendering CSS
-"""]]<div></div>Duration: 22:18 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--main.opus">Download --main.opus (14MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--main.webm">Download --main.webm (54MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--pad.md">Download --pad.md</a></li><li><a href="https://toobnix.org/w/x2yYYWLHQe75FTV8sWiDmy">View on Toobnix</a></li></ul></div></div>
+"""]]<div></div>Duration: 22:18 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2023-one">Open Etherpad</a></li><li><a href="https://bbb.emacsverse.org/playback/presentation/2.0/playback.html?meetingId=62b4e0d50b581001f2d6526461e9ffb754b38371-1701534084270">Play recording from BigBlueButton</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--main.opus">Download --main.opus (14MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--main.webm">Download --main.webm (54MB)</a></li><li><a href="https://toobnix.org/w/x2yYYWLHQe75FTV8sWiDmy">View on Toobnix</a></li><li><a href="https://www.youtube.com/watch?v=GGP2mxZn4mY">View on Youtube</a></li></ul></div></div>
# Q&A
-<div class="vid"><video controls preload="none" id="one-qanda"><source src="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--answers.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div>Listen to just the audio:<br /><audio controls preload="none" id="one-qanda-audio" src="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--answers.opus"></audio></div><div></div>Duration: 27:39 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--answers.json">Download --answers.json (1.1MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--answers.opus">Download --answers.opus (15MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--answers.webm">Download --answers.webm (96MB)</a></li></ul></div></div>
+<div class="vid qanda"><video controls preload="none" id="qanda-one"><source src="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--answers.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div>Listen to just the audio:<br /><audio controls preload="none" id="qanda-one-audio" src="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--answers.opus"></audio></div><div></div>Duration: 27:39 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2023-one">Open Etherpad</a></li><li><a href="https://bbb.emacsverse.org/playback/presentation/2.0/playback.html?meetingId=62b4e0d50b581001f2d6526461e9ffb754b38371-1701534084270">Play recording from BigBlueButton</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--answers.json">Download --answers.json (1.1MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--answers.opus">Download --answers.opus (15MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--answers.webm">Download --answers.webm (96MB)</a></li></ul></div></div>
# Description
<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/info/one-nav.md b/2023/info/one-nav.md
index fe3eb334..2fe56716 100644
--- a/2023/info/one-nav.md
+++ b/2023/info/one-nav.md
@@ -3,5 +3,5 @@
Back to the [[talks]]
Previous by track: <a href="/2023/talks/table">Who needs Excel? Managing your students qualifications with org-table</a>
Next by track: <a href="/2023/talks/writing">Emacs turbo-charges my writing</a>
-Track: <span class="sched-track General">General</span>
+Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2023/watch/gen">Watch</a></strong>
</div>
diff --git a/2023/info/overlay-after.md b/2023/info/overlay-after.md
index 7db881e5..3d710d06 100644
--- a/2023/info/overlay-after.md
+++ b/2023/info/overlay-after.md
@@ -1,13 +1,10 @@
<!-- Automatically generated by emacsconf-publish-after-page -->
-<a name="overlay-mainVideo-transcript"></a>
-# Transcript
+<div class="transcript transcript-mainVideo"><a name="overlay-mainVideo-transcript"></a><h1>Transcript</h1>
-[[!template new="1" text="""Introduction""" start="00:00:00.000" video="mainVideo-overlay" id="subtitle"]]
-
-[[!template text="""Hi, I'm Jeff Trull, and today I'm going to talk to you""" start="00:00:00.000" video="mainVideo-overlay" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Introduction""" start="00:00:00.000" video="mainVideo-overlay" id="subtitle"]]</div>[[!template text="""Hi, I'm Jeff Trull, and today I'm going to talk to you""" start="00:00:00.000" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""about improving C++ compiler diagnostics""" start="00:00:04.898" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""using overlays and other features from Emacs.""" start="00:00:08.460" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""First an overview of my talk.""" start="00:00:13.600" video="mainVideo-overlay" id="subtitle"]]
@@ -19,9 +16,7 @@
[[!template text="""and build a new minor mode""" start="00:00:26.751" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""using overlays and other Emacs features.""" start="00:00:28.448" video="mainVideo-overlay" id="subtitle"]]
-[[!template new="1" text="""Overlays and what they can do""" start="00:00:33.560" video="mainVideo-overlay" id="subtitle"]]
-
-[[!template text="""First of all, overlays.""" start="00:00:33.560" video="mainVideo-overlay" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Overlays and what they can do""" start="00:00:33.560" video="mainVideo-overlay" id="subtitle"]]</div>[[!template text="""First of all, overlays.""" start="00:00:33.560" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""What are they?""" start="00:00:35.520" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""They are objects consisting of a buffer range""" start="00:00:36.680" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""and a set of properties.""" start="00:00:39.125" video="mainVideo-overlay" id="subtitle"]]
@@ -54,9 +49,7 @@
[[!template text="""it's still there, because it's hidden by an overlay.""" start="00:01:55.205" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""And that's kind of the essence of what overlays are.""" start="00:01:58.220" video="mainVideo-overlay" id="subtitle"]]
-[[!template new="1" text="""Simple overlay example - creating an overlay""" start="00:02:02.500" video="mainVideo-overlay" id="subtitle"]]
-
-[[!template text="""Let's do a simple overlay example.""" start="00:02:02.500" video="mainVideo-overlay" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Simple overlay example - creating an overlay""" start="00:02:02.500" video="mainVideo-overlay" id="subtitle"]]</div>[[!template text="""Let's do a simple overlay example.""" start="00:02:02.500" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""We have some text on the right here,""" start="00:02:04.780" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""which is a famous poem by William Carlos Williams,""" start="00:02:06.720" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""which has been the subject of many memes.""" start="00:02:09.340" video="mainVideo-overlay" id="subtitle"]]
@@ -67,9 +60,7 @@
[[!template text="""You can see we've created an overlay""" start="00:02:29.540" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""from position 74 to 224.""" start="00:02:33.277" video="mainVideo-overlay" id="subtitle"]]
-[[!template new="1" text="""Adding properties""" start="00:02:35.700" video="mainVideo-overlay" id="subtitle"]]
-
-[[!template text="""Now we can take that overlay that we already created""" start="00:02:35.700" video="mainVideo-overlay" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Adding properties""" start="00:02:35.700" video="mainVideo-overlay" id="subtitle"]]</div>[[!template text="""Now we can take that overlay that we already created""" start="00:02:35.700" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""and add a property, in this case a `face` property,""" start="00:02:38.064" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""to change the appearance of the text.""" start="00:02:41.212" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""This is a poem, and it's currently using""" start="00:02:43.540" video="mainVideo-overlay" id="subtitle"]]
@@ -82,9 +73,7 @@
[[!template text="""Now you can see that the poem looks quite a bit different.""" start="00:03:01.140" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""It looks more like what we'd see in a book.""" start="00:03:03.700" video="mainVideo-overlay" id="subtitle"]]
-[[!template new="1" text="""Deleting an overlay""" start="00:03:10.940" video="mainVideo-overlay" id="subtitle"]]
-
-[[!template text="""We can also delete overlays.""" start="00:03:10.940" video="mainVideo-overlay" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Deleting an overlay""" start="00:03:10.940" video="mainVideo-overlay" id="subtitle"]]</div>[[!template text="""We can also delete overlays.""" start="00:03:10.940" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""So I've named this one.""" start="00:03:13.100" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""So we can just go down and run `delete-overlay`""" start="00:03:15.140" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""and get rid of it, and it'll go back to""" start="00:03:17.766" video="mainVideo-overlay" id="subtitle"]]
@@ -92,9 +81,7 @@
[[!template text="""And there it is.""" start="00:03:22.660" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""It's back to normal.""" start="00:03:23.660" video="mainVideo-overlay" id="subtitle"]]
-[[!template new="1" text="""Setting fonts the right way""" start="00:03:24.660" video="mainVideo-overlay" id="subtitle"]]
-
-[[!template text="""Now, if you're interested in changing all of the verses""" start="00:03:24.660" video="mainVideo-overlay" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Setting fonts the right way""" start="00:03:24.660" video="mainVideo-overlay" id="subtitle"]]</div>[[!template text="""Now, if you're interested in changing all of the verses""" start="00:03:24.660" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""inside an Org Mode file to a different face""" start="00:03:28.474" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""or a different font family,""" start="00:03:31.109" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""this isn't the way you'd really do it.""" start="00:03:32.786" video="mainVideo-overlay" id="subtitle"]]
@@ -107,16 +94,12 @@
[[!template text="""Let's give it a try.""" start="00:03:56.100" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""It worked!""" start="00:03:58.340" video="mainVideo-overlay" id="subtitle"]]
-[[!template new="1" text="""More properties""" start="00:03:59.540" video="mainVideo-overlay" id="subtitle"]]
-
-[[!template text="""There are more advanced things that you can do""" start="00:03:59.540" video="mainVideo-overlay" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""More properties""" start="00:03:59.540" video="mainVideo-overlay" id="subtitle"]]</div>[[!template text="""There are more advanced things that you can do""" start="00:03:59.540" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""other than just changing fonts.""" start="00:04:01.806" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""There's a whole long list of them in the manual,""" start="00:04:03.300" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""but let's talk about the ones we're going to use today.""" start="00:04:05.544" video="mainVideo-overlay" id="subtitle"]]
-[[!template new="1" text="""Visibility""" start="00:04:12.580" video="mainVideo-overlay" id="subtitle"]]
-
-[[!template text="""You can make text invisible, just like `org-present` did.""" start="00:04:12.580" video="mainVideo-overlay" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Visibility""" start="00:04:12.580" video="mainVideo-overlay" id="subtitle"]]</div>[[!template text="""You can make text invisible, just like `org-present` did.""" start="00:04:12.580" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""The simplest way is to set the `invisible` property to true,""" start="00:04:17.380" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""so here's a code snippet that will do that.""" start="00:04:21.820" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""What we're going to do is""" start="00:04:24.500" video="mainVideo-overlay" id="subtitle"]]
@@ -132,9 +115,7 @@
[[!template text="""I suggest reading the manual""" start="00:04:44.220" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""if you'd like to know more about that.""" start="00:04:46.627" video="mainVideo-overlay" id="subtitle"]]
-[[!template new="1" text="""Adding text""" start="00:04:49.780" video="mainVideo-overlay" id="subtitle"]]
-
-[[!template text="""Another thing we can do with properties""" start="00:04:49.780" video="mainVideo-overlay" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Adding text""" start="00:04:49.780" video="mainVideo-overlay" id="subtitle"]]</div>[[!template text="""Another thing we can do with properties""" start="00:04:49.780" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""is to add text either before or after an overlay.""" start="00:04:52.118" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""Since we've made the word &quot;plums&quot; invisible,""" start="00:04:54.980" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""or anything that you make invisible in the buffer,""" start="00:04:57.348" video="mainVideo-overlay" id="subtitle"]]
@@ -149,18 +130,14 @@
[[!template text="""There it is.""" start="00:05:19.580" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""So that's how you can replace words using overlays.""" start="00:05:22.020" video="mainVideo-overlay" id="subtitle"]]
-[[!template new="1" text="""Custom properties""" start="00:05:27.820" video="mainVideo-overlay" id="subtitle"]]
-
-[[!template text="""You can also have custom properties""" start="00:05:27.820" video="mainVideo-overlay" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Custom properties""" start="00:05:27.820" video="mainVideo-overlay" id="subtitle"]]</div>[[!template text="""You can also have custom properties""" start="00:05:27.820" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""that you name and then use yourself.""" start="00:05:29.761" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""For example, you can use it to mark regions in the buffer.""" start="00:05:31.700" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""You can also use it to add information""" start="00:05:35.320" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""to regions in the buffer for your own tracking""" start="00:05:38.009" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""in a minor mode or something like that, which we will use.""" start="00:05:41.180" video="mainVideo-overlay" id="subtitle"]]
-[[!template new="1" text="""Notes on properties""" start="00:05:45.380" video="mainVideo-overlay" id="subtitle"]]
-
-[[!template text="""Finally, two notes on properties.""" start="00:05:45.380" video="mainVideo-overlay" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Notes on properties""" start="00:05:45.380" video="mainVideo-overlay" id="subtitle"]]</div>[[!template text="""Finally, two notes on properties.""" start="00:05:45.380" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""We've been talking about overlay properties,""" start="00:05:49.620" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""but there's also something called text properties.""" start="00:05:51.951" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""Text properties are attached to text in a buffer.""" start="00:05:54.540" video="mainVideo-overlay" id="subtitle"]]
@@ -179,9 +156,7 @@
[[!template text="""if you're going to make heavy use of them.""" start="00:06:28.893" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""I prefer overlays because they're just easier to use.""" start="00:06:31.060" video="mainVideo-overlay" id="subtitle"]]
-[[!template new="1" text="""Improving C++ compiler output""" start="00:06:36.100" video="mainVideo-overlay" id="subtitle"]]
-
-[[!template text="""C++ compiler output.""" start="00:06:36.100" video="mainVideo-overlay" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Improving C++ compiler output""" start="00:06:36.100" video="mainVideo-overlay" id="subtitle"]]</div>[[!template text="""C++ compiler output.""" start="00:06:36.100" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""So my day job is C++ programmer,""" start="00:06:37.540" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""and although I've been an Emacser for many years,""" start="00:06:41.171" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""it can be a little bit of a chore dealing with errors.""" start="00:06:46.561" video="mainVideo-overlay" id="subtitle"]]
@@ -216,16 +191,12 @@
[[!template text="""Okay.""" start="00:08:11.000" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""Back to our presentation.""" start="00:08:12.000" video="mainVideo-overlay" id="subtitle"]]
-[[!template new="1" text="""The problem with C++ error messages""" start="00:08:17.680" video="mainVideo-overlay" id="subtitle"]]
-
-[[!template text="""So it's often this way in C++""" start="00:08:17.680" video="mainVideo-overlay" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""The problem with C++ error messages""" start="00:08:17.680" video="mainVideo-overlay" id="subtitle"]]</div>[[!template text="""So it's often this way in C++""" start="00:08:17.680" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""because we compose types from other types.""" start="00:08:20.064" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""They can be long to begin with,""" start="00:08:23.400" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""but then a couple of other factors come into play.""" start="00:08:26.217" video="mainVideo-overlay" id="subtitle"]]
-[[!template new="1" text="""Many standard class templates have default arguments""" start="00:08:30.240" video="mainVideo-overlay" id="subtitle"]]
-
-[[!template text="""First of all, we can have default template arguments.""" start="00:08:30.240" video="mainVideo-overlay" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Many standard class templates have default arguments""" start="00:08:30.240" video="mainVideo-overlay" id="subtitle"]]</div>[[!template text="""First of all, we can have default template arguments.""" start="00:08:30.240" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""These are arguments you didn't write,""" start="00:08:33.280" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""but that are implicitly there""" start="00:08:35.364" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""and can sometimes refer""" start="00:08:37.009" video="mainVideo-overlay" id="subtitle"]]
@@ -233,9 +204,7 @@
[[!template text="""which causes them to get a bit bigger,""" start="00:08:40.301" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""such as these allocator arguments here and here.""" start="00:08:42.441" video="mainVideo-overlay" id="subtitle"]]
-[[!template new="1" text="""Some types are aliases for longer things, too""" start="00:08:47.520" video="mainVideo-overlay" id="subtitle"]]
-
-[[!template text="""Then there are type aliases.""" start="00:08:47.520" video="mainVideo-overlay" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Some types are aliases for longer things, too""" start="00:08:47.520" video="mainVideo-overlay" id="subtitle"]]</div>[[!template text="""Then there are type aliases.""" start="00:08:47.520" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""For example, `std::string` here expands to""" start="00:08:49.360" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""a type with three template arguments.""" start="00:08:54.015" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""So you can imagine, when we combine""" start="00:08:58.320" video="mainVideo-overlay" id="subtitle"]]
@@ -245,9 +214,7 @@
[[!template text="""Let's run the comparison.""" start="00:09:14.258" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""Yeah.""" start="00:09:18.360" video="mainVideo-overlay" id="subtitle"]]
-[[!template new="1" text="""Reporting type information accurately means long lines""" start="00:09:20.960" video="mainVideo-overlay" id="subtitle"]]
-
-[[!template text="""So in summary, to properly understand an error""" start="00:09:20.960" video="mainVideo-overlay" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Reporting type information accurately means long lines""" start="00:09:20.960" video="mainVideo-overlay" id="subtitle"]]</div>[[!template text="""So in summary, to properly understand an error""" start="00:09:20.960" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""when you're a C++ programmer""" start="00:09:24.925" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""requires knowing the exact types""" start="00:09:27.371" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""that were supplied to your function.""" start="00:09:29.719" video="mainVideo-overlay" id="subtitle"]]
@@ -272,9 +239,7 @@
[[!template text="""But there's a better way.""" start="00:10:13.240" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""Now, anyway.""" start="00:10:15.240" video="mainVideo-overlay" id="subtitle"]]
-[[!template new="1" text="""Emacs can help - Treat C++ type names as just another kind of balanced expression""" start="00:10:18.240" video="mainVideo-overlay" id="subtitle"]]
-
-[[!template text="""So what can Emacs do to help us with this problem?""" start="00:10:18.240" video="mainVideo-overlay" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Emacs can help - Treat C++ type names as just another kind of balanced expression""" start="00:10:18.240" video="mainVideo-overlay" id="subtitle"]]</div>[[!template text="""So what can Emacs do to help us with this problem?""" start="00:10:18.240" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""First of all, if you think about a type name,""" start="00:10:23.960" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""it's a lot like what we call S-expressions""" start="00:10:28.871" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""or balanced expressions.""" start="00:10:33.080" video="mainVideo-overlay" id="subtitle"]]
@@ -305,9 +270,7 @@
[[!template text="""as though they were balanced expressions or S-expressions,""" start="00:11:41.815" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""the same kind that Emacs is really good at handling.""" start="00:11:44.313" video="mainVideo-overlay" id="subtitle"]]
-[[!template new="1" text="""Add overlays to improve readability""" start="00:11:49.320" video="mainVideo-overlay" id="subtitle"]]
-
-[[!template text="""Secondly, we can use overlays""" start="00:11:49.320" video="mainVideo-overlay" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Add overlays to improve readability""" start="00:11:49.320" video="mainVideo-overlay" id="subtitle"]]</div>[[!template text="""Secondly, we can use overlays""" start="00:11:49.320" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""to improve the readability of errors.""" start="00:11:51.980" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""We can take long lines and break and indent them""" start="00:11:55.260" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""using `before-string`s, so the same thing""" start="00:11:58.013" video="mainVideo-overlay" id="subtitle"]]
@@ -318,9 +281,7 @@
[[!template text="""We can also use the `invisible` property""" start="00:12:15.160" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""to hide unwanted detail.""" start="00:12:19.642" video="mainVideo-overlay" id="subtitle"]]
-[[!template new="1" text="""Create a minor mode that runs during compilation""" start="00:12:22.400" video="mainVideo-overlay" id="subtitle"]]
-
-[[!template text="""Last of all, we can create a minor mode.""" start="00:12:22.400" video="mainVideo-overlay" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Create a minor mode that runs during compilation""" start="00:12:22.400" video="mainVideo-overlay" id="subtitle"]]</div>[[!template text="""Last of all, we can create a minor mode.""" start="00:12:22.400" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""When we're compiling things in Emacs,""" start="00:12:24.960" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""we often use `compilation-mode`.""" start="00:12:27.855" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""`compilation-mode` allows you to install""" start="00:12:30.140" video="mainVideo-overlay" id="subtitle"]]
@@ -334,9 +295,7 @@
[[!template text="""so that we can see a simplified version""" start="00:12:50.177" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""or a more detailed version of a type, depending on our needs.""" start="00:12:53.907" video="mainVideo-overlay" id="subtitle"]]
-[[!template new="1" text="""Parsing types as balanced expressions""" start="00:12:59.500" video="mainVideo-overlay" id="subtitle"]]
-
-[[!template text="""First of all, parsing types as balanced expressions.""" start="00:12:59.500" video="mainVideo-overlay" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Parsing types as balanced expressions""" start="00:12:59.500" video="mainVideo-overlay" id="subtitle"]]</div>[[!template text="""First of all, parsing types as balanced expressions.""" start="00:12:59.500" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""We need to be able to quickly locate""" start="00:13:03.980" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""the boundaries and the contents""" start="00:13:05.687" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""of parenthesized expressions,""" start="00:13:07.163" video="mainVideo-overlay" id="subtitle"]]
@@ -362,9 +321,7 @@
[[!template text="""can be used now with our angle brackets""" start="00:14:08.708" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""and inside of our types.""" start="00:14:11.486" video="mainVideo-overlay" id="subtitle"]]
-[[!template new="1" text="""Indent and fill with overlays - Use ancient "pretty printing" algorithms"""" start="00:14:16.100" video="mainVideo-overlay" id="subtitle"]]
-
-[[!template text="""The next thing we can do is""" start="00:14:16.100" video="mainVideo-overlay" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Indent and fill with overlays - Use ancient "pretty printing" algorithms"""" start="00:14:16.100" video="mainVideo-overlay" id="subtitle"]]</div>[[!template text="""The next thing we can do is""" start="00:14:16.100" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""perform indent and fill with overlays.""" start="00:14:18.463" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""We're going to use `before-string` properties""" start="00:14:21.540" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""to break lines and create indentation""" start="00:14:23.736" video="mainVideo-overlay" id="subtitle"]]
@@ -376,18 +333,14 @@
[[!template text="""Back in the day, they had algorithms that could do both.""" start="00:14:43.940" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""Those are what we're going to leverage.""" start="00:14:47.080" video="mainVideo-overlay" id="subtitle"]]
-[[!template new="1" text="""Overlays can mimic line breaks and indentation""" start="00:14:52.260" video="mainVideo-overlay" id="subtitle"]]
-
-[[!template text="""We can use the `before-string` property""" start="00:14:52.260" video="mainVideo-overlay" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Overlays can mimic line breaks and indentation""" start="00:14:52.260" video="mainVideo-overlay" id="subtitle"]]</div>[[!template text="""We can use the `before-string` property""" start="00:14:52.260" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""to insert a new line in the correct number of spaces""" start="00:14:54.583" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""to emulate indentation.""" start="00:14:57.760" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""As a simplified example, here's some code""" start="00:15:00.240" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""that will indent 4 upon each open angle bracket.""" start="00:15:03.526" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""Let's give it a try.""" start="00:15:07.280" video="mainVideo-overlay" id="subtitle"]]
-[[!template new="1" text="""Hiding details - Marking depths with overlays""" start="00:15:14.520" video="mainVideo-overlay" id="subtitle"]]
-
-[[!template text="""The next thing we're going to need to do is hide details.""" start="00:15:14.520" video="mainVideo-overlay" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Hiding details - Marking depths with overlays""" start="00:15:14.520" video="mainVideo-overlay" id="subtitle"]]</div>[[!template text="""The next thing we're going to need to do is hide details.""" start="00:15:14.520" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""So we have nested types, and the user is going to want to""" start="00:15:18.280" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""be able to reveal lower-level or hide lower-level parts""" start="00:15:22.689" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""of the nested type interactively""" start="00:15:27.372" video="mainVideo-overlay" id="subtitle"]]
@@ -425,9 +378,7 @@
[[!template text="""So it's reasonable that there should be two,""" start="00:17:07.660" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""and that's what we expect.""" start="00:17:10.830" video="mainVideo-overlay" id="subtitle"]]
-[[!template new="1" text="""Hiding to a target depth""" start="00:17:12.660" video="mainVideo-overlay" id="subtitle"]]
-
-[[!template text="""Now that we've marked the nested types with their depths,""" start="00:17:12.660" video="mainVideo-overlay" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Hiding to a target depth""" start="00:17:12.660" video="mainVideo-overlay" id="subtitle"]]</div>[[!template text="""Now that we've marked the nested types with their depths,""" start="00:17:12.660" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""let's experiment with hiding details.""" start="00:17:17.354" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""This fragment of code takes a user-supplied depth,""" start="00:17:21.380" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""in this case 2, and will hide,""" start="00:17:26.774" video="mainVideo-overlay" id="subtitle"]]
@@ -444,9 +395,7 @@
[[!template text="""Now if we put it back to 3, it should reveal everything.""" start="00:17:54.540" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""So that's what we're going to use in our minor mode.""" start="00:17:59.660" video="mainVideo-overlay" id="subtitle"]]
-[[!template new="1" text="""Demo""" start="00:18:04.900" video="mainVideo-overlay" id="subtitle"]]
-
-[[!template text="""Let's have a demo.""" start="00:18:04.900" video="mainVideo-overlay" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Demo""" start="00:18:04.900" video="mainVideo-overlay" id="subtitle"]]</div>[[!template text="""Let's have a demo.""" start="00:18:04.900" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""We're going to revisit the initial example""" start="00:18:05.900" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""with the minor mode installed.""" start="00:18:08.539" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""Now we're going to have a compilation filter""" start="00:18:10.380" video="mainVideo-overlay" id="subtitle"]]
@@ -488,9 +437,7 @@
[[!template text="""Let's go back to our presentation.""" start="00:20:04.540" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""All right.""" start="00:20:08.340" video="mainVideo-overlay" id="subtitle"]]
-[[!template new="1" text="""Conclusion""" start="00:20:10.220" video="mainVideo-overlay" id="subtitle"]]
-
-[[!template text="""In conclusion, we saw how we could solve""" start="00:20:10.220" video="mainVideo-overlay" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Conclusion""" start="00:20:10.220" video="mainVideo-overlay" id="subtitle"]]</div>[[!template text="""In conclusion, we saw how we could solve""" start="00:20:10.220" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""a real problem for C++ programmers""" start="00:20:12.997" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""by combining several Emacs features: overlays,""" start="00:20:15.368" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""compilation mode extensions,""" start="00:20:18.535" video="mainVideo-overlay" id="subtitle"]]
@@ -505,12 +452,11 @@
[[!template text="""In short, there's plenty of hope for Emacs.""" start="00:20:48.020" video="mainVideo-overlay" id="subtitle"]]
[[!template text="""Thank you.""" start="00:20:50.860" video="mainVideo-overlay" id="subtitle"]]
-
+</div>
Captioner: sachac
-<a name="overlay-qanda-transcript"></a>
-# Q&A transcript (unedited)
+<div class="transcript transcript-qanda"><a name="overlay-qanda-transcript"></a><h1>Q&A transcript (unedited)</h1>
[[!template text="""[Speaker 0]: Out here or also you can continue discussing""" start="00:00:02.899" video="qanda-overlay" id="subtitle"]]
[[!template text="""on IRC.""" start="00:00:06.200" video="qanda-overlay" id="subtitle"]]
@@ -725,7 +671,7 @@ Captioner: sachac
[[!template text="""3 3 4 1 2 1""" start="00:22:28.100" video="qanda-overlay" id="subtitle"]]
[[!template text="""You""" start="00:24:41.445" video="qanda-overlay" id="subtitle"]]
-Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202023%20overlay%3A%20Improving%20compiler%20diagnostics%20with%20overlays)
+</div>Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202023%20overlay%3A%20Improving%20compiler%20diagnostics%20with%20overlays)
<!-- End of emacsconf-publish-after-page -->
diff --git a/2023/info/overlay-before.md b/2023/info/overlay-before.md
index 03bcd74e..8c8f8611 100644
--- a/2023/info/overlay-before.md
+++ b/2023/info/overlay-before.md
@@ -1,6 +1,6 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
[[!toc ]]
-Format: 21-min talk; Q&A: BigBlueButton conference room
+Format: 21-min talk ; Q&A: BigBlueButton conference room
Status: Q&A to be extracted from the room recordings
@@ -9,7 +9,7 @@ Status: Q&A to be extracted from the room recordings
# Talk
-<div class="vid"><video controls preload="none" id="overlay-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="overlay-mainVideo" data="""
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-overlay"><source src="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="mainVideo-overlay" data="""
00:00.000 Introduction
00:33.560 Overlays and what they can do
02:02.500 Simple overlay example - creating an overlay
@@ -37,10 +37,10 @@ Status: Q&A to be extracted from the room recordings
18:04.900 Demo
20:10.220 Conclusion
-"""]]<div></div>Duration: 20:57 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--expr_depth.svg">Download --expr_depth.svg</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--main.opus">Download --main.opus (15MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--main.webm">Download --main.webm (63MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--pad.md">Download --pad.md</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--testdata.org">Download --testdata.org</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull.org">Download .org</a></li><li><a href="https://toobnix.org/w/5fJkawU4R9b1dJq5BcDykx">View on Toobnix</a></li></ul></div></div>
+"""]]<div></div>Duration: 20:57 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2023-overlay">Open Etherpad</a></li><li><a href="https://bbb.emacsverse.org/playback/presentation/2.0/playback.html?meetingId=57788b1709264f016c76ee375746aab6fdcba006-1701539189569">Play recording from BigBlueButton</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--expr_depth.svg">Download --expr_depth.svg</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--main.opus">Download --main.opus (15MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--main.webm">Download --main.webm (63MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--testdata.org">Download --testdata.org</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull.org">Download .org</a></li><li><a href="https://toobnix.org/w/5fJkawU4R9b1dJq5BcDykx">View on Toobnix</a></li><li><a href="https://www.youtube.com/watch?v=g7mwN5QtcmA">View on Youtube</a></li></ul></div></div>
# Q&A
-<div class="vid"><video controls preload="none" id="overlay-qanda"><source src="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--answers.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div>Listen to just the audio:<br /><audio controls preload="none" id="overlay-qanda-audio" src="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--answers.opus"></audio></div><div></div>Duration: 11:48 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--answers.json">Download --answers.json</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--answers.opus">Download --answers.opus (12MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--answers.webm">Download --answers.webm (20MB)</a></li></ul></div></div>
+<div class="vid qanda"><video controls preload="none" id="qanda-overlay"><source src="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--answers.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div>Listen to just the audio:<br /><audio controls preload="none" id="qanda-overlay-audio" src="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--answers.opus"></audio></div><div></div>Duration: 11:48 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2023-overlay">Open Etherpad</a></li><li><a href="https://bbb.emacsverse.org/playback/presentation/2.0/playback.html?meetingId=57788b1709264f016c76ee375746aab6fdcba006-1701539189569">Play recording from BigBlueButton</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--answers.json">Download --answers.json</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--answers.opus">Download --answers.opus (12MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--answers.webm">Download --answers.webm (20MB)</a></li></ul></div></div>
# Description
<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/info/overlay-nav.md b/2023/info/overlay-nav.md
index ba04cc37..d06b5a15 100644
--- a/2023/info/overlay-nav.md
+++ b/2023/info/overlay-nav.md
@@ -3,5 +3,5 @@
Back to the [[talks]]
Previous by track: <a href="/2023/talks/llm">LLM clients in Emacs, functionality and standardization</a>
Next by track: <a href="/2023/talks/eval">Editor Integrated REPL Driven Development for all languages</a>
-Track: <span class="sched-track Development">Development</span>
+Track: <span class="sched-track Development">Development</span> - <strong><a href="https://emacsconf.org/2023/watch/dev">Watch</a></strong>
</div>
diff --git a/2023/info/parallel-after.md b/2023/info/parallel-after.md
index 2f390ff8..77006241 100644
--- a/2023/info/parallel-after.md
+++ b/2023/info/parallel-after.md
@@ -1,13 +1,10 @@
<!-- Automatically generated by emacsconf-publish-after-page -->
-<a name="parallel-mainVideo-transcript"></a>
-# Transcript
+<div class="transcript transcript-mainVideo"><a name="parallel-mainVideo-transcript"></a><h1>Transcript</h1>
-[[!template new="1" text="""Introduction""" start="00:00:00.000" video="mainVideo-parallel" id="subtitle"]]
-
-[[!template text="""Hi everyone!""" start="00:00:00.000" video="mainVideo-parallel" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Introduction""" start="00:00:00.000" video="mainVideo-parallel" id="subtitle"]]</div>[[!template text="""Hi everyone!""" start="00:00:00.000" video="mainVideo-parallel" id="subtitle"]]
[[!template text="""Welcome to our talk on Parallel Text Replacement.""" start="00:00:01.640" video="mainVideo-parallel" id="subtitle"]]
[[!template text="""My name is Lovro, and I'll be telling you about an""" start="00:00:04.640" video="mainVideo-parallel" id="subtitle"]]
[[!template text="""interesting problem that my friend Valentino and I""" start="00:00:07.040" video="mainVideo-parallel" id="subtitle"]]
@@ -18,9 +15,7 @@
[[!template text="""with a quick overview of the implementation.""" start="00:00:19.080" video="mainVideo-parallel" id="subtitle"]]
[[!template text="""Let's get straight into it!""" start="00:00:21.520" video="mainVideo-parallel" id="subtitle"]]
-[[!template new="1" text="""Problem: Goal""" start="00:00:23.440" video="mainVideo-parallel" id="subtitle"]]
-
-[[!template text="""Here is a problem that most of us have dealt with""" start="00:00:23.440" video="mainVideo-parallel" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Problem: Goal""" start="00:00:23.440" video="mainVideo-parallel" id="subtitle"]]</div>[[!template text="""Here is a problem that most of us have dealt with""" start="00:00:23.440" video="mainVideo-parallel" id="subtitle"]]
[[!template text="""at some point.""" start="00:00:25.800" video="mainVideo-parallel" id="subtitle"]]
[[!template text="""Assume we have a piece of code such as the following.""" start="00:00:27.040" video="mainVideo-parallel" id="subtitle"]]
[[!template text="""We use a code example here, but in general what we're""" start="00:00:29.880" video="mainVideo-parallel" id="subtitle"]]
@@ -43,9 +38,7 @@
[[!template text="""We should object to doing things that the computer""" start="00:01:08.280" video="mainVideo-parallel" id="subtitle"]]
[[!template text="""can do for us.""" start="00:01:10.280" video="mainVideo-parallel" id="subtitle"]]
-[[!template new="1" text="""Problem: Naive Multi-pass""" start="00:01:12.360" video="mainVideo-parallel" id="subtitle"]]
-
-[[!template text="""So, one way to automate it is by using our old friend""" start="00:01:12.360" video="mainVideo-parallel" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Problem: Naive Multi-pass""" start="00:01:12.360" video="mainVideo-parallel" id="subtitle"]]</div>[[!template text="""So, one way to automate it is by using our old friend""" start="00:01:12.360" video="mainVideo-parallel" id="subtitle"]]
[[!template text="""query-replace (M-%) multiple times in a sequence.""" start="00:01:15.560" video="mainVideo-parallel" id="subtitle"]]
[[!template text="""We first do a pass where we replace &quot;foo&quot; with &quot;bar&quot;,""" start="00:01:19.040" video="mainVideo-parallel" id="subtitle"]]
[[!template text="""then we do another pass where we replace &quot;bar&quot; with &quot;foo&quot;.""" start="00:01:22.240" video="mainVideo-parallel" id="subtitle"]]
@@ -54,9 +47,7 @@
[[!template text="""doesn't work because it results in interference""" start="00:01:29.160" video="mainVideo-parallel" id="subtitle"]]
[[!template text="""between the two replacements.""" start="00:01:31.560" video="mainVideo-parallel" id="subtitle"]]
-[[!template new="1" text="""Problem: Clever Multi-pass""" start="00:01:34.200" video="mainVideo-parallel" id="subtitle"]]
-
-[[!template text="""Instead, we have to be a bit more clever.""" start="00:01:34.200" video="mainVideo-parallel" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Problem: Clever Multi-pass""" start="00:01:34.200" video="mainVideo-parallel" id="subtitle"]]</div>[[!template text="""Instead, we have to be a bit more clever.""" start="00:01:34.200" video="mainVideo-parallel" id="subtitle"]]
[[!template text="""We should first replace &quot;foo&quot; with a temporary string,""" start="00:01:36.800" video="mainVideo-parallel" id="subtitle"]]
[[!template text="""in this case &quot;oof&quot;, that we will call a &quot;token&quot;.""" start="00:01:39.840" video="mainVideo-parallel" id="subtitle"]]
[[!template text="""To avoid interference, we must be careful to ensure""" start="00:01:42.120" video="mainVideo-parallel" id="subtitle"]]
@@ -66,9 +57,7 @@
[[!template text="""and finally a third pass to replace the token with &quot;bar&quot;.""" start="00:01:52.720" video="mainVideo-parallel" id="subtitle"]]
[[!template text="""This gives us the result we want.""" start="00:01:56.080" video="mainVideo-parallel" id="subtitle"]]
-[[!template new="1" text="""Problem: Terminology""" start="00:01:57.720" video="mainVideo-parallel" id="subtitle"]]
-
-[[!template text="""Putting the implementation aside for a moment, this style""" start="00:01:57.720" video="mainVideo-parallel" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Problem: Terminology""" start="00:01:57.720" video="mainVideo-parallel" id="subtitle"]]</div>[[!template text="""Putting the implementation aside for a moment, this style""" start="00:01:57.720" video="mainVideo-parallel" id="subtitle"]]
[[!template text="""of text replacement, where we replace multiple sources""" start="00:02:01.920" video="mainVideo-parallel" id="subtitle"]]
[[!template text="""with their targets, without running into interference""" start="00:02:05.600" video="mainVideo-parallel" id="subtitle"]]
[[!template text="""issues between replacement pairs, is what we call""" start="00:02:09.040" video="mainVideo-parallel" id="subtitle"]]
@@ -90,9 +79,7 @@
[[!template text="""the previously substituted targets of any other pair.""" start="00:02:56.760" video="mainVideo-parallel" id="subtitle"]]
[[!template text="""This is what we mean by &quot;no interference&quot;.""" start="00:03:00.200" video="mainVideo-parallel" id="subtitle"]]
-[[!template new="1" text="""Problem: Scaling Multi-pass""" start="00:03:04.440" video="mainVideo-parallel" id="subtitle"]]
-
-[[!template text="""However, manually invoking multiple carefully chosen""" start="00:03:04.440" video="mainVideo-parallel" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Problem: Scaling Multi-pass""" start="00:03:04.440" video="mainVideo-parallel" id="subtitle"]]</div>[[!template text="""However, manually invoking multiple carefully chosen""" start="00:03:04.440" video="mainVideo-parallel" id="subtitle"]]
[[!template text="""query-replace commands gets old very quickly.""" start="00:03:08.000" video="mainVideo-parallel" id="subtitle"]]
[[!template text="""Say we scaled up the problem and wanted to perform n""" start="00:03:11.520" video="mainVideo-parallel" id="subtitle"]]
[[!template text="""swaps instead of just two, e.g. to swap, or rather,""" start="00:03:14.200" video="mainVideo-parallel" id="subtitle"]]
@@ -111,9 +98,7 @@
[[!template text="""and two, might slow down the search if they're overly long.""" start="00:03:50.280" video="mainVideo-parallel" id="subtitle"]]
[[!template text="""Can we do better?""" start="00:03:53.480" video="mainVideo-parallel" id="subtitle"]]
-[[!template new="1" text="""Solution: Single-pass""" start="00:03:55.920" video="mainVideo-parallel" id="subtitle"]]
-
-[[!template text="""Yes we can!""" start="00:03:55.920" video="mainVideo-parallel" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Solution: Single-pass""" start="00:03:55.920" video="mainVideo-parallel" id="subtitle"]]</div>[[!template text="""Yes we can!""" start="00:03:55.920" video="mainVideo-parallel" id="subtitle"]]
[[!template text="""We can actually perform just a single pass.""" start="00:03:56.840" video="mainVideo-parallel" id="subtitle"]]
[[!template text="""The trick is to alternate between the replacement""" start="00:03:59.680" video="mainVideo-parallel" id="subtitle"]]
[[!template text="""pairs, replacing whichever source occurs the earliest,""" start="00:04:02.280" video="mainVideo-parallel" id="subtitle"]]
@@ -122,9 +107,7 @@
[[!template text="""This interleaving of replacements is not something""" start="00:04:12.280" video="mainVideo-parallel" id="subtitle"]]
[[!template text="""that's easy to do by hand with query-replace.""" start="00:04:14.520" video="mainVideo-parallel" id="subtitle"]]
-[[!template new="1" text="""Solution: Existing""" start="00:04:18.240" video="mainVideo-parallel" id="subtitle"]]
-
-[[!template text="""Since this is Emacs we're talking about, of course""" start="00:04:18.240" video="mainVideo-parallel" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Solution: Existing""" start="00:04:18.240" video="mainVideo-parallel" id="subtitle"]]</div>[[!template text="""Since this is Emacs we're talking about, of course""" start="00:04:18.240" video="mainVideo-parallel" id="subtitle"]]
[[!template text="""there already exist solutions that implement this idea.""" start="00:04:20.960" video="mainVideo-parallel" id="subtitle"]]
[[!template text="""Here are few that we could find.""" start="00:04:23.560" video="mainVideo-parallel" id="subtitle"]]
[[!template text="""The EmacsWiki has a page dedicated to this problem.""" start="00:04:25.960" video="mainVideo-parallel" id="subtitle"]]
@@ -171,9 +154,7 @@
[[!template text="""regexes and consolidates all of the existing ideas""" start="00:06:24.240" video="mainVideo-parallel" id="subtitle"]]
[[!template text="""into a single package.""" start="00:06:27.120" video="mainVideo-parallel" id="subtitle"]]
-[[!template new="1" text="""Solution: query-replace-parallel""" start="00:06:29.080" video="mainVideo-parallel" id="subtitle"]]
-
-[[!template text="""We call it query-replace-parallel.""" start="00:06:29.080" video="mainVideo-parallel" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Solution: query-replace-parallel""" start="00:06:29.080" video="mainVideo-parallel" id="subtitle"]]</div>[[!template text="""We call it query-replace-parallel.""" start="00:06:29.080" video="mainVideo-parallel" id="subtitle"]]
[[!template text="""The package is free and open-source and can currently""" start="00:06:31.360" video="mainVideo-parallel" id="subtitle"]]
[[!template text="""be found on GitHub under hokomo/query-replace-parallel.""" start="00:06:34.160" video="mainVideo-parallel" id="subtitle"]]
[[!template text="""The name is not yet finalized and we're open to any""" start="00:06:37.400" video="mainVideo-parallel" id="subtitle"]]
@@ -184,9 +165,7 @@
[[!template text="""With all of that said, let's go through a few demos""" start="00:06:48.900" video="mainVideo-parallel" id="subtitle"]]
[[!template text="""to illustrate some use cases and see how to use the package.""" start="00:06:51.400" video="mainVideo-parallel" id="subtitle"]]
-[[!template new="1" text="""Demonstration: Swap""" start="00:06:55.240" video="mainVideo-parallel" id="subtitle"]]
-
-[[!template text="""Our first demo is a simple swap, like the one we""" start="00:06:55.240" video="mainVideo-parallel" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Demonstration: Swap""" start="00:06:55.240" video="mainVideo-parallel" id="subtitle"]]</div>[[!template text="""Our first demo is a simple swap, like the one we""" start="00:06:55.240" video="mainVideo-parallel" id="subtitle"]]
[[!template text="""showed at the beginning of the presentation.""" start="00:06:57.560" video="mainVideo-parallel" id="subtitle"]]
[[!template text="""This chunk of text is actually one of the tests""" start="00:06:59.240" video="mainVideo-parallel" id="subtitle"]]
[[!template text="""from our package's code.""" start="00:07:02.160" video="mainVideo-parallel" id="subtitle"]]
@@ -209,9 +188,7 @@
[[!template text="""execute them until the end,""" start="00:07:49.203" video="mainVideo-parallel" id="subtitle"]]
[[!template text="""and so on.""" start="00:07:50.240" video="mainVideo-parallel" id="subtitle"]]
-[[!template new="1" text="""Demonstration: LaTeX""" start="00:07:53.970" video="mainVideo-parallel" id="subtitle"]]
-
-[[!template text="""The second demo shows our first regex use case.""" start="00:07:53.970" video="mainVideo-parallel" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Demonstration: LaTeX""" start="00:07:53.970" video="mainVideo-parallel" id="subtitle"]]</div>[[!template text="""The second demo shows our first regex use case.""" start="00:07:53.970" video="mainVideo-parallel" id="subtitle"]]
[[!template text="""Imagine we have the following LaTeX code.""" start="00:07:56.280" video="mainVideo-parallel" id="subtitle"]]
[[!template text="""We realize that we haven't been completely consistent""" start="00:07:58.720" video="mainVideo-parallel" id="subtitle"]]
[[!template text="""in our use and naming of macros, so we decide to""" start="00:08:01.480" video="mainVideo-parallel" id="subtitle"]]
@@ -233,9 +210,7 @@
[[!template text="""There we go, the fixes are done and we didn't have""" start="00:08:42.280" video="mainVideo-parallel" id="subtitle"]]
[[!template text="""to think about in which order to apply them.""" start="00:08:44.480" video="mainVideo-parallel" id="subtitle"]]
-[[!template new="1" text="""Demonstration: Regex""" start="00:08:48.700" video="mainVideo-parallel" id="subtitle"]]
-
-[[!template text="""We now take a look at a more complicated regex""" start="00:08:48.700" video="mainVideo-parallel" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Demonstration: Regex""" start="00:08:48.700" video="mainVideo-parallel" id="subtitle"]]</div>[[!template text="""We now take a look at a more complicated regex""" start="00:08:48.700" video="mainVideo-parallel" id="subtitle"]]
[[!template text="""example to demonstrate that even advanced query-replace""" start="00:08:51.000" video="mainVideo-parallel" id="subtitle"]]
[[!template text="""features are supported.""" start="00:08:53.680" video="mainVideo-parallel" id="subtitle"]]
[[!template text="""Each &quot;foo&quot; and &quot;bar&quot; in this example is followed by""" start="00:08:55.100" video="mainVideo-parallel" id="subtitle"]]
@@ -252,9 +227,7 @@
[[!template text="""Performing the replacements, we can see how each""" start="00:09:27.040" video="mainVideo-parallel" id="subtitle"]]
[[!template text="""number is incremented or decremented appropriately.""" start="00:09:29.120" video="mainVideo-parallel" id="subtitle"]]
-[[!template new="1" text="""Demonstration: Order""" start="00:09:36.320" video="mainVideo-parallel" id="subtitle"]]
-
-[[!template text="""We haven't covered it explicitly so some of you may""" start="00:09:36.320" video="mainVideo-parallel" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Demonstration: Order""" start="00:09:36.320" video="mainVideo-parallel" id="subtitle"]]</div>[[!template text="""We haven't covered it explicitly so some of you may""" start="00:09:36.320" video="mainVideo-parallel" id="subtitle"]]
[[!template text="""be wondering how parallel replacement deals with""" start="00:09:38.760" video="mainVideo-parallel" id="subtitle"]]
[[!template text="""overlapping matches and whether the order of the""" start="00:09:41.360" video="mainVideo-parallel" id="subtitle"]]
[[!template text="""replacement pairs is significant.""" start="00:09:43.840" video="mainVideo-parallel" id="subtitle"]]
@@ -280,9 +253,7 @@
[[!template text="""The order only matters when two or more sources""" start="00:10:46.760" video="mainVideo-parallel" id="subtitle"]]
[[!template text="""share the same prefix, as in this example.""" start="00:10:49.960" video="mainVideo-parallel" id="subtitle"]]
-[[!template new="1" text="""Demonstration: Fun""" start="00:10:54.440" video="mainVideo-parallel" id="subtitle"]]
-
-[[!template text="""The final demo tests the limits of the package and""" start="00:10:54.440" video="mainVideo-parallel" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Demonstration: Fun""" start="00:10:54.440" video="mainVideo-parallel" id="subtitle"]]</div>[[!template text="""The final demo tests the limits of the package and""" start="00:10:54.440" video="mainVideo-parallel" id="subtitle"]]
[[!template text="""shows that it fully integrates with query-replace.""" start="00:10:56.960" video="mainVideo-parallel" id="subtitle"]]
[[!template text="""It is really just for fun and can even serve as a""" start="00:10:59.760" video="mainVideo-parallel" id="subtitle"]]
[[!template text="""small Emacs brainteaser.""" start="00:11:03.040" video="mainVideo-parallel" id="subtitle"]]
@@ -310,9 +281,7 @@
[[!template text="""We confirm the prompt and finally rename our directories.""" start="00:12:16.300" video="mainVideo-parallel" id="subtitle"]]
[[!template text="""Wow, that really paid off.""" start="00:12:25.360" video="mainVideo-parallel" id="subtitle"]]
-[[!template new="1" text="""Implementation""" start="00:12:29.120" video="mainVideo-parallel" id="subtitle"]]
-
-[[!template text="""Before we finish, a few quick words about the""" start="00:12:29.120" video="mainVideo-parallel" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Implementation""" start="00:12:29.120" video="mainVideo-parallel" id="subtitle"]]</div>[[!template text="""Before we finish, a few quick words about the""" start="00:12:29.120" video="mainVideo-parallel" id="subtitle"]]
[[!template text="""implementation for the curious.""" start="00:12:31.480" video="mainVideo-parallel" id="subtitle"]]
[[!template text="""Both query-replace-parallel and query-replace-parallel-regexp""" start="00:12:33.300" video="mainVideo-parallel" id="subtitle"]]
[[!template text="""delegate to the complex perform-replace function""" start="00:12:36.480" video="mainVideo-parallel" id="subtitle"]]
@@ -354,9 +323,7 @@
[[!template text="""tried to do it in the simplest and least intrusive way""" start="00:14:14.040" video="mainVideo-parallel" id="subtitle"]]
[[!template text="""possible.""" start="00:14:16.680" video="mainVideo-parallel" id="subtitle"]]
-[[!template new="1" text="""End""" start="00:14:18.740" video="mainVideo-parallel" id="subtitle"]]
-
-[[!template text="""In conclusion, go download and play with the package.""" start="00:14:18.740" video="mainVideo-parallel" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""End""" start="00:14:18.740" video="mainVideo-parallel" id="subtitle"]]</div>[[!template text="""In conclusion, go download and play with the package.""" start="00:14:18.740" video="mainVideo-parallel" id="subtitle"]]
[[!template text="""Even if you're not performing overlapping replacements,""" start="00:14:21.680" video="mainVideo-parallel" id="subtitle"]]
[[!template text="""you can still use query-replace-parallel for the""" start="00:14:24.560" video="mainVideo-parallel" id="subtitle"]]
[[!template text="""peace of mind knowing that things won't go wrong if""" start="00:14:26.880" video="mainVideo-parallel" id="subtitle"]]
@@ -366,8 +333,7 @@
[[!template text="""improvements or bugs that make it only a 99% solution.""" start="00:14:37.560" video="mainVideo-parallel" id="subtitle"]]
[[!template text="""Thanks for listening and have a great EmacsConf!""" start="00:14:40.640" video="mainVideo-parallel" id="subtitle"]]
-<a name="parallel-qanda-transcript"></a>
-# Q&A transcript (unedited)
+</div><div class="transcript transcript-qanda"><a name="parallel-qanda-transcript"></a><h1>Q&A transcript (unedited)</h1>
[[!template text="""[Speaker 0]: And I think we are live.""" start="00:00:08.620" video="qanda-parallel" id="subtitle"]]
[[!template text="""Hello again, everyone.""" start="00:00:09.620" video="qanda-parallel" id="subtitle"]]
@@ -625,7 +591,7 @@
[[!template text="""[Speaker 1]: Bye, thank you, see you.""" start="00:10:11.160" video="qanda-parallel" id="subtitle"]]
[[!template text="""[Speaker 2]: You""" start="00:10:15.060" video="qanda-parallel" id="subtitle"]]
-Questions or comments? Please e-mail [hokomo@disroot.org](mailto:hokomo@disroot.org?subject=Comment%20for%20EmacsConf%202023%20parallel%3A%20Parallel%20text%20replacement)
+</div>Questions or comments? Please e-mail [hokomo@disroot.org](mailto:hokomo@disroot.org?subject=Comment%20for%20EmacsConf%202023%20parallel%3A%20Parallel%20text%20replacement)
<!-- End of emacsconf-publish-after-page -->
diff --git a/2023/info/parallel-before.md b/2023/info/parallel-before.md
index 54bb132d..b8b4f3f2 100644
--- a/2023/info/parallel-before.md
+++ b/2023/info/parallel-before.md
@@ -1,6 +1,6 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
[[!toc ]]
-Format: 15-min talk; Q&A: BigBlueButton conference room
+Format: 15-min talk ; Q&A: BigBlueButton conference room
Status: Q&A to be extracted from the room recordings
@@ -9,7 +9,7 @@ Status: Q&A to be extracted from the room recordings
# Talk
-<div class="vid"><video controls preload="none" id="parallel-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="parallel-mainVideo" data="""
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-parallel"><source src="https://media.emacsconf.org/2023/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="mainVideo-parallel" data="""
00:00.000 Introduction
00:23.440 Problem: Goal
01:12.360 Problem: Naive Multi-pass
@@ -27,10 +27,10 @@ Status: Q&A to be extracted from the room recordings
12:29.120 Implementation
14:18.740 End
-"""]]<div></div>Duration: 14:46 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--main-vp8.webm">Download --main-vp8.webm (95MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--main.opus">Download --main.opus</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--main.webm">Download --main.webm (29MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--pad.md">Download --pad.md</a></li><li><a href="https://toobnix.org/w/t3G5zo35epS6HvVot9MdZv">View on Toobnix</a></li></ul></div></div>
+"""]]<div></div>Duration: 14:46 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2023-parallel">Open Etherpad</a></li><li><a href="https://bbb.emacsverse.org/playback/presentation/2.0/playback.html?meetingId=986da908da3b47da66e25ee3d0c4253749004ad5-1701613668042">Play recording from BigBlueButton</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--main-vp8.webm">Download --main-vp8.webm (95MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--main.opus">Download --main.opus</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--main.webm">Download --main.webm (29MB)</a></li><li><a href="https://toobnix.org/w/t3G5zo35epS6HvVot9MdZv">View on Toobnix</a></li><li><a href="https://www.youtube.com/watch?v=fUbBIWOJFh4">View on Youtube</a></li></ul></div></div>
# Q&A
-<div class="vid"><video controls preload="none" id="parallel-qanda"><source src="https://media.emacsconf.org/2023/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--answers.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div>Listen to just the audio:<br /><audio controls preload="none" id="parallel-qanda-audio" src="https://media.emacsconf.org/2023/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--answers.opus"></audio></div><div></div>Duration: 10:16 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--answers.json">Download --answers.json</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--answers.opus">Download --answers.opus (6.8MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--answers.webm">Download --answers.webm (10MB)</a></li></ul></div></div>
+<div class="vid qanda"><video controls preload="none" id="qanda-parallel"><source src="https://media.emacsconf.org/2023/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--answers.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div>Listen to just the audio:<br /><audio controls preload="none" id="qanda-parallel-audio" src="https://media.emacsconf.org/2023/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--answers.opus"></audio></div><div></div>Duration: 10:16 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2023-parallel">Open Etherpad</a></li><li><a href="https://bbb.emacsverse.org/playback/presentation/2.0/playback.html?meetingId=986da908da3b47da66e25ee3d0c4253749004ad5-1701613668042">Play recording from BigBlueButton</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--answers.json">Download --answers.json</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--answers.opus">Download --answers.opus (6.8MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--answers.webm">Download --answers.webm (10MB)</a></li></ul></div></div>
# Description
<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/info/parallel-nav.md b/2023/info/parallel-nav.md
index 5d255eff..c1f1b543 100644
--- a/2023/info/parallel-nav.md
+++ b/2023/info/parallel-nav.md
@@ -3,5 +3,5 @@
Back to the [[talks]]
Previous by track: <a href="/2023/talks/koutline">Using Koutline for stream of thought journaling</a>
Next by track: <a href="/2023/talks/eat">Eat and Eat powered Eshell, fast featureful terminal inside Emacs</a>
-Track: <span class="sched-track General">General</span>
+Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2023/watch/gen">Watch</a></strong>
</div>
diff --git a/2023/info/poltys-before.md b/2023/info/poltys-before.md
index b5eb7ada..7dbe2c8d 100644
--- a/2023/info/poltys-before.md
+++ b/2023/info/poltys-before.md
@@ -1,12 +1,12 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
[[!toc ]]
-Format: 35-min talk; Q&A: BigBlueButton conference room
+Format: 35-min talk ; Q&A: BigBlueButton conference room
Status: Q&A to be extracted from the room recordings
-<div class="vid"><video controls preload="none" id="poltys-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-poltys--the-browser-in-a-buffer--michael-bauer--main.webm" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 34:30 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-poltys--the-browser-in-a-buffer--michael-bauer--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-poltys--the-browser-in-a-buffer--michael-bauer--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-poltys--the-browser-in-a-buffer--michael-bauer--main.opus">Download --main.opus (20MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-poltys--the-browser-in-a-buffer--michael-bauer--main.webm">Download --main.webm (185MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-poltys--the-browser-in-a-buffer--michael-bauer--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-poltys--the-browser-in-a-buffer--michael-bauer--pad.md">Download --pad.md</a></li><li><a href="https://toobnix.org/w/1quXfJqC9bh9VxkA9UC21x">View on Toobnix</a></li></ul></div></div>
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-poltys"><source src="https://media.emacsconf.org/2023/emacsconf-2023-poltys--the-browser-in-a-buffer--michael-bauer--main.webm" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 34:30 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2023-poltys">Open Etherpad</a></li><li><a href="https://bbb.emacsverse.org/playback/presentation/2.0/playback.html?meetingId=823df2a9c2b725271129cfe0301fcc7e631c2e63-1701617796009">Play recording from BigBlueButton</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-poltys--the-browser-in-a-buffer--michael-bauer--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-poltys--the-browser-in-a-buffer--michael-bauer--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-poltys--the-browser-in-a-buffer--michael-bauer--main.opus">Download --main.opus (20MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-poltys--the-browser-in-a-buffer--michael-bauer--main.webm">Download --main.webm (185MB)</a></li><li><a href="https://toobnix.org/w/1quXfJqC9bh9VxkA9UC21x">View on Toobnix</a></li><li><a href="https://www.youtube.com/watch?v=mp6gaVjmKIU">View on Youtube</a></li></ul></div></div>
# Description
<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/info/poltys-nav.md b/2023/info/poltys-nav.md
index dd2be68d..54de7074 100644
--- a/2023/info/poltys-nav.md
+++ b/2023/info/poltys-nav.md
@@ -3,5 +3,5 @@
Back to the [[talks]]
Previous by track: <a href="/2023/talks/eat">Eat and Eat powered Eshell, fast featureful terminal inside Emacs</a>
Next by track: <a href="/2023/talks/cubing">Speedcubing in Emacs</a>
-Track: <span class="sched-track General">General</span>
+Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2023/watch/gen">Watch</a></strong>
</div>
diff --git a/2023/info/ref-after.md b/2023/info/ref-after.md
index 9af1f6ff..2a145fdb 100644
--- a/2023/info/ref-after.md
+++ b/2023/info/ref-after.md
@@ -1,13 +1,10 @@
<!-- Automatically generated by emacsconf-publish-after-page -->
-<a name="ref-mainVideo-transcript"></a>
-# Transcript
+<div class="transcript transcript-mainVideo"><a name="ref-mainVideo-transcript"></a><h1>Transcript</h1>
-[[!template new="1" text="""Introduction""" start="00:00:00.000" video="mainVideo-ref" id="subtitle"]]
-
-[[!template text="""Hello, this is Christopher Howard,""" start="00:00:00.000" video="mainVideo-ref" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Introduction""" start="00:00:00.000" video="mainVideo-ref" id="subtitle"]]</div>[[!template text="""Hello, this is Christopher Howard,""" start="00:00:00.000" video="mainVideo-ref" id="subtitle"]]
[[!template text="""and welcome to my talk,""" start="00:00:04.940" video="mainVideo-ref" id="subtitle"]]
[[!template text="""&quot;Informal Reference Tracking.&quot;""" start="00:00:06.520" video="mainVideo-ref" id="subtitle"]]
[[!template text="""This is a workflow talk,""" start="00:00:08.800" video="mainVideo-ref" id="subtitle"]]
@@ -50,9 +47,7 @@
[[!template text="""So there are better systems,""" start="00:02:00.800" video="mainVideo-ref" id="subtitle"]]
[[!template text="""but this is what worked for me and what was easy.""" start="00:02:02.440" video="mainVideo-ref" id="subtitle"]]
-[[!template new="1" text="""Tip about completion frameworks""" start="00:02:06.040" video="mainVideo-ref" id="subtitle"]]
-
-[[!template text="""I do want to emphasize that if you haven't,""" start="00:02:06.040" video="mainVideo-ref" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Tip about completion frameworks""" start="00:02:06.040" video="mainVideo-ref" id="subtitle"]]</div>[[!template text="""I do want to emphasize that if you haven't,""" start="00:02:06.040" video="mainVideo-ref" id="subtitle"]]
[[!template text="""you really want to learn how to use helm-mode""" start="00:02:11.320" video="mainVideo-ref" id="subtitle"]]
[[!template text="""H-E-L-M, or one of the similar systems in Emacs""" start="00:02:14.640" video="mainVideo-ref" id="subtitle"]]
[[!template text="""that does fuzzy search on Emacs commands.""" start="00:02:20.440" video="mainVideo-ref" id="subtitle"]]
@@ -72,9 +67,7 @@
[[!template text="""So if you haven't learned Helm""" start="00:03:06.960" video="mainVideo-ref" id="subtitle"]]
[[!template text="""or a similar system for Emacs, you really want to.""" start="00:03:09.120" video="mainVideo-ref" id="subtitle"]]
-[[!template new="1" text="""References file overview""" start="00:03:14.920" video="mainVideo-ref" id="subtitle"]]
-
-[[!template text="""So what is my approach?""" start="00:03:14.920" video="mainVideo-ref" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""References file overview""" start="00:03:14.920" video="mainVideo-ref" id="subtitle"]]</div>[[!template text="""So what is my approach?""" start="00:03:14.920" video="mainVideo-ref" id="subtitle"]]
[[!template text="""Well, basically, what it comes down to is really""" start="00:03:18.240" video="mainVideo-ref" id="subtitle"]]
[[!template text="""fundamentally nothing more than just a list""" start="00:03:24.880" video="mainVideo-ref" id="subtitle"]]
[[!template text="""of Org entries in a file.""" start="00:03:27.307" video="mainVideo-ref" id="subtitle"]]
@@ -121,9 +114,7 @@
[[!template text="""to make this go a lot faster""" start="00:05:35.240" video="mainVideo-ref" id="subtitle"]]
[[!template text="""rather than typing all this out.""" start="00:05:37.080" video="mainVideo-ref" id="subtitle"]]
-[[!template new="1" text="""The Emacs Lisp code""" start="00:05:39.320" video="mainVideo-ref" id="subtitle"]]
-
-[[!template text="""For that, I'll switch back to my init.el file.""" start="00:05:39.320" video="mainVideo-ref" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""The Emacs Lisp code""" start="00:05:39.320" video="mainVideo-ref" id="subtitle"]]</div>[[!template text="""For that, I'll switch back to my init.el file.""" start="00:05:39.320" video="mainVideo-ref" id="subtitle"]]
[[!template text="""There's really just five functions.""" start="00:05:45.880" video="mainVideo-ref" id="subtitle"]]
[[!template text="""The first two here are ones""" start="00:05:49.480" video="mainVideo-ref" id="subtitle"]]
[[!template text="""that I've adapted off the Internet.""" start="00:05:52.840" video="mainVideo-ref" id="subtitle"]]
@@ -167,9 +158,7 @@
[[!template text="""So if I really do want to edit those other references,""" start="00:07:55.040" video="mainVideo-ref" id="subtitle"]]
[[!template text="""I've got a function to quickly make that possible.""" start="00:07:58.120" video="mainVideo-ref" id="subtitle"]]
-[[!template new="1" text="""Example reference to Elfeed article""" start="00:08:02.720" video="mainVideo-ref" id="subtitle"]]
-
-[[!template text="""Let me give an example of this.""" start="00:08:02.720" video="mainVideo-ref" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Example reference to Elfeed article""" start="00:08:02.720" video="mainVideo-ref" id="subtitle"]]</div>[[!template text="""Let me give an example of this.""" start="00:08:02.720" video="mainVideo-ref" id="subtitle"]]
[[!template text="""I type in here, new reference.""" start="00:08:07.500" video="mainVideo-ref" id="subtitle"]]
[[!template text="""Now I've jumped to the end of my references file.""" start="00:08:13.980" video="mainVideo-ref" id="subtitle"]]
[[!template text="""See, it's ready to take the title.""" start="00:08:16.440" video="mainVideo-ref" id="subtitle"]]
@@ -231,9 +220,7 @@
[[!template text="""that only takes 20 seconds or so, or 30 seconds.""" start="00:11:31.000" video="mainVideo-ref" id="subtitle"]]
[[!template text="""Pretty quick. Pretty easy.""" start="00:11:37.500" video="mainVideo-ref" id="subtitle"]]
-[[!template new="1" text="""Searching the references""" start="00:11:41.540" video="mainVideo-ref" id="subtitle"]]
-
-[[!template text="""What about searching later?""" start="00:11:41.540" video="mainVideo-ref" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Searching the references""" start="00:11:41.540" video="mainVideo-ref" id="subtitle"]]</div>[[!template text="""What about searching later?""" start="00:11:41.540" video="mainVideo-ref" id="subtitle"]]
[[!template text="""Well, often the easiest thing is just do a simple,""" start="00:11:45.540" video="mainVideo-ref" id="subtitle"]]
[[!template text="""boring incremental search.""" start="00:11:50.474" video="mainVideo-ref" id="subtitle"]]
[[!template text="""I usually know roughly""" start="00:11:54.640" video="mainVideo-ref" id="subtitle"]]
@@ -288,7 +275,7 @@
[[!template text="""or you can reach out to me by email if you'd like.""" start="00:14:58.260" video="mainVideo-ref" id="subtitle"]]
[[!template text="""Thank you very much.""" start="00:15:01.920" video="mainVideo-ref" id="subtitle"]]
-
+</div>
Captioner: bhavin192
diff --git a/2023/info/ref-before.md b/2023/info/ref-before.md
index 165a4e1b..474b823a 100644
--- a/2023/info/ref-before.md
+++ b/2023/info/ref-before.md
@@ -1,13 +1,13 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
[[!toc ]]
-Format: 16-min talk; Q&A: IRC
+Format: 16-min talk ; Q&A: IRC
Status: All done
-<div class="vid"><video controls preload="none" id="ref-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-ref--orgmode-workflow-informal-reference-tracking--christopher-howard--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-ref--orgmode-workflow-informal-reference-tracking--christopher-howard--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-ref--orgmode-workflow-informal-reference-tracking--christopher-howard--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="ref-mainVideo" data="""
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-ref"><source src="https://media.emacsconf.org/2023/emacsconf-2023-ref--orgmode-workflow-informal-reference-tracking--christopher-howard--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-ref--orgmode-workflow-informal-reference-tracking--christopher-howard--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-ref--orgmode-workflow-informal-reference-tracking--christopher-howard--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="mainVideo-ref" data="""
00:00.000 Introduction
02:06.040 Tip about completion frameworks
03:14.920 References file overview
@@ -15,6 +15,6 @@ Status: All done
08:02.720 Example reference to Elfeed article
11:41.540 Searching the references
-"""]]<div></div>Duration: 15:04 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-ref--orgmode-workflow-informal-reference-tracking--christopher-howard--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-ref--orgmode-workflow-informal-reference-tracking--christopher-howard--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-ref--orgmode-workflow-informal-reference-tracking--christopher-howard--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-ref--orgmode-workflow-informal-reference-tracking--christopher-howard--main.ogg">Download --main.ogg (7.9MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-ref--orgmode-workflow-informal-reference-tracking--christopher-howard--main.opus">Download --main.opus (7.8MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-ref--orgmode-workflow-informal-reference-tracking--christopher-howard--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-ref--orgmode-workflow-informal-reference-tracking--christopher-howard--main.webm">Download --main.webm (38MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-ref--orgmode-workflow-informal-reference-tracking--christopher-howard--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-ref--orgmode-workflow-informal-reference-tracking--christopher-howard--pad.md">Download --pad.md</a></li><li><a href="https://toobnix.org/w/cYpEatASFWXLzDfKH4Fhec">View on Toobnix</a></li></ul></div></div>
+"""]]<div></div>Duration: 15:04 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2023-ref">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-ref--orgmode-workflow-informal-reference-tracking--christopher-howard--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-ref--orgmode-workflow-informal-reference-tracking--christopher-howard--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-ref--orgmode-workflow-informal-reference-tracking--christopher-howard--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-ref--orgmode-workflow-informal-reference-tracking--christopher-howard--main.ogg">Download --main.ogg (7.9MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-ref--orgmode-workflow-informal-reference-tracking--christopher-howard--main.opus">Download --main.opus (7.8MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-ref--orgmode-workflow-informal-reference-tracking--christopher-howard--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-ref--orgmode-workflow-informal-reference-tracking--christopher-howard--main.webm">Download --main.webm (38MB)</a></li><li><a href="https://toobnix.org/w/cYpEatASFWXLzDfKH4Fhec">View on Toobnix</a></li><li><a href="https://www.youtube.com/watch?v=qx1yeJ1Exrw">View on Youtube</a></li></ul></div></div>
# Description
<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/info/ref-nav.md b/2023/info/ref-nav.md
index a370300e..7fd597c3 100644
--- a/2023/info/ref-nav.md
+++ b/2023/info/ref-nav.md
@@ -3,5 +3,5 @@
Back to the [[talks]]
Previous by track: <a href="/2023/talks/solo">How I play TTRPGs in Emacs</a>
Next by track: <a href="/2023/talks/unentangling">(Un)entangling projects and repos</a>
-Track: <span class="sched-track General">General</span>
+Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2023/watch/gen">Watch</a></strong>
</div>
diff --git a/2023/info/repl-after.md b/2023/info/repl-after.md
index d0a895ad..5acd31f5 100644
--- a/2023/info/repl-after.md
+++ b/2023/info/repl-after.md
@@ -1,13 +1,10 @@
<!-- Automatically generated by emacsconf-publish-after-page -->
-<a name="repl-mainVideo-transcript"></a>
-# Transcript
+<div class="transcript transcript-mainVideo"><a name="repl-mainVideo-transcript"></a><h1>Transcript</h1>
-[[!template new="1" text="""Intro""" start="00:00:00.000" video="mainVideo-repl" id="subtitle"]]
-
-[[!template text="""Hi! My name is Eduardo Ochs""" start="00:00:00.000" video="mainVideo-repl" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Intro""" start="00:00:00.000" video="mainVideo-repl" id="subtitle"]]</div>[[!template text="""Hi! My name is Eduardo Ochs""" start="00:00:00.000" video="mainVideo-repl" id="subtitle"]]
[[!template text="""and the title of this talk is: REPLs""" start="00:00:03.080" video="mainVideo-repl" id="subtitle"]]
[[!template text="""in strange places - Lua, LateX, LPeg, LPegRex,""" start="00:00:05.520" video="mainVideo-repl" id="subtitle"]]
[[!template text="""and TikZ. I'm the author of an Emacs""" start="00:00:09.400" video="mainVideo-repl" id="subtitle"]]
@@ -15,9 +12,7 @@
[[!template text="""at the EmacsConf 2023, that is happening in""" start="00:00:14.880" video="mainVideo-repl" id="subtitle"]]
[[!template text="""December 2023, at the internets.""" start="00:00:18.480" video="mainVideo-repl" id="subtitle"]]
-[[!template new="1" text="""Diagrams""" start="00:00:22.520" video="mainVideo-repl" id="subtitle"]]
-
-[[!template text="""This is one of the""" start="00:00:22.520" video="mainVideo-repl" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Diagrams""" start="00:00:22.520" video="mainVideo-repl" id="subtitle"]]</div>[[!template text="""This is one of the""" start="00:00:22.520" video="mainVideo-repl" id="subtitle"]]
[[!template text="""examples of diagrams that we are""" start="00:00:23.080" video="mainVideo-repl" id="subtitle"]]
[[!template text="""going to see - let me show how I generate""" start="00:00:24.920" video="mainVideo-repl" id="subtitle"]]
[[!template text="""it... one second,""" start="00:00:27.640" video="mainVideo-repl" id="subtitle"]]
@@ -31,9 +26,7 @@
[[!template text="""generates a PDF, and if I type f8 here it""" start="00:00:53.960" video="mainVideo-repl" id="subtitle"]]
[[!template text="""shows the PDF in the lower right window.""" start="00:00:58.120" video="mainVideo-repl" id="subtitle"]]
-[[!template new="1" text="""eev""" start="00:01:03.920" video="mainVideo-repl" id="subtitle"]]
-
-[[!template text="""Let me start by explaining""" start="00:01:03.920" video="mainVideo-repl" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""eev""" start="00:01:03.920" video="mainVideo-repl" id="subtitle"]]</div>[[!template text="""Let me start by explaining""" start="00:01:03.920" video="mainVideo-repl" id="subtitle"]]
[[!template text="""briefly what is eev.""" start="00:01:06.080" video="mainVideo-repl" id="subtitle"]]
[[!template text="""First: it is something that""" start="00:01:09.840" video="mainVideo-repl" id="subtitle"]]
[[!template text="""appeared by accident in the mid-90s - I""" start="00:01:12.240" video="mainVideo-repl" id="subtitle"]]
@@ -72,9 +65,7 @@
[[!template text="""without black boxes - I'm going to explain""" start="00:02:46.160" video="mainVideo-repl" id="subtitle"]]
[[!template text="""many of these things very soon.""" start="00:02:48.840" video="mainVideo-repl" id="subtitle"]]
-[[!template new="1" text="""Another figure""" start="00:02:50.320" video="mainVideo-repl" id="subtitle"]]
-
-[[!template text="""This is a figure that that I'm going""" start="00:02:50.320" video="mainVideo-repl" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Another figure""" start="00:02:50.320" video="mainVideo-repl" id="subtitle"]]</div>[[!template text="""This is a figure that that I'm going""" start="00:02:50.320" video="mainVideo-repl" id="subtitle"]]
[[!template text="""to show in details soon, that is""" start="00:02:52.800" video="mainVideo-repl" id="subtitle"]]
[[!template text="""about something important about Lua...""" start="00:02:57.120" video="mainVideo-repl" id="subtitle"]]
[[!template text="""the font is very bad now, so let me""" start="00:02:59.960" video="mainVideo-repl" id="subtitle"]]
@@ -345,9 +336,7 @@
[[!template text="""understand what their source code do...""" start="00:16:03.800" video="mainVideo-repl" id="subtitle"]]
[[!template text="""they use lots of dirty tricks.""" start="00:16:06.160" video="mainVideo-repl" id="subtitle"]]
-[[!template new="1" text="""Object orientation in Lua""" start="00:16:08.520" video="mainVideo-repl" id="subtitle"]]
-
-[[!template text="""Let me talk a bit about object""" start="00:16:08.520" video="mainVideo-repl" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Object orientation in Lua""" start="00:16:08.520" video="mainVideo-repl" id="subtitle"]]</div>[[!template text="""Let me talk a bit about object""" start="00:16:08.520" video="mainVideo-repl" id="subtitle"]]
[[!template text="""orientation in Lua. It can be done in""" start="00:16:12.480" video="mainVideo-repl" id="subtitle"]]
[[!template text="""many ways...""" start="00:16:14.960" video="mainVideo-repl" id="subtitle"]]
[[!template text="""the main book about Lua, called""" start="00:16:15.880" video="mainVideo-repl" id="subtitle"]]
@@ -411,9 +400,7 @@
[[!template text="""changed at all times.""" start="00:19:12.680" video="mainVideo-repl" id="subtitle"]]
[[!template text="""Of course most people hate that...""" start="00:19:14.920" video="mainVideo-repl" id="subtitle"]]
-[[!template new="1" text="""My init file""" start="00:19:19.120" video="mainVideo-repl" id="subtitle"]]
-
-[[!template text="""My init file has lots of classes... by the""" start="00:19:19.120" video="mainVideo-repl" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""My init file""" start="00:19:19.120" video="mainVideo-repl" id="subtitle"]]</div>[[!template text="""My init file has lots of classes... by the""" start="00:19:19.120" video="mainVideo-repl" id="subtitle"]]
[[!template text="""way, instead of keeping many small files""" start="00:19:22.600" video="mainVideo-repl" id="subtitle"]]
[[!template text="""with many things I put lots of stuff""" start="00:19:26.080" video="mainVideo-repl" id="subtitle"]]
[[!template text="""in just one big init file.""" start="00:19:29.640" video="mainVideo-repl" id="subtitle"]]
@@ -438,9 +425,7 @@
[[!template text="""and other languages, especially the""" start="00:20:28.160" video="mainVideo-repl" id="subtitle"]]
[[!template text="""diagrams... so the code is not so important.""" start="00:20:32.280" video="mainVideo-repl" id="subtitle"]]
-[[!template new="1" text="""LaTeX and LuaLaTeX""" start="00:20:35.280" video="mainVideo-repl" id="subtitle"]]
-
-[[!template text="""Now let me talk a bit about LuaLaTeX,""" start="00:20:35.280" video="mainVideo-repl" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""LaTeX and LuaLaTeX""" start="00:20:35.280" video="mainVideo-repl" id="subtitle"]]</div>[[!template text="""Now let me talk a bit about LuaLaTeX,""" start="00:20:35.280" video="mainVideo-repl" id="subtitle"]]
[[!template text="""that is LaTeX with a Lua interpreter""" start="00:20:39.040" video="mainVideo-repl" id="subtitle"]]
[[!template text="""embedded inside, and two ways""" start="00:20:41.360" video="mainVideo-repl" id="subtitle"]]
[[!template text="""of generating pictures in LaTeX: TikZ,""" start="00:20:44.560" video="mainVideo-repl" id="subtitle"]]
@@ -532,9 +517,7 @@
[[!template text="""diagram directly in the .tex file like""" start="00:25:22.560" video="mainVideo-repl" id="subtitle"]]
[[!template text="""that...""" start="00:25:27.520" video="mainVideo-repl" id="subtitle"]]
-[[!template new="1" text="""Manim""" start="00:25:28.080" video="mainVideo-repl" id="subtitle"]]
-
-[[!template text="""These diagrams were inspired""" start="00:25:28.080" video="mainVideo-repl" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Manim""" start="00:25:28.080" video="mainVideo-repl" id="subtitle"]]</div>[[!template text="""These diagrams were inspired""" start="00:25:28.080" video="mainVideo-repl" id="subtitle"]]
[[!template text="""by something called my Manim, that...""" start="00:25:30.200" video="mainVideo-repl" id="subtitle"]]
[[!template text="""I forgot the name of the guy, but""" start="00:25:33.040" video="mainVideo-repl" id="subtitle"]]
[[!template text="""it's a guy that makes many videos about""" start="00:25:37.560" video="mainVideo-repl" id="subtitle"]]
@@ -551,9 +534,7 @@
[[!template text="""things were fun for me, because my laptop""" start="00:26:13.640" video="mainVideo-repl" id="subtitle"]]
[[!template text="""is very very slow, and my Manim was not fun.""" start="00:26:18.680" video="mainVideo-repl" id="subtitle"]]
-[[!template new="1" text="""Generating diagrams from REPLs""" start="00:26:24.360" video="mainVideo-repl" id="subtitle"]]
-
-[[!template text="""Anyway, writing code like this""" start="00:26:24.360" video="mainVideo-repl" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Generating diagrams from REPLs""" start="00:26:24.360" video="mainVideo-repl" id="subtitle"]]</div>[[!template text="""Anyway, writing code like this""" start="00:26:24.360" video="mainVideo-repl" id="subtitle"]]
[[!template text="""inside a .tex file was not very""" start="00:26:27.360" video="mainVideo-repl" id="subtitle"]]
[[!template text="""fun because it was hard to""" start="00:26:32.720" video="mainVideo-repl" id="subtitle"]]
[[!template text="""debug... so in 2022 I started to play""" start="00:26:35.520" video="mainVideo-repl" id="subtitle"]]
@@ -634,9 +615,7 @@
[[!template text="""example. The :show() is""" start="00:30:44.360" video="mainVideo-repl" id="subtitle"]]
[[!template text="""here... it generates a 3D diagram.""" start="00:30:51.360" video="mainVideo-repl" id="subtitle"]]
-[[!template new="1" text="""Parsers""" start="00:30:56.440" video="mainVideo-repl" id="subtitle"]]
-
-[[!template text="""Now let me talk about parsers and""" start="00:30:56.440" video="mainVideo-repl" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Parsers""" start="00:30:56.440" video="mainVideo-repl" id="subtitle"]]</div>[[!template text="""Now let me talk about parsers and""" start="00:30:56.440" video="mainVideo-repl" id="subtitle"]]
[[!template text="""REPLs in VERY strange places... I mean,""" start="00:31:06.280" video="mainVideo-repl" id="subtitle"]]
[[!template text="""using REPLs to build parsers step by step""" start="00:31:09.560" video="mainVideo-repl" id="subtitle"]]
[[!template text="""and&quot; replacing parts by more complex""" start="00:31:13.360" video="mainVideo-repl" id="subtitle"]]
@@ -793,9 +772,7 @@
[[!template text="""was modular, and I could replace any""" start="00:39:30.640" video="mainVideo-repl" id="subtitle"]]
[[!template text="""part of the module from a REPL...""" start="00:39:33.760" video="mainVideo-repl" id="subtitle"]]
-[[!template new="1" text="""ELpeg1.lua""" start="00:39:35.400" video="mainVideo-repl" id="subtitle"]]
-
-[[!template text="""My version of it was called ELpeg1.lua...""" start="00:39:35.400" video="mainVideo-repl" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""ELpeg1.lua""" start="00:39:35.400" video="mainVideo-repl" id="subtitle"]]</div>[[!template text="""My version of it was called ELpeg1.lua...""" start="00:39:35.400" video="mainVideo-repl" id="subtitle"]]
[[!template text="""and I decided that in my version I""" start="00:39:43.680" video="mainVideo-repl" id="subtitle"]]
[[!template text="""wouldn't have the part that""" start="00:39:47.680" video="mainVideo-repl" id="subtitle"]]
[[!template text="""receives a grammar specified as a string""" start="00:39:49.640" video="mainVideo-repl" id="subtitle"]]
@@ -983,9 +960,7 @@
[[!template text="""&quot;d&quot;... and then here's another constant""" start="00:49:57.640" video="mainVideo-repl" id="subtitle"]]
[[!template text="""capture.""" start="00:50:03.280" video="mainVideo-repl" id="subtitle"]]
-[[!template new="1" text="""Building lists""" start="00:50:03.720" video="mainVideo-repl" id="subtitle"]]
-
-[[!template text="""And I realized that these things""" start="00:50:03.720" video="mainVideo-repl" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Building lists""" start="00:50:03.720" video="mainVideo-repl" id="subtitle"]]</div>[[!template text="""And I realized that these things""" start="00:50:03.720" video="mainVideo-repl" id="subtitle"]]
[[!template text="""here were similar to how Lua""" start="00:50:05.680" video="mainVideo-repl" id="subtitle"]]
[[!template text="""specifies building lists...""" start="00:50:08.600" video="mainVideo-repl" id="subtitle"]]
[[!template text="""when we build... sorry, tables. When""" start="00:50:09.840" video="mainVideo-repl" id="subtitle"]]
@@ -1140,7 +1115,7 @@
[[!template text="""present much more but I wasn't able to""" start="00:59:04.960" video="mainVideo-repl" id="subtitle"]]
[[!template text="""prepare it... so: sorry, thanks, bye! =)""" start="00:59:07.160" video="mainVideo-repl" id="subtitle"]]
-Questions or comments? Please e-mail [eduardoochs@gmail.com](mailto:eduardoochs@gmail.com?subject=Comment%20for%20EmacsConf%202023%20repl%3A%20REPLs%20in%20strange%20places%3A%20Lua%2C%20LaTeX%2C%20LPeg%2C%20LPegRex%2C%20TikZ)
+</div>Questions or comments? Please e-mail [eduardoochs@gmail.com](mailto:eduardoochs@gmail.com?subject=Comment%20for%20EmacsConf%202023%20repl%3A%20REPLs%20in%20strange%20places%3A%20Lua%2C%20LaTeX%2C%20LPeg%2C%20LPegRex%2C%20TikZ)
<!-- End of emacsconf-publish-after-page -->
diff --git a/2023/info/repl-before.md b/2023/info/repl-before.md
index 0266527b..9b9e2efa 100644
--- a/2023/info/repl-before.md
+++ b/2023/info/repl-before.md
@@ -1,13 +1,13 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
[[!toc ]]
-Format: 60-min talk; Q&A: IRC
+Format: 60-min talk ; Q&A: IRC
Status: Q&A to be extracted from the room recordings
-<div class="vid"><video controls preload="none" id="repl-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="repl-mainVideo" data="""
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-repl"><source src="https://media.emacsconf.org/2023/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="mainVideo-repl" data="""
00:00.000 Intro
00:21.560 Diagrams
01:03.320 eev
@@ -23,6 +23,6 @@ Status: Q&A to be extracted from the room recordings
39:03.200 ELpeg1.lua
50:04.160 Building lists
-"""]]<div></div>Duration: 59:10 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--main.opus">Download --main.opus (29MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--main.vtt">Download --main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--main.webm">Download --main.webm (187MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--pad.md">Download --pad.md</a></li><li><a href="https://toobnix.org/w/oAjqkLNfo9B63EE1G6cJJV">View on Toobnix</a></li></ul></div></div>
+"""]]<div></div>Duration: 59:10 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2023-repl">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--main.opus">Download --main.opus (29MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--main.vtt">Download --main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--main.webm">Download --main.webm (187MB)</a></li><li><a href="https://toobnix.org/w/oAjqkLNfo9B63EE1G6cJJV">View on Toobnix</a></li><li><a href="https://www.youtube.com/watch?v=lGjfzfC1CH0">View on Youtube</a></li></ul></div></div>
# Description
<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/info/repl-nav.md b/2023/info/repl-nav.md
index 7ef1a2a2..a2bde0f3 100644
--- a/2023/info/repl-nav.md
+++ b/2023/info/repl-nav.md
@@ -3,5 +3,5 @@
Back to the [[talks]]
Previous by track: <a href="/2023/talks/eval">Editor Integrated REPL Driven Development for all languages</a>
Next by track: <a href="/2023/talks/doc">Literate Documentation with Emacs and Org Mode</a>
-Track: <span class="sched-track Development">Development</span>
+Track: <span class="sched-track Development">Development</span> - <strong><a href="https://emacsconf.org/2023/watch/dev">Watch</a></strong>
</div>
diff --git a/2023/info/sat-close-after.md b/2023/info/sat-close-after.md
index a40a2ed3..caa994ab 100644
--- a/2023/info/sat-close-after.md
+++ b/2023/info/sat-close-after.md
@@ -1,8 +1,7 @@
<!-- Automatically generated by emacsconf-publish-after-page -->
-<a name="sat-close-mainVideo-transcript"></a>
-# Transcript (unedited)
+<div class="transcript transcript-mainVideo"><a name="sat-close-mainVideo-transcript"></a><h1>Transcript (unedited)</h1>
[[!template text="""[Speaker 0]: Session is being recorded.""" start="00:00:05.200" video="mainVideo-sat-close" id="subtitle"]]
[[!template text="""Just waiting for Corwin and Leo.""" start="00:00:06.819" video="mainVideo-sat-close" id="subtitle"]]
@@ -172,7 +171,7 @@
[[!template text="""don't have permission to do that in this""" start="00:08:52.540" video="mainVideo-sat-close" id="subtitle"]]
[[!template text="""room.""" start="00:08:54.280" video="mainVideo-sat-close" id="subtitle"]]
-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)
+</div>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)
<!-- End of emacsconf-publish-after-page -->
diff --git a/2023/info/sat-close-before.md b/2023/info/sat-close-before.md
index d44b5b4b..3b574968 100644
--- a/2023/info/sat-close-before.md
+++ b/2023/info/sat-close-before.md
@@ -1,6 +1,6 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
[[!toc ]]
-Format: 9-min talk; Q&A: ask questions via Etherpad/IRC; we'll e-mail the speaker and post answers on this wiki page after the conference
+Format: 9-min talk ; Q&A: ask questions via Etherpad/IRC; we'll e-mail the speaker and post answers on this wiki page after the conference
Status: Q&A to be extracted from the room recordings
@@ -9,10 +9,10 @@ Status: Q&A to be extracted from the room recordings
# Talk
-<div class="vid"><video controls preload="none" id="sat-close-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-sat-close--saturday-closing-remarks--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 09:00 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--main.json">Download --main.json</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--main.opus">Download --main.opus (4.7MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--main.vtt">Download --main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--main.webm">Download --main.webm (32MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--pad.md">Download --pad.md</a></li><li><a href="https://www.youtube.com/playlist?list=PLomc4HLgvuCUdrW3JkugtKv8xPelUoOyP">View on Toobnix</a></li></ul></div></div>
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-sat-close"><source src="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-sat-close--saturday-closing-remarks--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 09:00 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2023-sat-close">Open Etherpad</a></li><li><a href="https://bbb.emacsverse.org/playback/presentation/2.0/playback.html?meetingId=bb384a46db00ac8a0175df0a0668c94a9992b663-1701554802497">Play recording from BigBlueButton</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--main.json">Download --main.json</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--main.opus">Download --main.opus (4.7MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--main.vtt">Download --main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--main.webm">Download --main.webm (32MB)</a></li><li><a href="https://www.youtube.com/playlist?list=PLomc4HLgvuCUdrW3JkugtKv8xPelUoOyP">View on Toobnix</a></li><li><a href="https://www.youtube.com/watch?v=6OOUfBF6t7k">View on Youtube</a></li></ul></div></div>
# Q&A
-<div class="vid"><div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--main.json">Download --main.json</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--main.opus">Download --main.opus (4.7MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--main.vtt">Download --main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--main.webm">Download --main.webm (32MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--pad.md">Download --pad.md</a></li></ul></div></div>
+<div class="vid qanda"><div></div><div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2023-sat-close">Open Etherpad</a></li><li><a href="https://bbb.emacsverse.org/playback/presentation/2.0/playback.html?meetingId=bb384a46db00ac8a0175df0a0668c94a9992b663-1701554802497">Play recording from BigBlueButton</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--main.json">Download --main.json</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--main.opus">Download --main.opus (4.7MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--main.vtt">Download --main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--main.webm">Download --main.webm (32MB)</a></li></ul></div></div>
# Description
<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/info/sat-close-nav.md b/2023/info/sat-close-nav.md
index 219f76fc..e175a40c 100644
--- a/2023/info/sat-close-nav.md
+++ b/2023/info/sat-close-nav.md
@@ -3,5 +3,5 @@
Back to the [[talks]]
Previous by track: <a href="/2023/talks/sat-open">Saturday opening remarks</a>
Next by track: <a href="/2023/talks/sun-open">Sunday opening remarks</a>
-Track: <span class="sched-track General">General</span>
+Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2023/watch/gen">Watch</a></strong>
</div>
diff --git a/2023/info/sat-open-after.md b/2023/info/sat-open-after.md
index aee69d2e..417922c4 100644
--- a/2023/info/sat-open-after.md
+++ b/2023/info/sat-open-after.md
@@ -1,8 +1,7 @@
<!-- Automatically generated by emacsconf-publish-after-page -->
-<a name="sat-open-mainVideo-transcript"></a>
-# Transcript
+<div class="transcript transcript-mainVideo"><a name="sat-open-mainVideo-transcript"></a><h1>Transcript</h1>
[[!template text="""Welcome to EmacsConf 2023, where we get to find out""" start="00:00:00.000" video="mainVideo-sat-open" id="subtitle"]]
[[!template text="""just how much we can do with a text editor.""" start="00:00:04.559" video="mainVideo-sat-open" id="subtitle"]]
@@ -126,7 +125,7 @@
[[!template text="""who make EmacsConf even possible.""" start="00:05:18.724" video="mainVideo-sat-open" id="subtitle"]]
[[!template text="""Thanks for coming to EmacsConf 2023.""" start="00:05:21.763" video="mainVideo-sat-open" id="subtitle"]]
-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)
+</div>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)
<!-- End of emacsconf-publish-after-page -->
diff --git a/2023/info/sat-open-before.md b/2023/info/sat-open-before.md
index c812c4c6..df86ddb8 100644
--- a/2023/info/sat-open-before.md
+++ b/2023/info/sat-open-before.md
@@ -1,12 +1,12 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
[[!toc ]]
-Format: 6-min talk; Q&A: Etherpad
+Format: 6-min talk ; Q&A: Etherpad
Status: All done
-<div class="vid"><video controls preload="none" id="sat-open-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-sat-open--saturday-opening-remarks--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-sat-open--saturday-opening-remarks--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 05:25 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-open--saturday-opening-remarks--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-open--saturday-opening-remarks--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-open--saturday-opening-remarks--main.opus">Download --main.opus (2.5MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-open--saturday-opening-remarks--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-open--saturday-opening-remarks--main.webm">Download --main.webm (18MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-open--saturday-opening-remarks--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-open--saturday-opening-remarks--pad.md">Download --pad.md</a></li><li><a href="https://toobnix.org/w/wEZX2JkDFpFqNFXnYeQTyb">View on Toobnix</a></li></ul></div></div>
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-sat-open"><source src="https://media.emacsconf.org/2023/emacsconf-2023-sat-open--saturday-opening-remarks--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-sat-open--saturday-opening-remarks--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 05:25 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2023-sat-open">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-open--saturday-opening-remarks--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-open--saturday-opening-remarks--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-open--saturday-opening-remarks--main.opus">Download --main.opus (2.5MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-open--saturday-opening-remarks--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-open--saturday-opening-remarks--main.webm">Download --main.webm (18MB)</a></li><li><a href="https://toobnix.org/w/wEZX2JkDFpFqNFXnYeQTyb">View on Toobnix</a></li><li><a href="https://youtu.be/piEHmLVtG6A">View on Youtube</a></li></ul></div></div>
# Description
<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/info/sat-open-nav.md b/2023/info/sat-open-nav.md
index c1355bfc..9d1a5ef9 100644
--- a/2023/info/sat-open-nav.md
+++ b/2023/info/sat-open-nav.md
@@ -3,5 +3,5 @@
Back to the [[talks]]
Previous by track: <a href="/2023/talks/emacsconf">EmacsConf.org: How we use Org Mode and TRAMP to organize and run a multi-track conference</a>
Next by track: <a href="/2023/talks/sat-close">Saturday closing remarks</a>
-Track: <span class="sched-track General">General</span>
+Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2023/watch/gen">Watch</a></strong>
</div>
diff --git a/2023/info/scheme-after.md b/2023/info/scheme-after.md
index 17b95b51..a466d69a 100644
--- a/2023/info/scheme-after.md
+++ b/2023/info/scheme-after.md
@@ -1,22 +1,17 @@
<!-- Automatically generated by emacsconf-publish-after-page -->
-<a name="scheme-mainVideo-transcript"></a>
-# Transcript
+<div class="transcript transcript-mainVideo"><a name="scheme-mainVideo-transcript"></a><h1>Transcript</h1>
-[[!template new="1" text="""Introduction""" start="00:00:02.120" video="mainVideo-scheme" id="subtitle"]]
-
-[[!template text="""Hello and welcome everyone on EmacsConf 2023.""" start="00:00:02.120" video="mainVideo-scheme" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Introduction""" start="00:00:02.120" video="mainVideo-scheme" id="subtitle"]]</div>[[!template text="""Hello and welcome everyone on EmacsConf 2023.""" start="00:00:02.120" video="mainVideo-scheme" id="subtitle"]]
[[!template text="""I'm Andrew Tropin.""" start="00:00:07.400" video="mainVideo-scheme" id="subtitle"]]
[[!template text="""I work on operating systems and programming languages.""" start="00:00:08.720" video="mainVideo-scheme" id="subtitle"]]
[[!template text="""Today, we discuss Lisps, Schemes, REPLs,""" start="00:00:11.920" video="mainVideo-scheme" id="subtitle"]]
[[!template text="""interactive development,""" start="00:00:16.640" video="mainVideo-scheme" id="subtitle"]]
[[!template text="""and how to make your own cozy development environment.""" start="00:00:18.140" video="mainVideo-scheme" id="subtitle"]]
-[[!template new="1" text="""Interactive development""" start="00:00:23.280" video="mainVideo-scheme" id="subtitle"]]
-
-[[!template text="""Let's start from interactive development.""" start="00:00:23.280" video="mainVideo-scheme" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Interactive development""" start="00:00:23.280" video="mainVideo-scheme" id="subtitle"]]</div>[[!template text="""Let's start from interactive development.""" start="00:00:23.280" video="mainVideo-scheme" id="subtitle"]]
[[!template text="""Lisps are famous for a nice""" start="00:00:26.320" video="mainVideo-scheme" id="subtitle"]]
[[!template text="""Interactive Development Experience.""" start="00:00:29.520" video="mainVideo-scheme" id="subtitle"]]
[[!template text="""They have REPLs.""" start="00:00:32.480" video="mainVideo-scheme" id="subtitle"]]
@@ -33,9 +28,7 @@
[[!template text="""but is it enough?""" start="00:01:14.600" video="mainVideo-scheme" id="subtitle"]]
[[!template text="""Let's see.""" start="00:01:16.680" video="mainVideo-scheme" id="subtitle"]]
-[[!template new="1" text="""REPL: Read Eval Print Loop""" start="00:01:18.180" video="mainVideo-scheme" id="subtitle"]]
-
-[[!template text="""We know that Emacs is very good for Lisps and REPL.""" start="00:01:18.180" video="mainVideo-scheme" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""REPL: Read Eval Print Loop""" start="00:01:18.180" video="mainVideo-scheme" id="subtitle"]]</div>[[!template text="""We know that Emacs is very good for Lisps and REPL.""" start="00:01:18.180" video="mainVideo-scheme" id="subtitle"]]
[[!template text="""Lisp and Emacs should be a perfect setup.""" start="00:01:22.840" video="mainVideo-scheme" id="subtitle"]]
[[!template text="""But let's see how REPL basically works.""" start="00:01:26.040" video="mainVideo-scheme" id="subtitle"]]
[[!template text="""It's an event loop which does three things.""" start="00:01:30.080" video="mainVideo-scheme" id="subtitle"]]
@@ -66,9 +59,7 @@
[[!template text="""So you can evaluate expressions inside your text editor""" start="00:02:46.080" video="mainVideo-scheme" id="subtitle"]]
[[!template text="""and see the result here.""" start="00:02:51.600" video="mainVideo-scheme" id="subtitle"]]
-[[!template new="1" text="""Long-lasting loops""" start="00:02:53.720" video="mainVideo-scheme" id="subtitle"]]
-
-[[!template text="""Works good so far, but what happens""" start="00:02:53.720" video="mainVideo-scheme" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Long-lasting loops""" start="00:02:53.720" video="mainVideo-scheme" id="subtitle"]]</div>[[!template text="""Works good so far, but what happens""" start="00:02:53.720" video="mainVideo-scheme" id="subtitle"]]
[[!template text="""if we run a long-lasting loop,""" start="00:02:56.680" video="mainVideo-scheme" id="subtitle"]]
[[!template text="""which does a lot of operations.""" start="00:03:02.300" video="mainVideo-scheme" id="subtitle"]]
[[!template text="""As you can see here with a simple example,""" start="00:03:05.000" video="mainVideo-scheme" id="subtitle"]]
@@ -91,9 +82,7 @@
[[!template text="""And even if you do it,""" start="00:04:02.920" video="mainVideo-scheme" id="subtitle"]]
[[!template text="""you have a lot of downsides, usually.""" start="00:04:04.321" video="mainVideo-scheme" id="subtitle"]]
-[[!template new="1" text="""Not interruptible""" start="00:04:07.600" video="mainVideo-scheme" id="subtitle"]]
-
-[[!template text="""First of all, the process is not interruptible.""" start="00:04:07.600" video="mainVideo-scheme" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Not interruptible""" start="00:04:07.600" video="mainVideo-scheme" id="subtitle"]]</div>[[!template text="""First of all, the process is not interruptible.""" start="00:04:07.600" video="mainVideo-scheme" id="subtitle"]]
[[!template text="""If you have a remote process which listens on the socket""" start="00:04:13.680" video="mainVideo-scheme" id="subtitle"]]
[[!template text="""to which you connect from your development environment,""" start="00:04:18.480" video="mainVideo-scheme" id="subtitle"]]
[[!template text="""and you run some infinite loop, for example,""" start="00:04:21.940" video="mainVideo-scheme" id="subtitle"]]
@@ -102,9 +91,7 @@
[[!template text="""and signals to remote processes are not usually""" start="00:04:31.240" video="mainVideo-scheme" id="subtitle"]]
[[!template text="""the thing in such integrations.""" start="00:04:35.040" video="mainVideo-scheme" id="subtitle"]]
-[[!template new="1" text="""Output is not interactive""" start="00:04:38.760" video="mainVideo-scheme" id="subtitle"]]
-
-[[!template text="""Output is also not interactive.""" start="00:04:38.760" video="mainVideo-scheme" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Output is not interactive""" start="00:04:38.760" video="mainVideo-scheme" id="subtitle"]]</div>[[!template text="""Output is also not interactive.""" start="00:04:38.760" video="mainVideo-scheme" id="subtitle"]]
[[!template text="""Usually, for example, here you can see""" start="00:04:41.160" video="mainVideo-scheme" id="subtitle"]]
[[!template text="""when I evaluate the expression,""" start="00:04:45.320" video="mainVideo-scheme" id="subtitle"]]
[[!template text="""the output is captured on the evaluation side,""" start="00:04:47.800" video="mainVideo-scheme" id="subtitle"]]
@@ -116,9 +103,7 @@
[[!template text="""only after 5 seconds of evaluation.""" start="00:05:13.781" video="mainVideo-scheme" id="subtitle"]]
[[!template text="""Okay, what else?""" start="00:05:17.040" video="mainVideo-scheme" id="subtitle"]]
-[[!template new="1" text="""No protocol""" start="00:05:23.160" video="mainVideo-scheme" id="subtitle"]]
-
-[[!template text="""When you do such integrations, you have no protocol,""" start="00:05:23.160" video="mainVideo-scheme" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""No protocol""" start="00:05:23.160" video="mainVideo-scheme" id="subtitle"]]</div>[[!template text="""When you do such integrations, you have no protocol,""" start="00:05:23.160" video="mainVideo-scheme" id="subtitle"]]
[[!template text="""you have just stdin and stdout.""" start="00:05:26.120" video="mainVideo-scheme" id="subtitle"]]
[[!template text="""You print to stdin from your text editor.""" start="00:05:29.760" video="mainVideo-scheme" id="subtitle"]]
[[!template text="""You read from stdout of the process.""" start="00:05:32.920" video="mainVideo-scheme" id="subtitle"]]
@@ -126,9 +111,7 @@
[[!template text="""if it requires stdin, and how to extend the REPL""" start="00:05:40.340" video="mainVideo-scheme" id="subtitle"]]
[[!template text="""to make it more featureful, and so on.""" start="00:05:47.320" video="mainVideo-scheme" id="subtitle"]]
-[[!template new="1" text="""Not scalable""" start="00:05:51.480" video="mainVideo-scheme" id="subtitle"]]
-
-[[!template text="""And also, such integrations are usually not very scalable.""" start="00:05:51.480" video="mainVideo-scheme" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Not scalable""" start="00:05:51.480" video="mainVideo-scheme" id="subtitle"]]</div>[[!template text="""And also, such integrations are usually not very scalable.""" start="00:05:51.480" video="mainVideo-scheme" id="subtitle"]]
[[!template text="""For example, if you want to have a completion,""" start="00:05:57.360" video="mainVideo-scheme" id="subtitle"]]
[[!template text="""you type something, you have the completion. Cool.""" start="00:06:14.700" video="mainVideo-scheme" id="subtitle"]]
[[!template text="""But if you run the process and at the same time""" start="00:06:17.461" video="mainVideo-scheme" id="subtitle"]]
@@ -150,9 +133,7 @@
[[!template text="""so you need something else""" start="00:07:18.420" video="mainVideo-scheme" id="subtitle"]]
[[!template text="""to make the work comfortable.""" start="00:07:21.380" video="mainVideo-scheme" id="subtitle"]]
-[[!template new="1" text="""nREPL""" start="00:07:25.860" video="mainVideo-scheme" id="subtitle"]]
-
-[[!template text="""There is already a solution called nREPL.""" start="00:07:25.860" video="mainVideo-scheme" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""nREPL""" start="00:07:25.860" video="mainVideo-scheme" id="subtitle"]]</div>[[!template text="""There is already a solution called nREPL.""" start="00:07:25.860" video="mainVideo-scheme" id="subtitle"]]
[[!template text="""It's a synchronous protocol which allows""" start="00:07:28.980" video="mainVideo-scheme" id="subtitle"]]
[[!template text="""to send operations to the server""" start="00:07:31.120" video="mainVideo-scheme" id="subtitle"]]
[[!template text="""and receive responses in a synchronous manner.""" start="00:07:34.020" video="mainVideo-scheme" id="subtitle"]]
@@ -179,9 +160,7 @@
[[!template text="""was not satisfying. I decided""" start="00:08:57.300" video="mainVideo-scheme" id="subtitle"]]
[[!template text="""to just implement nREPL protocol.""" start="00:08:59.400" video="mainVideo-scheme" id="subtitle"]]
-[[!template new="1" text="""Arei, Ares, and how to try""" start="00:09:01.740" video="mainVideo-scheme" id="subtitle"]]
-
-[[!template text="""First of all, I implemented nREPL server in Guile.""" start="00:09:01.740" video="mainVideo-scheme" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Arei, Ares, and how to try""" start="00:09:01.740" video="mainVideo-scheme" id="subtitle"]]</div>[[!template text="""First of all, I implemented nREPL server in Guile.""" start="00:09:01.740" video="mainVideo-scheme" id="subtitle"]]
[[!template text="""I called it `guile-ares-rs`, and used it""" start="00:09:05.720" video="mainVideo-scheme" id="subtitle"]]
[[!template text="""with a generic nREPL client for Emacs.""" start="00:09:11.340" video="mainVideo-scheme" id="subtitle"]]
[[!template text="""It worked.""" start="00:09:13.960" video="mainVideo-scheme" id="subtitle"]]
@@ -204,9 +183,7 @@
[[!template text="""that README will be complete enough""" start="00:10:27.680" video="mainVideo-scheme" id="subtitle"]]
[[!template text="""so you will be able to try it yourself.""" start="00:10:30.200" video="mainVideo-scheme" id="subtitle"]]
-[[!template new="1" text="""Demo""" start="00:10:34.180" video="mainVideo-scheme" id="subtitle"]]
-
-[[!template text="""Let's see what is possible with it already.""" start="00:10:34.180" video="mainVideo-scheme" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Demo""" start="00:10:34.180" video="mainVideo-scheme" id="subtitle"]]</div>[[!template text="""Let's see what is possible with it already.""" start="00:10:34.180" video="mainVideo-scheme" id="subtitle"]]
[[!template text="""Let's connect to nREPL server.""" start="00:10:42.680" video="mainVideo-scheme" id="subtitle"]]
[[!template text="""After that, you can evaluate the expression.""" start="00:10:51.900" video="mainVideo-scheme" id="subtitle"]]
[[!template text="""And you see the stdout and the result.""" start="00:10:56.281" video="mainVideo-scheme" id="subtitle"]]
@@ -221,9 +198,7 @@
[[!template text="""which is very convenient if you accidentally""" start="00:11:21.960" video="mainVideo-scheme" id="subtitle"]]
[[!template text="""run an infinite loop.""" start="00:11:25.160" video="mainVideo-scheme" id="subtitle"]]
-[[!template new="1" text="""Continuations""" start="00:11:27.640" video="mainVideo-scheme" id="subtitle"]]
-
-[[!template text="""Also, do you remember here we have a few more examples""" start="00:11:27.640" video="mainVideo-scheme" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Continuations""" start="00:11:27.640" video="mainVideo-scheme" id="subtitle"]]</div>[[!template text="""Also, do you remember here we have a few more examples""" start="00:11:27.640" video="mainVideo-scheme" id="subtitle"]]
[[!template text="""that we didn't try yet?""" start="00:11:32.940" video="mainVideo-scheme" id="subtitle"]]
[[!template text="""For example, on usual REPL implementation,""" start="00:11:34.080" video="mainVideo-scheme" id="subtitle"]]
[[!template text="""if I evaluate this expression, I get return value.""" start="00:11:39.160" video="mainVideo-scheme" id="subtitle"]]
@@ -243,9 +218,7 @@
[[!template text="""and you can see at the top of the screen""" start="00:12:27.280" video="mainVideo-scheme" id="subtitle"]]
[[!template text="""that it works perfectly fine.""" start="00:12:30.140" video="mainVideo-scheme" id="subtitle"]]
-[[!template new="1" text="""Reading from stdin""" start="00:12:32.460" video="mainVideo-scheme" id="subtitle"]]
-
-[[!template text="""Also, with a usual REPL implementation,""" start="00:12:32.460" video="mainVideo-scheme" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Reading from stdin""" start="00:12:32.460" video="mainVideo-scheme" id="subtitle"]]</div>[[!template text="""Also, with a usual REPL implementation,""" start="00:12:32.460" video="mainVideo-scheme" id="subtitle"]]
[[!template text="""let's see what happens when we have a process""" start="00:12:35.560" video="mainVideo-scheme" id="subtitle"]]
[[!template text="""which reads from stdin.""" start="00:12:40.320" video="mainVideo-scheme" id="subtitle"]]
[[!template text="""I evaluate the expression and nothing visible happens.""" start="00:12:41.920" video="mainVideo-scheme" id="subtitle"]]
@@ -260,9 +233,7 @@
[[!template text="""and unspecified was returned""" start="00:13:26.100" video="mainVideo-scheme" id="subtitle"]]
[[!template text="""as a result of this expression.""" start="00:13:28.680" video="mainVideo-scheme" id="subtitle"]]
-[[!template new="1" text="""Fancy example with continuations""" start="00:13:33.420" video="mainVideo-scheme" id="subtitle"]]
-
-[[!template text="""Let's make some fancy example with continuations.""" start="00:13:33.420" video="mainVideo-scheme" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Fancy example with continuations""" start="00:13:33.420" video="mainVideo-scheme" id="subtitle"]]</div>[[!template text="""Let's make some fancy example with continuations.""" start="00:13:33.420" video="mainVideo-scheme" id="subtitle"]]
[[!template text="""Continuations is a very cool mechanism""" start="00:13:37.320" video="mainVideo-scheme" id="subtitle"]]
[[!template text="""which is not the topic of today's talk,""" start="00:13:45.080" video="mainVideo-scheme" id="subtitle"]]
[[!template text="""but you can find a lot of interesting information""" start="00:13:48.000" video="mainVideo-scheme" id="subtitle"]]
@@ -290,9 +261,7 @@ another value for it.""" start="00:14:27.680" video="mainVideo-scheme" id="subti
[[!template text="""Very nice.""" start="00:15:07.520" video="mainVideo-scheme" id="subtitle"]]
[[!template text="""And every time we could easily interrupt it.""" start="00:15:08.040" video="mainVideo-scheme" id="subtitle"]]
-[[!template new="1" text="""Guix API""" start="00:15:13.160" video="mainVideo-scheme" id="subtitle"]]
-
-[[!template text="""Okay, what most annoying thing that I had previously""" start="00:15:13.160" video="mainVideo-scheme" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Guix API""" start="00:15:13.160" video="mainVideo-scheme" id="subtitle"]]</div>[[!template text="""Okay, what most annoying thing that I had previously""" start="00:15:13.160" video="mainVideo-scheme" id="subtitle"]]
[[!template text="""with the usual REPL implementation""" start="00:15:17.320" video="mainVideo-scheme" id="subtitle"]]
[[!template text="""that I have a quite nice Guix API""" start="00:15:19.340" video="mainVideo-scheme" id="subtitle"]]
[[!template text="""where I can build packages, systems and other stuff.""" start="00:15:22.760" video="mainVideo-scheme" id="subtitle"]]
@@ -328,16 +297,12 @@ another value for it.""" start="00:14:27.680" video="mainVideo-scheme" id="subti
[[!template text="""while the infinite loop is running.""" start="00:17:33.660" video="mainVideo-scheme" id="subtitle"]]
[[!template text="""Okay.""" start="00:17:40.260" video="mainVideo-scheme" id="subtitle"]]
-[[!template new="1" text="""Support""" start="00:17:42.060" video="mainVideo-scheme" id="subtitle"]]
-
-[[!template text="""Actually it took me around two months""" start="00:17:42.060" video="mainVideo-scheme" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Support""" start="00:17:42.060" video="mainVideo-scheme" id="subtitle"]]</div>[[!template text="""Actually it took me around two months""" start="00:17:42.060" video="mainVideo-scheme" id="subtitle"]]
[[!template text="""of full-time work funded by my own savings,""" start="00:17:44.920" video="mainVideo-scheme" id="subtitle"]]
[[!template text="""and you can support and help to the project""" start="00:17:48.040" video="mainVideo-scheme" id="subtitle"]]
[[!template text="""using OpenCollective or by contributing on SourceHut.""" start="00:17:51.600" video="mainVideo-scheme" id="subtitle"]]
-[[!template new="1" text="""Future steps - Multiple simultaneous evaluations in different contexts""" start="00:17:57.020" video="mainVideo-scheme" id="subtitle"]]
-
-[[!template text="""The future steps for the project""" start="00:17:57.020" video="mainVideo-scheme" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Future steps - Multiple simultaneous evaluations in different contexts""" start="00:17:57.020" video="mainVideo-scheme" id="subtitle"]]</div>[[!template text="""The future steps for the project""" start="00:17:57.020" video="mainVideo-scheme" id="subtitle"]]
[[!template text="""include an experimental workflow where you have""" start="00:17:58.700" video="mainVideo-scheme" id="subtitle"]]
[[!template text="""multiple simultaneous evaluation in different contexts.""" start="00:18:03.675" video="mainVideo-scheme" id="subtitle"]]
[[!template text="""For example, you have Fibers, you have Goblins,""" start="00:18:07.540" video="mainVideo-scheme" id="subtitle"]]
@@ -351,15 +316,11 @@ another value for it.""" start="00:14:27.680" video="mainVideo-scheme" id="subti
[[!template text="""You want to see the stderr and stdout""" start="00:18:39.240" video="mainVideo-scheme" id="subtitle"]]
[[!template text="""of those long-running processes and so on.""" start="00:18:42.520" video="mainVideo-scheme" id="subtitle"]]
-[[!template new="1" text="""Tree-sitter integration""" start="00:18:46.220" video="mainVideo-scheme" id="subtitle"]]
-
-[[!template text="""The second thing is tree-sitter integration""" start="00:18:46.220" video="mainVideo-scheme" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Tree-sitter integration""" start="00:18:46.220" video="mainVideo-scheme" id="subtitle"]]</div>[[!template text="""The second thing is tree-sitter integration""" start="00:18:46.220" video="mainVideo-scheme" id="subtitle"]]
[[!template text="""for better syntax highlighting, code navigation,""" start="00:18:50.240" video="mainVideo-scheme" id="subtitle"]]
[[!template text="""and other features.""" start="00:18:53.400" video="mainVideo-scheme" id="subtitle"]]
-[[!template new="1" text="""Full-fledged debugger""" start="00:18:56.880" video="mainVideo-scheme" id="subtitle"]]
-
-[[!template text="""And after that, probably we will do a full-fledged debugger""" start="00:18:56.880" video="mainVideo-scheme" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Full-fledged debugger""" start="00:18:56.880" video="mainVideo-scheme" id="subtitle"]]</div>[[!template text="""And after that, probably we will do a full-fledged debugger""" start="00:18:56.880" video="mainVideo-scheme" id="subtitle"]]
[[!template text="""so you can jump expressions one by one""" start="00:19:01.400" video="mainVideo-scheme" id="subtitle"]]
[[!template text="""and see the results and see some intermediate values""" start="00:19:06.240" video="mainVideo-scheme" id="subtitle"]]
[[!template text="""during the evaluation.""" start="00:19:10.780" video="mainVideo-scheme" id="subtitle"]]
@@ -368,9 +329,7 @@ another value for it.""" start="00:14:27.680" video="mainVideo-scheme" id="subti
[[!template text="""and you can implement""" start="00:19:17.080" video="mainVideo-scheme" id="subtitle"]]
[[!template text="""whatever you want on top of it.""" start="00:19:18.200" video="mainVideo-scheme" id="subtitle"]]
-[[!template new="1" text="""FAQ - Does it support other Scheme implementations?""" start="00:19:22.760" video="mainVideo-scheme" id="subtitle"]]
-
-[[!template text="""I will answer two probably very frequent questions.""" start="00:19:22.760" video="mainVideo-scheme" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""FAQ - Does it support other Scheme implementations?""" start="00:19:22.760" video="mainVideo-scheme" id="subtitle"]]</div>[[!template text="""I will answer two probably very frequent questions.""" start="00:19:22.760" video="mainVideo-scheme" id="subtitle"]]
[[!template text="""Does it support other Scheme implementations?""" start="00:19:27.080" video="mainVideo-scheme" id="subtitle"]]
[[!template text="""At the moment, it doesn't,""" start="00:19:30.500" video="mainVideo-scheme" id="subtitle"]]
[[!template text="""but the Scheme implementation is not restricted.""" start="00:19:32.280" video="mainVideo-scheme" id="subtitle"]]
@@ -380,9 +339,7 @@ another value for it.""" start="00:14:27.680" video="mainVideo-scheme" id="subti
[[!template text="""So if you implement nREPL server in a different language,""" start="00:19:48.320" video="mainVideo-scheme" id="subtitle"]]
[[!template text="""it should work with already implemented `arei` client.""" start="00:19:52.360" video="mainVideo-scheme" id="subtitle"]]
-[[!template new="1" text="""Is it possible to use it with other text editors?""" start="00:19:58.380" video="mainVideo-scheme" id="subtitle"]]
-
-[[!template text="""And is it possible to use the same functionality""" start="00:19:58.380" video="mainVideo-scheme" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Is it possible to use it with other text editors?""" start="00:19:58.380" video="mainVideo-scheme" id="subtitle"]]</div>[[!template text="""And is it possible to use the same functionality""" start="00:19:58.380" video="mainVideo-scheme" id="subtitle"]]
[[!template text="""in other text editors, for example in VS Code,""" start="00:20:04.080" video="mainVideo-scheme" id="subtitle"]]
[[!template text="""Vim, whatever?""" start="00:20:07.000" video="mainVideo-scheme" id="subtitle"]]
[[!template text="""Yes, it's possible and the case is similar here.""" start="00:20:08.680" video="mainVideo-scheme" id="subtitle"]]
@@ -390,154 +347,23 @@ another value for it.""" start="00:14:27.680" video="mainVideo-scheme" id="subti
[[!template text="""and you can write your own nREPL client""" start="00:20:16.600" video="mainVideo-scheme" id="subtitle"]]
[[!template text="""in a different text editor and it will work.""" start="00:20:19.360" video="mainVideo-scheme" id="subtitle"]]
-[[!template new="1" text="""Conclusion""" start="00:20:22.121" video="mainVideo-scheme" id="subtitle"]]
-
-[[!template text="""I would like to thank the authors and maintainers""" start="00:20:22.121" video="mainVideo-scheme" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Conclusion""" start="00:20:22.121" video="mainVideo-scheme" id="subtitle"]]</div>[[!template text="""I would like to thank the authors and maintainers""" start="00:20:22.121" video="mainVideo-scheme" id="subtitle"]]
[[!template text="""and contributors of Guile, Geiser, CIDER, Clojure,""" start="00:20:26.760" video="mainVideo-scheme" id="subtitle"]]
[[!template text="""and Emacs, and all other people""" start="00:20:30.440" video="mainVideo-scheme" id="subtitle"]]
[[!template text="""who are somehow related to the work on those projects""" start="00:20:33.360" video="mainVideo-scheme" id="subtitle"]]
[[!template text="""involved in this talk.""" start="00:20:38.780" video="mainVideo-scheme" id="subtitle"]]
[[!template text="""And I hope the Scheme programming will be enjoyable.""" start="00:20:42.080" video="mainVideo-scheme" id="subtitle"]]
-[[!template new="1" text="""Contacts""" start="00:20:45.880" video="mainVideo-scheme" id="subtitle"]]
-
-[[!template text="""If you want to contact me,""" start="00:20:45.880" video="mainVideo-scheme" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Contacts""" start="00:20:45.880" video="mainVideo-scheme" id="subtitle"]]</div>[[!template text="""If you want to contact me,""" start="00:20:45.880" video="mainVideo-scheme" id="subtitle"]]
[[!template text="""join #tropin IRC channel at libera.chat,""" start="00:20:47.240" video="mainVideo-scheme" id="subtitle"]]
[[!template text="""or drop me a message via email or feediverse""" start="00:20:49.800" video="mainVideo-scheme" id="subtitle"]]
[[!template text="""using `andrew@trop.in` handle.""" start="00:20:53.040" video="mainVideo-scheme" id="subtitle"]]
[[!template text="""I will see you in a bit in Q&A session.""" start="00:20:55.880" video="mainVideo-scheme" id="subtitle"]]
-
+</div>
Captioner: sachac
-<a name="scheme-qanda-transcript"></a>
-# Q&A transcript (unedited)
-
-[[!template text="""[Speaker 0]: I see 2 questions on the panel already.""" start="00:00:16.200" video="qanda-scheme" id="subtitle"]]
-[[!template text="""Let's see, 1 asking how much Andrew uses""" start="00:00:22.660" video="qanda-scheme" id="subtitle"]]
-[[!template text="""these ripples remotely or versus on their own""" start="00:00:26.320" video="qanda-scheme" id="subtitle"]]
-[[!template text="""desktop. And another asking if this can be""" start="00:00:29.240" video="qanda-scheme" id="subtitle"]]
-[[!template text="""integrated with EGLOT.""" start="00:00:31.160" video="qanda-scheme" id="subtitle"]]
-[[!template text="""And I will note that it is very cool that""" start="00:00:34.840" video="qanda-scheme" id="subtitle"]]
-[[!template text="""this year we've had so many talks on Ripples.""" start="00:00:36.580" video="qanda-scheme" id="subtitle"]]
-[[!template text="""Just goes to show how powerful Emacs is and""" start="00:00:40.920" video="qanda-scheme" id="subtitle"]]
-[[!template text="""just how much or how far you can push it and""" start="00:00:42.980" video="qanda-scheme" id="subtitle"]]
-[[!template text="""how much you can do with it.""" start="00:00:44.040" video="qanda-scheme" id="subtitle"]]
-[[!template text="""And so see someone asking on IRC,""" start="00:00:53.460" video="qanda-scheme" id="subtitle"]]
-[[!template text="""if or how many people use GnuGeeks.""" start="00:00:57.780" video="qanda-scheme" id="subtitle"]]
-[[!template text="""Since we are talking about Scheme,""" start="00:01:01.400" video="qanda-scheme" id="subtitle"]]
-[[!template text="""GnuGeeks is a great platform slash operating""" start="00:01:05.740" video="qanda-scheme" id="subtitle"]]
-[[!template text="""system or distro for your test house,""" start="00:01:10.380" video="qanda-scheme" id="subtitle"]]
-[[!template text="""but also for servers and such.""" start="00:01:11.920" video="qanda-scheme" id="subtitle"]]
-[[!template text="""They do some impressive,""" start="00:01:13.320" video="qanda-scheme" id="subtitle"]]
-[[!template text="""amazing work. And it's all,""" start="00:01:15.240" video="qanda-scheme" id="subtitle"]]
-[[!template text="""pretty much all done in Gindugal's scheme.""" start="00:01:19.400" video="qanda-scheme" id="subtitle"]]
-[[!template text="""So very cool stuff. Bye.""" start="00:01:30.260" video="qanda-scheme" id="subtitle"]]
-[[!template text="""You""" start="00:01:45.260" video="qanda-scheme" id="subtitle"]]
-[[!template text="""I see another interesting question on the""" start="00:03:19.940" video="qanda-scheme" id="subtitle"]]
-[[!template text="""pad. How hard is it to add support for""" start="00:03:23.440" video="qanda-scheme" id="subtitle"]]
-[[!template text="""something other than Guile?""" start="00:03:24.960" video="qanda-scheme" id="subtitle"]]
-[[!template text="""And if it makes sense to contribute at this""" start="00:03:28.040" video="qanda-scheme" id="subtitle"]]
-[[!template text="""early stage of development?""" start="00:03:28.940" video="qanda-scheme" id="subtitle"]]
-[[!template text="""They said that they've written several""" start="00:03:31.960" video="qanda-scheme" id="subtitle"]]
-[[!template text="""packages for chicken skin before and they""" start="00:03:34.000" video="qanda-scheme" id="subtitle"]]
-[[!template text="""would like to try this 1 as well.""" start="00:03:35.400" video="qanda-scheme" id="subtitle"]]
-[[!template text="""I guess since Andrew isn't still here,""" start="00:05:26.380" video="qanda-scheme" id="subtitle"]]
-[[!template text="""and there was some chatter about GnuGeeks in""" start="00:05:29.480" video="qanda-scheme" id="subtitle"]]
-[[!template text="""the chat, maybe it might be nice for me to""" start="00:05:32.400" video="qanda-scheme" id="subtitle"]]
-[[!template text="""share my screen and plug Inukis for a little""" start="00:05:35.520" video="qanda-scheme" id="subtitle"]]
-[[!template text="""bit and introduce it or at least show its""" start="00:05:38.800" video="qanda-scheme" id="subtitle"]]
-[[!template text="""website to folks who may not have seen it yet""" start="00:05:41.720" video="qanda-scheme" id="subtitle"]]
-[[!template text="""so I'm going to try and do that now.""" start="00:05:43.380" video="qanda-scheme" id="subtitle"]]
-[[!template text="""You""" start="00:05:45.260" video="qanda-scheme" id="subtitle"]]
-[[!template text="""Okay, let's see if this works.""" start="00:06:19.760" video="qanda-scheme" id="subtitle"]]
-[[!template text="""Okay, so this is GNU Geeks' website.""" start="00:06:33.540" video="qanda-scheme" id="subtitle"]]
-[[!template text="""You can go to geeks.gnu.org.""" start="00:06:35.000" video="qanda-scheme" id="subtitle"]]
-[[!template text="""And they introduced it at the top.""" start="00:06:38.820" video="qanda-scheme" id="subtitle"]]
-[[!template text="""So it's a wholly free operating system or""" start="00:06:43.480" video="qanda-scheme" id="subtitle"]]
-[[!template text="""distribution of GNU Linux.""" start="00:06:45.100" video="qanda-scheme" id="subtitle"]]
-[[!template text="""Meaning that it only has free software""" start="00:06:48.600" video="qanda-scheme" id="subtitle"]]
-[[!template text="""packaged and no non-free packages,""" start="00:06:50.840" video="qanda-scheme" id="subtitle"]]
-[[!template text="""so it is endorsed by the FSF and the GNU""" start="00:06:53.560" video="qanda-scheme" id="subtitle"]]
-[[!template text="""project. As someone said in the chat,""" start="00:06:56.640" video="qanda-scheme" id="subtitle"]]
-[[!template text="""it's kind of like Nix,""" start="00:06:57.740" video="qanda-scheme" id="subtitle"]]
-[[!template text="""but instead built on GNU Gallop scheme.""" start="00:07:01.360" video="qanda-scheme" id="subtitle"]]
-[[!template text="""It has transactional upgrades and rollbacks.""" start="00:07:05.320" video="qanda-scheme" id="subtitle"]]
-[[!template text="""So if you do upgrade your system and let's""" start="00:07:10.160" video="qanda-scheme" id="subtitle"]]
-[[!template text="""say in the middle of it,""" start="00:07:11.180" video="qanda-scheme" id="subtitle"]]
-[[!template text="""your hardware fails or your power goes out,""" start="00:07:13.200" video="qanda-scheme" id="subtitle"]]
-[[!template text="""the likelihood of things being corrupted is""" start="00:07:16.560" video="qanda-scheme" id="subtitle"]]
-[[!template text="""very low because the upgrade is essentially""" start="00:07:18.840" video="qanda-scheme" id="subtitle"]]
-[[!template text="""prepared like in the background.""" start="00:07:21.560" video="qanda-scheme" id="subtitle"]]
-[[!template text="""And then pretty much atomically,""" start="00:07:24.140" video="qanda-scheme" id="subtitle"]]
-[[!template text="""the system is switched to it.""" start="00:07:26.780" video="qanda-scheme" id="subtitle"]]
-[[!template text="""And also if there is some kind of,""" start="00:07:30.400" video="qanda-scheme" id="subtitle"]]
-[[!template text="""sorry, I'm losing my voice here.""" start="00:07:32.400" video="qanda-scheme" id="subtitle"]]
-[[!template text="""If there is some kind of issue that makes""" start="00:07:34.840" video="qanda-scheme" id="subtitle"]]
-[[!template text="""your system unbootable,""" start="00:07:35.800" video="qanda-scheme" id="subtitle"]]
-[[!template text="""you could always go back to booting the""" start="00:07:41.480" video="qanda-scheme" id="subtitle"]]
-[[!template text="""previous revision of your system when you""" start="00:07:44.600" video="qanda-scheme" id="subtitle"]]
-[[!template text="""restart in the Grub bootloader.""" start="00:07:46.100" video="qanda-scheme" id="subtitle"]]
-[[!template text="""Yeah, so they have a nice blog where they""" start="00:07:56.740" video="qanda-scheme" id="subtitle"]]
-[[!template text="""regularly post updates and what's new in the""" start="00:07:59.340" video="qanda-scheme" id="subtitle"]]
-[[!template text="""project. You can go check that out.""" start="00:08:01.000" video="qanda-scheme" id="subtitle"]]
-[[!template text="""We also have a packages archive where you can""" start="00:08:07.240" video="qanda-scheme" id="subtitle"]]
-[[!template text="""see a list of all the software that has been""" start="00:08:09.360" video="qanda-scheme" id="subtitle"]]
-[[!template text="""packaged for GNU Geeks.""" start="00:08:11.060" video="qanda-scheme" id="subtitle"]]
-[[!template text="""It is an impressive list.""" start="00:08:13.620" video="qanda-scheme" id="subtitle"]]
-[[!template text="""I don't know how many tens of thousands of""" start="00:08:16.440" video="qanda-scheme" id="subtitle"]]
-[[!template text="""packages there are. Geeks has been growing""" start="00:08:19.720" video="qanda-scheme" id="subtitle"]]
-[[!template text="""very well. And you can search the packages""" start="00:08:22.360" video="qanda-scheme" id="subtitle"]]
-[[!template text="""here. And yeah, all kinds of things are""" start="00:08:29.380" video="qanda-scheme" id="subtitle"]]
-[[!template text="""packaged. Of course, GNU Emacs is packaged,""" start="00:08:31.800" video="qanda-scheme" id="subtitle"]]
-[[!template text="""along with many extensions or packages,""" start="00:08:37.260" video="qanda-scheme" id="subtitle"]]
-[[!template text="""GNU Emacs packages that are packaged as""" start="00:08:41.039" video="qanda-scheme" id="subtitle"]]
-[[!template text="""system packages for Geeks.""" start="00:08:42.840" video="qanda-scheme" id="subtitle"]]
-[[!template text="""Yeah, so definitely go check it out.""" start="00:08:46.960" video="qanda-scheme" id="subtitle"]]
-[[!template text="""You can use Geeks both as a standalone""" start="00:08:55.680" video="qanda-scheme" id="subtitle"]]
-[[!template text="""package manager, let's say on a Debian-based""" start="00:08:59.340" video="qanda-scheme" id="subtitle"]]
-[[!template text="""distribution like Triscale,""" start="00:09:00.780" video="qanda-scheme" id="subtitle"]]
-[[!template text="""for example, or you could install it like as""" start="00:09:06.180" video="qanda-scheme" id="subtitle"]]
-[[!template text="""a complete system distribution on its own.""" start="00:09:08.900" video="qanda-scheme" id="subtitle"]]
-[[!template text="""So the former is useful if you want to maybe""" start="00:09:15.560" video="qanda-scheme" id="subtitle"]]
-[[!template text="""get a taste for Geeks and try it out before""" start="00:09:18.080" video="qanda-scheme" id="subtitle"]]
-[[!template text="""fully committing to it and switching to it as""" start="00:09:21.140" video="qanda-scheme" id="subtitle"]]
-[[!template text="""your main distro. You can try it on top of""" start="00:09:24.620" video="qanda-scheme" id="subtitle"]]
-[[!template text="""any other distro pretty much and then you can""" start="00:09:27.720" video="qanda-scheme" id="subtitle"]]
-[[!template text="""of course install it on its own as well as a""" start="00:09:31.080" video="qanda-scheme" id="subtitle"]]
-[[!template text="""system distribution.""" start="00:09:31.560" video="qanda-scheme" id="subtitle"]]
-[[!template text="""Yeah, there are a bunch of manuals and""" start="00:09:50.940" video="qanda-scheme" id="subtitle"]]
-[[!template text="""reference cards and videos that you're""" start="00:09:53.040" video="qanda-scheme" id="subtitle"]]
-[[!template text="""welcome to watch. They have several mailing""" start="00:09:55.920" video="qanda-scheme" id="subtitle"]]
-[[!template text="""lists. It sounds like they have a wiki now as""" start="00:09:59.240" video="qanda-scheme" id="subtitle"]]
-[[!template text="""well. And the development is done on Gnu""" start="00:10:04.020" video="qanda-scheme" id="subtitle"]]
-[[!template text="""Savannah. If we go to savannah.gnu.org""" start="00:10:09.680" video="qanda-scheme" id="subtitle"]]
-[[!template text="""slash projects slash geeks,""" start="00:10:12.780" video="qanda-scheme" id="subtitle"]]
-[[!template text="""Yeah, the project is developed here and they""" start="00:10:18.640" video="qanda-scheme" id="subtitle"]]
-[[!template text="""have a bunch of repositories including the""" start="00:10:21.300" video="qanda-scheme" id="subtitle"]]
-[[!template text="""main 1 which is geeks.git""" start="00:10:24.340" video="qanda-scheme" id="subtitle"]]
-[[!template text="""itself. So yeah, folks are welcome to go""" start="00:10:28.200" video="qanda-scheme" id="subtitle"]]
-[[!template text="""check it out. Let's see,""" start="00:10:32.380" video="qanda-scheme" id="subtitle"]]
-[[!template text="""maybe we can go have a look at some package""" start="00:10:35.860" video="qanda-scheme" id="subtitle"]]
-[[!template text="""definitions, although I think we're almost""" start="00:10:37.540" video="qanda-scheme" id="subtitle"]]
-[[!template text="""out of time on the live stream.""" start="00:10:38.940" video="qanda-scheme" id="subtitle"]]
-[[!template text="""So, yeah, just quickly.""" start="00:10:42.600" video="qanda-scheme" id="subtitle"]]
-[[!template text="""Emacs to the CM has all the,""" start="00:10:45.280" video="qanda-scheme" id="subtitle"]]
-[[!template text="""Emacs packages or Emacs itself.""" start="00:10:48.640" video="qanda-scheme" id="subtitle"]]
-[[!template text="""And Emacs-xyz is where you'll find all the""" start="00:10:52.120" video="qanda-scheme" id="subtitle"]]
-[[!template text="""Emacs like ELPA packages,""" start="00:10:54.480" video="qanda-scheme" id="subtitle"]]
-[[!template text="""but package for use on GNU Geeks system or""" start="00:10:57.980" video="qanda-scheme" id="subtitle"]]
-[[!template text="""with GNU Geeks. And I think that's all the""" start="00:11:01.220" video="qanda-scheme" id="subtitle"]]
-[[!template text="""time that we have. So yeah,""" start="00:11:04.080" video="qanda-scheme" id="subtitle"]]
-[[!template text="""thanks for tuning in, folks.""" start="00:11:06.000" video="qanda-scheme" id="subtitle"]]
-[[!template text="""Please post your questions on the pad.""" start="00:11:07.800" video="qanda-scheme" id="subtitle"]]
-[[!template text="""We'll pass them on to Andrew.""" start="00:11:09.280" video="qanda-scheme" id="subtitle"]]
-[[!template text="""And yeah, hope you enjoy this.""" start="00:11:12.400" video="qanda-scheme" id="subtitle"]]
-[[!template text="""Definitely go check out Andrew's work and Gnu""" start="00:11:15.140" video="qanda-scheme" id="subtitle"]]
-[[!template text="""geeks as well. You are currently the only""" start="00:11:25.320" video="qanda-scheme" id="subtitle"]]
-[[!template text="""person in this conference.""" start="00:11:26.280" video="qanda-scheme" id="subtitle"]]
-
Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202023%20scheme%3A%20Bringing%20joy%20to%20Scheme%20programming)
diff --git a/2023/info/scheme-before.md b/2023/info/scheme-before.md
index 24969b28..5aed745d 100644
--- a/2023/info/scheme-before.md
+++ b/2023/info/scheme-before.md
@@ -1,13 +1,13 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
[[!toc ]]
-Format: 22-min talk; Q&A: BigBlueButton conference room
+Format: 22-min talk ; Q&A: BigBlueButton conference room
Status: Q&A to be extracted from the room recordings
-<div class="vid"><video controls preload="none" id="scheme-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="scheme-mainVideo" data="""
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-scheme"><source src="https://media.emacsconf.org/2023/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="mainVideo-scheme" data="""
00:02.120 Introduction
00:23.280 Interactive development
01:18.180 REPL: Read Eval Print Loop
@@ -31,6 +31,6 @@ Status: Q&A to be extracted from the room recordings
20:22.121 Conclusion
20:45.880 Contacts
-"""]]<div></div>Duration: 21:01 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--main.opus">Download --main.opus (14MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--main.webm">Download --main.webm (54MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--pad.md">Download --pad.md</a></li><li><a href="https://toobnix.org/w/4moUfTEo2G8we5JuLGArWx">View on Toobnix</a></li></ul></div></div>
+"""]]<div></div>Duration: 21:01 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2023-scheme">Open Etherpad</a></li><li><a href="https://bbb.emacsverse.org/playback/presentation/2.0/playback.html?meetingId=b4a8670e0b530ee32705d58e7f7bcb5ebb49f86a-1701613648364">Play recording from BigBlueButton</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--main.opus">Download --main.opus (14MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--main.webm">Download --main.webm (54MB)</a></li><li><a href="https://toobnix.org/w/4moUfTEo2G8we5JuLGArWx">View on Toobnix</a></li><li><a href="https://www.youtube.com/watch?v=F-H3YQywr-4">View on Youtube</a></li></ul></div></div>
# Description
<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/info/scheme-nav.md b/2023/info/scheme-nav.md
index fa791c87..58a922aa 100644
--- a/2023/info/scheme-nav.md
+++ b/2023/info/scheme-nav.md
@@ -3,5 +3,5 @@
Back to the [[talks]]
Previous by track: <a href="/2023/talks/windows">Windows into Freedom</a>
Next by track: <a href="/2023/talks/world">GNU Emacs: A World of Possibilities</a>
-Track: <span class="sched-track Development">Development</span>
+Track: <span class="sched-track Development">Development</span> - <strong><a href="https://emacsconf.org/2023/watch/dev">Watch</a></strong>
</div>
diff --git a/2023/info/sharing-after.md b/2023/info/sharing-after.md
index 2b5a7b58..c338e069 100644
--- a/2023/info/sharing-after.md
+++ b/2023/info/sharing-after.md
@@ -1,13 +1,10 @@
<!-- Automatically generated by emacsconf-publish-after-page -->
-<a name="sharing-mainVideo-transcript"></a>
-# Transcript
+<div class="transcript transcript-mainVideo"><a name="sharing-mainVideo-transcript"></a><h1>Transcript</h1>
-[[!template new="1" text="""Introduction""" start="00:00:00.000" video="mainVideo-sharing" id="subtitle"]]
-
-[[!template text="""Hello everyone, I'm Jacob Boxerman.""" start="00:00:00.000" video="mainVideo-sharing" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Introduction""" start="00:00:00.000" video="mainVideo-sharing" id="subtitle"]]</div>[[!template text="""Hello everyone, I'm Jacob Boxerman.""" start="00:00:00.000" video="mainVideo-sharing" id="subtitle"]]
[[!template text="""I'm a sophomore at Columbia University""" start="00:00:02.440" video="mainVideo-sharing" id="subtitle"]]
[[!template text="""studying computer science.""" start="00:00:04.320" video="mainVideo-sharing" id="subtitle"]]
[[!template text="""I'm so excited to be here today""" start="00:00:06.140" video="mainVideo-sharing" id="subtitle"]]
@@ -16,9 +13,7 @@
[[!template text="""EmacsConf is really the epitome for me""" start="00:00:13.720" video="mainVideo-sharing" id="subtitle"]]
[[!template text="""of sharing and of learning about Emacs.""" start="00:00:16.747" video="mainVideo-sharing" id="subtitle"]]
-[[!template new="1" text="""Today's talk""" start="00:00:20.100" video="mainVideo-sharing" id="subtitle"]]
-
-[[!template text="""And in my closing keynote""" start="00:00:20.100" video="mainVideo-sharing" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Today's talk""" start="00:00:20.100" video="mainVideo-sharing" id="subtitle"]]</div>[[!template text="""And in my closing keynote""" start="00:00:20.100" video="mainVideo-sharing" id="subtitle"]]
[[!template text="""titled &quot;Sharing Emacs is Caring Emacs,&quot;""" start="00:00:21.540" video="mainVideo-sharing" id="subtitle"]]
[[!template text="""I want to drive that home,""" start="00:00:24.420" video="mainVideo-sharing" id="subtitle"]]
[[!template text="""and I want to make every day""" start="00:00:25.820" video="mainVideo-sharing" id="subtitle"]]
@@ -31,9 +26,7 @@
[[!template text="""to both grow our community""" start="00:00:42.420" video="mainVideo-sharing" id="subtitle"]]
[[!template text="""and to increase our own personal joy in Emacs.""" start="00:00:44.340" video="mainVideo-sharing" id="subtitle"]]
-[[!template new="1" text="""My history with Emacs""" start="00:00:48.900" video="mainVideo-sharing" id="subtitle"]]
-
-[[!template text="""My journey of sharing begins with my journey of learning.""" start="00:00:48.900" video="mainVideo-sharing" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""My history with Emacs""" start="00:00:48.900" video="mainVideo-sharing" id="subtitle"]]</div>[[!template text="""My journey of sharing begins with my journey of learning.""" start="00:00:48.900" video="mainVideo-sharing" id="subtitle"]]
[[!template text="""So I'll start by spending a bit of time on that.""" start="00:00:52.460" video="mainVideo-sharing" id="subtitle"]]
[[!template text="""I use Emacs every day for personal organization""" start="00:00:55.300" video="mainVideo-sharing" id="subtitle"]]
[[!template text="""and to-dos -- you know, schoolwork, projects,""" start="00:00:57.780" video="mainVideo-sharing" id="subtitle"]]
@@ -56,9 +49,7 @@
[[!template text="""a few watchers, a few forks on GitHub.""" start="00:01:39.220" video="mainVideo-sharing" id="subtitle"]]
[[!template text="""Pretty straightforward.""" start="00:01:40.540" video="mainVideo-sharing" id="subtitle"]]
-[[!template new="1" text="""Self-exploration vs learning from others""" start="00:01:42.380" video="mainVideo-sharing" id="subtitle"]]
-
-[[!template text="""But what exactly was that learning process like?""" start="00:01:42.380" video="mainVideo-sharing" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Self-exploration vs learning from others""" start="00:01:42.380" video="mainVideo-sharing" id="subtitle"]]</div>[[!template text="""But what exactly was that learning process like?""" start="00:01:42.380" video="mainVideo-sharing" id="subtitle"]]
[[!template text="""Now, Emacs was such a beast to me at first.""" start="00:01:46.420" video="mainVideo-sharing" id="subtitle"]]
[[!template text="""I was familiar with Python,""" start="00:01:49.460" video="mainVideo-sharing" id="subtitle"]]
[[!template text="""with C, Java, languages like that.""" start="00:01:51.060" video="mainVideo-sharing" id="subtitle"]]
@@ -85,9 +76,7 @@
[[!template text="""My own process started""" start="00:02:48.580" video="mainVideo-sharing" id="subtitle"]]
[[!template text="""with a lot of Googling, blog posts, YouTube, and Reddit.""" start="00:02:50.300" video="mainVideo-sharing" id="subtitle"]]
-[[!template new="1" text="""Learning process""" start="00:02:53.220" video="mainVideo-sharing" id="subtitle"]]
-
-[[!template text="""I actually found Emacs on YouTube.""" start="00:02:53.220" video="mainVideo-sharing" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Learning process""" start="00:02:53.220" video="mainVideo-sharing" id="subtitle"]]</div>[[!template text="""I actually found Emacs on YouTube.""" start="00:02:53.220" video="mainVideo-sharing" id="subtitle"]]
[[!template text="""Seeing how other people used it""" start="00:02:55.420" video="mainVideo-sharing" id="subtitle"]]
[[!template text="""was what really convinced me to try it for myself.""" start="00:02:58.140" video="mainVideo-sharing" id="subtitle"]]
[[!template text="""At a certain point when my confidence grew,""" start="00:03:01.420" video="mainVideo-sharing" id="subtitle"]]
@@ -96,9 +85,7 @@
[[!template text="""learn from it, and expand, making it my own.""" start="00:03:09.980" video="mainVideo-sharing" id="subtitle"]]
[[!template text="""And through that time, I learned Emacs.""" start="00:03:13.860" video="mainVideo-sharing" id="subtitle"]]
-[[!template new="1" text="""Emacs learning (not just learning Emacs)""" start="00:03:17.020" video="mainVideo-sharing" id="subtitle"]]
-
-[[!template text="""But I also participated in Emacs learning.""" start="00:03:17.020" video="mainVideo-sharing" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Emacs learning (not just learning Emacs)""" start="00:03:17.020" video="mainVideo-sharing" id="subtitle"]]</div>[[!template text="""But I also participated in Emacs learning.""" start="00:03:17.020" video="mainVideo-sharing" id="subtitle"]]
[[!template text="""What's the difference?""" start="00:03:21.020" video="mainVideo-sharing" id="subtitle"]]
[[!template text="""We often discuss the former,""" start="00:03:22.580" video="mainVideo-sharing" id="subtitle"]]
[[!template text="""grappling with key binds, commands.""" start="00:03:24.220" video="mainVideo-sharing" id="subtitle"]]
@@ -116,16 +103,12 @@
[[!template text="""Emacs learning is much, much harder to do alone.""" start="00:03:56.980" video="mainVideo-sharing" id="subtitle"]]
[[!template text="""And I wanted to help with that.""" start="00:04:00.260" video="mainVideo-sharing" id="subtitle"]]
-[[!template new="1" text="""My YouTube journey""" start="00:04:03.300" video="mainVideo-sharing" id="subtitle"]]
-
-[[!template text="""So this brings me to the second part of my talk,""" start="00:04:03.300" video="mainVideo-sharing" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""My YouTube journey""" start="00:04:03.300" video="mainVideo-sharing" id="subtitle"]]</div>[[!template text="""So this brings me to the second part of my talk,""" start="00:04:03.300" video="mainVideo-sharing" id="subtitle"]]
[[!template text="""my Emacs journey, how I got started""" start="00:04:05.740" video="mainVideo-sharing" id="subtitle"]]
[[!template text="""and where I am today with my YouTube channel,""" start="00:04:08.660" video="mainVideo-sharing" id="subtitle"]]
[[!template text="""my Straightforward Emacs series with nearly 200,000 views.""" start="00:04:11.460" video="mainVideo-sharing" id="subtitle"]]
-[[!template new="1" text="""Why not just read the manual?""" start="00:04:14.820" video="mainVideo-sharing" id="subtitle"]]
-
-[[!template text="""The Emacs Manual is often pushed""" start="00:04:14.820" video="mainVideo-sharing" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Why not just read the manual?""" start="00:04:14.820" video="mainVideo-sharing" id="subtitle"]]</div>[[!template text="""The Emacs Manual is often pushed""" start="00:04:14.820" video="mainVideo-sharing" id="subtitle"]]
[[!template text="""as the best way to learn Emacs.""" start="00:04:18.220" video="mainVideo-sharing" id="subtitle"]]
[[!template text="""It's an all-encompassing tome.""" start="00:04:20.380" video="mainVideo-sharing" id="subtitle"]]
[[!template text="""And as amazing as I think it is,""" start="00:04:21.860" video="mainVideo-sharing" id="subtitle"]]
@@ -153,9 +136,7 @@
[[!template text="""in my Emacs journey. I wanted to do my part.""" start="00:05:15.420" video="mainVideo-sharing" id="subtitle"]]
[[!template text="""I care about Emacs. I started to really care about Emacs.""" start="00:05:18.020" video="mainVideo-sharing" id="subtitle"]]
-[[!template new="1" text="""Why video for Emacs""" start="00:05:20.980" video="mainVideo-sharing" id="subtitle"]]
-
-[[!template text="""So I wanted to share about Emacs.""" start="00:05:20.980" video="mainVideo-sharing" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Why video for Emacs""" start="00:05:20.980" video="mainVideo-sharing" id="subtitle"]]</div>[[!template text="""So I wanted to share about Emacs.""" start="00:05:20.980" video="mainVideo-sharing" id="subtitle"]]
[[!template text="""So at that point, I refocused my work with Emacs""" start="00:05:24.320" video="mainVideo-sharing" id="subtitle"]]
[[!template text="""beyond just myself. I wanted to help others""" start="00:05:27.340" video="mainVideo-sharing" id="subtitle"]]
[[!template text="""feel the excitement that I did.""" start="00:05:30.740" video="mainVideo-sharing" id="subtitle"]]
@@ -169,9 +150,7 @@
[[!template text="""So for that, I turned to video.""" start="00:05:48.320" video="mainVideo-sharing" id="subtitle"]]
[[!template text="""And it turns out that seeing is believing.""" start="00:05:50.500" video="mainVideo-sharing" id="subtitle"]]
-[[!template new="1" text="""Straightforward Emacs""" start="00:05:54.420" video="mainVideo-sharing" id="subtitle"]]
-
-[[!template text="""I made a short video showing off Emacs Org Mode.""" start="00:05:54.420" video="mainVideo-sharing" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Straightforward Emacs""" start="00:05:54.420" video="mainVideo-sharing" id="subtitle"]]</div>[[!template text="""I made a short video showing off Emacs Org Mode.""" start="00:05:54.420" video="mainVideo-sharing" id="subtitle"]]
[[!template text="""I didn't even have a voiceover.""" start="00:05:56.900" video="mainVideo-sharing" id="subtitle"]]
[[!template text="""That video, less than five minutes long,""" start="00:05:58.960" video="mainVideo-sharing" id="subtitle"]]
[[!template text="""but still incorporating some of my core principles,""" start="00:06:01.700" video="mainVideo-sharing" id="subtitle"]]
@@ -187,9 +166,7 @@
[[!template text="""when I was figuring out""" start="00:06:27.600" video="mainVideo-sharing" id="subtitle"]]
[[!template text="""Emacs' numerous and wonderful features.""" start="00:06:28.660" video="mainVideo-sharing" id="subtitle"]]
-[[!template new="1" text="""Challenges and benefits of video""" start="00:06:32.700" video="mainVideo-sharing" id="subtitle"]]
-
-[[!template text="""Video does, I admit, come with its own set of challenges.""" start="00:06:32.700" video="mainVideo-sharing" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Challenges and benefits of video""" start="00:06:32.700" video="mainVideo-sharing" id="subtitle"]]</div>[[!template text="""Video does, I admit, come with its own set of challenges.""" start="00:06:32.700" video="mainVideo-sharing" id="subtitle"]]
[[!template text="""Complaints that video is less accessible, it's valid.""" start="00:06:36.620" video="mainVideo-sharing" id="subtitle"]]
[[!template text="""They're more time consuming, it's valid too.""" start="00:06:40.400" video="mainVideo-sharing" id="subtitle"]]
[[!template text="""It's harder to skim a video than a blog post,""" start="00:06:42.460" video="mainVideo-sharing" id="subtitle"]]
@@ -208,9 +185,7 @@
[[!template text="""to outweigh those cons of video,""" start="00:07:12.780" video="mainVideo-sharing" id="subtitle"]]
[[!template text="""to outweigh those common complaints.""" start="00:07:14.500" video="mainVideo-sharing" id="subtitle"]]
-[[!template new="1" text="""Crafting tutorials that work""" start="00:07:16.300" video="mainVideo-sharing" id="subtitle"]]
-
-[[!template text="""What was it? I covered topics that had been done before.""" start="00:07:16.300" video="mainVideo-sharing" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Crafting tutorials that work""" start="00:07:16.300" video="mainVideo-sharing" id="subtitle"]]</div>[[!template text="""What was it? I covered topics that had been done before.""" start="00:07:16.300" video="mainVideo-sharing" id="subtitle"]]
[[!template text="""But I wanted to present them in my way.""" start="00:07:21.660" video="mainVideo-sharing" id="subtitle"]]
[[!template text="""In the way that I knew people would appreciate,""" start="00:07:24.020" video="mainVideo-sharing" id="subtitle"]]
[[!template text="""because it's what I would have appreciated""" start="00:07:26.660" video="mainVideo-sharing" id="subtitle"]]
@@ -229,9 +204,7 @@
[[!template text="""And though prerecorded, I wanted to present""" start="00:08:05.660" video="mainVideo-sharing" id="subtitle"]]
[[!template text="""my unfiltered, raw self.""" start="00:08:08.260" video="mainVideo-sharing" id="subtitle"]]
-[[!template new="1" text="""High-quality and accessible content""" start="00:08:11.720" video="mainVideo-sharing" id="subtitle"]]
-
-[[!template text="""Another goal of mine is high quality and accessible content.""" start="00:08:11.720" video="mainVideo-sharing" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""High-quality and accessible content""" start="00:08:11.720" video="mainVideo-sharing" id="subtitle"]]</div>[[!template text="""Another goal of mine is high quality and accessible content.""" start="00:08:11.720" video="mainVideo-sharing" id="subtitle"]]
[[!template text="""I speak carefully and I tune my volume,""" start="00:08:15.940" video="mainVideo-sharing" id="subtitle"]]
[[!template text="""making it easier to listen to,""" start="00:08:18.580" video="mainVideo-sharing" id="subtitle"]]
[[!template text="""and improving YouTube's auto-captioning.""" start="00:08:20.680" video="mainVideo-sharing" id="subtitle"]]
@@ -256,9 +229,7 @@
[[!template text="""So I do my best to mention different possible keybindings""" start="00:09:12.220" video="mainVideo-sharing" id="subtitle"]]
[[!template text="""a viewer might be using.""" start="00:09:14.900" video="mainVideo-sharing" id="subtitle"]]
-[[!template new="1" text="""Most crucial aspect of my videos""" start="00:09:17.920" video="mainVideo-sharing" id="subtitle"]]
-
-[[!template text="""There was one thing, though, that turned out to be""" start="00:09:17.920" video="mainVideo-sharing" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Most crucial aspect of my videos""" start="00:09:17.920" video="mainVideo-sharing" id="subtitle"]]</div>[[!template text="""There was one thing, though, that turned out to be""" start="00:09:17.920" video="mainVideo-sharing" id="subtitle"]]
[[!template text="""the most crucial part of my videos and series.""" start="00:09:19.940" video="mainVideo-sharing" id="subtitle"]]
[[!template text="""And it's one of the reasons itself for this talk.""" start="00:09:23.300" video="mainVideo-sharing" id="subtitle"]]
[[!template text="""You may have already picked up on it.""" start="00:09:25.460" video="mainVideo-sharing" id="subtitle"]]
@@ -271,9 +242,7 @@
[[!template text="""Because that's the stuff that can jump out of the video""" start="00:09:44.060" video="mainVideo-sharing" id="subtitle"]]
[[!template text="""and into the comments.""" start="00:09:47.220" video="mainVideo-sharing" id="subtitle"]]
-[[!template new="1" text="""A broadening community""" start="00:09:50.220" video="mainVideo-sharing" id="subtitle"]]
-
-[[!template text="""The idea for this talk started""" start="00:09:50.220" video="mainVideo-sharing" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""A broadening community""" start="00:09:50.220" video="mainVideo-sharing" id="subtitle"]]</div>[[!template text="""The idea for this talk started""" start="00:09:50.220" video="mainVideo-sharing" id="subtitle"]]
[[!template text="""as a story of my YouTube journey.""" start="00:09:53.200" video="mainVideo-sharing" id="subtitle"]]
[[!template text="""I wanted to share how I began sharing Emacs""" start="00:09:55.240" video="mainVideo-sharing" id="subtitle"]]
[[!template text="""and why I like it. And I think I've done that.""" start="00:09:57.540" video="mainVideo-sharing" id="subtitle"]]
@@ -305,9 +274,7 @@
[[!template text="""my videos sparked conversation,""" start="00:11:04.420" video="mainVideo-sharing" id="subtitle"]]
[[!template text="""debate and further interest was incredible.""" start="00:11:06.100" video="mainVideo-sharing" id="subtitle"]]
-[[!template new="1" text="""Sharing Emacs""" start="00:11:10.780" video="mainVideo-sharing" id="subtitle"]]
-
-[[!template text="""We've had two amazing days of sharing Emacs,""" start="00:11:10.780" video="mainVideo-sharing" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Sharing Emacs""" start="00:11:10.780" video="mainVideo-sharing" id="subtitle"]]</div>[[!template text="""We've had two amazing days of sharing Emacs,""" start="00:11:10.780" video="mainVideo-sharing" id="subtitle"]]
[[!template text="""putting ourselves out there, and sharing in a community.""" start="00:11:14.000" video="mainVideo-sharing" id="subtitle"]]
[[!template text="""I want to emphasize how amazing""" start="00:11:17.380" video="mainVideo-sharing" id="subtitle"]]
[[!template text="""a strong community with the right values is,""" start="00:11:19.060" video="mainVideo-sharing" id="subtitle"]]
@@ -321,17 +288,13 @@
[[!template text="""for the mere fact that we are here together.""" start="00:11:41.060" video="mainVideo-sharing" id="subtitle"]]
[[!template text="""Then let's turn to the potential within our community.""" start="00:11:44.140" video="mainVideo-sharing" id="subtitle"]]
-[[!template new="1" text="""Platforms""" start="00:11:48.020" video="mainVideo-sharing" id="subtitle"]]
-
-[[!template text="""First, though, I'll briefly note""" start="00:11:48.020" video="mainVideo-sharing" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Platforms""" start="00:11:48.020" video="mainVideo-sharing" id="subtitle"]]</div>[[!template text="""First, though, I'll briefly note""" start="00:11:48.020" video="mainVideo-sharing" id="subtitle"]]
[[!template text="""that everyone has their opinions about platforms,""" start="00:11:50.140" video="mainVideo-sharing" id="subtitle"]]
[[!template text="""and I'm not here to make judgments,""" start="00:11:52.340" video="mainVideo-sharing" id="subtitle"]]
[[!template text="""but freedom, equity, and accessibility are important,""" start="00:11:53.460" video="mainVideo-sharing" id="subtitle"]]
[[!template text="""but reach is, too.""" start="00:11:56.060" video="mainVideo-sharing" id="subtitle"]]
-[[!template new="1" text="""Achieving unity""" start="00:11:57.922" video="mainVideo-sharing" id="subtitle"]]
-
-[[!template text="""Regardless of the platform,""" start="00:11:57.922" video="mainVideo-sharing" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Achieving unity""" start="00:11:57.922" video="mainVideo-sharing" id="subtitle"]]</div>[[!template text="""Regardless of the platform,""" start="00:11:57.922" video="mainVideo-sharing" id="subtitle"]]
[[!template text="""one thing remains certain:""" start="00:12:00.540" video="mainVideo-sharing" id="subtitle"]]
[[!template text="""our strength lies in unity.""" start="00:12:02.700" video="mainVideo-sharing" id="subtitle"]]
[[!template text="""Like any online community, this calls for unique ways""" start="00:12:05.400" video="mainVideo-sharing" id="subtitle"]]
@@ -365,9 +328,7 @@
[[!template text="""for mentorship and support,""" start="00:13:24.260" video="mainVideo-sharing" id="subtitle"]]
[[!template text="""which is valuable for everyone involved.""" start="00:13:26.080" video="mainVideo-sharing" id="subtitle"]]
-[[!template new="1" text="""Every contribution is valuable""" start="00:13:30.000" video="mainVideo-sharing" id="subtitle"]]
-
-[[!template text="""We can also call on our open source [* free software] values""" start="00:13:30.000" video="mainVideo-sharing" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Every contribution is valuable""" start="00:13:30.000" video="mainVideo-sharing" id="subtitle"]]</div>[[!template text="""We can also call on our open source [* free software] values""" start="00:13:30.000" video="mainVideo-sharing" id="subtitle"]]
[[!template text="""and focus on collaborative projects,""" start="00:13:32.580" video="mainVideo-sharing" id="subtitle"]]
[[!template text="""from coding projects where we can contribute and learn""" start="00:13:34.940" video="mainVideo-sharing" id="subtitle"]]
[[!template text="""to building shared documentation and guides""" start="00:13:38.240" video="mainVideo-sharing" id="subtitle"]]
@@ -393,9 +354,7 @@
[[!template text="""by embracing these ideas, we can build""" start="00:14:32.900" video="mainVideo-sharing" id="subtitle"]]
[[!template text="""a more connected and empowered Emacs community.""" start="00:14:34.660" video="mainVideo-sharing" id="subtitle"]]
-[[!template new="1" text="""Conclusion""" start="00:14:40.300" video="mainVideo-sharing" id="subtitle"]]
-
-[[!template text="""Now Emacs is so very personal.""" start="00:14:40.300" video="mainVideo-sharing" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Conclusion""" start="00:14:40.300" video="mainVideo-sharing" id="subtitle"]]</div>[[!template text="""Now Emacs is so very personal.""" start="00:14:40.300" video="mainVideo-sharing" id="subtitle"]]
[[!template text="""Those of us who have our own""" start="00:14:43.760" video="mainVideo-sharing" id="subtitle"]]
[[!template text="""carefully manicured configurations understand --""" start="00:14:44.940" video="mainVideo-sharing" id="subtitle"]]
[[!template text="""Emacs molds to our liking and our person.""" start="00:14:47.680" video="mainVideo-sharing" id="subtitle"]]
@@ -434,12 +393,11 @@
[[!template text="""for being part of this shared adventure.""" start="00:16:23.340" video="mainVideo-sharing" id="subtitle"]]
[[!template text="""Let's go forth and share, together.""" start="00:16:26.500" video="mainVideo-sharing" id="subtitle"]]
-
+</div>
Captioner: sachac
-<a name="sharing-qanda-transcript"></a>
-# Q&A transcript (unedited)
+<div class="transcript transcript-qanda"><a name="sharing-qanda-transcript"></a><h1>Q&A transcript (unedited)</h1>
[[!template text="""[Speaker 1]: Yeah, we're live. So whoever's in the""" start="00:00:05.940" video="qanda-sharing" id="subtitle"]]
[[!template text="""background might be able to see you live in""" start="00:00:08.240" video="qanda-sharing" id="subtitle"]]
@@ -1065,7 +1023,7 @@ Captioner: sachac
[[!template text="""And closing here. This BBB recording.""" start="00:25:15.660" video="qanda-sharing" id="subtitle"]]
[[!template text="""Yay!""" start="00:25:16.360" video="qanda-sharing" id="subtitle"]]
-Questions or comments? Please e-mail [jakebox0@protonmail.com](mailto:jakebox0@protonmail.com?subject=Comment%20for%20EmacsConf%202023%20sharing%3A%20Sharing%20Emacs%20is%20Caring%20Emacs%3A%20Emacs%20education%20and%20why%20I%20embraced%20video)
+</div>Questions or comments? Please e-mail [jakebox0@protonmail.com](mailto:jakebox0@protonmail.com?subject=Comment%20for%20EmacsConf%202023%20sharing%3A%20Sharing%20Emacs%20is%20Caring%20Emacs%3A%20Emacs%20education%20and%20why%20I%20embraced%20video)
<!-- End of emacsconf-publish-after-page -->
diff --git a/2023/info/sharing-before.md b/2023/info/sharing-before.md
index ae63e36c..52b1a3f1 100644
--- a/2023/info/sharing-before.md
+++ b/2023/info/sharing-before.md
@@ -1,6 +1,6 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
[[!toc ]]
-Format: 17-min talk; Q&A: BigBlueButton conference room
+Format: 17-min talk ; Q&A: BigBlueButton conference room
Status: Q&A to be extracted from the room recordings
@@ -9,7 +9,7 @@ Status: Q&A to be extracted from the room recordings
# Talk
-<div class="vid"><video controls preload="none" id="sharing-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="sharing-mainVideo" data="""
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-sharing"><source src="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="mainVideo-sharing" data="""
00:00.000 Introduction
00:49.000 My journey of learning
04:03.400 Straightforward Emacs
@@ -19,10 +19,10 @@ Status: Q&A to be extracted from the room recordings
09:15.920 The personal aspect
11:48.120 Unity
-"""]]<div></div>Duration: 16:34 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--main.opus">Download --main.opus (8.8MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--main.webm">Download --main.webm (47MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--pad.md">Download --pad.md</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--previous.mkv">Download --previous.mkv (377MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--script.txt">Download --script.txt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman.org">Download .org</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman.txt">Download .txt</a></li><li><a href="https://toobnix.org/w/3b5XfkceUaRjJuN5Pumgee">View on Toobnix</a></li></ul></div></div>
+"""]]<div></div>Duration: 16:34 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2023-sharing">Open Etherpad</a></li><li><a href="https://bbb.emacsverse.org/playback/presentation/2.0/playback.html?meetingId=fe7f19d2e265788af1e6dd62bba52ef0ee6e0d42-1701636136078">Play recording from BigBlueButton</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--main.opus">Download --main.opus (8.8MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--main.webm">Download --main.webm (47MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--previous.mkv">Download --previous.mkv (377MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--script.txt">Download --script.txt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman.org">Download .org</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman.txt">Download .txt</a></li><li><a href="https://toobnix.org/w/3b5XfkceUaRjJuN5Pumgee">View on Toobnix</a></li><li><a href="https://youtu.be/L897BU3BT6g">View on Youtube</a></li></ul></div></div>
# Q&A
-<div class="vid"><video controls preload="none" id="sharing-qanda"><source src="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--answers.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div>Listen to just the audio:<br /><audio controls preload="none" id="sharing-qanda-audio" src="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--answers.opus"></audio></div><div></div>Duration: 25:19 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--answers.json">Download --answers.json (1.3MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--answers.opus">Download --answers.opus (16MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--answers.webm">Download --answers.webm (44MB)</a></li></ul></div></div>
+<div class="vid qanda"><video controls preload="none" id="qanda-sharing"><source src="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--answers.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div>Listen to just the audio:<br /><audio controls preload="none" id="qanda-sharing-audio" src="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--answers.opus"></audio></div><div></div>Duration: 25:19 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2023-sharing">Open Etherpad</a></li><li><a href="https://bbb.emacsverse.org/playback/presentation/2.0/playback.html?meetingId=fe7f19d2e265788af1e6dd62bba52ef0ee6e0d42-1701636136078">Play recording from BigBlueButton</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--answers.json">Download --answers.json (1.3MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--answers.opus">Download --answers.opus (16MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--answers.webm">Download --answers.webm (44MB)</a></li></ul></div></div>
# Description
<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/info/sharing-nav.md b/2023/info/sharing-nav.md
index 2d903a48..8443c8c4 100644
--- a/2023/info/sharing-nav.md
+++ b/2023/info/sharing-nav.md
@@ -3,5 +3,5 @@
Back to the [[talks]]
Previous by track: <a href="/2023/talks/web">Emacs saves the Web (maybe)</a>
Next by track: <a href="/2023/talks/matplotllm">MatplotLLM, iterative natural language data visualization in org-babel</a>
-Track: <span class="sched-track General">General</span>
+Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2023/watch/gen">Watch</a></strong>
</div>
diff --git a/2023/info/solo-after.md b/2023/info/solo-after.md
index f99447c9..e585e9a2 100644
--- a/2023/info/solo-after.md
+++ b/2023/info/solo-after.md
@@ -1,13 +1,10 @@
<!-- Automatically generated by emacsconf-publish-after-page -->
-<a name="solo-mainVideo-transcript"></a>
-# Transcript
+<div class="transcript transcript-mainVideo"><a name="solo-mainVideo-transcript"></a><h1>Transcript</h1>
-[[!template new="1" text="""Introduction""" start="00:00:00.000" video="mainVideo-solo" id="subtitle"]]
-
-[[!template text="""Hi there, I'm Howard Abrams. You may remember me""" start="00:00:00.000" video="mainVideo-solo" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Introduction""" start="00:00:00.000" video="mainVideo-solo" id="subtitle"]]</div>[[!template text="""Hi there, I'm Howard Abrams. You may remember me""" start="00:00:00.000" video="mainVideo-solo" id="subtitle"]]
[[!template text="""from past conference talks""" start="00:00:05.560" video="mainVideo-solo" id="subtitle"]]
[[!template text="""as &quot;Literate DevOps and the Temple of Doom&quot;""" start="00:00:07.720" video="mainVideo-solo" id="subtitle"]]
[[!template text="""and &quot;Using Eshell for Fun and Profit&quot;.""" start="00:00:10.520" video="mainVideo-solo" id="subtitle"]]
@@ -36,9 +33,7 @@
[[!template text="""once a week at lunch.""" start="00:01:15.600" video="mainVideo-solo" id="subtitle"]]
[[!template text="""This pastime came to a screeching halt with the pandemic.""" start="00:01:17.320" video="mainVideo-solo" id="subtitle"]]
-[[!template new="1" text="""Solo RPGs""" start="00:01:20.680" video="mainVideo-solo" id="subtitle"]]
-
-[[!template text="""I turned to playing role-playing games by myself""" start="00:01:20.680" video="mainVideo-solo" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Solo RPGs""" start="00:01:20.680" video="mainVideo-solo" id="subtitle"]]</div>[[!template text="""I turned to playing role-playing games by myself""" start="00:01:20.680" video="mainVideo-solo" id="subtitle"]]
[[!template text="""to get my fix. Playing these silly elf games in solo mode""" start="00:01:23.640" video="mainVideo-solo" id="subtitle"]]
[[!template text="""has been part of the game for many years,""" start="00:01:28.000" video="mainVideo-solo" id="subtitle"]]
[[!template text="""but with so many of us stuck at home,""" start="00:01:29.880" video="mainVideo-solo" id="subtitle"]]
@@ -66,9 +61,7 @@
[[!template text="""I could just download the entire text.""" start="00:02:41.880" video="mainVideo-solo" id="subtitle"]]
[[!template text="""I figured I could just render the entire game in Emacs.""" start="00:02:43.920" video="mainVideo-solo" id="subtitle"]]
-[[!template new="1" text="""Demo""" start="00:02:47.440" video="mainVideo-solo" id="subtitle"]]
-
-[[!template text="""All right, enough talk. Let's get some Emacs action here,""" start="00:02:47.440" video="mainVideo-solo" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Demo""" start="00:02:47.440" video="mainVideo-solo" id="subtitle"]]</div>[[!template text="""All right, enough talk. Let's get some Emacs action here,""" start="00:02:47.440" video="mainVideo-solo" id="subtitle"]]
[[!template text="""while I show you a bit of my game.""" start="00:02:51.240" video="mainVideo-solo" id="subtitle"]]
[[!template text="""When playing a solo RPG,""" start="00:02:55.200" video="mainVideo-solo" id="subtitle"]]
[[!template text="""I jot down the story notes in an Org file.""" start="00:02:57.520" video="mainVideo-solo" id="subtitle"]]
@@ -97,9 +90,7 @@
[[!template text="""I just finished playing out the journey,""" start="00:04:06.400" video="mainVideo-solo" id="subtitle"]]
[[!template text="""and he's about to enter into the Catacombs of Svala's Blood.""" start="00:04:08.400" video="mainVideo-solo" id="subtitle"]]
-[[!template new="1" text="""Randomization""" start="00:04:11.760" video="mainVideo-solo" id="subtitle"]]
-
-[[!template text="""Why that name? Well, that was actually what came up""" start="00:04:11.760" video="mainVideo-solo" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Randomization""" start="00:04:11.760" video="mainVideo-solo" id="subtitle"]]</div>[[!template text="""Why that name? Well, that was actually what came up""" start="00:04:11.760" video="mainVideo-solo" id="subtitle"]]
[[!template text="""from an extensive random number generator that I wrote.""" start="00:04:15.200" video="mainVideo-solo" id="subtitle"]]
[[!template text="""As I wrote more and more functions""" start="00:04:19.640" video="mainVideo-solo" id="subtitle"]]
[[!template text="""to help me play this game,""" start="00:04:21.960" video="mainVideo-solo" id="subtitle"]]
@@ -124,9 +115,7 @@
[[!template text="""Hmm, weather. Oh, it's summer, so hey,""" start="00:05:20.400" video="mainVideo-solo" id="subtitle"]]
[[!template text="""it's nice and clear. All right, let's play.""" start="00:05:27.280" video="mainVideo-solo" id="subtitle"]]
-[[!template new="1" text="""Moves""" start="00:05:31.960" video="mainVideo-solo" id="subtitle"]]
-
-[[!template text="""The action in Ironsworn,""" start="00:05:31.960" video="mainVideo-solo" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Moves""" start="00:05:31.960" video="mainVideo-solo" id="subtitle"]]</div>[[!template text="""The action in Ironsworn,""" start="00:05:31.960" video="mainVideo-solo" id="subtitle"]]
[[!template text="""like other Powered by the Apocalypse games,""" start="00:05:34.240" video="mainVideo-solo" id="subtitle"]]
[[!template text="""is driven by moves. So, I hit the `m` key,""" start="00:05:37.040" video="mainVideo-solo" id="subtitle"]]
[[!template text="""and all the moves show up.""" start="00:05:44.360" video="mainVideo-solo" id="subtitle"]]
@@ -136,9 +125,7 @@
[[!template text="""to help me find my choices.""" start="00:05:55.560" video="mainVideo-solo" id="subtitle"]]
[[!template text="""Since I've discovered a site, let's play that move.""" start="00:05:57.720" video="mainVideo-solo" id="subtitle"]]
-[[!template new="1" text="""Reference""" start="00:06:03.640" video="mainVideo-solo" id="subtitle"]]
-
-[[!template text="""I seldom remember the details for the moves,""" start="00:06:03.640" video="mainVideo-solo" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Reference""" start="00:06:03.640" video="mainVideo-solo" id="subtitle"]]</div>[[!template text="""I seldom remember the details for the moves,""" start="00:06:03.640" video="mainVideo-solo" id="subtitle"]]
[[!template text="""so I figured, why not put the text of the book""" start="00:06:06.480" video="mainVideo-solo" id="subtitle"]]
[[!template text="""in an Org file and show it in a side window?""" start="00:06:09.160" video="mainVideo-solo" id="subtitle"]]
[[!template text="""The prompt at the bottom, asking for a name,""" start="00:06:11.800" video="mainVideo-solo" id="subtitle"]]
@@ -148,9 +135,7 @@
[[!template text="""Exploring the Catacombs of Svala's Blood.""" start="00:06:25.160" video="mainVideo-solo" id="subtitle"]]
[[!template text="""Ooh, sounds epic.""" start="00:06:31.840" video="mainVideo-solo" id="subtitle"]]
-[[!template new="1" text="""Story arcs""" start="00:06:34.680" video="mainVideo-solo" id="subtitle"]]
-
-[[!template text="""Ironsworn tracks the beats of a narrative,""" start="00:06:34.680" video="mainVideo-solo" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Story arcs""" start="00:06:34.680" video="mainVideo-solo" id="subtitle"]]</div>[[!template text="""Ironsworn tracks the beats of a narrative,""" start="00:06:34.680" video="mainVideo-solo" id="subtitle"]]
[[!template text="""so major plot points take up more room in the fiction""" start="00:06:37.240" video="mainVideo-solo" id="subtitle"]]
[[!template text="""than minor plot points.""" start="00:06:40.800" video="mainVideo-solo" id="subtitle"]]
[[!template text="""Similar games like Blades in the Dark""" start="00:06:42.760" video="mainVideo-solo" id="subtitle"]]
@@ -176,9 +161,7 @@
[[!template text="""So, for instance, this one seems to be""" start="00:07:40.640" video="mainVideo-solo" id="subtitle"]]
[[!template text="""about a third of the way through.""" start="00:07:47.240" video="mainVideo-solo" id="subtitle"]]
-[[!template new="1" text="""Using different stats""" start="00:07:48.680" video="mainVideo-solo" id="subtitle"]]
-
-[[!template text="""So, let's dive into this ancient place.""" start="00:07:48.680" video="mainVideo-solo" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Using different stats""" start="00:07:48.680" video="mainVideo-solo" id="subtitle"]]</div>[[!template text="""So, let's dive into this ancient place.""" start="00:07:48.680" video="mainVideo-solo" id="subtitle"]]
[[!template text="""Since I've been walking through a misty forest,""" start="00:07:52.600" video="mainVideo-solo" id="subtitle"]]
[[!template text="""I can imagine vines hiding an immense door""" start="00:07:55.720" video="mainVideo-solo" id="subtitle"]]
[[!template text="""and a humid, earthy smell as I peer inside.""" start="00:07:59.320" video="mainVideo-solo" id="subtitle"]]
@@ -204,9 +187,7 @@
[[!template text="""Just about every one of my stats prompts me""" start="00:08:57.720" video="mainVideo-solo" id="subtitle"]]
[[!template text="""if I want to add or subtract any values.""" start="00:08:59.560" video="mainVideo-solo" id="subtitle"]]
-[[!template new="1" text="""Dice rolls""" start="00:09:02.960" video="mainVideo-solo" id="subtitle"]]
-
-[[!template text="""A miss. I should explain how the dice roll in this game.""" start="00:09:02.960" video="mainVideo-solo" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Dice rolls""" start="00:09:02.960" video="mainVideo-solo" id="subtitle"]]</div>[[!template text="""A miss. I should explain how the dice roll in this game.""" start="00:09:02.960" video="mainVideo-solo" id="subtitle"]]
[[!template text="""The downside to Ironsworn is that""" start="00:09:09.880" video="mainVideo-solo" id="subtitle"]]
[[!template text="""the dice mechanics are more cumbersome than other games.""" start="00:09:13.400" video="mainVideo-solo" id="subtitle"]]
[[!template text="""You roll a 6-sided die, add to it your relevant stat,""" start="00:09:16.840" video="mainVideo-solo" id="subtitle"]]
@@ -216,9 +197,7 @@
[[!template text="""but when I displayed it, I wanted to see all the dice.""" start="00:09:28.680" video="mainVideo-solo" id="subtitle"]]
[[!template text="""And I also just wanted to see the end results.""" start="00:09:31.600" video="mainVideo-solo" id="subtitle"]]
-[[!template new="1" text="""Dangers""" start="00:09:34.800" video="mainVideo-solo" id="subtitle"]]
-
-[[!template text="""So I colored it. I rolled a miss,""" start="00:09:34.800" video="mainVideo-solo" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Dangers""" start="00:09:34.800" video="mainVideo-solo" id="subtitle"]]</div>[[!template text="""So I colored it. I rolled a miss,""" start="00:09:34.800" video="mainVideo-solo" id="subtitle"]]
[[!template text="""which means I need to reveal a danger.""" start="00:09:37.480" video="mainVideo-solo" id="subtitle"]]
[[!template text="""Sure, I could imagine all sorts of dangers,""" start="00:09:39.800" video="mainVideo-solo" id="subtitle"]]
[[!template text="""but this is a game.""" start="00:09:43.520" video="mainVideo-solo" id="subtitle"]]
@@ -231,9 +210,7 @@
[[!template text="""with lots of choices and almost no way of finding them?""" start="00:10:13.320" video="mainVideo-solo" id="subtitle"]]
[[!template text="""Yeah, that sounds like it fits pretty well.""" start="00:10:16.600" video="mainVideo-solo" id="subtitle"]]
-[[!template new="1" text="""A strong success""" start="00:10:19.680" video="mainVideo-solo" id="subtitle"]]
-
-[[!template text="""Time for another move. This time, we're going to""" start="00:10:19.680" video="mainVideo-solo" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""A strong success""" start="00:10:19.680" video="mainVideo-solo" id="subtitle"]]</div>[[!template text="""Time for another move. This time, we're going to""" start="00:10:19.680" video="mainVideo-solo" id="subtitle"]]
[[!template text="""gather information,""" start="00:10:26.960" video="mainVideo-solo" id="subtitle"]]
[[!template text="""see if we can figure out which way to go.""" start="00:10:28.800" video="mainVideo-solo" id="subtitle"]]
[[!template text="""A strong hit. Excellent.""" start="00:10:32.280" video="mainVideo-solo" id="subtitle"]]
@@ -262,9 +239,7 @@
[[!template text="""I think you get the gist of how I play""" start="00:11:42.400" video="mainVideo-solo" id="subtitle"]]
[[!template text="""this dice and pencil game in Org Mode.""" start="00:11:47.000" video="mainVideo-solo" id="subtitle"]]
-[[!template new="1" text="""Other solo RPGs""" start="00:11:49.680" video="mainVideo-solo" id="subtitle"]]
-
-[[!template text="""However, I found more solo RPGs to play.""" start="00:11:49.680" video="mainVideo-solo" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Other solo RPGs""" start="00:11:49.680" video="mainVideo-solo" id="subtitle"]]</div>[[!template text="""However, I found more solo RPGs to play.""" start="00:11:49.680" video="mainVideo-solo" id="subtitle"]]
[[!template text="""And of course, I want to render them in Emacs too.""" start="00:11:54.040" video="mainVideo-solo" id="subtitle"]]
[[!template text="""This code for Ironsworn was a bit too specific,""" start="00:11:57.320" video="mainVideo-solo" id="subtitle"]]
[[!template text="""so I decided to create a role-playing game toolkit.""" start="00:12:00.800" video="mainVideo-solo" id="subtitle"]]
@@ -286,9 +261,7 @@
[[!template text="""the character sheet attributes as Org properties,""" start="00:12:55.960" video="mainVideo-solo" id="subtitle"]]
[[!template text="""so if you're interested, check out the project at Codeberg.""" start="00:12:59.960" video="mainVideo-solo" id="subtitle"]]
-[[!template new="1" text="""Conclusion""" start="00:13:04.720" video="mainVideo-solo" id="subtitle"]]
-
-[[!template text="""The point of my presentation is not to show off Ironsworn,""" start="00:13:04.720" video="mainVideo-solo" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Conclusion""" start="00:13:04.720" video="mainVideo-solo" id="subtitle"]]</div>[[!template text="""The point of my presentation is not to show off Ironsworn,""" start="00:13:04.720" video="mainVideo-solo" id="subtitle"]]
[[!template text="""how I programmed it, or even this new toolkit.""" start="00:13:10.360" video="mainVideo-solo" id="subtitle"]]
[[!template text="""You see, most engineers,""" start="00:13:14.080" video="mainVideo-solo" id="subtitle"]]
[[!template text="""when they get an idea for a game like mine,""" start="00:13:17.560" video="mainVideo-solo" id="subtitle"]]
@@ -313,12 +286,11 @@
[[!template text="""and craft yourself an enjoyable evening.""" start="00:14:21.600" video="mainVideo-solo" id="subtitle"]]
[[!template text="""Happy hacking, my friends.""" start="00:14:24.720" video="mainVideo-solo" id="subtitle"]]
-
+</div>
Captioner: sachac
-<a name="solo-qanda-transcript"></a>
-# Q&A transcript (unedited)
+<div class="transcript transcript-qanda"><a name="solo-qanda-transcript"></a><h1>Q&A transcript (unedited)</h1>
[[!template text="""[Speaker 0]: Right. Okay, so hi everyone.""" start="00:00:02.899" video="qanda-solo" id="subtitle"]]
[[!template text="""We are now live. Hi Howard,""" start="00:00:04.540" video="qanda-solo" id="subtitle"]]
@@ -755,7 +727,7 @@ Captioner: sachac
[[!template text="""And oh, I think he's already gone.""" start="00:19:13.940" video="qanda-solo" id="subtitle"]]
[[!template text="""So Bye everyone, I'll see you later.""" start="00:19:16.360" video="qanda-solo" id="subtitle"]]
-Questions or comments? Please e-mail [howard@howardabrams.com](mailto:howard@howardabrams.com?subject=Comment%20for%20EmacsConf%202023%20solo%3A%20How%20I%20play%20TTRPGs%20in%20Emacs)
+</div>Questions or comments? Please e-mail [howard@howardabrams.com](mailto:howard@howardabrams.com?subject=Comment%20for%20EmacsConf%202023%20solo%3A%20How%20I%20play%20TTRPGs%20in%20Emacs)
<!-- End of emacsconf-publish-after-page -->
diff --git a/2023/info/solo-before.md b/2023/info/solo-before.md
index 4151f8a3..749868c7 100644
--- a/2023/info/solo-before.md
+++ b/2023/info/solo-before.md
@@ -1,6 +1,6 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
[[!toc ]]
-Format: 15-min talk; Q&A: BigBlueButton conference room
+Format: 15-min talk ; Q&A: BigBlueButton conference room
Status: Q&A to be extracted from the room recordings
@@ -9,7 +9,7 @@ Status: Q&A to be extracted from the room recordings
# Talk
-<div class="vid"><video controls preload="none" id="solo-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="solo-mainVideo" data="""
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-solo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="mainVideo-solo" data="""
00:00.000 Introduction
01:20.680 Solo RPGs
02:47.440 Demo
@@ -24,10 +24,10 @@ Status: Q&A to be extracted from the room recordings
11:49.680 Other solo RPGs
13:04.720 Conclusion
-"""]]<div></div>Duration: 14:36 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--main.opus">Download --main.opus (6.6MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--main.webm">Download --main.webm (52MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--pad.md">Download --pad.md</a></li><li><a href="https://toobnix.org/w/oNkcCHdWCKXRv6KnUTAeEC">View on Toobnix</a></li></ul></div></div>
+"""]]<div></div>Duration: 14:36 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2023-solo">Open Etherpad</a></li><li><a href="https://bbb.emacsverse.org/playback/presentation/2.0/playback.html?meetingId=3a97d7b5f5392e3ec9100ba7d39768cdd0855e50-1701541252606">Play recording from BigBlueButton</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--main.opus">Download --main.opus (6.6MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--main.webm">Download --main.webm (52MB)</a></li><li><a href="https://toobnix.org/w/oNkcCHdWCKXRv6KnUTAeEC">View on Toobnix</a></li><li><a href="https://www.youtube.com/watch?v=KUMkj9HWiEY">View on Youtube</a></li></ul></div></div>
# Q&A
-<div class="vid"><video controls preload="none" id="solo-qanda"><source src="https://media.emacsconf.org/2023/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--answers.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div>Listen to just the audio:<br /><audio controls preload="none" id="solo-qanda-audio" src="https://media.emacsconf.org/2023/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--answers.opus"></audio></div><div></div>Duration: 19:20 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--answers.json">Download --answers.json</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--answers.opus">Download --answers.opus (11MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--answers.webm">Download --answers.webm (43MB)</a></li></ul></div></div>
+<div class="vid qanda"><video controls preload="none" id="qanda-solo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--answers.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div>Listen to just the audio:<br /><audio controls preload="none" id="qanda-solo-audio" src="https://media.emacsconf.org/2023/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--answers.opus"></audio></div><div></div>Duration: 19:20 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2023-solo">Open Etherpad</a></li><li><a href="https://bbb.emacsverse.org/playback/presentation/2.0/playback.html?meetingId=3a97d7b5f5392e3ec9100ba7d39768cdd0855e50-1701541252606">Play recording from BigBlueButton</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--answers.json">Download --answers.json</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--answers.opus">Download --answers.opus (11MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--answers.webm">Download --answers.webm (43MB)</a></li></ul></div></div>
# Description
<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/info/solo-nav.md b/2023/info/solo-nav.md
index 741f4f35..4ffc815d 100644
--- a/2023/info/solo-nav.md
+++ b/2023/info/solo-nav.md
@@ -3,5 +3,5 @@
Back to the [[talks]]
Previous by track: <a href="/2023/talks/collab">Collaborative data processing and documenting using org-babel</a>
Next by track: <a href="/2023/talks/ref">Org-Mode workflow: informal reference tracking</a>
-Track: <span class="sched-track General">General</span>
+Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2023/watch/gen">Watch</a></strong>
</div>
diff --git a/2023/info/steno-after.md b/2023/info/steno-after.md
index 486a8207..53e7022c 100644
--- a/2023/info/steno-after.md
+++ b/2023/info/steno-after.md
@@ -1,8 +1,7 @@
<!-- Automatically generated by emacsconf-publish-after-page -->
-<a name="steno-mainVideo-transcript"></a>
-# Transcript
+<div class="transcript transcript-mainVideo"><a name="steno-mainVideo-transcript"></a><h1>Transcript</h1>
[[!template text="""Stenotypy is a system of typing""" start="00:00:00.660" video="mainVideo-steno" id="subtitle"]]
[[!template text="""where you press multiple keys at the same time,""" start="00:00:03.840" video="mainVideo-steno" id="subtitle"]]
@@ -349,7 +348,7 @@
[[!template text="""I'm not really worried about too many things, just""" start="00:24:50.760" video="mainVideo-steno" id="subtitle"]]
[[!template text="""the file name, the mode I'm in, and where I am in the file.""" start="00:24:55.461" video="mainVideo-steno" id="subtitle"]]
-
+</div>
Captioner: daniel
diff --git a/2023/info/steno-before.md b/2023/info/steno-before.md
index 4eced50a..ef51fa66 100644
--- a/2023/info/steno-before.md
+++ b/2023/info/steno-before.md
@@ -1,12 +1,12 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
[[!toc ]]
-Format: 26-min talk; Q&A: ask questions via Etherpad/IRC; we'll e-mail the speaker and post answers on this wiki page after the conference
+Format: 26-min talk ; Q&A: ask questions via Etherpad/IRC; we'll e-mail the speaker and post answers on this wiki page after the conference
Status: All done
-<div class="vid"><video controls preload="none" id="steno-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-steno--programming-with-steno--daniel-alejandro-tapia--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-steno--programming-with-steno--daniel-alejandro-tapia--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 25:03 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-steno--programming-with-steno--daniel-alejandro-tapia--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-steno--programming-with-steno--daniel-alejandro-tapia--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-steno--programming-with-steno--daniel-alejandro-tapia--main.opus">Download --main.opus (13MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-steno--programming-with-steno--daniel-alejandro-tapia--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-steno--programming-with-steno--daniel-alejandro-tapia--main.webm">Download --main.webm (66MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-steno--programming-with-steno--daniel-alejandro-tapia--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-steno--programming-with-steno--daniel-alejandro-tapia--pad.md">Download --pad.md</a></li><li><a href="https://toobnix.org/w/1xodScC6DPkfbnqG5FmbB3">View on Toobnix</a></li></ul></div></div>
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-steno"><source src="https://media.emacsconf.org/2023/emacsconf-2023-steno--programming-with-steno--daniel-alejandro-tapia--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-steno--programming-with-steno--daniel-alejandro-tapia--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 25:03 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2023-steno">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-steno--programming-with-steno--daniel-alejandro-tapia--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-steno--programming-with-steno--daniel-alejandro-tapia--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-steno--programming-with-steno--daniel-alejandro-tapia--main.opus">Download --main.opus (13MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-steno--programming-with-steno--daniel-alejandro-tapia--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-steno--programming-with-steno--daniel-alejandro-tapia--main.webm">Download --main.webm (66MB)</a></li><li><a href="https://toobnix.org/w/1xodScC6DPkfbnqG5FmbB3">View on Toobnix</a></li><li><a href="https://www.youtube.com/watch?v=McHurKmk-rQ">View on Youtube</a></li></ul></div></div>
# Description
<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/info/steno-nav.md b/2023/info/steno-nav.md
index 27ac4e5d..6f369a19 100644
--- a/2023/info/steno-nav.md
+++ b/2023/info/steno-nav.md
@@ -3,5 +3,5 @@
Back to the [[talks]]
Previous by track: <a href="/2023/talks/emms">Emacs MultiMedia System (EMMS)</a>
Next by track: <a href="/2023/talks/mentor">Mentoring VS-Coders as an Emacsian (or How to show not tell people about the wonders of Emacs)</a>
-Track: <span class="sched-track General">General</span>
+Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2023/watch/gen">Watch</a></strong>
</div>
diff --git a/2023/info/sun-close-before.md b/2023/info/sun-close-before.md
index 6f7c587b..311ec7b2 100644
--- a/2023/info/sun-close-before.md
+++ b/2023/info/sun-close-before.md
@@ -1,12 +1,12 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
[[!toc ]]
-Format: 121-min talk; Q&A: BigBlueButton conference room
+Format: 121-min talk ; Q&A: BigBlueButton conference room
Status: Q&A to be extracted from the room recordings
-<div class="vid"><video controls preload="none" id="sun-close-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-sun-close--sunday-closing-remarks--main.webm" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 2:00:43 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sun-close--sunday-closing-remarks--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sun-close--sunday-closing-remarks--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sun-close--sunday-closing-remarks--main.opus">Download --main.opus (71MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sun-close--sunday-closing-remarks--main.webm">Download --main.webm (279MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sun-close--sunday-closing-remarks--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sun-close--sunday-closing-remarks--pad.md">Download --pad.md</a></li><li><a href="https://toobnix.org/w/p/nMXCCJ25wxKUtbuQiwkakA">View on Toobnix</a></li></ul></div></div>
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-sun-close"><source src="https://media.emacsconf.org/2023/emacsconf-2023-sun-close--sunday-closing-remarks--main.webm" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 2:00:43 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2023-sun-close">Open Etherpad</a></li><li><a href="https://bbb.emacsverse.org/playback/presentation/2.0/playback.html?meetingId=5f07e2b967f71ad503ac367ea43866abeaad63b6-1701636099684">Play recording from BigBlueButton</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sun-close--sunday-closing-remarks--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sun-close--sunday-closing-remarks--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sun-close--sunday-closing-remarks--main.opus">Download --main.opus (71MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sun-close--sunday-closing-remarks--main.webm">Download --main.webm (279MB)</a></li><li><a href="https://toobnix.org/w/p/nMXCCJ25wxKUtbuQiwkakA">View on Toobnix</a></li><li><a href="https://www.youtube.com/watch?v=qqvelKB5v0c">View on Youtube</a></li></ul></div></div>
# Description
<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/info/sun-close-nav.md b/2023/info/sun-close-nav.md
index 92d58f1d..866eca7f 100644
--- a/2023/info/sun-close-nav.md
+++ b/2023/info/sun-close-nav.md
@@ -2,5 +2,5 @@
<div class="talk-nav">
Back to the [[talks]]
Previous by track: <a href="/2023/talks/sun-open">Sunday opening remarks</a>
-Track: <span class="sched-track General">General</span>
+Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2023/watch/gen">Watch</a></strong>
</div>
diff --git a/2023/info/sun-open-after.md b/2023/info/sun-open-after.md
index 66d2e6fb..d07dee3f 100644
--- a/2023/info/sun-open-after.md
+++ b/2023/info/sun-open-after.md
@@ -1,8 +1,7 @@
<!-- Automatically generated by emacsconf-publish-after-page -->
-<a name="sun-open-mainVideo-transcript"></a>
-# Transcript
+<div class="transcript transcript-mainVideo"><a name="sun-open-mainVideo-transcript"></a><h1>Transcript</h1>
[[!template text="""Welcome to the second day of EmacsConf 2023.""" start="00:00:00.000" video="mainVideo-sun-open" id="subtitle"]]
[[!template text="""There's a General track and a Development track,""" start="00:00:04.520" video="mainVideo-sun-open" id="subtitle"]]
@@ -123,7 +122,7 @@
[[!template text="""who make EmacsConf even possible.""" start="00:05:11.550" video="mainVideo-sun-open" id="subtitle"]]
[[!template text="""Thanks for coming to EmacsConf 2023.""" start="00:05:14.589" video="mainVideo-sun-open" id="subtitle"]]
-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)
+</div>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)
<!-- End of emacsconf-publish-after-page -->
diff --git a/2023/info/sun-open-before.md b/2023/info/sun-open-before.md
index 4c6c13d5..70f38dc1 100644
--- a/2023/info/sun-open-before.md
+++ b/2023/info/sun-open-before.md
@@ -1,12 +1,12 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
[[!toc ]]
-Format: 6-min talk; Q&A: ask questions via Etherpad/IRC; we'll e-mail the speaker and post answers on this wiki page after the conference
+Format: 6-min talk ; Q&A: ask questions via Etherpad/IRC; we'll e-mail the speaker and post answers on this wiki page after the conference
Status: All done
-<div class="vid"><video controls preload="none" id="sun-open-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-sun-open--sunday-opening-remarks--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-sun-open--sunday-opening-remarks--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 05:17 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sun-open--sunday-opening-remarks--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sun-open--sunday-opening-remarks--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sun-open--sunday-opening-remarks--main.opus">Download --main.opus (2.5MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sun-open--sunday-opening-remarks--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sun-open--sunday-opening-remarks--main.webm">Download --main.webm (12MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sun-open--sunday-opening-remarks--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sun-open--sunday-opening-remarks--pad.md">Download --pad.md</a></li><li><a href="https://toobnix.org/w/9zjMPEZz1nYokiY7rk4wYv">View on Toobnix</a></li></ul></div></div>
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-sun-open"><source src="https://media.emacsconf.org/2023/emacsconf-2023-sun-open--sunday-opening-remarks--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-sun-open--sunday-opening-remarks--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 05:17 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2023-sun-open">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sun-open--sunday-opening-remarks--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sun-open--sunday-opening-remarks--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sun-open--sunday-opening-remarks--main.opus">Download --main.opus (2.5MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sun-open--sunday-opening-remarks--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sun-open--sunday-opening-remarks--main.webm">Download --main.webm (12MB)</a></li><li><a href="https://toobnix.org/w/9zjMPEZz1nYokiY7rk4wYv">View on Toobnix</a></li><li><a href="https://www.youtube.com/watch?v=B3NKI5Mviq8">View on Youtube</a></li></ul></div></div>
# Description
<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/info/sun-open-nav.md b/2023/info/sun-open-nav.md
index f84ed342..35ea2f41 100644
--- a/2023/info/sun-open-nav.md
+++ b/2023/info/sun-open-nav.md
@@ -3,5 +3,5 @@
Back to the [[talks]]
Previous by track: <a href="/2023/talks/sat-close">Saturday closing remarks</a>
Next by track: <a href="/2023/talks/sun-close">Sunday closing remarks</a>
-Track: <span class="sched-track General">General</span>
+Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2023/watch/gen">Watch</a></strong>
</div>
diff --git a/2023/info/table-after.md b/2023/info/table-after.md
index a0027610..7b45f22e 100644
--- a/2023/info/table-after.md
+++ b/2023/info/table-after.md
@@ -1,13 +1,10 @@
<!-- Automatically generated by emacsconf-publish-after-page -->
-<a name="table-mainVideo-transcript"></a>
-# Transcript
+<div class="transcript transcript-mainVideo"><a name="table-mainVideo-transcript"></a><h1>Transcript</h1>
-[[!template new="1" text="""Introduction""" start="00:00:01.360" video="mainVideo-table" id="subtitle"]]
-
-[[!template text="""Welcome everybody. My name is Daniel Molina""" start="00:00:01.360" video="mainVideo-table" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Introduction""" start="00:00:01.360" video="mainVideo-table" id="subtitle"]]</div>[[!template text="""Welcome everybody. My name is Daniel Molina""" start="00:00:01.360" video="mainVideo-table" id="subtitle"]]
[[!template text="""and I'm going to give this talk""" start="00:00:03.080" video="mainVideo-table" id="subtitle"]]
[[!template text="""&quot;Who needs Excel? Managing your students' qualifications""" start="00:00:05.061" video="mainVideo-table" id="subtitle"]]
[[!template text="""with Org-table&quot;.""" start="00:00:08.064" video="mainVideo-table" id="subtitle"]]
@@ -44,9 +41,7 @@
[[!template text="""Anyway, it could be used not only for teaching""" start="00:01:36.640" video="mainVideo-table" id="subtitle"]]
[[!template text="""but for more contexts.""" start="00:01:39.960" video="mainVideo-table" id="subtitle"]]
-[[!template new="1" text="""Demonstration""" start="00:01:41.960" video="mainVideo-table" id="subtitle"]]
-
-[[!template text="""Well, let's start.""" start="00:01:41.960" video="mainVideo-table" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Demonstration""" start="00:01:41.960" video="mainVideo-table" id="subtitle"]]</div>[[!template text="""Well, let's start.""" start="00:01:41.960" video="mainVideo-table" id="subtitle"]]
[[!template text="""First, I have two sections,""" start="00:01:44.800" video="mainVideo-table" id="subtitle"]]
[[!template text="""the comments and the section of the table, or results.""" start="00:01:46.460" video="mainVideo-table" id="subtitle"]]
[[!template text="""I have... The comment for each student""" start="00:01:53.400" video="mainVideo-table" id="subtitle"]]
@@ -67,9 +62,7 @@
[[!template text="""and use a column total with something like that.""" start="00:02:55.680" video="mainVideo-table" id="subtitle"]]
[[!template text="""Okay, that's nice.""" start="00:03:06.680" video="mainVideo-table" id="subtitle"]]
-[[!template new="1" text="""Range""" start="00:03:08.320" video="mainVideo-table" id="subtitle"]]
-
-[[!template text="""But then, when I started getting more and more parts,""" start="00:03:08.320" video="mainVideo-table" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Range""" start="00:03:08.320" video="mainVideo-table" id="subtitle"]]</div>[[!template text="""But then, when I started getting more and more parts,""" start="00:03:08.320" video="mainVideo-table" id="subtitle"]]
[[!template text="""I considered it more useful to use,""" start="00:03:11.640" video="mainVideo-table" id="subtitle"]]
[[!template text="""to put for each part,""" start="00:03:17.082" video="mainVideo-table" id="subtitle"]]
[[!template text="""which is the maximum qualification,""" start="00:03:20.700" video="mainVideo-table" id="subtitle"]]
@@ -86,9 +79,7 @@
[[!template text="""multiply the values of the second line with that.""" start="00:03:56.480" video="mainVideo-table" id="subtitle"]]
[[!template text="""So, it's very useful for doing that.""" start="00:04:08.300" video="mainVideo-table" id="subtitle"]]
-[[!template new="1" text="""More qualifications""" start="00:04:11.900" video="mainVideo-table" id="subtitle"]]
-
-[[!template text="""Okay, that's the first part, so I can put the comment,""" start="00:04:11.900" video="mainVideo-table" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""More qualifications""" start="00:04:11.900" video="mainVideo-table" id="subtitle"]]</div>[[!template text="""Okay, that's the first part, so I can put the comment,""" start="00:04:11.900" video="mainVideo-table" id="subtitle"]]
[[!template text="""I can go to the section, I can create...""" start="00:04:16.640" video="mainVideo-table" id="subtitle"]]
[[!template text="""I'm going to put more qualifications.""" start="00:04:19.960" video="mainVideo-table" id="subtitle"]]
[[!template text="""Now I'm going to put the table.""" start="00:04:24.920" video="mainVideo-table" id="subtitle"]]
@@ -109,9 +100,7 @@
[[!template text="""Okay?""" start="00:05:29.560" video="mainVideo-table" id="subtitle"]]
[[!template text="""That is a good option.""" start="00:05:32.100" video="mainVideo-table" id="subtitle"]]
-[[!template new="1" text="""Subsets""" start="00:05:34.240" video="mainVideo-table" id="subtitle"]]
-
-[[!template text="""Now we are going to see how can we use that""" start="00:05:34.240" video="mainVideo-table" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Subsets""" start="00:05:34.240" video="mainVideo-table" id="subtitle"]]</div>[[!template text="""Now we are going to see how can we use that""" start="00:05:34.240" video="mainVideo-table" id="subtitle"]]
[[!template text="""to make a subset of the students.""" start="00:05:38.500" video="mainVideo-table" id="subtitle"]]
[[!template text="""For instance, imagine, this is me,""" start="00:05:44.360" video="mainVideo-table" id="subtitle"]]
[[!template text="""I'm going to put the bad, I change, now I can update,""" start="00:05:47.840" video="mainVideo-table" id="subtitle"]]
@@ -127,9 +116,7 @@
[[!template text="""I could use that to make another table,""" start="00:06:48.840" video="mainVideo-table" id="subtitle"]]
[[!template text="""this is the people that passed the exam.""" start="00:06:54.080" video="mainVideo-table" id="subtitle"]]
-[[!template new="1" text="""Sorting""" start="00:07:08.300" video="mainVideo-table" id="subtitle"]]
-
-[[!template text="""Another interesting feature is that""" start="00:07:08.300" video="mainVideo-table" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Sorting""" start="00:07:08.300" video="mainVideo-table" id="subtitle"]]</div>[[!template text="""Another interesting feature is that""" start="00:07:08.300" video="mainVideo-table" id="subtitle"]]
[[!template text="""I can... the lesson table can be sorted automatically.""" start="00:07:10.981" video="mainVideo-table" id="subtitle"]]
[[!template text="""It's simple. You only have to put this symbol (`^`),""" start="00:07:15.621" video="mainVideo-table" id="subtitle"]]
[[!template text="""and you can put next to the column you want""" start="00:07:20.101" video="mainVideo-table" id="subtitle"]]
@@ -143,9 +130,7 @@
[[!template text="""And this sort is completely independent""" start="00:07:46.640" video="mainVideo-table" id="subtitle"]]
[[!template text="""to the sort of the original table.""" start="00:07:48.961" video="mainVideo-table" id="subtitle"]]
-[[!template new="1" text="""New table""" start="00:07:51.641" video="mainVideo-table" id="subtitle"]]
-
-[[!template text="""Now I'm going to do another different thing,""" start="00:07:51.641" video="mainVideo-table" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""New table""" start="00:07:51.641" video="mainVideo-table" id="subtitle"]]</div>[[!template text="""Now I'm going to do another different thing,""" start="00:07:51.641" video="mainVideo-table" id="subtitle"]]
[[!template text="""we are going to put a new table,""" start="00:07:54.521" video="mainVideo-table" id="subtitle"]]
[[!template text="""I'm going to put a new table""" start="00:08:02.800" video="mainVideo-table" id="subtitle"]]
[[!template text="""in which I'm going to put""" start="00:08:07.560" video="mainVideo-table" id="subtitle"]]
@@ -175,9 +160,7 @@
[[!template text="""the students that failed""" start="00:09:57.520" video="mainVideo-table" id="subtitle"]]
[[!template text="""and the ratio of people that passed.""" start="00:09:58.560" video="mainVideo-table" id="subtitle"]]
-[[!template new="1" text="""Statistics""" start="00:10:01.280" video="mainVideo-table" id="subtitle"]]
-
-[[!template text="""Sometimes this type of qualification will be useful for me,""" start="00:10:01.280" video="mainVideo-table" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Statistics""" start="00:10:01.280" video="mainVideo-table" id="subtitle"]]</div>[[!template text="""Sometimes this type of qualification will be useful for me,""" start="00:10:01.280" video="mainVideo-table" id="subtitle"]]
[[!template text="""to see how much has been the sound,""" start="00:10:04.820" video="mainVideo-table" id="subtitle"]]
[[!template text="""how much good has been the exercise.""" start="00:10:08.080" video="mainVideo-table" id="subtitle"]]
[[!template text="""Now, I'm going to put a new table.""" start="00:10:12.240" video="mainVideo-table" id="subtitle"]]
@@ -198,9 +181,7 @@
[[!template text="""and two decimal,""" start="00:12:08.960" video="mainVideo-table" id="subtitle"]]
[[!template text="""and that is another interesting score.""" start="00:12:12.640" video="mainVideo-table" id="subtitle"]]
-[[!template new="1" text="""Combining""" start="00:12:17.800" video="mainVideo-table" id="subtitle"]]
-
-[[!template text="""Now, I'm going to finish showing how we can use.""" start="00:12:17.800" video="mainVideo-table" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Combining""" start="00:12:17.800" video="mainVideo-table" id="subtitle"]]</div>[[!template text="""Now, I'm going to finish showing how we can use.""" start="00:12:17.800" video="mainVideo-table" id="subtitle"]]
[[!template text="""To finish it, we are going to see""" start="00:12:23.240" video="mainVideo-table" id="subtitle"]]
[[!template text="""how we can combine several tables""" start="00:12:25.840" video="mainVideo-table" id="subtitle"]]
[[!template text="""or even an aggregated table in a new table.""" start="00:12:28.300" video="mainVideo-table" id="subtitle"]]
@@ -242,7 +223,7 @@
[[!template text="""to improve your qualification of a student,""" start="00:15:42.280" video="mainVideo-table" id="subtitle"]]
[[!template text="""or for whatever you want.""" start="00:15:45.600" video="mainVideo-table" id="subtitle"]]
-
+</div>
Captioner: danielmolina
diff --git a/2023/info/table-before.md b/2023/info/table-before.md
index 9e58529f..3a26bf63 100644
--- a/2023/info/table-before.md
+++ b/2023/info/table-before.md
@@ -1,12 +1,12 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
[[!toc ]]
-Format: 16-min talk; Q&A: ask questions via Etherpad/IRC; we'll e-mail the speaker and post answers on this wiki page after the conference
+Format: 16-min talk ; Q&A: ask questions via Etherpad/IRC; we'll e-mail the speaker and post answers on this wiki page after the conference
Status: All done
-<div class="vid"><video controls preload="none" id="table-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-table--who-needs-excel-managing-your-students-qualifications-with-orgtable--daniel-molina--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-table--who-needs-excel-managing-your-students-qualifications-with-orgtable--daniel-molina--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 15:51 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-table--who-needs-excel-managing-your-students-qualifications-with-orgtable--daniel-molina--alternative.mp4">Download --alternative.mp4 (126MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-table--who-needs-excel-managing-your-students-qualifications-with-orgtable--daniel-molina--alternative.webm">Download --alternative.webm (45MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-table--who-needs-excel-managing-your-students-qualifications-with-orgtable--daniel-molina--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-table--who-needs-excel-managing-your-students-qualifications-with-orgtable--daniel-molina--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-table--who-needs-excel-managing-your-students-qualifications-with-orgtable--daniel-molina--main.opus">Download --main.opus (11MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-table--who-needs-excel-managing-your-students-qualifications-with-orgtable--daniel-molina--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-table--who-needs-excel-managing-your-students-qualifications-with-orgtable--daniel-molina--main.webm">Download --main.webm (45MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-table--who-needs-excel-managing-your-students-qualifications-with-orgtable--daniel-molina--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-table--who-needs-excel-managing-your-students-qualifications-with-orgtable--daniel-molina--pad.md">Download --pad.md</a></li><li><a href="https://toobnix.org/w/p8K8mtayv2HYtw1gK3zUwR">View on Toobnix</a></li></ul></div></div>
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-table"><source src="https://media.emacsconf.org/2023/emacsconf-2023-table--who-needs-excel-managing-your-students-qualifications-with-orgtable--daniel-molina--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-table--who-needs-excel-managing-your-students-qualifications-with-orgtable--daniel-molina--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 15:51 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2023-table">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-table--who-needs-excel-managing-your-students-qualifications-with-orgtable--daniel-molina--alternative.mp4">Download --alternative.mp4 (126MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-table--who-needs-excel-managing-your-students-qualifications-with-orgtable--daniel-molina--alternative.webm">Download --alternative.webm (45MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-table--who-needs-excel-managing-your-students-qualifications-with-orgtable--daniel-molina--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-table--who-needs-excel-managing-your-students-qualifications-with-orgtable--daniel-molina--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-table--who-needs-excel-managing-your-students-qualifications-with-orgtable--daniel-molina--main.opus">Download --main.opus (11MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-table--who-needs-excel-managing-your-students-qualifications-with-orgtable--daniel-molina--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-table--who-needs-excel-managing-your-students-qualifications-with-orgtable--daniel-molina--main.webm">Download --main.webm (45MB)</a></li><li><a href="https://toobnix.org/w/p8K8mtayv2HYtw1gK3zUwR">View on Toobnix</a></li><li><a href="https://www.youtube.com/watch?v=UzDqOrFGWbw">View on Youtube</a></li></ul></div></div>
# Description
<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/info/table-nav.md b/2023/info/table-nav.md
index 625ecd74..f825c777 100644
--- a/2023/info/table-nav.md
+++ b/2023/info/table-nav.md
@@ -3,5 +3,5 @@
Back to the [[talks]]
Previous by track: <a href="/2023/talks/teaching">Teaching computer and data science with literate programming tools</a>
Next by track: <a href="/2023/talks/one">one.el: the static site generator for Emacs Lisp Programmers</a>
-Track: <span class="sched-track General">General</span>
+Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2023/watch/gen">Watch</a></strong>
</div>
diff --git a/2023/info/teaching-after.md b/2023/info/teaching-after.md
index 6846d4d7..1e1bf481 100644
--- a/2023/info/teaching-after.md
+++ b/2023/info/teaching-after.md
@@ -1,13 +1,10 @@
<!-- Automatically generated by emacsconf-publish-after-page -->
-<a name="teaching-mainVideo-transcript"></a>
-# Transcript
+<div class="transcript transcript-mainVideo"><a name="teaching-mainVideo-transcript"></a><h1>Transcript</h1>
-[[!template new="1" text="""Introduction""" start="00:00:00.000" video="mainVideo-teaching" id="subtitle"]]
-
-[[!template text="""Welcome to my talk, which is pre-recorded,""" start="00:00:00.000" video="mainVideo-teaching" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Introduction""" start="00:00:00.000" video="mainVideo-teaching" id="subtitle"]]</div>[[!template text="""Welcome to my talk, which is pre-recorded,""" start="00:00:00.000" video="mainVideo-teaching" id="subtitle"]]
[[!template text="""so please don't blame me if I come across""" start="00:00:04.520" video="mainVideo-teaching" id="subtitle"]]
[[!template text="""as wooden and humorless.""" start="00:00:06.960" video="mainVideo-teaching" id="subtitle"]]
[[!template text="""It's hard to work up any emotion""" start="00:00:08.600" video="mainVideo-teaching" id="subtitle"]]
@@ -28,9 +25,7 @@
[[!template text="""You had a good look at me.""" start="00:00:48.200" video="mainVideo-teaching" id="subtitle"]]
[[!template text="""I think that's just going to be in the way.""" start="00:00:49.560" video="mainVideo-teaching" id="subtitle"]]
-[[!template new="1" text="""My interest in this topic""" start="00:00:54.160" video="mainVideo-teaching" id="subtitle"]]
-
-[[!template text="""So my interest in this topic began with""" start="00:00:54.160" video="mainVideo-teaching" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""My interest in this topic""" start="00:00:54.160" video="mainVideo-teaching" id="subtitle"]]</div>[[!template text="""So my interest in this topic began with""" start="00:00:54.160" video="mainVideo-teaching" id="subtitle"]]
[[!template text="""an Emacs talk given by Daniel German""" start="00:00:57.280" video="mainVideo-teaching" id="subtitle"]]
[[!template text="""from the University of Victoria in Canada in 2021.""" start="00:00:59.280" video="mainVideo-teaching" id="subtitle"]]
[[!template text="""Daniel demonstrated in detail""" start="00:01:04.120" video="mainVideo-teaching" id="subtitle"]]
@@ -57,9 +52,7 @@
[[!template text="""Please also use the Q&A to inquire about such details""" start="00:02:00.120" video="mainVideo-teaching" id="subtitle"]]
[[!template text="""if they interest you.""" start="00:02:05.000" video="mainVideo-teaching" id="subtitle"]]
-[[!template new="1" text="""What is data science?""" start="00:02:08.040" video="mainVideo-teaching" id="subtitle"]]
-
-[[!template text="""I probably don't have to explain what computer science is,""" start="00:02:08.040" video="mainVideo-teaching" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""What is data science?""" start="00:02:08.040" video="mainVideo-teaching" id="subtitle"]]</div>[[!template text="""I probably don't have to explain what computer science is,""" start="00:02:08.040" video="mainVideo-teaching" id="subtitle"]]
[[!template text="""but not everyone may know what data science does.""" start="00:02:12.800" video="mainVideo-teaching" id="subtitle"]]
[[!template text="""I teach courses in both disciplines""" start="00:02:16.360" video="mainVideo-teaching" id="subtitle"]]
[[!template text="""and the boundaries between them are blurred,""" start="00:02:18.240" video="mainVideo-teaching" id="subtitle"]]
@@ -92,9 +85,7 @@
[[!template text="""And now we train--or try to train--data scientists""" start="00:03:42.000" video="mainVideo-teaching" id="subtitle"]]
[[!template text="""in undergraduate programs as well.""" start="00:03:45.600" video="mainVideo-teaching" id="subtitle"]]
-[[!template new="1" text="""Computer science is a craft""" start="00:03:47.640" video="mainVideo-teaching" id="subtitle"]]
-
-[[!template text="""Now, what I'm saying here, I think is true""" start="00:03:47.640" video="mainVideo-teaching" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Computer science is a craft""" start="00:03:47.640" video="mainVideo-teaching" id="subtitle"]]</div>[[!template text="""Now, what I'm saying here, I think is true""" start="00:03:47.640" video="mainVideo-teaching" id="subtitle"]]
[[!template text="""for all areas of computing,""" start="00:03:52.400" video="mainVideo-teaching" id="subtitle"]]
[[!template text="""from software engineering to data science.""" start="00:03:54.200" video="mainVideo-teaching" id="subtitle"]]
[[!template text="""They are mostly taught and learned like a craft""" start="00:03:56.960" video="mainVideo-teaching" id="subtitle"]]
@@ -119,9 +110,7 @@
[[!template text="""In this field, radical innovation is the rule,""" start="00:04:48.720" video="mainVideo-teaching" id="subtitle"]]
[[!template text="""not the exception.""" start="00:04:51.520" video="mainVideo-teaching" id="subtitle"]]
-[[!template new="1" text="""The problem""" start="00:04:52.840" video="mainVideo-teaching" id="subtitle"]]
-
-[[!template text="""The problem that I identified is that students,""" start="00:04:52.840" video="mainVideo-teaching" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""The problem""" start="00:04:52.840" video="mainVideo-teaching" id="subtitle"]]</div>[[!template text="""The problem that I identified is that students,""" start="00:04:52.840" video="mainVideo-teaching" id="subtitle"]]
[[!template text="""especially undergraduate students""" start="00:04:58.680" video="mainVideo-teaching" id="subtitle"]]
[[!template text="""in computer and data science,""" start="00:05:00.800" video="mainVideo-teaching" id="subtitle"]]
[[!template text="""often do no longer understand the infrastructure.""" start="00:05:02.400" video="mainVideo-teaching" id="subtitle"]]
@@ -137,9 +126,7 @@
[[!template text="""have all the power--though passively,""" start="00:05:31.840" video="mainVideo-teaching" id="subtitle"]]
[[!template text="""of course, for now anyway.""" start="00:05:35.080" video="mainVideo-teaching" id="subtitle"]]
-[[!template new="1" text="""The solution: Emacs + Org-mode""" start="00:05:36.560" video="mainVideo-teaching" id="subtitle"]]
-
-[[!template text="""Enter Emacs, the self-extensible operating system""" start="00:05:36.560" video="mainVideo-teaching" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""The solution: Emacs + Org-mode""" start="00:05:36.560" video="mainVideo-teaching" id="subtitle"]]</div>[[!template text="""Enter Emacs, the self-extensible operating system""" start="00:05:36.560" video="mainVideo-teaching" id="subtitle"]]
[[!template text="""disguised as a text editor.""" start="00:05:43.680" video="mainVideo-teaching" id="subtitle"]]
[[!template text="""You're at EmacsConf, so of course I don't have to tell you""" start="00:05:46.000" video="mainVideo-teaching" id="subtitle"]]
[[!template text="""what Emacs can do.""" start="00:05:51.000" video="mainVideo-teaching" id="subtitle"]]
@@ -156,9 +143,7 @@
[[!template text="""but the results have made me even more optimistic""" start="00:06:19.680" video="mainVideo-teaching" id="subtitle"]]
[[!template text="""than I already am by nature.""" start="00:06:22.400" video="mainVideo-teaching" id="subtitle"]]
-[[!template new="1" text="""Emacs configuration file""" start="00:06:24.120" video="mainVideo-teaching" id="subtitle"]]
-
-[[!template text="""So to rein in your expectations,""" start="00:06:24.120" video="mainVideo-teaching" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Emacs configuration file""" start="00:06:24.120" video="mainVideo-teaching" id="subtitle"]]</div>[[!template text="""So to rein in your expectations,""" start="00:06:24.120" video="mainVideo-teaching" id="subtitle"]]
[[!template text="""you cannot do entirely without""" start="00:06:28.840" video="mainVideo-teaching" id="subtitle"]]
[[!template text="""configuring the student's experience.""" start="00:06:31.840" video="mainVideo-teaching" id="subtitle"]]
[[!template text="""An important part of this""" start="00:06:33.800" video="mainVideo-teaching" id="subtitle"]]
@@ -179,9 +164,7 @@
[[!template text="""from flicking all the time to the mouse;""" start="00:07:23.200" video="mainVideo-teaching" id="subtitle"]]
[[!template text="""seems to be an essential part of getting used to Emacs.""" start="00:07:25.840" video="mainVideo-teaching" id="subtitle"]]
-[[!template new="1" text="""Story + code = source + documentation""" start="00:07:30.360" video="mainVideo-teaching" id="subtitle"]]
-
-[[!template text="""Now Org Mode was included in Emacs in 2006 as a major mode,""" start="00:07:30.360" video="mainVideo-teaching" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Story + code = source + documentation""" start="00:07:30.360" video="mainVideo-teaching" id="subtitle"]]</div>[[!template text="""Now Org Mode was included in Emacs in 2006 as a major mode,""" start="00:07:30.360" video="mainVideo-teaching" id="subtitle"]]
[[!template text="""and as you know, it's a structured plain text format""" start="00:07:38.840" video="mainVideo-teaching" id="subtitle"]]
[[!template text="""with notebook live code execution.""" start="00:07:41.960" video="mainVideo-teaching" id="subtitle"]]
[[!template text="""It's an ideal platform for literate programming,""" start="00:07:45.040" video="mainVideo-teaching" id="subtitle"]]
@@ -195,9 +178,7 @@
[[!template text="""This methodology was conceived by Donald Knuth in 1984,""" start="00:08:13.920" video="mainVideo-teaching" id="subtitle"]]
[[!template text="""and it is therefore even older than Emacs itself.""" start="00:08:18.480" video="mainVideo-teaching" id="subtitle"]]
-[[!template new="1" text="""What is literate programming?""" start="00:08:22.040" video="mainVideo-teaching" id="subtitle"]]
-
-[[!template text="""The main purpose of literate programming is not only""" start="00:08:22.040" video="mainVideo-teaching" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""What is literate programming?""" start="00:08:22.040" video="mainVideo-teaching" id="subtitle"]]</div>[[!template text="""The main purpose of literate programming is not only""" start="00:08:22.040" video="mainVideo-teaching" id="subtitle"]]
[[!template text="""to make code or documentation or output more manageable,""" start="00:08:27.200" video="mainVideo-teaching" id="subtitle"]]
[[!template text="""but to allow humans to create a data story with ease""" start="00:08:31.120" video="mainVideo-teaching" id="subtitle"]]
[[!template text="""from a single source.""" start="00:08:34.760" video="mainVideo-teaching" id="subtitle"]]
@@ -226,9 +207,7 @@
[[!template text="""which export code blocks into buffers""" start="00:09:52.800" video="mainVideo-teaching" id="subtitle"]]
[[!template text="""in whatever language the code block is written.""" start="00:09:55.640" video="mainVideo-teaching" id="subtitle"]]
-[[!template new="1" text="""Emacs as a literate programming tool""" start="00:09:59.880" video="mainVideo-teaching" id="subtitle"]]
-
-[[!template text="""In data science, these interactive notebooks""" start="00:09:59.880" video="mainVideo-teaching" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Emacs as a literate programming tool""" start="00:09:59.880" video="mainVideo-teaching" id="subtitle"]]</div>[[!template text="""In data science, these interactive notebooks""" start="00:09:59.880" video="mainVideo-teaching" id="subtitle"]]
[[!template text="""in one of the interpreted languages like Julia,""" start="00:10:02.720" video="mainVideo-teaching" id="subtitle"]]
[[!template text="""Python, or R dominate.""" start="00:10:06.000" video="mainVideo-teaching" id="subtitle"]]
[[!template text="""The basis technology,""" start="00:10:07.840" video="mainVideo-teaching" id="subtitle"]]
@@ -253,9 +232,7 @@
[[!template text="""That is something you can see in a paper of mine,""" start="00:11:11.040" video="mainVideo-teaching" id="subtitle"]]
[[!template text="""in one of the figures.""" start="00:11:14.160" video="mainVideo-teaching" id="subtitle"]]
-[[!template new="1" text="""Case study: basic setup""" start="00:11:18.960" video="mainVideo-teaching" id="subtitle"]]
-
-[[!template text="""Now, coming to the case study itself,""" start="00:11:18.960" video="mainVideo-teaching" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Case study: basic setup""" start="00:11:18.960" video="mainVideo-teaching" id="subtitle"]]</div>[[!template text="""Now, coming to the case study itself,""" start="00:11:18.960" video="mainVideo-teaching" id="subtitle"]]
[[!template text="""here are some of the overall results of the case study.""" start="00:11:22.720" video="mainVideo-teaching" id="subtitle"]]
[[!template text="""Now, the courses ranged from introductory to advanced,""" start="00:11:25.040" video="mainVideo-teaching" id="subtitle"]]
[[!template text="""as you can see here in the table on the left-hand side.""" start="00:11:29.040" video="mainVideo-teaching" id="subtitle"]]
@@ -272,9 +249,7 @@
[[!template text="""is openly available on GitHub,""" start="00:12:03.280" video="mainVideo-teaching" id="subtitle"]]
[[!template text="""and the address is on the slide at the bottom.""" start="00:12:05.400" video="mainVideo-teaching" id="subtitle"]]
-[[!template new="1" text="""Emacs + Org-mode notebooks""" start="00:12:11.280" video="mainVideo-teaching" id="subtitle"]]
-
-[[!template text="""I'm now going to briefly comment on""" start="00:12:11.280" video="mainVideo-teaching" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Emacs + Org-mode notebooks""" start="00:12:11.280" video="mainVideo-teaching" id="subtitle"]]</div>[[!template text="""I'm now going to briefly comment on""" start="00:12:11.280" video="mainVideo-teaching" id="subtitle"]]
[[!template text="""the most important aspects of using Emacs and Org Mode""" start="00:12:15.880" video="mainVideo-teaching" id="subtitle"]]
[[!template text="""in and outside of class.""" start="00:12:18.800" video="mainVideo-teaching" id="subtitle"]]
[[!template text="""Essentially, these two--Emacs and Org Mode--""" start="00:12:20.120" video="mainVideo-teaching" id="subtitle"]]
@@ -288,9 +263,7 @@
[[!template text="""student projects, practice in class--""" start="00:12:40.000" video="mainVideo-teaching" id="subtitle"]]
[[!template text="""was done with these two tools.""" start="00:12:42.440" video="mainVideo-teaching" id="subtitle"]]
-[[!template new="1" text="""Onboarding: simplified Emacs tutorial""" start="00:12:45.800" video="mainVideo-teaching" id="subtitle"]]
-
-[[!template text="""To facilitate the onboarding,""" start="00:12:45.800" video="mainVideo-teaching" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Onboarding: simplified Emacs tutorial""" start="00:12:45.800" video="mainVideo-teaching" id="subtitle"]]</div>[[!template text="""To facilitate the onboarding,""" start="00:12:45.800" video="mainVideo-teaching" id="subtitle"]]
[[!template text="""so to get students used to Emacs in the first place,""" start="00:12:48.000" video="mainVideo-teaching" id="subtitle"]]
[[!template text="""I developed a simplified Emacs tutorial,""" start="00:12:51.000" video="mainVideo-teaching" id="subtitle"]]
[[!template text="""which was focused on the basics of literate programming.""" start="00:12:53.280" video="mainVideo-teaching" id="subtitle"]]
@@ -310,9 +283,7 @@
[[!template text="""Most of the students, in fact, had never heard of Emacs.""" start="00:13:31.200" video="mainVideo-teaching" id="subtitle"]]
[[!template text="""All the classes were taught physically in a computer lab.""" start="00:13:35.400" video="mainVideo-teaching" id="subtitle"]]
-[[!template new="1" text="""Instruction + interaction""" start="00:13:40.840" video="mainVideo-teaching" id="subtitle"]]
-
-[[!template text="""Emacs with Org Mode""" start="00:13:40.840" video="mainVideo-teaching" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Instruction + interaction""" start="00:13:40.840" video="mainVideo-teaching" id="subtitle"]]</div>[[!template text="""Emacs with Org Mode""" start="00:13:40.840" video="mainVideo-teaching" id="subtitle"]]
[[!template text="""and the necessary languages for the class""" start="00:13:42.760" video="mainVideo-teaching" id="subtitle"]]
[[!template text="""were pre-installed on the computers.""" start="00:13:45.480" video="mainVideo-teaching" id="subtitle"]]
[[!template text="""The computers ran Windows, unfortunately,""" start="00:13:47.360" video="mainVideo-teaching" id="subtitle"]]
@@ -338,9 +309,7 @@
[[!template text="""You can find examples of these rather high-octane projects""" start="00:14:44.240" video="mainVideo-teaching" id="subtitle"]]
[[!template text="""in my paper.""" start="00:14:48.080" video="mainVideo-teaching" id="subtitle"]]
-[[!template new="1" text="""Assignments + projects""" start="00:14:48.720" video="mainVideo-teaching" id="subtitle"]]
-
-[[!template text="""Now, using literate programming for the projects""" start="00:14:48.720" video="mainVideo-teaching" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Assignments + projects""" start="00:14:48.720" video="mainVideo-teaching" id="subtitle"]]</div>[[!template text="""Now, using literate programming for the projects""" start="00:14:48.720" video="mainVideo-teaching" id="subtitle"]]
[[!template text="""provided some unique benefits.""" start="00:14:52.680" video="mainVideo-teaching" id="subtitle"]]
[[!template text="""By having to continuously interweave documentation,""" start="00:14:54.400" video="mainVideo-teaching" id="subtitle"]]
[[!template text="""references and output alongside functional code,""" start="00:14:57.960" video="mainVideo-teaching" id="subtitle"]]
@@ -371,9 +340,7 @@
[[!template text="""after the first term""" start="00:16:08.000" video="mainVideo-teaching" id="subtitle"]]
[[!template text="""and continue for the following two terms.""" start="00:16:09.160" video="mainVideo-teaching" id="subtitle"]]
-[[!template new="1" text="""Overall results positive""" start="00:16:15.280" video="mainVideo-teaching" id="subtitle"]]
-
-[[!template text="""The courses... Coming to the result, the overall result...""" start="00:16:15.280" video="mainVideo-teaching" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Overall results positive""" start="00:16:15.280" video="mainVideo-teaching" id="subtitle"]]</div>[[!template text="""The courses... Coming to the result, the overall result...""" start="00:16:15.280" video="mainVideo-teaching" id="subtitle"]]
[[!template text="""The courses were formally and informally""" start="00:16:18.840" video="mainVideo-teaching" id="subtitle"]]
[[!template text="""also evaluated by the students,""" start="00:16:21.000" video="mainVideo-teaching" id="subtitle"]]
[[!template text="""but you need to look at my paper""" start="00:16:23.120" video="mainVideo-teaching" id="subtitle"]]
@@ -414,9 +381,7 @@
[[!template text="""for the loss of the immersion""" start="00:18:13.200" video="mainVideo-teaching" id="subtitle"]]
[[!template text="""that Emacs and Org Mode deliver.""" start="00:18:15.120" video="mainVideo-teaching" id="subtitle"]]
-[[!template new="1" text="""Conclusion & outlook""" start="00:18:19.800" video="mainVideo-teaching" id="subtitle"]]
-
-[[!template text="""And here's the summary.""" start="00:18:19.800" video="mainVideo-teaching" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Conclusion & outlook""" start="00:18:19.800" video="mainVideo-teaching" id="subtitle"]]</div>[[!template text="""And here's the summary.""" start="00:18:19.800" video="mainVideo-teaching" id="subtitle"]]
[[!template text="""When learning computer and data science,""" start="00:18:21.400" video="mainVideo-teaching" id="subtitle"]]
[[!template text="""immersion is everything.""" start="00:18:23.760" video="mainVideo-teaching" id="subtitle"]]
[[!template text="""The best students will aim at immersion anyway.""" start="00:18:25.680" video="mainVideo-teaching" id="subtitle"]]
@@ -442,12 +407,11 @@
[[!template text="""And I'm looking forward to the Q&A.""" start="00:19:21.720" video="mainVideo-teaching" id="subtitle"]]
[[!template text="""Thank you.""" start="00:19:22.840" video="mainVideo-teaching" id="subtitle"]]
-
+</div>
Captioner: sachac
-<a name="teaching-qanda-transcript"></a>
-# Q&A transcript (unedited)
+<div class="transcript transcript-qanda"><a name="teaching-qanda-transcript"></a><h1>Q&A transcript (unedited)</h1>
[[!template text="""[Speaker 0]: Again, second only live Q&A of the day.""" start="00:00:00.599" video="qanda-teaching" id="subtitle"]]
[[!template text="""So, things are still a bit rusty,""" start="00:00:04.339" video="qanda-teaching" id="subtitle"]]
@@ -1334,7 +1298,7 @@ Captioner: sachac
[[!template text="""conference.""" start="00:41:36.840" video="qanda-teaching" id="subtitle"]]
[[!template text="""[Speaker 1]: You""" start="00:42:00.060" video="qanda-teaching" id="subtitle"]]
-Questions or comments? Please e-mail [birkenkrahe@lyon.edu](mailto:birkenkrahe@lyon.edu?subject=Comment%20for%20EmacsConf%202023%20teaching%3A%20Teaching%20computer%20and%20data%20science%20with%20literate%20programming%20tools)
+</div>Questions or comments? Please e-mail [birkenkrahe@lyon.edu](mailto:birkenkrahe@lyon.edu?subject=Comment%20for%20EmacsConf%202023%20teaching%3A%20Teaching%20computer%20and%20data%20science%20with%20literate%20programming%20tools)
<!-- End of emacsconf-publish-after-page -->
diff --git a/2023/info/teaching-before.md b/2023/info/teaching-before.md
index 6a5fa970..1348f7ae 100644
--- a/2023/info/teaching-before.md
+++ b/2023/info/teaching-before.md
@@ -1,6 +1,6 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
[[!toc ]]
-Format: 20-min talk; Q&A: BigBlueButton conference room
+Format: 20-min talk ; Q&A: BigBlueButton conference room
Status: TO_INDEX_QA
@@ -9,7 +9,7 @@ Status: TO_INDEX_QA
# Talk
-<div class="vid"><video controls preload="none" id="teaching-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="teaching-mainVideo" data="""
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-teaching"><source src="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="mainVideo-teaching" data="""
00:00.000 Introduction
00:54.160 My interest in this topic
02:08.040 What is data science?
@@ -28,10 +28,10 @@ Status: TO_INDEX_QA
16:15.280 Overall results positive
18:19.800 Conclusion & outlook
-"""]]<div></div>Duration: 19:27 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--main.opus">Download --main.opus (14MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--main.webm">Download --main.webm (44MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--pad.md">Download --pad.md</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe.odp">Download .odp (15MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe.org">Download .org</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe.pdf">Download .pdf (2.9MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe.pptx">Download .pptx (15MB)</a></li><li><a href="https://toobnix.org/w/b4eLjcLo9vcewVTzrv95L8">View on Toobnix</a></li></ul></div></div>
+"""]]<div></div>Duration: 19:27 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2023-teaching">Open Etherpad</a></li><li><a href="https://bbb.emacsverse.org/playback/presentation/2.0/playback.html?meetingId=c7af4fb02c209bbd6864301fdf26dd137916469c-1701529159289">Play recording from BigBlueButton</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--main.opus">Download --main.opus (14MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--main.webm">Download --main.webm (44MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe.odp">Download .odp (15MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe.org">Download .org</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe.pdf">Download .pdf (2.9MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe.pptx">Download .pptx (15MB)</a></li><li><a href="https://toobnix.org/w/b4eLjcLo9vcewVTzrv95L8">View on Toobnix</a></li><li><a href="https://youtu.be/U15zUNBz2CU">View on Youtube</a></li></ul></div></div>
# Q&A
-<div class="vid"><video controls preload="none" id="teaching-qanda"><source src="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--answers.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div>Listen to just the audio:<br /><audio controls preload="none" id="teaching-qanda-audio" src="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--answers.opus"></audio></div><div></div>Duration: 42:23 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--answers.json">Download --answers.json (1.8MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--answers.opus">Download --answers.opus (22MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--answers.webm">Download --answers.webm (199MB)</a></li></ul></div></div>
+<div class="vid qanda"><video controls preload="none" id="qanda-teaching"><source src="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--answers.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div>Listen to just the audio:<br /><audio controls preload="none" id="qanda-teaching-audio" src="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--answers.opus"></audio></div><div></div>Duration: 42:23 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2023-teaching">Open Etherpad</a></li><li><a href="https://bbb.emacsverse.org/playback/presentation/2.0/playback.html?meetingId=c7af4fb02c209bbd6864301fdf26dd137916469c-1701529159289">Play recording from BigBlueButton</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--answers.json">Download --answers.json (1.8MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--answers.opus">Download --answers.opus (22MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--answers.webm">Download --answers.webm (199MB)</a></li></ul></div></div>
# Description
<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/info/teaching-nav.md b/2023/info/teaching-nav.md
index bf06e887..64d98156 100644
--- a/2023/info/teaching-nav.md
+++ b/2023/info/teaching-nav.md
@@ -3,5 +3,5 @@
Back to the [[talks]]
Previous by track: <a href="/2023/talks/uni">Authoring and presenting university courses with Emacs and a full libre software stack</a>
Next by track: <a href="/2023/talks/table">Who needs Excel? Managing your students qualifications with org-table</a>
-Track: <span class="sched-track General">General</span>
+Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2023/watch/gen">Watch</a></strong>
</div>
diff --git a/2023/info/test-after.md b/2023/info/test-after.md
index 413f1f6d..b2329598 100644
--- a/2023/info/test-after.md
+++ b/2023/info/test-after.md
@@ -1,13 +1,10 @@
<!-- Automatically generated by emacsconf-publish-after-page -->
-<a name="test-mainVideo-transcript"></a>
-# Transcript
+<div class="transcript transcript-mainVideo"><a name="test-mainVideo-transcript"></a><h1>Transcript</h1>
-[[!template new="1" text="""Introduction""" start="00:00:03.120" video="mainVideo-test" id="subtitle"]]
-
-[[!template text="""Hi everyone! I'm Mats Lidell.""" start="00:00:03.120" video="mainVideo-test" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Introduction""" start="00:00:03.120" video="mainVideo-test" id="subtitle"]]</div>[[!template text="""Hi everyone! I'm Mats Lidell.""" start="00:00:03.120" video="mainVideo-test" id="subtitle"]]
[[!template text="""I'm going to talk about my journey""" start="00:00:07.440" video="mainVideo-test" id="subtitle"]]
[[!template text="""writing test cases for GNU Hyperbole""" start="00:00:09.880" video="mainVideo-test" id="subtitle"]]
[[!template text="""and what I learned on the way.""" start="00:00:12.481" video="mainVideo-test" id="subtitle"]]
@@ -61,9 +58,7 @@
[[!template text="""no knowledge of what testing frameworks existed,""" start="00:03:00.760" video="mainVideo-test" id="subtitle"]]
[[!template text="""and not really knowing a lot about Emacs Lisp at all.""" start="00:03:03.360" video="mainVideo-test" id="subtitle"]]
-[[!template new="1" text="""ERT: Emacs Lisp Regression Testing""" start="00:03:11.160" video="mainVideo-test" id="subtitle"]]
-
-[[!template text="""Luckily there is a package for writing tests in Emacs.""" start="00:03:11.160" video="mainVideo-test" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""ERT: Emacs Lisp Regression Testing""" start="00:03:11.160" video="mainVideo-test" id="subtitle"]]</div>[[!template text="""Luckily there is a package for writing tests in Emacs.""" start="00:03:11.160" video="mainVideo-test" id="subtitle"]]
[[!template text="""It is called ERT: Emacs Lisp Regression Testing.""" start="00:03:13.800" video="mainVideo-test" id="subtitle"]]
[[!template text="""It contains both support for defining tests and running them.""" start="00:03:17.920" video="mainVideo-test" id="subtitle"]]
[[!template text="""Defining a test is done with the macro `ert-deftest`.""" start="00:03:20.960" video="mainVideo-test" id="subtitle"]]
@@ -82,9 +77,7 @@
[[!template text="""and the outcome of the test is evaluated.""" start="00:04:09.760" video="mainVideo-test" id="subtitle"]]
[[!template text="""Did the test succeed or not?""" start="00:04:13.120" video="mainVideo-test" id="subtitle"]]
-[[!template new="1" text="""Assertions with `should`""" start="00:04:14.360" video="mainVideo-test" id="subtitle"]]
-
-[[!template text="""The verification of a test is performed with""" start="00:04:14.360" video="mainVideo-test" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Assertions with `should`""" start="00:04:14.360" video="mainVideo-test" id="subtitle"]]</div>[[!template text="""The verification of a test is performed with""" start="00:04:14.360" video="mainVideo-test" id="subtitle"]]
[[!template text="""one or more so-called assertions.""" start="00:04:18.480" video="mainVideo-test" id="subtitle"]]
[[!template text="""In ERT, they are implemented""" start="00:04:21.480" video="mainVideo-test" id="subtitle"]]
[[!template text="""with the macro `should`""" start="00:04:25.000" video="mainVideo-test" id="subtitle"]]
@@ -95,9 +88,7 @@
[[!template text="""This simple test verifies that the function `+`""" start="00:04:48.581" video="mainVideo-test" id="subtitle"]]
[[!template text="""can add the numbers 2 and 3 and get the result 5.""" start="00:04:51.920" video="mainVideo-test" id="subtitle"]]
-[[!template new="1" text="""Running a test case""" start="00:04:56.920" video="mainVideo-test" id="subtitle"]]
-
-[[!template text="""So now we have defined a test case. How do we run it?""" start="00:04:56.920" video="mainVideo-test" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Running a test case""" start="00:04:56.920" video="mainVideo-test" id="subtitle"]]</div>[[!template text="""So now we have defined a test case. How do we run it?""" start="00:04:56.920" video="mainVideo-test" id="subtitle"]]
[[!template text="""The ERT package has the function (or""" start="00:05:01.960" video="mainVideo-test" id="subtitle"]]
[[!template text="""rather convenience alias) `ert`. It takes a test selector.""" start="00:05:03.920" video="mainVideo-test" id="subtitle"]]
[[!template text="""The test name works as a selector for running just one test.""" start="00:05:09.520" video="mainVideo-test" id="subtitle"]]
@@ -121,9 +112,7 @@
[[!template text="""and it was 5 equals to 5.""" start="00:06:48.000" video="mainVideo-test" id="subtitle"]]
[[!template text="""So a good example of a successful test case.""" start="00:06:49.800" video="mainVideo-test" id="subtitle"]]
-[[!template new="1" text="""Debug a test""" start="00:06:54.560" video="mainVideo-test" id="subtitle"]]
-
-[[!template text="""So now we've seen how we can run a test case.""" start="00:06:54.560" video="mainVideo-test" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Debug a test""" start="00:06:54.560" video="mainVideo-test" id="subtitle"]]</div>[[!template text="""So now we've seen how we can run a test case.""" start="00:06:54.560" video="mainVideo-test" id="subtitle"]]
[[!template text="""Can we debug it? Yes. For debugging a test case,""" start="00:06:57.920" video="mainVideo-test" id="subtitle"]]
[[!template text="""the `ert-deftest` can be set up using `edebug-defun`,""" start="00:07:03.800" video="mainVideo-test" id="subtitle"]]
[[!template text="""just as a function or macro is set up""" start="00:07:07.940" video="mainVideo-test" id="subtitle"]]
@@ -134,9 +123,7 @@
[[!template text="""and we can inspect here what's happening.""" start="00:07:35.660" video="mainVideo-test" id="subtitle"]]
[[!template text="""Step through it and yes it succeeded just as before.""" start="00:07:40.680" video="mainVideo-test" id="subtitle"]]
-[[!template new="1" text="""Commercial break: Hyperbole""" start="00:07:50.380" video="mainVideo-test" id="subtitle"]]
-
-[[!template text="""It's time for a commercial break!""" start="00:07:50.380" video="mainVideo-test" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Commercial break: Hyperbole""" start="00:07:50.380" video="mainVideo-test" id="subtitle"]]</div>[[!template text="""It's time for a commercial break!""" start="00:07:50.380" video="mainVideo-test" id="subtitle"]]
[[!template text="""Hyperbole itself can help with running tests""" start="00:07:56.880" video="mainVideo-test" id="subtitle"]]
[[!template text="""and also help with running them in debug mode.""" start="00:08:00.080" video="mainVideo-test" id="subtitle"]]
[[!template text="""That is because hyperbole identifies the `ert-deftest`""" start="00:08:03.640" video="mainVideo-test" id="subtitle"]]
@@ -154,9 +141,7 @@
[[!template text="""to get the assist key, and then we're in the debugger.""" start="00:08:54.480" video="mainVideo-test" id="subtitle"]]
[[!template text="""So that's pretty useful and convenient.""" start="00:08:57.720" video="mainVideo-test" id="subtitle"]]
-[[!template new="1" text="""Instrument function on the fly""" start="00:09:10.480" video="mainVideo-test" id="subtitle"]]
-
-[[!template text="""A related useful feature here is the step-in functionality""" start="00:09:10.480" video="mainVideo-test" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Instrument function on the fly""" start="00:09:10.480" video="mainVideo-test" id="subtitle"]]</div>[[!template text="""A related useful feature here is the step-in functionality""" start="00:09:10.480" video="mainVideo-test" id="subtitle"]]
[[!template text="""bound to the letter i in `debug-mode`.""" start="00:09:13.720" video="mainVideo-test" id="subtitle"]]
[[!template text="""It allows you to step into a function""" start="00:09:16.400" video="mainVideo-test" id="subtitle"]]
[[!template text="""and continue debugging from there.""" start="00:09:18.120" video="mainVideo-test" id="subtitle"]]
@@ -178,9 +163,7 @@
[[!template text="""and it returns the result 4 as expected.""" start="00:10:26.560" video="mainVideo-test" id="subtitle"]]
[[!template text="""And yes, of course, our test case will then succeed.""" start="00:10:31.000" video="mainVideo-test" id="subtitle"]]
-[[!template new="1" text="""Mocking""" start="00:10:39.120" video="mainVideo-test" id="subtitle"]]
-
-[[!template text="""The next tool in our toolbox is mocking.""" start="00:10:39.120" video="mainVideo-test" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Mocking""" start="00:10:39.120" video="mainVideo-test" id="subtitle"]]</div>[[!template text="""The next tool in our toolbox is mocking.""" start="00:10:39.120" video="mainVideo-test" id="subtitle"]]
[[!template text="""Mocking is needed when we want to simulate the response""" start="00:10:41.840" video="mainVideo-test" id="subtitle"]]
[[!template text="""from a function used by the function under test.""" start="00:10:46.240" video="mainVideo-test" id="subtitle"]]
[[!template text="""That is the implementation of the function.""" start="00:10:49.280" video="mainVideo-test" id="subtitle"]]
@@ -256,9 +239,7 @@
[[!template text="""and see that it should also then return 10""" start="00:14:30.320" video="mainVideo-test" id="subtitle"]]
[[!template text="""because it's using `f1-add`.""" start="00:14:32.800" video="mainVideo-test" id="subtitle"]]
-[[!template new="1" text="""cl-letf""" start="00:14:41.240" video="mainVideo-test" id="subtitle"]]
-
-[[!template text="""Moving over to `cl-letf`.""" start="00:14:41.240" video="mainVideo-test" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""cl-letf""" start="00:14:41.240" video="mainVideo-test" id="subtitle"]]</div>[[!template text="""Moving over to `cl-letf`.""" start="00:14:41.240" video="mainVideo-test" id="subtitle"]]
[[!template text="""In rare occasions, the limitations of `el-mock` means""" start="00:14:44.560" video="mainVideo-test" id="subtitle"]]
[[!template text="""you would want to implement a full-fledged function""" start="00:14:47.680" video="mainVideo-test" id="subtitle"]]
[[!template text="""to be used under test.""" start="00:14:50.240" video="mainVideo-test" id="subtitle"]]
@@ -271,18 +252,14 @@
[[!template text="""due to environment issues.""" start="00:15:11.240" video="mainVideo-test" id="subtitle"]]
[[!template text="""In that case, a static mock will not work.""" start="00:15:13.740" video="mainVideo-test" id="subtitle"]]
-[[!template new="1" text="""Hooks""" start="00:15:24.100" video="mainVideo-test" id="subtitle"]]
-
-[[!template text="""Another trick is that functions that uses hooks.""" start="00:15:24.100" video="mainVideo-test" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Hooks""" start="00:15:24.100" video="mainVideo-test" id="subtitle"]]</div>[[!template text="""Another trick is that functions that uses hooks.""" start="00:15:24.100" video="mainVideo-test" id="subtitle"]]
[[!template text="""You can overload or replace the hooks to do the testing.""" start="00:15:30.720" video="mainVideo-test" id="subtitle"]]
[[!template text="""So you can use the hook function just to do the verification""" start="00:15:35.640" video="mainVideo-test" id="subtitle"]]
[[!template text="""and not do anything useful in the hook.""" start="00:15:40.760" video="mainVideo-test" id="subtitle"]]
[[!template text="""Also, here you need to be careful""" start="00:15:43.120" video="mainVideo-test" id="subtitle"]]
[[!template text="""to make sure the test handler is called and nothing else.""" start="00:15:45.080" video="mainVideo-test" id="subtitle"]]
-[[!template new="1" text="""Side effects and initial buffer state""" start="00:15:55.720" video="mainVideo-test" id="subtitle"]]
-
-[[!template text="""So far we have been talking about testing""" start="00:15:55.720" video="mainVideo-test" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Side effects and initial buffer state""" start="00:15:55.720" video="mainVideo-test" id="subtitle"]]</div>[[!template text="""So far we have been talking about testing""" start="00:15:55.720" video="mainVideo-test" id="subtitle"]]
[[!template text="""and what the function returns.""" start="00:15:57.680" video="mainVideo-test" id="subtitle"]]
[[!template text="""In the best of words, we have a pure function""" start="00:15:59.040" video="mainVideo-test" id="subtitle"]]
[[!template text="""that only depends on its arguments""" start="00:16:01.120" video="mainVideo-test" id="subtitle"]]
@@ -308,25 +285,19 @@
[[!template text="""Here are some functions and variables""" start="00:16:50.960" video="mainVideo-test" id="subtitle"]]
[[!template text="""I have found useful for this.""" start="00:16:53.080" video="mainVideo-test" id="subtitle"]]
-[[!template new="1" text="""with-temp-buffer""" start="00:17:05.100" video="mainVideo-test" id="subtitle"]]
-
-[[!template text="""For creating tests: `with-temp-buffer`:""" start="00:17:05.100" video="mainVideo-test" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""with-temp-buffer""" start="00:17:05.100" video="mainVideo-test" id="subtitle"]]</div>[[!template text="""For creating tests: `with-temp-buffer`:""" start="00:17:05.100" video="mainVideo-test" id="subtitle"]]
[[!template text="""it provides you a temp buffer that you visit,""" start="00:17:09.200" video="mainVideo-test" id="subtitle"]]
[[!template text="""and afterwards, there is no need to clean up.""" start="00:17:11.920" video="mainVideo-test" id="subtitle"]]
[[!template text="""This is the first choice if that is all you need.""" start="00:17:13.720" video="mainVideo-test" id="subtitle"]]
-[[!template new="1" text="""make-temp-file""" start="00:17:16.520" video="mainVideo-test" id="subtitle"]]
-
-[[!template text="""`make-temp-file`: If you need a file,""" start="00:17:16.520" video="mainVideo-test" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""make-temp-file""" start="00:17:16.520" video="mainVideo-test" id="subtitle"]]</div>[[!template text="""`make-temp-file`: If you need a file,""" start="00:17:16.520" video="mainVideo-test" id="subtitle"]]
[[!template text="""this is the function to use.""" start="00:17:20.520" video="mainVideo-test" id="subtitle"]]
[[!template text="""It creates a temp file or a directory.""" start="00:17:21.960" video="mainVideo-test" id="subtitle"]]
[[!template text="""The file can be filled with initial contents.""" start="00:17:24.280" video="mainVideo-test" id="subtitle"]]
[[!template text="""This needs to be cleaned up after a test.""" start="00:17:26.960" video="mainVideo-test" id="subtitle"]]
[[!template text="""Moving on to verifying and debugging:""" start="00:17:31.020" video="mainVideo-test" id="subtitle"]]
-[[!template new="1" text="""buffer-string""" start="00:17:33.288" video="mainVideo-test" id="subtitle"]]
-
-[[!template text="""`buffer-string`: returns the full contents""" start="00:17:33.288" video="mainVideo-test" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""buffer-string""" start="00:17:33.288" video="mainVideo-test" id="subtitle"]]</div>[[!template text="""`buffer-string`: returns the full contents""" start="00:17:33.288" video="mainVideo-test" id="subtitle"]]
[[!template text="""of the buffer as a string.""" start="00:17:38.248" video="mainVideo-test" id="subtitle"]]
[[!template text="""That can sound a bit voluminous,""" start="00:17:39.500" video="mainVideo-test" id="subtitle"]]
[[!template text="""but since tests are normally small, this often works well.""" start="00:17:41.400" video="mainVideo-test" id="subtitle"]]
@@ -340,9 +311,7 @@
[[!template text="""There might be other ways to do the same""" start="00:18:04.400" video="mainVideo-test" id="subtitle"]]
[[!template text="""as we saw with debugging.""" start="00:18:06.248" video="mainVideo-test" id="subtitle"]]
-[[!template new="1" text="""buffer-name""" start="00:18:09.920" video="mainVideo-test" id="subtitle"]]
-
-[[!template text="""buffer-name: Getting the buffer name is good""" start="00:18:09.920" video="mainVideo-test" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""buffer-name""" start="00:18:09.920" video="mainVideo-test" id="subtitle"]]</div>[[!template text="""buffer-name: Getting the buffer name is good""" start="00:18:09.920" video="mainVideo-test" id="subtitle"]]
[[!template text="""to verify what buffer we are looking at.""" start="00:18:13.720" video="mainVideo-test" id="subtitle"]]
[[!template text="""I often found it useful to check""" start="00:18:16.240" video="mainVideo-test" id="subtitle"]]
[[!template text="""that my assumptions on what buffer I am acting on""" start="00:18:18.360" video="mainVideo-test" id="subtitle"]]
@@ -358,14 +327,10 @@
[[!template text="""that I have not fully learned how to master,""" start="00:18:44.880" video="mainVideo-test" id="subtitle"]]
[[!template text="""so assertion for checking the sanity of the test is good.""" start="00:18:47.488" video="mainVideo-test" id="subtitle"]]
-[[!template new="1" text="""major-mode""" start="00:18:51.980" video="mainVideo-test" id="subtitle"]]
-
-[[!template text="""Finally, `major-mode`: Verify the buffer has the proper mode.""" start="00:18:51.980" video="mainVideo-test" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""major-mode""" start="00:18:51.980" video="mainVideo-test" id="subtitle"]]</div>[[!template text="""Finally, `major-mode`: Verify the buffer has the proper mode.""" start="00:18:51.980" video="mainVideo-test" id="subtitle"]]
[[!template text="""Can also be very useful and is a good sanity check.""" start="00:18:55.680" video="mainVideo-test" id="subtitle"]]
-[[!template new="1" text="""unwind-protect""" start="00:19:02.680" video="mainVideo-test" id="subtitle"]]
-
-[[!template text="""Finally, cleaning up. `unwind-protect`.""" start="00:19:02.680" video="mainVideo-test" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""unwind-protect""" start="00:19:02.680" video="mainVideo-test" id="subtitle"]]</div>[[!template text="""Finally, cleaning up. `unwind-protect`.""" start="00:19:02.680" video="mainVideo-test" id="subtitle"]]
[[!template text="""The tool for cleaning up is the `unwind-protect` form""" start="00:19:06.600" video="mainVideo-test" id="subtitle"]]
[[!template text="""which ensures that the unwind forms""" start="00:19:09.040" video="mainVideo-test" id="subtitle"]]
[[!template text="""always are executed regardless of the outcome of the body.""" start="00:19:12.480" video="mainVideo-test" id="subtitle"]]
@@ -383,9 +348,7 @@
[[!template text="""The test buffers are often in the state""" start="00:20:03.220" video="mainVideo-test" id="subtitle"]]
[[!template text="""where they have not been saved but modified.""" start="00:20:05.440" video="mainVideo-test" id="subtitle"]]
-[[!template new="1" text="""Input, with-simulated-input""" start="00:20:15.100" video="mainVideo-test" id="subtitle"]]
-
-[[!template text="""Another problem for tests are input.""" start="00:20:15.100" video="mainVideo-test" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Input, with-simulated-input""" start="00:20:15.100" video="mainVideo-test" id="subtitle"]]</div>[[!template text="""Another problem for tests are input.""" start="00:20:15.100" video="mainVideo-test" id="subtitle"]]
[[!template text="""In the middle of execution a function""" start="00:20:19.680" video="mainVideo-test" id="subtitle"]]
[[!template text="""might want to have some interaction with the user.""" start="00:20:21.560" video="mainVideo-test" id="subtitle"]]
[[!template text="""Testing this poses a problem, not only in that""" start="00:20:24.040" video="mainVideo-test" id="subtitle"]]
@@ -412,9 +375,7 @@
[[!template text="""As you see in the example, space needs to be provided""" start="00:21:26.120" video="mainVideo-test" id="subtitle"]]
[[!template text="""by the string SPC, as return by the string RET.""" start="00:21:29.640" video="mainVideo-test" id="subtitle"]]
-[[!template new="1" text="""Running all tests""" start="00:21:38.460" video="mainVideo-test" id="subtitle"]]
-
-[[!template text="""So now we have seen ways to create test cases""" start="00:21:38.460" video="mainVideo-test" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Running all tests""" start="00:21:38.460" video="mainVideo-test" id="subtitle"]]</div>[[!template text="""So now we have seen ways to create test cases""" start="00:21:38.460" video="mainVideo-test" id="subtitle"]]
[[!template text="""and even make it possible to run some of them""" start="00:21:40.800" video="mainVideo-test" id="subtitle"]]
[[!template text="""that has I/O in batch mode.""" start="00:21:43.220" video="mainVideo-test" id="subtitle"]]
[[!template text="""But the initial goal was to run them all at once.""" start="00:21:44.680" video="mainVideo-test" id="subtitle"]]
@@ -435,9 +396,7 @@
[[!template text="""So here we have a nice green display""" start="00:22:51.420" video="mainVideo-test" id="subtitle"]]
[[!template text="""with all the test cases.""" start="00:22:57.080" video="mainVideo-test" id="subtitle"]]
-[[!template new="1" text="""Batch mode""" start="00:23:03.220" video="mainVideo-test" id="subtitle"]]
-
-[[!template text="""So that was fine, but we were still running it manually""" start="00:23:03.220" video="mainVideo-test" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Batch mode""" start="00:23:03.220" video="mainVideo-test" id="subtitle"]]</div>[[!template text="""So that was fine, but we were still running it manually""" start="00:23:03.220" video="mainVideo-test" id="subtitle"]]
[[!template text="""by calling ert. How could we run it from the command line?""" start="00:23:08.160" video="mainVideo-test" id="subtitle"]]
[[!template text="""Ert comes with functions for running it in batch mode.""" start="00:23:17.180" video="mainVideo-test" id="subtitle"]]
[[!template text="""For Hyperbole, we use `make` for repetitive tasks.""" start="00:23:21.500" video="mainVideo-test" id="subtitle"]]
@@ -454,9 +413,7 @@
[[!template text="""to get away with the prompt for excessive backup files""" start="00:23:58.160" video="mainVideo-test" id="subtitle"]]
[[!template text="""that can pile up after running the tests a few times.""" start="00:24:02.440" video="mainVideo-test" id="subtitle"]]
-[[!template new="1" text="""Skipping tests""" start="00:24:05.060" video="mainVideo-test" id="subtitle"]]
-
-[[!template text="""Even with the help of simulated input,""" start="00:24:05.060" video="mainVideo-test" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Skipping tests""" start="00:24:05.060" video="mainVideo-test" id="subtitle"]]</div>[[!template text="""Even with the help of simulated input,""" start="00:24:05.060" video="mainVideo-test" id="subtitle"]]
[[!template text="""not all tests can be run in batch mode.""" start="00:24:06.880" video="mainVideo-test" id="subtitle"]]
[[!template text="""They would simply not work there""" start="00:24:08.920" video="mainVideo-test" id="subtitle"]]
[[!template text="""and have to be run in an interactive Emacs""" start="00:24:10.560" video="mainVideo-test" id="subtitle"]]
@@ -494,9 +451,7 @@
[[!template text="""and that is then another problem""" start="00:25:59.400" video="mainVideo-test" id="subtitle"]]
[[!template text="""with getting the interactive mode.""" start="00:26:03.201" video="mainVideo-test" id="subtitle"]]
-[[!template new="1" text="""Conclusion""" start="00:26:08.460" video="mainVideo-test" id="subtitle"]]
-
-[[!template text="""We have reached the end of the talk.""" start="00:26:08.460" video="mainVideo-test" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Conclusion""" start="00:26:08.460" video="mainVideo-test" id="subtitle"]]</div>[[!template text="""We have reached the end of the talk.""" start="00:26:08.460" video="mainVideo-test" id="subtitle"]]
[[!template text="""If you have any new ideas""" start="00:26:11.121" video="mainVideo-test" id="subtitle"]]
[[!template text="""or have some suggestions for improvements,""" start="00:26:14.160" video="mainVideo-test" id="subtitle"]]
[[!template text="""feel free to reach out""" start="00:26:16.760" video="mainVideo-test" id="subtitle"]]
@@ -513,8 +468,7 @@
[[!template text="""if it is not optimal or not having the best style.""" start="00:26:43.320" video="mainVideo-test" id="subtitle"]]
[[!template text="""And yes, thanks for listening. Bye.""" start="00:26:47.800" video="mainVideo-test" id="subtitle"]]
-<a name="test-qanda-transcript"></a>
-# Q&A transcript (unedited)
+</div><div class="transcript transcript-qanda"><a name="test-qanda-transcript"></a><h1>Q&A transcript (unedited)</h1>
[[!template text="""[Speaker 0]: Do we have any listeners?""" start="00:00:08.740" video="qanda-test" id="subtitle"]]
[[!template text="""It's you and I. I have a question.""" start="00:00:13.340" video="qanda-test" id="subtitle"]]
@@ -985,7 +939,7 @@
[[!template text="""Take care. Bye-bye.""" start="00:26:11.100" video="qanda-test" id="subtitle"]]
[[!template text="""[Speaker 1]: Take care. Bye. Silence.""" start="00:26:15.060" video="qanda-test" id="subtitle"]]
-Questions or comments? Please e-mail [matsl@gnu.org](mailto:matsl@gnu.org?subject=Comment%20for%20EmacsConf%202023%20test%3A%20What%20I%20learned%20by%20writing%20test%20cases%20for%20GNU%20Hyperbole)
+</div>Questions or comments? Please e-mail [matsl@gnu.org](mailto:matsl@gnu.org?subject=Comment%20for%20EmacsConf%202023%20test%3A%20What%20I%20learned%20by%20writing%20test%20cases%20for%20GNU%20Hyperbole)
<!-- End of emacsconf-publish-after-page -->
diff --git a/2023/info/test-before.md b/2023/info/test-before.md
index 8b140aad..f68c0402 100644
--- a/2023/info/test-before.md
+++ b/2023/info/test-before.md
@@ -1,6 +1,6 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
[[!toc ]]
-Format: 27-min talk; Q&A: BigBlueButton conference room
+Format: 27-min talk ; Q&A: BigBlueButton conference room
Status: Q&A to be extracted from the room recordings
@@ -9,7 +9,7 @@ Status: Q&A to be extracted from the room recordings
# Talk
-<div class="vid"><video controls preload="none" id="test-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="test-mainVideo" data="""
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-test"><source src="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="mainVideo-test" data="""
00:03.120 Introduction
03:11.160 ERT: Emacs Lisp Regression Testing
04:14.360 Assertions with `should`
@@ -33,10 +33,10 @@ Status: Q&A to be extracted from the room recordings
24:05.060 Skipping tests
26:08.460 Conclusion
-"""]]<div></div>Duration: 26:55 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--main.opus">Download --main.opus (13MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--main.webm">Download --main.webm (57MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--pad.md">Download --pad.md</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--transcript.txt">Download --transcript.txt</a></li><li><a href="https://toobnix.org/w/4XmcGSe3TQrJJNUqQXqK2B">View on Toobnix</a></li></ul></div></div>
+"""]]<div></div>Duration: 26:55 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2023-test">Open Etherpad</a></li><li><a href="https://bbb.emacsverse.org/playback/presentation/2.0/playback.html?meetingId=91ba10e7976ef010c38f57417275e78a87e21871-1701633816495">Play recording from BigBlueButton</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--main.opus">Download --main.opus (13MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--main.webm">Download --main.webm (57MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--transcript.txt">Download --transcript.txt</a></li><li><a href="https://toobnix.org/w/4XmcGSe3TQrJJNUqQXqK2B">View on Toobnix</a></li><li><a href="https://www.youtube.com/watch?v=maNQSKxXIzI">View on Youtube</a></li></ul></div></div>
# Q&A
-<div class="vid"><video controls preload="none" id="test-qanda"><source src="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--answers.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div>Listen to just the audio:<br /><audio controls preload="none" id="test-qanda-audio" src="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--answers.opus"></audio></div><div></div>Duration: 26:22 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--answers.json">Download --answers.json (1MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--answers.opus">Download --answers.opus (9MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--answers.webm">Download --answers.webm (41MB)</a></li></ul></div></div>
+<div class="vid qanda"><video controls preload="none" id="qanda-test"><source src="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--answers.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div>Listen to just the audio:<br /><audio controls preload="none" id="qanda-test-audio" src="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--answers.opus"></audio></div><div></div>Duration: 26:22 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2023-test">Open Etherpad</a></li><li><a href="https://bbb.emacsverse.org/playback/presentation/2.0/playback.html?meetingId=91ba10e7976ef010c38f57417275e78a87e21871-1701633816495">Play recording from BigBlueButton</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--answers.json">Download --answers.json (1MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--answers.opus">Download --answers.opus (9MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--answers.webm">Download --answers.webm (41MB)</a></li></ul></div></div>
# Description
<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/info/test-nav.md b/2023/info/test-nav.md
index a595b88c..eba71afd 100644
--- a/2023/info/test-nav.md
+++ b/2023/info/test-nav.md
@@ -3,5 +3,5 @@
Back to the [[talks]]
Previous by track: <a href="/2023/talks/lspocaml">Writing a language server in OCaml for Emacs, fun, and profit</a>
Next by track: <a href="/2023/talks/emacsconf">EmacsConf.org: How we use Org Mode and TRAMP to organize and run a multi-track conference</a>
-Track: <span class="sched-track Development">Development</span>
+Track: <span class="sched-track Development">Development</span> - <strong><a href="https://emacsconf.org/2023/watch/dev">Watch</a></strong>
</div>
diff --git a/2023/info/unentangling-after.md b/2023/info/unentangling-after.md
index f6e4924f..57950f71 100644
--- a/2023/info/unentangling-after.md
+++ b/2023/info/unentangling-after.md
@@ -1,10 +1,10 @@
<!-- Automatically generated by emacsconf-publish-after-page -->
-<a name="unentangling-mainVideo-transcript"></a>
-# Transcript (unedited)
+<div class="transcript transcript-mainVideo"><a name="unentangling-mainVideo-transcript"></a><h1>Transcript</h1>
-[[!template text="""Hello, I'm Alexey Bychkadov,""" start="00:00:01.220" video="mainVideo-unentangling" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Introduction""" start="00:00:01.220" video="mainVideo-unentangling" id="subtitle"]]</div>[[!template text="""Hello, I'm Alexey Bochkarev,""" start="00:00:01.220" video="mainVideo-unentangling" id="subtitle"]]
[[!template text="""and I'm talking about unentangling projects""" start="00:00:03.740" video="mainVideo-unentangling" id="subtitle"]]
[[!template text="""and repositories, or maybe entangling them,""" start="00:00:06.899" video="mainVideo-unentangling" id="subtitle"]]
[[!template text="""depending on how you look at that.""" start="00:00:09.679" video="mainVideo-unentangling" id="subtitle"]]
@@ -19,36 +19,38 @@
[[!template text="""And third, I communicate.""" start="00:00:36.820" video="mainVideo-unentangling" id="subtitle"]]
[[!template text="""So I prepare papers, presentations,""" start="00:00:38.739" video="mainVideo-unentangling" id="subtitle"]]
[[!template text="""memos, and so on and so forth.""" start="00:00:41.260" video="mainVideo-unentangling" id="subtitle"]]
-[[!template text="""And so The workflow problem I had is""" start="00:00:44.120" video="mainVideo-unentangling" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""The problem""" start="00:00:44.120" video="mainVideo-unentangling" id="subtitle"]]</div>[[!template text="""The workflow problem I had is""" start="00:00:44.120" video="mainVideo-unentangling" id="subtitle"]]
[[!template text="""sometimes all this does not really fit into a""" start="00:00:49.160" video="mainVideo-unentangling" id="subtitle"]]
[[!template text="""concept of a single repository per project.""" start="00:00:53.000" video="mainVideo-unentangling" id="subtitle"]]
[[!template text="""So I might want to have,""" start="00:00:56.200" video="mainVideo-unentangling" id="subtitle"]]
-[[!template text="""for example, a source code in 1 repository""" start="00:00:58.180" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""for example, a source code in one repository""" start="00:00:58.180" video="mainVideo-unentangling" id="subtitle"]]
[[!template text="""and then I would like to have a paper in""" start="00:01:01.320" video="mainVideo-unentangling" id="subtitle"]]
-[[!template text="""another 1 and then I want to have a""" start="00:01:03.480" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""another one, and then I want to have a""" start="00:01:03.480" video="mainVideo-unentangling" id="subtitle"]]
[[!template text="""collection of notes somewhere unrelated to""" start="00:01:05.200" video="mainVideo-unentangling" id="subtitle"]]
-[[!template text="""those 2. Emacs is pretty good at supporting""" start="00:01:08.620" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""those two. Emacs is pretty good at supporting""" start="00:01:08.620" video="mainVideo-unentangling" id="subtitle"]]
[[!template text="""your workflows and I figured I should share""" start="00:01:12.500" video="mainVideo-unentangling" id="subtitle"]]
[[!template text="""what I used and what works for me.""" start="00:01:16.240" video="mainVideo-unentangling" id="subtitle"]]
-[[!template text="""So, from the technical perspective,""" start="00:01:20.560" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""From the technical perspective,""" start="00:01:20.560" video="mainVideo-unentangling" id="subtitle"]]
[[!template text="""things are pretty easy.""" start="00:01:26.479" video="mainVideo-unentangling" id="subtitle"]]
-[[!template text="""So I use a collection of pretty standard""" start="00:01:27.940" video="mainVideo-unentangling" id="subtitle"]]
-[[!template text="""components of Emacs. So it's a projectile org""" start="00:01:30.720" video="mainVideo-unentangling" id="subtitle"]]
-[[!template text="""mode with this capture templates and other""" start="00:01:33.240" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""I use a collection of pretty standard""" start="00:01:27.940" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""components of Emacs. So it's projectile, org""" start="00:01:30.720" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""mode with this capture templates, and other""" start="00:01:33.240" video="mainVideo-unentangling" id="subtitle"]]
[[!template text="""things. Then I sustained a collection of""" start="00:01:35.360" video="mainVideo-unentangling" id="subtitle"]]
[[!template text="""nodes in something that is called org-roam,""" start="00:01:38.100" video="mainVideo-unentangling" id="subtitle"]]
[[!template text="""which is essentially it's a glorified""" start="00:01:40.680" video="mainVideo-unentangling" id="subtitle"]]
[[!template text="""collection of org mode files.""" start="00:01:43.580" video="mainVideo-unentangling" id="subtitle"]]
-[[!template text="""Then I used directory local variables,""" start="00:01:46.100" video="mainVideo-unentangling" id="subtitle"]]
-[[!template text="""maybe a C text to jump through the source""" start="00:01:48.260" video="mainVideo-unentangling" id="subtitle"]]
-[[!template text="""code and very, very little LELisp glue to""" start="00:01:51.140" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""Then I used directory-local variables,""" start="00:01:46.100" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""maybe a ctags to jump through the source""" start="00:01:48.260" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""code and very, very little elisp glue to""" start="00:01:51.140" video="mainVideo-unentangling" id="subtitle"]]
[[!template text="""make this all work, but that's not really""" start="00:01:54.920" video="mainVideo-unentangling" id="subtitle"]]
[[!template text="""rocket science. So that's the workflow I""" start="00:01:58.620" video="mainVideo-unentangling" id="subtitle"]]
[[!template text="""would like to talk about today.""" start="00:02:00.400" video="mainVideo-unentangling" id="subtitle"]]
-[[!template text="""So what I mean by all that,""" start="00:02:04.860" video="mainVideo-unentangling" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Jumping around""" start="00:02:04.860" video="mainVideo-unentangling" id="subtitle"]]</div>[[!template text="""So what I mean by all that,""" start="00:02:04.860" video="mainVideo-unentangling" id="subtitle"]]
[[!template text="""it's pretty straightforward to make Emacs,""" start="00:02:07.960" video="mainVideo-unentangling" id="subtitle"]]
[[!template text="""to make it easy to jump around a single""" start="00:02:10.680" video="mainVideo-unentangling" id="subtitle"]]
-[[!template text="""repository in Emacs. So if I,""" start="00:02:12.720" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""repository in Emacs. So if I...""" start="00:02:12.720" video="mainVideo-unentangling" id="subtitle"]]
[[!template text="""Now I have Doom Emacs,""" start="00:02:15.060" video="mainVideo-unentangling" id="subtitle"]]
[[!template text="""but that's not really specific to a Doom""" start="00:02:16.640" video="mainVideo-unentangling" id="subtitle"]]
[[!template text="""that'll work in any Emacs configuration.""" start="00:02:19.120" video="mainVideo-unentangling" id="subtitle"]]
@@ -59,7 +61,7 @@
[[!template text="""I have all the list of files within my""" start="00:02:31.960" video="mainVideo-unentangling" id="subtitle"]]
[[!template text="""project, right? So if I create a couple of""" start="00:02:34.640" video="mainVideo-unentangling" id="subtitle"]]
[[!template text="""custom shortcuts, so if I press a magic""" start="00:02:38.200" video="mainVideo-unentangling" id="subtitle"]]
-[[!template text="""button, hyper-OP, don't worry about""" start="00:02:42.780" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""button, Hyper+o p... don't worry about""" start="00:02:42.780" video="mainVideo-unentangling" id="subtitle"]]
[[!template text="""hyper-key. So I want it to have a modifier""" start="00:02:45.280" video="mainVideo-unentangling" id="subtitle"]]
[[!template text="""key all to myself, so that would,""" start="00:02:47.560" video="mainVideo-unentangling" id="subtitle"]]
[[!template text="""no program on my computer would use that""" start="00:02:50.320" video="mainVideo-unentangling" id="subtitle"]]
@@ -70,12 +72,13 @@
[[!template text="""keys, I have a menu that's a normal key""" start="00:03:04.940" video="mainVideo-unentangling" id="subtitle"]]
[[!template text="""binding. Yeah, essentially an Emacs.""" start="00:03:07.400" video="mainVideo-unentangling" id="subtitle"]]
[[!template text="""And if I hit, for example,""" start="00:03:10.240" video="mainVideo-unentangling" id="subtitle"]]
-[[!template text="""R, I end up in a readme file within this""" start="00:03:12.540" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""r, I end up in a README file within this""" start="00:03:12.540" video="mainVideo-unentangling" id="subtitle"]]
[[!template text="""specific repository I was sitting in,""" start="00:03:15.200" video="mainVideo-unentangling" id="subtitle"]]
[[!template text="""right? So if I want to document something""" start="00:03:17.320" video="mainVideo-unentangling" id="subtitle"]]
-[[!template text="""real quick, I go to the readme file.""" start="00:03:19.000" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""real quick, I go to the README file.""" start="00:03:19.000" video="mainVideo-unentangling" id="subtitle"]]
[[!template text="""Then I could go to a change log file,""" start="00:03:21.680" video="mainVideo-unentangling" id="subtitle"]]
-[[!template text="""right? So I have a list of changes and the""" start="00:03:25.280" video="mainVideo-unentangling" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Capturing""" start="00:03:25.280" video="mainVideo-unentangling" id="subtitle"]]</div>[[!template text="""right? So I have a list of changes and the""" start="00:03:25.280" video="mainVideo-unentangling" id="subtitle"]]
[[!template text="""way it works usually, for example,""" start="00:03:27.440" video="mainVideo-unentangling" id="subtitle"]]
[[!template text="""if I'm working in some code,""" start="00:03:29.480" video="mainVideo-unentangling" id="subtitle"]]
[[!template text="""I created a couple of dummy files in there,""" start="00:03:32.220" video="mainVideo-unentangling" id="subtitle"]]
@@ -93,8 +96,8 @@
[[!template text="""I can open the change log and go through""" start="00:04:12.720" video="mainVideo-unentangling" id="subtitle"]]
[[!template text="""entries 1 by 1 and discuss what I haven't""" start="00:04:14.340" video="mainVideo-unentangling" id="subtitle"]]
[[!template text="""implemented last time.""" start="00:04:16.800" video="mainVideo-unentangling" id="subtitle"]]
-[[!template text="""I could go to project specific,""" start="00:04:19.540" video="mainVideo-unentangling" id="subtitle"]]
-[[!template text="""sorry, to repo specific to-do list.""" start="00:04:24.100" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""I could go to project-specific,""" start="00:04:19.540" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""sorry, to repo-specific to-do list.""" start="00:04:24.100" video="mainVideo-unentangling" id="subtitle"]]
[[!template text="""And I have list of to-dos that would leave""" start="00:04:26.320" video="mainVideo-unentangling" id="subtitle"]]
[[!template text="""within a repository. And for example,""" start="00:04:29.020" video="mainVideo-unentangling" id="subtitle"]]
[[!template text="""I could have a high level structure here,""" start="00:04:31.320" video="mainVideo-unentangling" id="subtitle"]]
@@ -103,7 +106,8 @@
[[!template text="""so to speak. And of course,""" start="00:04:39.380" video="mainVideo-unentangling" id="subtitle"]]
[[!template text="""there are very many ways to jump through the""" start="00:04:42.840" video="mainVideo-unentangling" id="subtitle"]]
[[!template text="""source code conveniently.""" start="00:04:45.400" video="mainVideo-unentangling" id="subtitle"]]
-[[!template text="""I ended up not using language servers I use a""" start="00:04:46.560" video="mainVideo-unentangling" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Ctags""" start="00:04:46.560" video="mainVideo-unentangling" id="subtitle"]]</div>[[!template text="""I ended up not using language servers. I use a""" start="00:04:46.560" video="mainVideo-unentangling" id="subtitle"]]
[[!template text="""special program called ctags and so the way""" start="00:04:49.960" video="mainVideo-unentangling" id="subtitle"]]
[[!template text="""it works is just I call projectile regenerate""" start="00:04:53.320" video="mainVideo-unentangling" id="subtitle"]]
[[!template text="""tags and it creates the special tags file""" start="00:04:56.680" video="mainVideo-unentangling" id="subtitle"]]
@@ -122,7 +126,8 @@
[[!template text="""Python glue within the same source code""" start="00:05:33.280" video="mainVideo-unentangling" id="subtitle"]]
[[!template text="""repository, it makes it really convenient to""" start="00:05:35.380" video="mainVideo-unentangling" id="subtitle"]]
[[!template text="""jump between all of those.""" start="00:05:39.720" video="mainVideo-unentangling" id="subtitle"]]
-[[!template text="""But I have a few problems here.""" start="00:05:43.080" video="mainVideo-unentangling" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Org Roam""" start="00:05:43.080" video="mainVideo-unentangling" id="subtitle"]]</div>[[!template text="""But I have a few problems here.""" start="00:05:43.080" video="mainVideo-unentangling" id="subtitle"]]
[[!template text="""So just to give you a little bit of context,""" start="00:05:47.360" video="mainVideo-unentangling" id="subtitle"]]
[[!template text="""for example, here is a real project that""" start="00:05:49.860" video="mainVideo-unentangling" id="subtitle"]]
[[!template text="""corresponds to real paper.""" start="00:05:53.100" video="mainVideo-unentangling" id="subtitle"]]
@@ -162,15 +167,17 @@
[[!template text="""that, I suppose. And 1 way to do that is,""" start="00:07:24.720" video="mainVideo-unentangling" id="subtitle"]]
[[!template text="""so I create a special folder within my""" start="00:07:29.040" video="mainVideo-unentangling" id="subtitle"]]
[[!template text="""org-roam storage. So it's a special folder""" start="00:07:33.160" video="mainVideo-unentangling" id="subtitle"]]
-[[!template text="""outside of Henry Postories that got backed up""" start="00:07:38.240" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""outside of any repositories that got backed up""" start="00:07:38.240" video="mainVideo-unentangling" id="subtitle"]]
[[!template text="""to my hard drive with certain redundancy,""" start="00:07:40.940" video="mainVideo-unentangling" id="subtitle"]]
-[[!template text="""but I don't really need like version control,""" start="00:07:44.080" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""but I don't really need version control,""" start="00:07:44.080" video="mainVideo-unentangling" id="subtitle"]]
[[!template text="""full blown version control for that.""" start="00:07:46.720" video="mainVideo-unentangling" id="subtitle"]]
[[!template text="""I'm okay with just having a couple of""" start="00:07:48.280" video="mainVideo-unentangling" id="subtitle"]]
[[!template text="""backups, right? So this is the folder you see""" start="00:07:49.760" video="mainVideo-unentangling" id="subtitle"]]
[[!template text="""here. So PKB stands for personal knowledge""" start="00:07:52.900" video="mainVideo-unentangling" id="subtitle"]]
[[!template text="""base, and I have a folder project notes in""" start="00:07:55.320" video="mainVideo-unentangling" id="subtitle"]]
-[[!template text="""there, right? So, and How does it work?""" start="00:07:58.020" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""there, right?""" start="00:07:58.020" video="mainVideo-unentangling" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""How does it work?""" start="00:07:59.340" video="mainVideo-unentangling" id="subtitle"]]</div>[[!template text="""How does it work?""" start="00:07:59.340" video="mainVideo-unentangling" id="subtitle"]]
[[!template text="""So I have a folder per project in there,""" start="00:08:01.680" video="mainVideo-unentangling" id="subtitle"]]
[[!template text="""essentially. And here I can have all the""" start="00:08:05.020" video="mainVideo-unentangling" id="subtitle"]]
[[!template text="""stuff that kind of belongs to me and I do not""" start="00:08:07.900" video="mainVideo-unentangling" id="subtitle"]]
@@ -189,14 +196,14 @@
[[!template text="""oh, sorry, if I hit a special key,""" start="00:08:44.380" video="mainVideo-unentangling" id="subtitle"]]
[[!template text="""that would be open project.""" start="00:08:48.280" video="mainVideo-unentangling" id="subtitle"]]
[[!template text="""And then for example, org mode file,""" start="00:08:51.680" video="mainVideo-unentangling" id="subtitle"]]
-[[!template text="""right? So this is my personal notes about the""" start="00:08:55.920" video="mainVideo-unentangling" id="subtitle"]]
-[[!template text="""maxconf, not specifically about this very""" start="00:08:58.260" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""right? So this is my personal notes about""" start="00:08:55.920" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""EmacsConf, not specifically about this very""" start="00:08:58.260" video="mainVideo-unentangling" id="subtitle"]]
[[!template text="""talk, but I can have, you know,""" start="00:09:01.260" video="mainVideo-unentangling" id="subtitle"]]
[[!template text="""the house baked ideas here again,""" start="00:09:02.580" video="mainVideo-unentangling" id="subtitle"]]
[[!template text="""presentation tools and things like that.""" start="00:09:04.760" video="mainVideo-unentangling" id="subtitle"]]
[[!template text="""And how does that happen?""" start="00:09:07.440" video="mainVideo-unentangling" id="subtitle"]]
[[!template text="""If we try to like look at the code,""" start="00:09:09.940" video="mainVideo-unentangling" id="subtitle"]]
-[[!template text="""the e-list magic here,""" start="00:09:13.080" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""the elisp magic here,""" start="00:09:13.080" video="mainVideo-unentangling" id="subtitle"]]
[[!template text="""what is happening is it's just a couple of""" start="00:09:15.040" video="mainVideo-unentangling" id="subtitle"]]
[[!template text="""lines of code, in fact,""" start="00:09:17.560" video="mainVideo-unentangling" id="subtitle"]]
[[!template text="""so let me just press Control,""" start="00:09:18.720" video="mainVideo-unentangling" id="subtitle"]]
@@ -215,14 +222,14 @@
[[!template text="""project tile. Well, that's pretty much it.""" start="00:10:00.480" video="mainVideo-unentangling" id="subtitle"]]
[[!template text="""And how do I define this variable?""" start="00:10:03.340" video="mainVideo-unentangling" id="subtitle"]]
[[!template text="""Is essentially there is this magical file in""" start="00:10:09.280" video="mainVideo-unentangling" id="subtitle"]]
-[[!template text="""a folder called dear locals,""" start="00:10:12.500" video="mainVideo-unentangling" id="subtitle"]]
-[[!template text="""elist. And I just put it there.""" start="00:10:14.440" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""a folder called .dir-locals.el. And I just put it there.""" start="00:10:12.500" video="mainVideo-unentangling" id="subtitle"]]
[[!template text="""And then whenever I go into that folder or""" start="00:10:17.440" video="mainVideo-unentangling" id="subtitle"]]
[[!template text="""any of its children folders,""" start="00:10:20.380" video="mainVideo-unentangling" id="subtitle"]]
[[!template text="""I get this variable defined.""" start="00:10:22.300" video="mainVideo-unentangling" id="subtitle"]]
[[!template text="""And that's pretty much it.""" start="00:10:24.840" video="mainVideo-unentangling" id="subtitle"]]
[[!template text="""That's how it works for me.""" start="00:10:26.280" video="mainVideo-unentangling" id="subtitle"]]
-[[!template text="""I guess 1 thing that I wanted to emphasize""" start="00:10:31.860" video="mainVideo-unentangling" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Time tracking""" start="00:10:31.860" video="mainVideo-unentangling" id="subtitle"]]</div>[[!template text="""I guess 1 thing that I wanted to emphasize""" start="00:10:31.860" video="mainVideo-unentangling" id="subtitle"]]
[[!template text="""specifically about that is of course,""" start="00:10:35.380" video="mainVideo-unentangling" id="subtitle"]]
[[!template text="""it is a time tracking,""" start="00:10:37.940" video="mainVideo-unentangling" id="subtitle"]]
[[!template text="""right? So what is I find especially important""" start="00:10:39.720" video="mainVideo-unentangling" id="subtitle"]]
@@ -241,7 +248,7 @@
[[!template text="""my current project to-dos and I clock in""" start="00:11:16.880" video="mainVideo-unentangling" id="subtitle"]]
[[!template text="""there. And that's how it works.""" start="00:11:21.820" video="mainVideo-unentangling" id="subtitle"]]
[[!template text="""So again, what comes in handy,""" start="00:11:23.940" video="mainVideo-unentangling" id="subtitle"]]
-[[!template text="""if I hit Control O, I just go back to the""" start="00:11:28.860" video="mainVideo-unentangling" id="subtitle"]]
+[[!template text="""if I hit C-o, I just go back to the""" start="00:11:28.860" video="mainVideo-unentangling" id="subtitle"]]
[[!template text="""file I jumped in into and that's I jumped""" start="00:11:31.500" video="mainVideo-unentangling" id="subtitle"]]
[[!template text="""from so that's also pretty handy.""" start="00:11:34.240" video="mainVideo-unentangling" id="subtitle"]]
[[!template text="""So again no no rocket science in there.""" start="00:11:36.220" video="mainVideo-unentangling" id="subtitle"]]
@@ -267,7 +274,7 @@
[[!template text="""to that, please do jump into the discussion.""" start="00:12:33.320" video="mainVideo-unentangling" id="subtitle"]]
[[!template text="""Yeah, after the talk, thank you.""" start="00:12:37.120" video="mainVideo-unentangling" id="subtitle"]]
-Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202023%20unentangling%3A%20%28Un%29entangling%20projects%20and%20repos)
+</div>Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202023%20unentangling%3A%20%28Un%29entangling%20projects%20and%20repos)
<!-- End of emacsconf-publish-after-page -->
diff --git a/2023/info/unentangling-before.md b/2023/info/unentangling-before.md
index d8a2318c..bec15a98 100644
--- a/2023/info/unentangling-before.md
+++ b/2023/info/unentangling-before.md
@@ -1,12 +1,22 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
[[!toc ]]
-Format: 13-min talk; Q&A: Etherpad
+Format: 13-min talk ; Q&A: Etherpad
Status: Q&A to be extracted from the room recordings
-<div class="vid"><video controls preload="none" id="unentangling-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-unentangling--unentangling-projects-and-repos--alexey-bochkarev--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-unentangling--unentangling-projects-and-repos--alexey-bochkarev--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 12:39 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-unentangling--unentangling-projects-and-repos--alexey-bochkarev--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-unentangling--unentangling-projects-and-repos--alexey-bochkarev--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-unentangling--unentangling-projects-and-repos--alexey-bochkarev--main.json">Download --main.json</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-unentangling--unentangling-projects-and-repos--alexey-bochkarev--main.opus">Download --main.opus (10MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-unentangling--unentangling-projects-and-repos--alexey-bochkarev--main.vtt">Download --main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-unentangling--unentangling-projects-and-repos--alexey-bochkarev--main.webm">Download --main.webm (68MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-unentangling--unentangling-projects-and-repos--alexey-bochkarev--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-unentangling--unentangling-projects-and-repos--alexey-bochkarev--pad.md">Download --pad.md</a></li><li><a href="https://toobnix.org/w/wLxyZBoFAad575Lp4PGyoF">View on Toobnix</a></li></ul></div></div>
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-unentangling"><source src="https://media.emacsconf.org/2023/emacsconf-2023-unentangling--unentangling-projects-and-repos--alexey-bochkarev--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-unentangling--unentangling-projects-and-repos--alexey-bochkarev--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-unentangling--unentangling-projects-and-repos--alexey-bochkarev--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="mainVideo-unentangling" data="""
+00:01.220 Introduction
+00:44.120 The problem
+02:04.860 Jumping around
+03:25.280 Capturing
+04:46.560 Ctags
+05:43.080 Org Roam
+07:59.340 How does it work?
+10:31.860 Time tracking
+
+"""]]<div></div>Duration: 12:39 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2023-unentangling">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-unentangling--unentangling-projects-and-repos--alexey-bochkarev--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-unentangling--unentangling-projects-and-repos--alexey-bochkarev--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-unentangling--unentangling-projects-and-repos--alexey-bochkarev--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-unentangling--unentangling-projects-and-repos--alexey-bochkarev--main.json">Download --main.json</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-unentangling--unentangling-projects-and-repos--alexey-bochkarev--main.opus">Download --main.opus (10MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-unentangling--unentangling-projects-and-repos--alexey-bochkarev--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-unentangling--unentangling-projects-and-repos--alexey-bochkarev--main.webm">Download --main.webm (68MB)</a></li><li><a href="https://toobnix.org/w/wLxyZBoFAad575Lp4PGyoF">View on Toobnix</a></li><li><a href="https://www.youtube.com/watch?v=o9j4IwJsvPI">View on Youtube</a></li></ul></div></div>
# Description
<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/info/unentangling-nav.md b/2023/info/unentangling-nav.md
index 24e0a4b0..4ddda87d 100644
--- a/2023/info/unentangling-nav.md
+++ b/2023/info/unentangling-nav.md
@@ -3,5 +3,5 @@
Back to the [[talks]]
Previous by track: <a href="/2023/talks/ref">Org-Mode workflow: informal reference tracking</a>
Next by track: <a href="/2023/talks/devel">Emacs development updates</a>
-Track: <span class="sched-track General">General</span>
+Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2023/watch/gen">Watch</a></strong>
</div>
diff --git a/2023/info/uni-after.md b/2023/info/uni-after.md
index 2bfe8152..bd372d5f 100644
--- a/2023/info/uni-after.md
+++ b/2023/info/uni-after.md
@@ -1,13 +1,10 @@
<!-- Automatically generated by emacsconf-publish-after-page -->
-<a name="uni-mainVideo-transcript"></a>
-# Transcript
+<div class="transcript transcript-mainVideo"><a name="uni-mainVideo-transcript"></a><h1>Transcript</h1>
-[[!template new="1" text="""Introduction""" start="00:00:00.000" video="mainVideo-uni" id="subtitle"]]
-
-[[!template text="""Hello everyone. I'm James Howell.""" start="00:00:00.000" video="mainVideo-uni" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Introduction""" start="00:00:00.000" video="mainVideo-uni" id="subtitle"]]</div>[[!template text="""Hello everyone. I'm James Howell.""" start="00:00:00.000" video="mainVideo-uni" id="subtitle"]]
[[!template text="""I teach biochemistry and""" start="00:00:01.940" video="mainVideo-uni" id="subtitle"]]
[[!template text="""molecular biology at Penn State University.""" start="00:00:03.540" video="mainVideo-uni" id="subtitle"]]
[[!template text="""I'm going to talk today""" start="00:00:07.220" video="mainVideo-uni" id="subtitle"]]
@@ -38,9 +35,7 @@
[[!template text="""So I promised to talk about""" start="00:01:09.940" video="mainVideo-uni" id="subtitle"]]
[[!template text="""both authoring and presenting.""" start="00:01:11.240" video="mainVideo-uni" id="subtitle"]]
-[[!template new="1" text="""Presenting""" start="00:01:12.440" video="mainVideo-uni" id="subtitle"]]
-
-[[!template text="""And first I'm going to talk about presenting.""" start="00:01:12.440" video="mainVideo-uni" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Presenting""" start="00:01:12.440" video="mainVideo-uni" id="subtitle"]]</div>[[!template text="""And first I'm going to talk about presenting.""" start="00:01:12.440" video="mainVideo-uni" id="subtitle"]]
[[!template text="""I'm not the only one who does this.""" start="00:01:14.620" video="mainVideo-uni" id="subtitle"]]
[[!template text="""You might have seen System Crafters [David Wilson]""" start="00:01:16.600" video="mainVideo-uni" id="subtitle"]]
[[!template text="""or Prot's [Protesilaos Stavrou's] channel or""" start="00:01:19.300" video="mainVideo-uni" id="subtitle"]]
@@ -57,9 +52,7 @@
[[!template text="""There's prior art here""" start="00:01:43.740" video="mainVideo-uni" id="subtitle"]]
[[!template text="""that I'd like to acknowledge.""" start="00:01:45.740" video="mainVideo-uni" id="subtitle"]]
-[[!template new="1" text="""Hardware""" start="00:01:47.820" video="mainVideo-uni" id="subtitle"]]
-
-[[!template text="""Let me talk about my practices:""" start="00:01:47.820" video="mainVideo-uni" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Hardware""" start="00:01:47.820" video="mainVideo-uni" id="subtitle"]]</div>[[!template text="""Let me talk about my practices:""" start="00:01:47.820" video="mainVideo-uni" id="subtitle"]]
[[!template text="""First, the hardware.""" start="00:01:50.840" video="mainVideo-uni" id="subtitle"]]
[[!template text="""This is the hardware that I'm using to""" start="00:01:51.520" video="mainVideo-uni" id="subtitle"]]
[[!template text="""record this recording at the very moment,""" start="00:01:55.340" video="mainVideo-uni" id="subtitle"]]
@@ -133,9 +126,7 @@
[[!template text="""the laptop and go into""" start="00:04:43.210" video="mainVideo-uni" id="subtitle"]]
[[!template text="""some AV system or another.""" start="00:04:44.410" video="mainVideo-uni" id="subtitle"]]
-[[!template new="1" text="""Example setup""" start="00:04:46.610" video="mainVideo-uni" id="subtitle"]]
-
-[[!template text="""Okay. This was Wednesday,""" start="00:04:46.610" video="mainVideo-uni" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Example setup""" start="00:04:46.610" video="mainVideo-uni" id="subtitle"]]</div>[[!template text="""Okay. This was Wednesday,""" start="00:04:46.610" video="mainVideo-uni" id="subtitle"]]
[[!template text="""teaching microbiology.""" start="00:04:49.070" video="mainVideo-uni" id="subtitle"]]
[[!template text="""There's the tablet, there's the laptop.""" start="00:04:51.070" video="mainVideo-uni" id="subtitle"]]
[[!template text="""There's the external screen""" start="00:04:53.230" video="mainVideo-uni" id="subtitle"]]
@@ -157,9 +148,7 @@
[[!template text="""still see what I'm pointing to on the screen.""" start="00:05:23.940" video="mainVideo-uni" id="subtitle"]]
[[!template text="""Nobody gets left out.""" start="00:05:27.400" video="mainVideo-uni" id="subtitle"]]
-[[!template new="1" text="""Presentation software: flexibility in function""" start="00:05:30.520" video="mainVideo-uni" id="subtitle"]]
-
-[[!template text="""Let's talk about""" start="00:05:30.520" video="mainVideo-uni" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Presentation software: flexibility in function""" start="00:05:30.520" video="mainVideo-uni" id="subtitle"]]</div>[[!template text="""Let's talk about""" start="00:05:30.520" video="mainVideo-uni" id="subtitle"]]
[[!template text="""the software that I use.""" start="00:05:31.480" video="mainVideo-uni" id="subtitle"]]
[[!template text="""There's a lot of different things that""" start="00:05:33.900" video="mainVideo-uni" id="subtitle"]]
[[!template text="""I want to be able to show.""" start="00:05:35.980" video="mainVideo-uni" id="subtitle"]]
@@ -199,9 +188,7 @@
[[!template text="""OBS is compositing that together.""" start="00:07:00.230" video="mainVideo-uni" id="subtitle"]]
[[!template text="""And I use Zoom, but you could use Jitsi.""" start="00:07:02.890" video="mainVideo-uni" id="subtitle"]]
-[[!template new="1" text="""Live demonstration""" start="00:07:05.950" video="mainVideo-uni" id="subtitle"]]
-
-[[!template text="""All right, let's""" start="00:07:05.950" video="mainVideo-uni" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Live demonstration""" start="00:07:05.950" video="mainVideo-uni" id="subtitle"]]</div>[[!template text="""All right, let's""" start="00:07:05.950" video="mainVideo-uni" id="subtitle"]]
[[!template text="""demonstrate this live. Here we go.""" start="00:07:07.930" video="mainVideo-uni" id="subtitle"]]
[[!template text="""Here goes, nothing. The drawing program""" start="00:07:09.690" video="mainVideo-uni" id="subtitle"]]
[[!template text="""is really good because I can draw""" start="00:07:13.610" video="mainVideo-uni" id="subtitle"]]
@@ -225,9 +212,7 @@
[[!template text="""to mark them up visually.""" start="00:07:55.810" video="mainVideo-uni" id="subtitle"]]
[[!template text="""I can show you what that looks like.""" start="00:07:57.450" video="mainVideo-uni" id="subtitle"]]
-[[!template new="1" text="""OBS""" start="00:07:59.850" video="mainVideo-uni" id="subtitle"]]
-
-[[!template text="""By the way, here's how OBS works:""" start="00:07:59.850" video="mainVideo-uni" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""OBS""" start="00:07:59.850" video="mainVideo-uni" id="subtitle"]]</div>[[!template text="""By the way, here's how OBS works:""" start="00:07:59.850" video="mainVideo-uni" id="subtitle"]]
[[!template text="""I can go from different &quot;scenes&quot;""" start="00:08:02.830" video="mainVideo-uni" id="subtitle"]]
[[!template text="""So I can just do just me,""" start="00:08:04.470" video="mainVideo-uni" id="subtitle"]]
[[!template text="""or I can show you the slides,""" start="00:08:06.070" video="mainVideo-uni" id="subtitle"]]
@@ -241,9 +226,7 @@
[[!template text="""zoom and what page I'm on,""" start="00:08:23.170" video="mainVideo-uni" id="subtitle"]]
[[!template text="""but you don't have to see that.""" start="00:08:24.830" video="mainVideo-uni" id="subtitle"]]
-[[!template new="1" text="""Firefox""" start="00:08:27.190" video="mainVideo-uni" id="subtitle"]]
-
-[[!template text="""Okay. Firefox, boy, I do a lot of this.""" start="00:08:27.190" video="mainVideo-uni" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Firefox""" start="00:08:27.190" video="mainVideo-uni" id="subtitle"]]</div>[[!template text="""Okay. Firefox, boy, I do a lot of this.""" start="00:08:27.190" video="mainVideo-uni" id="subtitle"]]
[[!template text="""All of the quizzes,""" start="00:08:32.390" video="mainVideo-uni" id="subtitle"]]
[[!template text="""quizzes and exams in my courses""" start="00:08:36.790" video="mainVideo-uni" id="subtitle"]]
[[!template text="""are online on this""" start="00:08:38.460" video="mainVideo-uni" id="subtitle"]]
@@ -293,9 +276,7 @@
[[!template text="""is called the major groove.&quot;""" start="00:10:23.420" video="mainVideo-uni" id="subtitle"]]
[[!template text="""And students couldn't see it.""" start="00:10:24.420" video="mainVideo-uni" id="subtitle"]]
-[[!template new="1" text="""Animation""" start="00:10:26.060" video="mainVideo-uni" id="subtitle"]]
-
-[[!template text="""But if you animate it—""" start="00:10:26.060" video="mainVideo-uni" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Animation""" start="00:10:26.060" video="mainVideo-uni" id="subtitle"]]</div>[[!template text="""But if you animate it—""" start="00:10:26.060" video="mainVideo-uni" id="subtitle"]]
[[!template text="""if you just have it""" start="00:10:29.440" video="mainVideo-uni" id="subtitle"]]
[[!template text="""move, the apparent movement,""" start="00:10:30.280" video="mainVideo-uni" id="subtitle"]]
[[!template text="""It's not really movement,""" start="00:10:33.320" video="mainVideo-uni" id="subtitle"]]
@@ -308,9 +289,7 @@
[[!template text="""image just can't provide""" start="00:10:47.220" video="mainVideo-uni" id="subtitle"]]
[[!template text="""that understanding, while moving image can.""" start="00:10:48.320" video="mainVideo-uni" id="subtitle"]]
-[[!template new="1" text="""Emacs""" start="00:10:55.790" video="mainVideo-uni" id="subtitle"]]
-
-[[!template text="""I use Emacs to look at text.""" start="00:10:55.790" video="mainVideo-uni" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Emacs""" start="00:10:55.790" video="mainVideo-uni" id="subtitle"]]</div>[[!template text="""I use Emacs to look at text.""" start="00:10:55.790" video="mainVideo-uni" id="subtitle"]]
[[!template text="""Where's Emacs? Here's Emacs! We read""" start="00:10:58.180" video="mainVideo-uni" id="subtitle"]]
[[!template text="""Vonnegut in this English class that I""" start="00:11:02.520" video="mainVideo-uni" id="subtitle"]]
[[!template text="""teach and I'm going to tab over to Emacs.""" start="00:11:04.280" video="mainVideo-uni" id="subtitle"]]
@@ -330,9 +309,7 @@
[[!template text="""to do on the chalkboard.""" start="00:11:36.820" video="mainVideo-uni" id="subtitle"]]
[[!template text="""So Emacs is really good for that sort of thing.""" start="00:11:39.400" video="mainVideo-uni" id="subtitle"]]
-[[!template new="1" text="""Making slides and handouts with Org Mode""" start="00:11:42.260" video="mainVideo-uni" id="subtitle"]]
-
-[[!template text="""Mostly what I use Emacs for is not to""" start="00:11:42.260" video="mainVideo-uni" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Making slides and handouts with Org Mode""" start="00:11:42.260" video="mainVideo-uni" id="subtitle"]]</div>[[!template text="""Mostly what I use Emacs for is not to""" start="00:11:42.260" video="mainVideo-uni" id="subtitle"]]
[[!template text="""present but to make slides and handouts.""" start="00:11:45.380" video="mainVideo-uni" id="subtitle"]]
[[!template text="""Okay. Again, the thing that I want to""" start="00:11:50.340" video="mainVideo-uni" id="subtitle"]]
[[!template text="""stress is that the slides""" start="00:11:52.360" video="mainVideo-uni" id="subtitle"]]
@@ -375,9 +352,7 @@
[[!template text="""PDF documents like the handouts as""" start="00:13:15.060" video="mainVideo-uni" id="subtitle"]]
[[!template text="""LaTeX, and slides like these through Beamer export.""" start="00:13:17.000" video="mainVideo-uni" id="subtitle"]]
-[[!template new="1" text="""Pedagogy first""" start="00:13:22.680" video="mainVideo-uni" id="subtitle"]]
-
-[[!template text="""The approach is to think""" start="00:13:22.680" video="mainVideo-uni" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Pedagogy first""" start="00:13:22.680" video="mainVideo-uni" id="subtitle"]]</div>[[!template text="""The approach is to think""" start="00:13:22.680" video="mainVideo-uni" id="subtitle"]]
[[!template text="""about pedagogy rather than thinking""" start="00:13:24.920" video="mainVideo-uni" id="subtitle"]]
[[!template text="""about software or thinking""" start="00:13:26.900" video="mainVideo-uni" id="subtitle"]]
[[!template text="""about graphic design.""" start="00:13:28.280" video="mainVideo-uni" id="subtitle"]]
@@ -444,9 +419,7 @@
[[!template text="""So streamlining this workflow""" start="00:16:12.050" video="mainVideo-uni" id="subtitle"]]
[[!template text="""has been really helpful.""" start="00:16:15.730" video="mainVideo-uni" id="subtitle"]]
-[[!template new="1" text="""org-teach""" start="00:16:17.790" video="mainVideo-uni" id="subtitle"]]
-
-[[!template text="""All right, so let me show""" start="00:16:17.790" video="mainVideo-uni" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""org-teach""" start="00:16:17.790" video="mainVideo-uni" id="subtitle"]]</div>[[!template text="""All right, so let me show""" start="00:16:17.790" video="mainVideo-uni" id="subtitle"]]
[[!template text="""you what I've developed.""" start="00:16:19.310" video="mainVideo-uni" id="subtitle"]]
[[!template text="""Let's look at the Org doc.""" start="00:16:21.650" video="mainVideo-uni" id="subtitle"]]
[[!template text="""Okay. So what you see is you have""" start="00:16:24.490" video="mainVideo-uni" id="subtitle"]]
@@ -523,16 +496,12 @@
[[!template text="""For an entire slide being an image,""" start="00:19:32.450" video="mainVideo-uni" id="subtitle"]]
[[!template text="""you can use this image-slide macro.""" start="00:19:35.650" video="mainVideo-uni" id="subtitle"]]
-[[!template new="1" text="""Blank slides""" start="00:19:38.330" video="mainVideo-uni" id="subtitle"]]
-
-[[!template text="""I often put in blank slides to""" start="00:19:38.330" video="mainVideo-uni" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Blank slides""" start="00:19:38.330" video="mainVideo-uni" id="subtitle"]]</div>[[!template text="""I often put in blank slides to""" start="00:19:38.330" video="mainVideo-uni" id="subtitle"]]
[[!template text="""remind myself that this is a time to stop.""" start="00:19:41.130" video="mainVideo-uni" id="subtitle"]]
[[!template text="""Often there's something for me to""" start="00:19:43.270" video="mainVideo-uni" id="subtitle"]]
[[!template text="""draw here with the stylus.""" start="00:19:44.790" video="mainVideo-uni" id="subtitle"]]
-[[!template new="1" text="""Animations""" start="00:19:50.050" video="mainVideo-uni" id="subtitle"]]
-
-[[!template text="""I often use— it used to be Powerpoint,""" start="00:19:50.050" video="mainVideo-uni" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Animations""" start="00:19:50.050" video="mainVideo-uni" id="subtitle"]]</div>[[!template text="""I often use— it used to be Powerpoint,""" start="00:19:50.050" video="mainVideo-uni" id="subtitle"]]
[[!template text="""now I use LibreOffice Impress—to make""" start="00:19:53.150" video="mainVideo-uni" id="subtitle"]]
[[!template text="""multi slide animations like""" start="00:19:56.070" video="mainVideo-uni" id="subtitle"]]
[[!template text="""the sphere and the donut and the GI tract.""" start="00:19:58.310" video="mainVideo-uni" id="subtitle"]]
@@ -543,9 +512,7 @@
[[!template text="""Just into the slides, not into""" start="00:20:14.470" video="mainVideo-uni" id="subtitle"]]
[[!template text="""the handouts with this macro.""" start="00:20:16.670" video="mainVideo-uni" id="subtitle"]]
-[[!template new="1" text="""Conclusion""" start="00:20:19.270" video="mainVideo-uni" id="subtitle"]]
-
-[[!template text="""I hope that you find this useful.""" start="00:20:19.270" video="mainVideo-uni" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Conclusion""" start="00:20:19.270" video="mainVideo-uni" id="subtitle"]]</div>[[!template text="""I hope that you find this useful.""" start="00:20:19.270" video="mainVideo-uni" id="subtitle"]]
[[!template text="""I hope you share it with""" start="00:20:21.490" video="mainVideo-uni" id="subtitle"]]
[[!template text="""other educators that you know.""" start="00:20:22.450" video="mainVideo-uni" id="subtitle"]]
[[!template text="""Here is the sourcehut repo,""" start="00:20:24.090" video="mainVideo-uni" id="subtitle"]]
@@ -561,8 +528,7 @@
[[!template text="""all of the people behind it.""" start="00:20:50.090" video="mainVideo-uni" id="subtitle"]]
[[!template text="""Thanks everybody.""" start="00:20:51.330" video="mainVideo-uni" id="subtitle"]]
-<a name="uni-qanda-transcript"></a>
-# Q&A transcript (unedited)
+</div><div class="transcript transcript-qanda"><a name="uni-qanda-transcript"></a><h1>Q&A transcript (unedited)</h1>
[[!template text="""[Speaker 0]: You can hear us. Can you perhaps do it for""" start="00:00:00.000" video="qanda-uni" id="subtitle"]]
[[!template text="""me? Great. The little angels in the""" start="00:00:01.839" video="qanda-uni" id="subtitle"]]
@@ -965,7 +931,7 @@
[[!template text="""its document code or output part can be""" start="00:22:14.440" video="qanda-uni" id="subtitle"]]
[[!template text="""exported in a variety of forms.""" start="00:22:16.980" video="qanda-uni" id="subtitle"]]
-Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202023%20uni%3A%20Authoring%20and%20presenting%20university%20courses%20with%20Emacs%20and%20a%20full%20libre%20software%20stack)
+</div>Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202023%20uni%3A%20Authoring%20and%20presenting%20university%20courses%20with%20Emacs%20and%20a%20full%20libre%20software%20stack)
<!-- End of emacsconf-publish-after-page -->
diff --git a/2023/info/uni-before.md b/2023/info/uni-before.md
index 6ac65fe2..2f625597 100644
--- a/2023/info/uni-before.md
+++ b/2023/info/uni-before.md
@@ -1,6 +1,6 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
[[!toc ]]
-Format: 21-min talk; Q&A: BigBlueButton conference room
+Format: 21-min talk ; Q&A: BigBlueButton conference room
Status: Q&A to be extracted from the room recordings
@@ -9,7 +9,7 @@ Status: Q&A to be extracted from the room recordings
# Talk
-<div class="vid"><video controls preload="none" id="uni-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="uni-mainVideo" data="""
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-uni"><source src="https://media.emacsconf.org/2023/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="mainVideo-uni" data="""
00:00.000 Introduction
01:12.440 Presenting
01:47.820 Hardware
@@ -26,10 +26,10 @@ Status: Q&A to be extracted from the room recordings
19:50.050 Animations
20:19.270 Conclusion
-"""]]<div></div>Duration: 20:53 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--main.opus">Download --main.opus (12MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--main.webm">Download --main.webm (283MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--pad.md">Download --pad.md</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--slides.pdf">Download --slides.pdf (26MB)</a></li><li><a href="https://toobnix.org/w/mAnNW7jnPq5qhUPH2dzVQf">View on Toobnix</a></li></ul></div></div>
+"""]]<div></div>Duration: 20:53 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2023-uni">Open Etherpad</a></li><li><a href="https://bbb.emacsverse.org/playback/presentation/2.0/playback.html?meetingId=dfdd18fb34bc59b228ab37bc22b0e5ce3b96437b-1701525315024">Play recording from BigBlueButton</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--main.opus">Download --main.opus (12MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--main.webm">Download --main.webm (283MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--slides.pdf">Download --slides.pdf (26MB)</a></li><li><a href="https://toobnix.org/w/mAnNW7jnPq5qhUPH2dzVQf">View on Toobnix</a></li><li><a href="https://www.youtube.com/watch?v=cklJ58i-HUY">View on Youtube</a></li></ul></div></div>
# Q&A
-<div class="vid"><video controls preload="none" id="uni-qanda"><source src="https://media.emacsconf.org/2023/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--answers.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div>Listen to just the audio:<br /><audio controls preload="none" id="uni-qanda-audio" src="https://media.emacsconf.org/2023/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--answers.opus"></audio></div><div></div>Duration: 22:32 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--answers.json">Download --answers.json</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--answers.opus">Download --answers.opus (14MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--answers.webm">Download --answers.webm (56MB)</a></li></ul></div></div>
+<div class="vid qanda"><video controls preload="none" id="qanda-uni"><source src="https://media.emacsconf.org/2023/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--answers.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div>Listen to just the audio:<br /><audio controls preload="none" id="qanda-uni-audio" src="https://media.emacsconf.org/2023/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--answers.opus"></audio></div><div></div>Duration: 22:32 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2023-uni">Open Etherpad</a></li><li><a href="https://bbb.emacsverse.org/playback/presentation/2.0/playback.html?meetingId=dfdd18fb34bc59b228ab37bc22b0e5ce3b96437b-1701525315024">Play recording from BigBlueButton</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--answers.json">Download --answers.json</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--answers.opus">Download --answers.opus (14MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--answers.webm">Download --answers.webm (56MB)</a></li></ul></div></div>
# Description
<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/info/uni-nav.md b/2023/info/uni-nav.md
index 6694d47e..14adb722 100644
--- a/2023/info/uni-nav.md
+++ b/2023/info/uni-nav.md
@@ -3,5 +3,5 @@
Back to the [[talks]]
Previous by track: <a href="/2023/talks/adventure">An Org-Mode based text adventure game for learning the basics of Emacs, inside Emacs, written in Emacs Lisp</a>
Next by track: <a href="/2023/talks/teaching">Teaching computer and data science with literate programming tools</a>
-Track: <span class="sched-track General">General</span>
+Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2023/watch/gen">Watch</a></strong>
</div>
diff --git a/2023/info/voice-after.md b/2023/info/voice-after.md
index 32de9a2c..136fafce 100644
--- a/2023/info/voice-after.md
+++ b/2023/info/voice-after.md
@@ -1,13 +1,10 @@
<!-- Automatically generated by emacsconf-publish-after-page -->
-<a name="voice-mainVideo-transcript"></a>
-# Transcript
+<div class="transcript transcript-mainVideo"><a name="voice-mainVideo-transcript"></a><h1>Transcript</h1>
-[[!template new="1" text="""Introduction""" start="00:00:00.000" video="mainVideo-voice" id="subtitle"]]
-
-[[!template text="""Hi, I'm Blaine Mooers. I'm an associate professor""" start="00:00:00.000" video="mainVideo-voice" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Introduction""" start="00:00:00.000" video="mainVideo-voice" id="subtitle"]]</div>[[!template text="""Hi, I'm Blaine Mooers. I'm an associate professor""" start="00:00:00.000" video="mainVideo-voice" id="subtitle"]]
[[!template text="""of biochemistry at the University of Oklahoma""" start="00:00:04.360" video="mainVideo-voice" id="subtitle"]]
[[!template text="""Health Sciences Center in Oklahoma City.""" start="00:00:06.520" video="mainVideo-voice" id="subtitle"]]
[[!template text="""My lab studies the role of RNA structure in RNA editing.""" start="00:00:09.320" video="mainVideo-voice" id="subtitle"]]
@@ -19,9 +16,7 @@
[[!template text="""I was seeking ways of using voice computing""" start="00:00:29.720" video="mainVideo-voice" id="subtitle"]]
[[!template text="""to try to enhance my productivity.""" start="00:00:33.040" video="mainVideo-voice" id="subtitle"]]
-[[!template new="1" text="""Three activities in voice computing""" start="00:00:37.400" video="mainVideo-voice" id="subtitle"]]
-
-[[!template text="""I divide voice computing into three activities,""" start="00:00:37.400" video="mainVideo-voice" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Three activities in voice computing""" start="00:00:37.400" video="mainVideo-voice" id="subtitle"]]</div>[[!template text="""I divide voice computing into three activities,""" start="00:00:37.400" video="mainVideo-voice" id="subtitle"]]
[[!template text="""speech-to-text or dictation, speech-to-commands,""" start="00:00:41.320" video="mainVideo-voice" id="subtitle"]]
[[!template text="""and speech-to-code. I'll be talking about""" start="00:00:44.960" video="mainVideo-voice" id="subtitle"]]
[[!template text="""speech-to-text and speech-to-commands today""" start="00:00:47.640" video="mainVideo-voice" id="subtitle"]]
@@ -29,9 +24,7 @@
[[!template text="""that are probably most broadly applicable""" start="00:00:55.080" video="mainVideo-voice" id="subtitle"]]
[[!template text="""to the workflows of people attending this conference.""" start="00:00:57.320" video="mainVideo-voice" id="subtitle"]]
-[[!template new="1" text="""Talk is not about ... and about ...""" start="00:01:02.560" video="mainVideo-voice" id="subtitle"]]
-
-[[!template text="""This talk will not be about Emacspeak.""" start="00:01:02.560" video="mainVideo-voice" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Talk is not about ... and about ...""" start="00:01:02.560" video="mainVideo-voice" id="subtitle"]]</div>[[!template text="""This talk will not be about Emacspeak.""" start="00:01:02.560" video="mainVideo-voice" id="subtitle"]]
[[!template text="""This is a venerated program for converting text to speech.""" start="00:01:06.800" video="mainVideo-voice" id="subtitle"]]
[[!template text="""We're talking about the flow of information""" start="00:01:11.360" video="mainVideo-voice" id="subtitle"]]
[[!template text="""in the opposite direction, speech-to-text.""" start="00:01:13.320" video="mainVideo-voice" id="subtitle"]]
@@ -46,9 +39,7 @@
[[!template text="""with the speech-to-commands,""" start="00:01:44.800" video="mainVideo-voice" id="subtitle"]]
[[!template text="""and it's also great at speech-to-code.""" start="00:01:47.560" video="mainVideo-voice" id="subtitle"]]
-[[!template new="1" text="""Motivations""" start="00:01:53.520" video="mainVideo-voice" id="subtitle"]]
-
-[[!template text="""The motivations are, obviously, as I mentioned already,""" start="00:01:53.520" video="mainVideo-voice" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Motivations""" start="00:01:53.520" video="mainVideo-voice" id="subtitle"]]</div>[[!template text="""The motivations are, obviously, as I mentioned already,""" start="00:01:53.520" video="mainVideo-voice" id="subtitle"]]
[[!template text="""for improved productivity.""" start="00:01:57.240" video="mainVideo-voice" id="subtitle"]]
[[!template text="""So, if you're a fast typist""" start="00:01:59.160" video="mainVideo-voice" id="subtitle"]]
[[!template text="""who types faster than they can speak,""" start="00:02:00.400" video="mainVideo-voice" id="subtitle"]]
@@ -79,9 +70,7 @@
[[!template text="""thereby giving your lower body a break""" start="00:03:25.000" video="mainVideo-voice" id="subtitle"]]
[[!template text="""and your eyes a break.""" start="00:03:27.780" video="mainVideo-voice" id="subtitle"]]
-[[!template new="1" text="""Data""" start="00:03:33.240" video="mainVideo-voice" id="subtitle"]]
-
-[[!template text="""I'm not God, so I have to bring data.""" start="00:03:33.240" video="mainVideo-voice" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Data""" start="00:03:33.240" video="mainVideo-voice" id="subtitle"]]</div>[[!template text="""I'm not God, so I have to bring data.""" start="00:03:33.240" video="mainVideo-voice" id="subtitle"]]
[[!template text="""I have two data points here,""" start="00:03:35.640" video="mainVideo-voice" id="subtitle"]]
[[!template text="""the number of words that I wrote in June and July this year""" start="00:03:38.040" video="mainVideo-voice" id="subtitle"]]
[[!template text="""and in September and October.""" start="00:03:42.400" video="mainVideo-voice" id="subtitle"]]
@@ -89,9 +78,7 @@
[[!template text="""in the middle of August. As you can see,""" start="00:03:49.520" video="mainVideo-voice" id="subtitle"]]
[[!template text="""I got an over three-fold increase in my output.""" start="00:03:53.920" video="mainVideo-voice" id="subtitle"]]
-[[!template new="1" text="""Voice In in the Chrome Store""" start="00:03:58.680" video="mainVideo-voice" id="subtitle"]]
-
-[[!template text="""So this is the Chrome store website for voice-in.""" start="00:03:58.680" video="mainVideo-voice" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Voice In in the Chrome Store""" start="00:03:58.680" video="mainVideo-voice" id="subtitle"]]</div>[[!template text="""So this is the Chrome store website for voice-in.""" start="00:03:58.680" video="mainVideo-voice" id="subtitle"]]
[[!template text="""It's only available for Google Chrome.""" start="00:04:07.120" video="mainVideo-voice" id="subtitle"]]
[[!template text="""You just hit the install button to install it.""" start="00:04:11.120" video="mainVideo-voice" id="subtitle"]]
[[!template text="""To configure it, you need to select a language.""" start="00:04:13.240" video="mainVideo-voice" id="subtitle"]]
@@ -99,9 +86,7 @@
[[!template text="""and it supports about a dozen different dialects of English,""" start="00:04:19.560" video="mainVideo-voice" id="subtitle"]]
[[!template text="""including Australian.""" start="00:04:23.120" video="mainVideo-voice" id="subtitle"]]
-[[!template new="1" text="""Works in web pages with text areas""" start="00:04:25.628" video="mainVideo-voice" id="subtitle"]]
-
-[[!template text="""It works on web pages with text areas,""" start="00:04:25.628" video="mainVideo-voice" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Works in web pages with text areas""" start="00:04:25.628" video="mainVideo-voice" id="subtitle"]]</div>[[!template text="""It works on web pages with text areas,""" start="00:04:25.628" video="mainVideo-voice" id="subtitle"]]
[[!template text="""so it works. I use it regularly""" start="00:04:29.960" video="mainVideo-voice" id="subtitle"]]
[[!template text="""on Overleaf and 750words.com,""" start="00:04:33.320" video="mainVideo-voice" id="subtitle"]]
[[!template text="""a distraction-free environment for writing.""" start="00:04:37.880" video="mainVideo-voice" id="subtitle"]]
@@ -114,9 +99,7 @@
[[!template text="""when the cursor is on a web page that has a text area.""" start="00:05:04.160" video="mainVideo-voice" id="subtitle"]]
[[!template text="""So [the presence of a text area is] the main limiting factor.""" start="00:05:09.120" video="mainVideo-voice" id="subtitle"]]
-[[!template new="1" text="""Built-in commands in Voice In Plus""" start="00:05:16.880" video="mainVideo-voice" id="subtitle"]]
-
-[[!template text="""[Voice In] has a number of built-in commands.""" start="00:05:16.880" video="mainVideo-voice" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Built-in commands in Voice In Plus""" start="00:05:16.880" video="mainVideo-voice" id="subtitle"]]</div>[[!template text="""[Voice In] has a number of built-in commands.""" start="00:05:16.880" video="mainVideo-voice" id="subtitle"]]
[[!template text="""You can turn it off by saying &quot;stop dictation&quot;.""" start="00:05:19.160" video="mainVideo-voice" id="subtitle"]]
[[!template text="""It doesn't distinguish between""" start="00:05:24.880" video="mainVideo-voice" id="subtitle"]]
[[!template text="""a command mode and a dictation mode.""" start="00:05:26.120" video="mainVideo-voice" id="subtitle"]]
@@ -139,9 +122,7 @@
[[!template text="""I also provide an Elisp version of this quiz,""" start="00:06:32.160" video="mainVideo-voice" id="subtitle"]]
[[!template text="""but it's a little slower to operate.""" start="00:06:35.600" video="mainVideo-voice" id="subtitle"]]
-[[!template new="1" text="""Common errors made by Voice In""" start="00:06:41.740" video="mainVideo-voice" id="subtitle"]]
-
-[[!template text="""These are some common errors""" start="00:06:41.740" video="mainVideo-voice" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Common errors made by Voice In""" start="00:06:41.740" video="mainVideo-voice" id="subtitle"]]</div>[[!template text="""These are some common errors""" start="00:06:41.740" video="mainVideo-voice" id="subtitle"]]
[[!template text="""that I've run into with Voice In.""" start="00:06:43.400" video="mainVideo-voice" id="subtitle"]]
[[!template text="""It likes to contract statements like &quot;I will&quot; into &quot;I'll&quot;.""" start="00:06:45.400" video="mainVideo-voice" id="subtitle"]]
[[!template text="""Contractions are not used in formal writing,""" start="00:06:50.320" video="mainVideo-voice" id="subtitle"]]
@@ -165,9 +146,7 @@
[[!template text="""in that it doesn't have a command mode""" start="00:08:07.120" video="mainVideo-voice" id="subtitle"]]
[[!template text="""that's separate from a dictation mode.""" start="00:08:08.920" video="mainVideo-voice" id="subtitle"]]
-[[!template new="1" text="""Custom speech-to-text commands""" start="00:08:14.760" video="mainVideo-voice" id="subtitle"]]
-
-[[!template text="""You can set up through a very easy-to-use GUI""" start="00:08:14.760" video="mainVideo-voice" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Custom speech-to-text commands""" start="00:08:14.760" video="mainVideo-voice" id="subtitle"]]</div>[[!template text="""You can set up through a very easy-to-use GUI""" start="00:08:14.760" video="mainVideo-voice" id="subtitle"]]
[[!template text="""custom voice commands mapped to what you want inserted,""" start="00:08:20.320" video="mainVideo-voice" id="subtitle"]]
[[!template text="""so this is how misinterpreted words can be corrected.""" start="00:08:26.960" video="mainVideo-voice" id="subtitle"]]
[[!template text="""You just map the misinterpreted word to the intended word.""" start="00:08:32.400" video="mainVideo-voice" id="subtitle"]]
@@ -187,9 +166,7 @@
[[!template text="""that you use frequently. All fields""" start="00:09:45.040" video="mainVideo-voice" id="subtitle"]]
[[!template text="""have certain key references for certain methods or topics.""" start="00:09:46.880" video="mainVideo-voice" id="subtitle"]]
-[[!template new="1" text="""Custom speech-to-commands""" start="00:09:59.420" video="mainVideo-voice" id="subtitle"]]
-
-[[!template text="""Then it has a set of commands that you can customize""" start="00:09:59.420" video="mainVideo-voice" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Custom speech-to-commands""" start="00:09:59.420" video="mainVideo-voice" id="subtitle"]]</div>[[!template text="""Then it has a set of commands that you can customize""" start="00:09:59.420" video="mainVideo-voice" id="subtitle"]]
[[!template text="""for the purpose of speech-to-commands""" start="00:10:05.080" video="mainVideo-voice" id="subtitle"]]
[[!template text="""to get the computer to do something""" start="00:10:08.200" video="mainVideo-voice" id="subtitle"]]
[[!template text="""like open up a specific website or save the current writing.""" start="00:10:09.680" video="mainVideo-voice" id="subtitle"]]
@@ -198,9 +175,7 @@
[[!template text="""You can change the language [with &quot;lang:&quot;],""" start="00:10:27.760" video="mainVideo-voice" id="subtitle"]]
[[!template text="""and you can change the case of the text [with &quot;case:&quot;].""" start="00:10:28.100" video="mainVideo-voice" id="subtitle"]]
-[[!template new="1" text="""Introducing Talon Voice""" start="00:10:37.540" video="mainVideo-voice" id="subtitle"]]
-
-[[!template text="""But the speech-to-command repertoire is quite limited""" start="00:10:37.540" video="mainVideo-voice" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Introducing Talon Voice""" start="00:10:37.540" video="mainVideo-voice" id="subtitle"]]</div>[[!template text="""But the speech-to-command repertoire is quite limited""" start="00:10:37.540" video="mainVideo-voice" id="subtitle"]]
[[!template text="""in Voice In, so it's now time to pick up on Talon Voice.""" start="00:10:41.040" video="mainVideo-voice" id="subtitle"]]
[[!template text="""This is an open source project. It's free.""" start="00:10:49.760" video="mainVideo-voice" id="subtitle"]]
[[!template text="""It is highly configurable via TalonScript,""" start="00:10:54.120" video="mainVideo-voice" id="subtitle"]]
@@ -229,9 +204,7 @@
[[!template text="""At least that's the text editor""" start="00:12:20.560" video="mainVideo-voice" id="subtitle"]]
[[!template text="""for which he's primarily developing Cursorless.""" start="00:12:23.360" video="mainVideo-voice" id="subtitle"]]
-[[!template new="1" text="""Talon GUI""" start="00:12:28.400" video="mainVideo-voice" id="subtitle"]]
-
-[[!template text="""I followed the [install] protocol outlined by Tara Roys.""" start="00:12:28.400" video="mainVideo-voice" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Talon GUI""" start="00:12:28.400" video="mainVideo-voice" id="subtitle"]]</div>[[!template text="""I followed the [install] protocol outlined by Tara Roys.""" start="00:12:28.400" video="mainVideo-voice" id="subtitle"]]
[[!template text="""She has a collection of tutorials""" start="00:12:35.520" video="mainVideo-voice" id="subtitle"]]
[[!template text="""on YouTube as well as on GitHub that are quite helpful.""" start="00:12:38.760" video="mainVideo-voice" id="subtitle"]]
[[!template text="""I followed her tutorial for installing""" start="00:12:44.600" video="mainVideo-voice" id="subtitle"]]
@@ -254,9 +227,7 @@
[[!template text="""You do not have to restart Talon""" start="00:13:55.080" video="mainVideo-voice" id="subtitle"]]
[[!template text="""to get the change to take effect.""" start="00:13:57.600" video="mainVideo-voice" id="subtitle"]]
-[[!template new="1" text="""Talon file with web scope""" start="00:14:02.540" video="mainVideo-voice" id="subtitle"]]
-
-[[!template text="""This is an example of a Talon file.""" start="00:14:02.540" video="mainVideo-voice" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Talon file with web scope""" start="00:14:02.540" video="mainVideo-voice" id="subtitle"]]</div>[[!template text="""This is an example of a Talon file.""" start="00:14:02.540" video="mainVideo-voice" id="subtitle"]]
[[!template text="""It has two components. It has a header above the dash that describes""" start="00:14:04.760" video="mainVideo-voice" id="subtitle"]]
[[!template text="""the scope of the commands contained below the dash.""" start="00:14:10.500" video="mainVideo-voice" id="subtitle"]]
[[!template text="""Each command is separated by a blank line.""" start="00:14:14.920" video="mainVideo-voice" id="subtitle"]]
@@ -279,9 +250,7 @@
[[!template text="""then the commands in the file will apply in all situations,""" start="00:15:29.600" video="mainVideo-voice" id="subtitle"]]
[[!template text="""in all modes.""" start="00:15:32.640" video="mainVideo-voice" id="subtitle"]]
-[[!template new="1" text="""Terminals on remote and virtual machines""" start="00:15:34.015" video="mainVideo-voice" id="subtitle"]]
-
-[[!template text="""Here we have two restrictions.""" start="00:15:34.015" video="mainVideo-voice" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Terminals on remote and virtual machines""" start="00:15:34.015" video="mainVideo-voice" id="subtitle"]]</div>[[!template text="""Here we have two restrictions.""" start="00:15:34.015" video="mainVideo-voice" id="subtitle"]]
[[!template text="""These commands will only work""" start="00:15:36.960" video="mainVideo-voice" id="subtitle"]]
[[!template text="""when using the iTerm2 [ccc] terminal emulator for the Mac,""" start="00:15:38.960" video="mainVideo-voice" id="subtitle"]]
[[!template text="""and then only when the title of the window in iTerm2""" start="00:15:42.960" video="mainVideo-voice" id="subtitle"]]
@@ -301,9 +270,7 @@
[[!template text="""here's a similar setup for interacting with""" start="00:16:43.800" video="mainVideo-voice" id="subtitle"]]
[[!template text="""a Ubuntu virtual machine.""" start="00:16:46.800" video="mainVideo-voice" id="subtitle"]]
-[[!template new="1" text="""Recommendations""" start="00:16:52.500" video="mainVideo-voice" id="subtitle"]]
-
-[[!template text="""In terms of picking up voice computing,""" start="00:16:52.500" video="mainVideo-voice" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Recommendations""" start="00:16:52.500" video="mainVideo-voice" id="subtitle"]]</div>[[!template text="""In terms of picking up voice computing,""" start="00:16:52.500" video="mainVideo-voice" id="subtitle"]]
[[!template text="""these are my recommendations.""" start="00:16:55.920" video="mainVideo-voice" id="subtitle"]]
[[!template text="""You're going to run into more errors""" start="00:16:57.480" video="mainVideo-voice" id="subtitle"]]
[[!template text="""than you may like initially,""" start="00:16:59.760" video="mainVideo-voice" id="subtitle"]]
@@ -328,9 +295,7 @@
[[!template text="""And I also have [posted] a quiz of 600 questions""" start="00:18:07.480" video="mainVideo-voice" id="subtitle"]]
[[!template text="""about some basic Talon commands.""" start="00:18:12.960" video="mainVideo-voice" id="subtitle"]]
-[[!template new="1" text="""Acknowledgements""" start="00:18:17.720" video="mainVideo-voice" id="subtitle"]]
-
-[[!template text="""I'd like to thank the people who've helped me out""" start="00:18:17.720" video="mainVideo-voice" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Acknowledgements""" start="00:18:17.720" video="mainVideo-voice" id="subtitle"]]</div>[[!template text="""I'd like to thank the people who've helped me out""" start="00:18:17.720" video="mainVideo-voice" id="subtitle"]]
[[!template text="""on the Talon Slack channel""" start="00:18:21.000" video="mainVideo-voice" id="subtitle"]]
[[!template text="""and members of the Oklahoma Data Science Workshop""" start="00:18:22.160" video="mainVideo-voice" id="subtitle"]]
[[!template text="""where I gave an hour-long talk on this topic""" start="00:18:25.800" video="mainVideo-voice" id="subtitle"]]
@@ -341,8 +306,7 @@
[[!template text="""And I thank these grant funding agencies""" start="00:18:42.660" video="mainVideo-voice" id="subtitle"]]
[[!template text="""for supporting my work. I'll be happy to take any questions.""" start="00:18:45.120" video="mainVideo-voice" id="subtitle"]]
-<a name="voice-qanda-transcript"></a>
-# Q&A transcript (unedited)
+</div><div class="transcript transcript-qanda"><a name="voice-qanda-transcript"></a><h1>Q&A transcript (unedited)</h1>
[[!template text="""[Speaker 0]: Dictation.""" start="00:00:00.480" video="qanda-voice" id="subtitle"]]
[[!template text="""[Speaker 1]: Right. All right I think we are live now.""" start="00:00:06.020" video="qanda-voice" id="subtitle"]]
@@ -688,9 +652,7 @@
[[!template text="""times, but when it's working,""" start="00:21:48.760" video="qanda-voice" id="subtitle"]]
[[!template text="""it's wonderful. Yep.""" start="00:21:54.740" video="qanda-voice" id="subtitle"]]
-[[!template new="1" text="""Start of section to review""" start="00:21:59.540" video="qanda-voice" id="subtitle"]]
-
-[[!template text="""[Speaker 2]: Good purpose of computers is all the""" start="00:21:59.540" video="qanda-voice" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Start of section to review""" start="00:21:59.540" video="qanda-voice" id="subtitle"]]</div>[[!template text="""[Speaker 2]: Good purpose of computers is all the""" start="00:21:59.540" video="qanda-voice" id="subtitle"]]
[[!template text="""computers run the same code,""" start="00:22:01.100" video="qanda-voice" id="subtitle"]]
[[!template text="""so that people, you know,""" start="00:22:03.460" video="qanda-voice" id="subtitle"]]
[[!template text="""a lot of people work on the same thing and""" start="00:22:05.740" video="qanda-voice" id="subtitle"]]
@@ -1467,7 +1429,7 @@
[[!template text="""Enjoy the rest of the meeting.""" start="01:06:17.760" video="qanda-voice" id="subtitle"]]
[[!template text="""[Speaker 2]: Will do.""" start="01:06:19.280" video="qanda-voice" id="subtitle"]]
-Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202023%20voice%3A%20Enhancing%20productivity%20with%20voice%20computing)
+</div>Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202023%20voice%3A%20Enhancing%20productivity%20with%20voice%20computing)
<!-- End of emacsconf-publish-after-page -->
diff --git a/2023/info/voice-before.md b/2023/info/voice-before.md
index 6f5b9b90..9ec5c829 100644
--- a/2023/info/voice-before.md
+++ b/2023/info/voice-before.md
@@ -1,6 +1,6 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
[[!toc ]]
-Format: 19-min talk; Q&A: BigBlueButton conference room
+Format: 19-min talk ; Q&A: BigBlueButton conference room
Status: TO_INDEX_QA
@@ -9,7 +9,7 @@ Status: TO_INDEX_QA
# Talk
-<div class="vid"><video controls preload="none" id="voice-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="voice-mainVideo" data="""
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-voice"><source src="https://media.emacsconf.org/2023/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="mainVideo-voice" data="""
00:00.000 Introduction
00:37.400 Three activities in voice computing
01:02.560 Talk is not about ... and about ...
@@ -28,10 +28,10 @@ Status: TO_INDEX_QA
16:52.500 Recommendations
18:17.720 Acknowledgements
-"""]]<div></div>Duration: 18:49 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--main.opus">Download --main.opus (9MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--main.webm">Download --main.webm (32MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--pad.md">Download --pad.md</a></li><li><a href="https://toobnix.org/w/vYHj7iSYhUbTxDv93NvzzY">View on Toobnix</a></li></ul></div></div>
+"""]]<div></div>Duration: 18:49 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2023-voice">Open Etherpad</a></li><li><a href="https://bbb.emacsverse.org/playback/presentation/2.0/playback.html?meetingId=8ddd81ef601d78f7b9ac2093f3700a29b5595ff3-1701529315435">Play recording from BigBlueButton</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--main.opus">Download --main.opus (9MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--main.webm">Download --main.webm (32MB)</a></li><li><a href="https://toobnix.org/w/vYHj7iSYhUbTxDv93NvzzY">View on Toobnix</a></li><li><a href="https://www.youtube.com/watch?v=Z7l1ImjXOWM">View on Youtube</a></li></ul></div></div>
# Q&A
-<div class="vid"><video controls preload="none" id="voice-qanda"><source src="https://media.emacsconf.org/2023/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--answers.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div>Listen to just the audio:<br /><audio controls preload="none" id="voice-qanda-audio" src="https://media.emacsconf.org/2023/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--answers.opus"></audio></div><div></div>Duration: 1:07:47 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--answers.opus">Download --answers.opus (34MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--answers.webm">Download --answers.webm (205MB)</a></li></ul></div></div>
+<div class="vid qanda"><video controls preload="none" id="qanda-voice"><source src="https://media.emacsconf.org/2023/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--answers.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div>Listen to just the audio:<br /><audio controls preload="none" id="qanda-voice-audio" src="https://media.emacsconf.org/2023/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--answers.opus"></audio></div><div></div>Duration: 1:07:47 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2023-voice">Open Etherpad</a></li><li><a href="https://bbb.emacsverse.org/playback/presentation/2.0/playback.html?meetingId=8ddd81ef601d78f7b9ac2093f3700a29b5595ff3-1701529315435">Play recording from BigBlueButton</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--answers.opus">Download --answers.opus (34MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--answers.webm">Download --answers.webm (205MB)</a></li></ul></div></div>
# Description
<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/info/voice-nav.md b/2023/info/voice-nav.md
index 9fedf97e..ff560e36 100644
--- a/2023/info/voice-nav.md
+++ b/2023/info/voice-nav.md
@@ -3,5 +3,5 @@
Back to the [[talks]]
Previous by track: <a href="/2023/talks/matplotllm">MatplotLLM, iterative natural language data visualization in org-babel</a>
Next by track: <a href="/2023/talks/llm">LLM clients in Emacs, functionality and standardization</a>
-Track: <span class="sched-track Development">Development</span>
+Track: <span class="sched-track Development">Development</span> - <strong><a href="https://emacsconf.org/2023/watch/dev">Watch</a></strong>
</div>
diff --git a/2023/info/web-after.md b/2023/info/web-after.md
index 96ebb81b..0e6730c2 100644
--- a/2023/info/web-after.md
+++ b/2023/info/web-after.md
@@ -1,13 +1,10 @@
<!-- Automatically generated by emacsconf-publish-after-page -->
-<a name="web-mainVideo-transcript"></a>
-# Transcript
+<div class="transcript transcript-mainVideo"><a name="web-mainVideo-transcript"></a><h1>Transcript</h1>
-[[!template new="1" text="""Overview""" start="00:00:00.000" video="mainVideo-web" id="subtitle"]]
-
-[[!template text="""Hello, I am Yuchen, and I will be talking about""" start="00:00:00.000" video="mainVideo-web" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Overview""" start="00:00:00.000" video="mainVideo-web" id="subtitle"]]</div>[[!template text="""Hello, I am Yuchen, and I will be talking about""" start="00:00:00.000" video="mainVideo-web" id="subtitle"]]
[[!template text="""how Emacs may be used to save user freedom on the web.""" start="00:00:03.200" video="mainVideo-web" id="subtitle"]]
[[!template text="""I will begin by describing the background issues,""" start="00:00:06.840" video="mainVideo-web" id="subtitle"]]
[[!template text="""followed by solutions outside of Emacs.""" start="00:00:09.680" video="mainVideo-web" id="subtitle"]]
@@ -20,9 +17,7 @@
[[!template text="""and get a web app for free,""" start="00:00:29.320" video="mainVideo-web" id="subtitle"]]
[[!template text="""as well as using Emacs as a Firefox extension.""" start="00:00:30.760" video="mainVideo-web" id="subtitle"]]
-[[!template new="1" text="""Background problems""" start="00:00:35.680" video="mainVideo-web" id="subtitle"]]
-
-[[!template text="""OK, let's now move on to""" start="00:00:35.680" video="mainVideo-web" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Background problems""" start="00:00:35.680" video="mainVideo-web" id="subtitle"]]</div>[[!template text="""OK, let's now move on to""" start="00:00:35.680" video="mainVideo-web" id="subtitle"]]
[[!template text="""the background issues for this topic.""" start="00:00:37.160" video="mainVideo-web" id="subtitle"]]
[[!template text="""Many of you probably already know what is free software.""" start="00:00:39.560" video="mainVideo-web" id="subtitle"]]
[[!template text="""It is software that respects four user freedoms,""" start="00:00:42.640" video="mainVideo-web" id="subtitle"]]
@@ -120,9 +115,7 @@
[[!template text="""Wouldn't it be nice to use a photo editing web application,""" start="00:05:25.840" video="mainVideo-web" id="subtitle"]]
[[!template text="""but without the web?""" start="00:05:28.680" video="mainVideo-web" id="subtitle"]]
-[[!template new="1" text="""Solutions outside of Emacs""" start="00:05:31.940" video="mainVideo-web" id="subtitle"]]
-
-[[!template text="""Right, now let's move on to solutions outside of Emacs""" start="00:05:31.940" video="mainVideo-web" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Solutions outside of Emacs""" start="00:05:31.940" video="mainVideo-web" id="subtitle"]]</div>[[!template text="""Right, now let's move on to solutions outside of Emacs""" start="00:05:31.940" video="mainVideo-web" id="subtitle"]]
[[!template text="""that tackle these problems.""" start="00:05:36.401" video="mainVideo-web" id="subtitle"]]
[[!template text="""There are generally two ways to fix this issue.""" start="00:05:39.040" video="mainVideo-web" id="subtitle"]]
[[!template text="""One is blocking non-free JavaScript,""" start="00:05:42.960" video="mainVideo-web" id="subtitle"]]
@@ -197,14 +190,10 @@ trivial or non-trivial.""" start="00:06:44.240" video="mainVideo-web" id="subtit
[[!template text="""to redirect to free non-web clients,""" start="00:09:39.700" video="mainVideo-web" id="subtitle"]]
[[!template text="""for example by opening YouTube links with MPV.""" start="00:09:42.160" video="mainVideo-web" id="subtitle"]]
-[[!template new="1" text="""Emacs solutions""" start="00:09:46.480" video="mainVideo-web" id="subtitle"]]
-
-[[!template text="""Now let us move to Emacs-based solutions.""" start="00:09:46.480" video="mainVideo-web" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Emacs solutions""" start="00:09:46.480" video="mainVideo-web" id="subtitle"]]</div>[[!template text="""Now let us move to Emacs-based solutions.""" start="00:09:46.480" video="mainVideo-web" id="subtitle"]]
[[!template text="""They are based on the same ideas but using Emacs.""" start="00:09:51.000" video="mainVideo-web" id="subtitle"]]
-[[!template new="1" text="""Free clients in Emacs""" start="00:09:54.600" video="mainVideo-web" id="subtitle"]]
-
-[[!template text="""First, free clients in Emacs.""" start="00:09:54.600" video="mainVideo-web" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Free clients in Emacs""" start="00:09:54.600" video="mainVideo-web" id="subtitle"]]</div>[[!template text="""First, free clients in Emacs.""" start="00:09:54.600" video="mainVideo-web" id="subtitle"]]
[[!template text="""Basically alternative frontends written in Elisp.""" start="00:09:57.480" video="mainVideo-web" id="subtitle"]]
[[!template text="""There are several advantages.""" start="00:10:00.640" video="mainVideo-web" id="subtitle"]]
[[!template text="""For example, integration with other Emacs tools,""" start="00:10:03.360" video="mainVideo-web" id="subtitle"]]
@@ -243,9 +232,7 @@ with ease.""" start="00:11:11.120" video="mainVideo-web" id="subtitle"]]
[[!template text="""or even structure of the responses.""" start="00:12:34.560" video="mainVideo-web" id="subtitle"]]
[[!template text="""This brings us to web browsers in Emacs.""" start="00:12:37.540" video="mainVideo-web" id="subtitle"]]
-[[!template new="1" text="""Web browsers in Emacs""" start="00:12:43.021" video="mainVideo-web" id="subtitle"]]
-
-[[!template text="""Web browsers are universal clients""" start="00:12:43.021" video="mainVideo-web" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Web browsers in Emacs""" start="00:12:43.021" video="mainVideo-web" id="subtitle"]]</div>[[!template text="""Web browsers are universal clients""" start="00:12:43.021" video="mainVideo-web" id="subtitle"]]
[[!template text="""because all sites support browsers.""" start="00:12:45.160" video="mainVideo-web" id="subtitle"]]
[[!template text="""So in a world of no JavaScript,""" start="00:12:47.200" video="mainVideo-web" id="subtitle"]]
[[!template text="""there will be no need to write bespoke clients.""" start="00:12:48.920" video="mainVideo-web" id="subtitle"]]
@@ -319,9 +306,7 @@ with ease.""" start="00:11:11.120" video="mainVideo-web" id="subtitle"]]
[[!template text="""this could also make running non-free JavaScript easier,""" start="00:16:43.640" video="mainVideo-web" id="subtitle"]]
[[!template text="""which is harmful to user freedom.""" start="00:16:46.560" video="mainVideo-web" id="subtitle"]]
-[[!template new="1" text="""emacs-web-server - overview""" start="00:16:52.380" video="mainVideo-web" id="subtitle"]]
-
-[[!template text="""OK, let's move on to the idea""" start="00:16:52.380" video="mainVideo-web" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""emacs-web-server - overview""" start="00:16:52.380" video="mainVideo-web" id="subtitle"]]</div>[[!template text="""OK, let's move on to the idea""" start="00:16:52.380" video="mainVideo-web" id="subtitle"]]
[[!template text="""of running Emacs as a web server,""" start="00:16:54.240" video="mainVideo-web" id="subtitle"]]
[[!template text="""so that Emacs client packages are web apps""" start="00:16:55.680" video="mainVideo-web" id="subtitle"]]
[[!template text="""serving as alternative frontends.""" start="00:16:58.560" video="mainVideo-web" id="subtitle"]]
@@ -338,9 +323,7 @@ with ease.""" start="00:11:11.120" video="mainVideo-web" id="subtitle"]]
[[!template text="""emacs-web-server package is not something new,""" start="00:17:23.580" video="mainVideo-web" id="subtitle"]]
[[!template text="""but seems to be underused in the community somehow.""" start="00:17:26.440" video="mainVideo-web" id="subtitle"]]
-[[!template new="1" text="""emacs-web-server - hello emacs!""" start="00:17:30.380" video="mainVideo-web" id="subtitle"]]
-
-[[!template text="""OK, let's start with a simple example called hello-emacs.""" start="00:17:30.380" video="mainVideo-web" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""emacs-web-server - hello emacs!""" start="00:17:30.380" video="mainVideo-web" id="subtitle"]]</div>[[!template text="""OK, let's start with a simple example called hello-emacs.""" start="00:17:30.380" video="mainVideo-web" id="subtitle"]]
[[!template text="""It is pretty straightforward.""" start="00:17:33.360" video="mainVideo-web" id="subtitle"]]
[[!template text="""Just require the web server feature""" start="00:17:35.240" video="mainVideo-web" id="subtitle"]]
[[!template text="""and run ws-start to start a server process""" start="00:17:38.640" video="mainVideo-web" id="subtitle"]]
@@ -355,9 +338,7 @@ with ease.""" start="00:11:11.120" video="mainVideo-web" id="subtitle"]]
[[!template text="""Let's evaluate.""" start="00:18:10.840" video="mainVideo-web" id="subtitle"]]
[[!template text="""Yep, it stopped.""" start="00:18:14.960" video="mainVideo-web" id="subtitle"]]
-[[!template new="1" text="""emacs-web-server - yolo""" start="00:18:17.580" video="mainVideo-web" id="subtitle"]]
-
-[[!template text="""OK, now let's move on to something funny""" start="00:18:17.580" video="mainVideo-web" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""emacs-web-server - yolo""" start="00:18:17.580" video="mainVideo-web" id="subtitle"]]</div>[[!template text="""OK, now let's move on to something funny""" start="00:18:17.580" video="mainVideo-web" id="subtitle"]]
[[!template text="""that you should never run on the public web.""" start="00:18:20.000" video="mainVideo-web" id="subtitle"]]
[[!template text="""I call it yolo.el.""" start="00:18:22.220" video="mainVideo-web" id="subtitle"]]
[[!template text="""It uses htmlize""" start="00:18:23.920" video="mainVideo-web" id="subtitle"]]
@@ -418,9 +399,7 @@ with ease.""" start="00:11:11.120" video="mainVideo-web" id="subtitle"]]
[[!template text="""since htmlize, as you have noticed,""" start="00:23:00.080" video="mainVideo-web" id="subtitle"]]
[[!template text="""faithfully reflects the theme used in Emacs.""" start="00:23:02.840" video="mainVideo-web" id="subtitle"]]
-[[!template new="1" text="""emacs-web-server - emacs web framework""" start="00:23:07.940" video="mainVideo-web" id="subtitle"]]
-
-[[!template text="""Okay, so we know that yolo is unsafe""" start="00:23:07.940" video="mainVideo-web" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""emacs-web-server - emacs web framework""" start="00:23:07.940" video="mainVideo-web" id="subtitle"]]</div>[[!template text="""Okay, so we know that yolo is unsafe""" start="00:23:07.940" video="mainVideo-web" id="subtitle"]]
[[!template text="""and needs to be refined.""" start="00:23:10.339" video="mainVideo-web" id="subtitle"]]
[[!template text="""In fact, we don't necessarily want""" start="00:23:11.540" video="mainVideo-web" id="subtitle"]]
[[!template text="""to run Emacs on a web browser.""" start="00:23:13.440" video="mainVideo-web" id="subtitle"]]
@@ -534,9 +513,7 @@ with ease.""" start="00:11:11.120" video="mainVideo-web" id="subtitle"]]
[[!template text="""In any case, I think the package emacs-web-server""" start="00:29:32.380" video="mainVideo-web" id="subtitle"]]
[[!template text="""could do with some performance enhancement.""" start="00:29:36.440" video="mainVideo-web" id="subtitle"]]
-[[!template new="1" text="""Firefox with emacs for extensions""" start="00:29:40.420" video="mainVideo-web" id="subtitle"]]
-
-[[!template text="""Right. Because of the time constraints,""" start="00:29:40.420" video="mainVideo-web" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Firefox with emacs for extensions""" start="00:29:40.420" video="mainVideo-web" id="subtitle"]]</div>[[!template text="""Right. Because of the time constraints,""" start="00:29:40.420" video="mainVideo-web" id="subtitle"]]
[[!template text="""I will briefly touch one final idea,""" start="00:29:44.000" video="mainVideo-web" id="subtitle"]]
[[!template text="""which is to use Emacs as a Firefox browser extension.""" start="00:29:45.760" video="mainVideo-web" id="subtitle"]]
[[!template text="""We already have org-protocol,""" start="00:29:50.420" video="mainVideo-web" id="subtitle"]]
@@ -572,17 +549,14 @@ with ease.""" start="00:11:11.120" video="mainVideo-web" id="subtitle"]]
[[!template text="""to wait for responses from Emacs.""" start="00:31:17.120" video="mainVideo-web" id="subtitle"]]
[[!template text="""Some further work, I suppose.""" start="00:31:20.200" video="mainVideo-web" id="subtitle"]]
-[[!template new="1" text="""Thank you""" start="00:31:25.360" video="mainVideo-web" id="subtitle"]]
-
-[[!template text="""That concludes my talk.""" start="00:31:25.360" video="mainVideo-web" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Thank you""" start="00:31:25.360" video="mainVideo-web" id="subtitle"]]</div>[[!template text="""That concludes my talk.""" start="00:31:25.360" video="mainVideo-web" id="subtitle"]]
[[!template text="""Thank you for your attention.""" start="00:31:28.254" video="mainVideo-web" id="subtitle"]]
-
+</div>
Captioner: ken
-<a name="web-qanda-transcript"></a>
-# Q&A transcript (unedited)
+<div class="transcript transcript-qanda"><a name="web-qanda-transcript"></a><h1>Q&A transcript (unedited)</h1>
[[!template text="""[Speaker 0]: 2 seconds. And I think we are live.""" start="00:00:04.740" video="qanda-web" id="subtitle"]]
[[!template text="""Hi Yuchen, how are you doing?""" start="00:00:05.980" video="qanda-web" id="subtitle"]]
@@ -844,7 +818,7 @@ Captioner: ken
[[!template text="""[Speaker 0]: You are currently""" start="00:13:02.620" video="qanda-web" id="subtitle"]]
[[!template text="""you""" start="00:13:15.260" video="qanda-web" id="subtitle"]]
-Questions or comments? Please e-mail [id@ypei.org](mailto:id@ypei.org?subject=Comment%20for%20EmacsConf%202023%20web%3A%20Emacs%20saves%20the%20Web%20%28maybe%29)
+</div>Questions or comments? Please e-mail [id@ypei.org](mailto:id@ypei.org?subject=Comment%20for%20EmacsConf%202023%20web%3A%20Emacs%20saves%20the%20Web%20%28maybe%29)
<!-- End of emacsconf-publish-after-page -->
diff --git a/2023/info/web-before.md b/2023/info/web-before.md
index ee6fcdab..0ee755f0 100644
--- a/2023/info/web-before.md
+++ b/2023/info/web-before.md
@@ -1,6 +1,6 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
[[!toc ]]
-Format: 32-min talk; Q&A: BigBlueButton conference room
+Format: 32-min talk ; Q&A: BigBlueButton conference room
Status: Q&A to be extracted from the room recordings
@@ -9,7 +9,7 @@ Status: Q&A to be extracted from the room recordings
# Talk
-<div class="vid"><video controls preload="none" id="web-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="web-mainVideo" data="""
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-web"><source src="https://media.emacsconf.org/2023/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="mainVideo-web" data="""
00:00.000 Overview
00:35.680 Background problems
05:31.940 Solutions outside of Emacs
@@ -23,10 +23,10 @@ Status: Q&A to be extracted from the room recordings
29:40.420 Firefox with emacs for extensions
31:25.360 Thank you
-"""]]<div></div>Duration: 31:33 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--main.opus">Download --main.opus (17MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--main.webm">Download --main.webm (53MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--pad.md">Download --pad.md</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei.org">Download .org</a></li><li><a href="https://toobnix.org/w/fvzGU4cQQ2meZVKNGEHMht">View on Toobnix</a></li></ul></div></div>
+"""]]<div></div>Duration: 31:33 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2023-web">Open Etherpad</a></li><li><a href="https://bbb.emacsverse.org/playback/presentation/2.0/playback.html?meetingId=feab521f1b6a6f4d2cef232eecd969786ddf81c1-1701634708093">Play recording from BigBlueButton</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--main.opus">Download --main.opus (17MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--main.webm">Download --main.webm (53MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei.org">Download .org</a></li><li><a href="https://toobnix.org/w/fvzGU4cQQ2meZVKNGEHMht">View on Toobnix</a></li><li><a href="https://www.youtube.com/watch?v=kqOZwsylo48">View on Youtube</a></li></ul></div></div>
# Q&A
-<div class="vid"><video controls preload="none" id="web-qanda"><source src="https://media.emacsconf.org/2023/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--answers.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div>Listen to just the audio:<br /><audio controls preload="none" id="web-qanda-audio" src="https://media.emacsconf.org/2023/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--answers.opus"></audio></div><div></div>Duration: 15:53 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--answers.json">Download --answers.json</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--answers.opus">Download --answers.opus (7.6MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--answers.webm">Download --answers.webm (18MB)</a></li></ul></div></div>
+<div class="vid qanda"><video controls preload="none" id="qanda-web"><source src="https://media.emacsconf.org/2023/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--answers.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div>Listen to just the audio:<br /><audio controls preload="none" id="qanda-web-audio" src="https://media.emacsconf.org/2023/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--answers.opus"></audio></div><div></div>Duration: 15:53 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2023-web">Open Etherpad</a></li><li><a href="https://bbb.emacsverse.org/playback/presentation/2.0/playback.html?meetingId=feab521f1b6a6f4d2cef232eecd969786ddf81c1-1701634708093">Play recording from BigBlueButton</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--answers.json">Download --answers.json</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--answers.opus">Download --answers.opus (7.6MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--answers.webm">Download --answers.webm (18MB)</a></li></ul></div></div>
# Description
<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/info/web-nav.md b/2023/info/web-nav.md
index 0afd6a12..34119aef 100644
--- a/2023/info/web-nav.md
+++ b/2023/info/web-nav.md
@@ -3,5 +3,5 @@
Back to the [[talks]]
Previous by track: <a href="/2023/talks/mentor">Mentoring VS-Coders as an Emacsian (or How to show not tell people about the wonders of Emacs)</a>
Next by track: <a href="/2023/talks/sharing">Sharing Emacs is Caring Emacs: Emacs education and why I embraced video</a>
-Track: <span class="sched-track General">General</span>
+Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2023/watch/gen">Watch</a></strong>
</div>
diff --git a/2023/info/windows-after.md b/2023/info/windows-after.md
index 4d8d8729..f4ce987e 100644
--- a/2023/info/windows-after.md
+++ b/2023/info/windows-after.md
@@ -1,8 +1,7 @@
<!-- Automatically generated by emacsconf-publish-after-page -->
-<a name="windows-mainVideo-transcript"></a>
-# Transcript (unedited)
+<div class="transcript transcript-mainVideo"><a name="windows-mainVideo-transcript"></a><h1>Transcript (unedited)</h1>
[[!template text="""Oh, wow, how exciting. Well, maybe I should share something then. Um, well, thank you very much and welcome to uh""" start="00:00:00.000" video="mainVideo-windows" id="subtitle"]]
[[!template text="""Welcome to my talk i'm a little distracted here""" start="00:00:11.440" video="mainVideo-windows" id="subtitle"]]
@@ -786,8 +785,7 @@
[[!template text="""Okay, so we're clear on bbb here""" start="00:57:35.200" video="mainVideo-windows" id="subtitle"]]
[[!template text="""Yep, I think so""" start="00:57:37.760" video="mainVideo-windows" id="subtitle"]]
-<a name="windows-qanda-transcript"></a>
-# Q&A transcript (unedited)
+</div><div class="transcript transcript-qanda"><a name="windows-qanda-transcript"></a><h1>Q&A transcript (unedited)</h1>
[[!template text="""Oh, wow, how exciting. Well, maybe I should share something then. Um, well, thank you very much and""" start="00:00:00.000" video="qanda-windows" id="subtitle"]]
[[!template text="""welcome to, uh, uh, welcome to my talk. I'm a little distracted here. I had a friend who came""" start="00:00:06.880" video="qanda-windows" id="subtitle"]]
@@ -1254,7 +1252,7 @@
[[!template text="""and see like which big blue button room we're going to be in for closing. Okay. So we're clear""" start="00:57:31.600" video="qanda-windows" id="subtitle"]]
[[!template text="""on BBB here? Yep. I think so.""" start="00:57:36.240" video="qanda-windows" id="subtitle"]]
-Questions or comments? Please e-mail [corwin@bru.st](mailto:corwin@bru.st?subject=Comment%20for%20EmacsConf%202023%20windows%3A%20Windows%20into%20Freedom)
+</div>Questions or comments? Please e-mail [corwin@bru.st](mailto:corwin@bru.st?subject=Comment%20for%20EmacsConf%202023%20windows%3A%20Windows%20into%20Freedom)
<!-- End of emacsconf-publish-after-page -->
diff --git a/2023/info/windows-before.md b/2023/info/windows-before.md
index a3de3379..c3914bf7 100644
--- a/2023/info/windows-before.md
+++ b/2023/info/windows-before.md
@@ -1,6 +1,6 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
[[!toc ]]
-Format: 58-min talk; Q&A: BigBlueButton conference room
+Format: 58-min talk ; Q&A: BigBlueButton conference room
Status: Q&A to be extracted from the room recordings
@@ -9,10 +9,10 @@ Status: Q&A to be extracted from the room recordings
# Talk
-<div class="vid"><video controls preload="none" id="windows-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-windows--windows-into-freedom--corwin-brust--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-windows--windows-into-freedom--corwin-brust--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 57:48 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-windows--windows-into-freedom--corwin-brust--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-windows--windows-into-freedom--corwin-brust--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-windows--windows-into-freedom--corwin-brust--main.opus">Download --main.opus (29MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-windows--windows-into-freedom--corwin-brust--main.vtt">Download --main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-windows--windows-into-freedom--corwin-brust--main.webm">Download --main.webm (80MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-windows--windows-into-freedom--corwin-brust--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-windows--windows-into-freedom--corwin-brust--pad.md">Download --pad.md</a></li><li><a href="https://toobnix.org/w/4DeRkvJyKFdCBLWnHtsZW2">View on Toobnix</a></li></ul></div></div>
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-windows"><source src="https://media.emacsconf.org/2023/emacsconf-2023-windows--windows-into-freedom--corwin-brust--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-windows--windows-into-freedom--corwin-brust--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 57:48 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2023-windows">Open Etherpad</a></li><li><a href="https://bbb.emacsverse.org/playback/presentation/2.0/playback.html?meetingId=38dd7a08335a90614084b3d860f9da7e03414d8d-1701549705139">Play recording from BigBlueButton</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-windows--windows-into-freedom--corwin-brust--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-windows--windows-into-freedom--corwin-brust--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-windows--windows-into-freedom--corwin-brust--main.opus">Download --main.opus (29MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-windows--windows-into-freedom--corwin-brust--main.vtt">Download --main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-windows--windows-into-freedom--corwin-brust--main.webm">Download --main.webm (80MB)</a></li><li><a href="https://toobnix.org/w/4DeRkvJyKFdCBLWnHtsZW2">View on Toobnix</a></li><li><a href="https://www.youtube.com/watch?v=7aVgVd2_HTs">View on Youtube</a></li></ul></div></div>
# Q&A
-<div class="vid"><div>Listen to just the audio:<br /><audio controls preload="none" id="windows-qanda-audio" src="https://media.emacsconf.org/2023/emacsconf-2023-windows--windows-into-freedom--corwin-brust--answers.opus"></audio></div><div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-windows--windows-into-freedom--corwin-brust--answers.opus">Download --answers.opus (29MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-windows--windows-into-freedom--corwin-brust--answers.vtt">Download --answers.vtt</a> (unedited)</li></ul></div></div>
+<div class="vid qanda"><div>Listen to just the audio:<br /><audio controls preload="none" id="qanda-windows-audio" src="https://media.emacsconf.org/2023/emacsconf-2023-windows--windows-into-freedom--corwin-brust--answers.opus"></audio></div><div></div><div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2023-windows">Open Etherpad</a></li><li><a href="https://bbb.emacsverse.org/playback/presentation/2.0/playback.html?meetingId=38dd7a08335a90614084b3d860f9da7e03414d8d-1701549705139">Play recording from BigBlueButton</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-windows--windows-into-freedom--corwin-brust--answers.opus">Download --answers.opus (29MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-windows--windows-into-freedom--corwin-brust--answers.vtt">Download --answers.vtt</a> (unedited)</li></ul></div></div>
# Description
<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/info/windows-nav.md b/2023/info/windows-nav.md
index 05dc3b17..d7ebb4cb 100644
--- a/2023/info/windows-nav.md
+++ b/2023/info/windows-nav.md
@@ -3,5 +3,5 @@
Back to the [[talks]]
Previous by track: <a href="/2023/talks/doc">Literate Documentation with Emacs and Org Mode</a>
Next by track: <a href="/2023/talks/scheme">Bringing joy to Scheme programming</a>
-Track: <span class="sched-track Development">Development</span>
+Track: <span class="sched-track Development">Development</span> - <strong><a href="https://emacsconf.org/2023/watch/dev">Watch</a></strong>
</div>
diff --git a/2023/info/world-after.md b/2023/info/world-after.md
index ce8bdc00..f8af282c 100644
--- a/2023/info/world-after.md
+++ b/2023/info/world-after.md
@@ -1,13 +1,10 @@
<!-- Automatically generated by emacsconf-publish-after-page -->
-<a name="world-mainVideo-transcript"></a>
-# Transcript
+<div class="transcript transcript-mainVideo"><a name="world-mainVideo-transcript"></a><h1>Transcript</h1>
-[[!template new="1" text="""Draw and scribble in GNU Emacs""" start="00:00:00.780" video="mainVideo-world" id="subtitle"]]
-
-[[!template text="""Hello. In this video, we will look at""" start="00:00:00.780" video="mainVideo-world" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Draw and scribble in GNU Emacs""" start="00:00:00.780" video="mainVideo-world" id="subtitle"]]</div>[[!template text="""Hello. In this video, we will look at""" start="00:00:00.780" video="mainVideo-world" id="subtitle"]]
[[!template text="""drawing and scribbling in Emacs using SVG.""" start="00:00:02.900" video="mainVideo-world" id="subtitle"]]
[[!template text="""Let's start with `canvas-mode`.""" start="00:00:07.167" video="mainVideo-world" id="subtitle"]]
[[!template text="""We will define the width and the height.""" start="00:00:10.067" video="mainVideo-world" id="subtitle"]]
@@ -50,9 +47,7 @@
[[!template text="""Finally, we look at ellipse.""" start="00:03:32.000" video="mainVideo-world" id="subtitle"]]
[[!template text="""That's all for this video. Thanks!""" start="00:03:44.420" video="mainVideo-world" id="subtitle"]]
-[[!template new="1" text="""SVG Symbols library""" start="00:03:46.400" video="mainVideo-world" id="subtitle"]]
-
-[[!template text="""Hello. In this video, we will draw""" start="00:03:46.400" video="mainVideo-world" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""SVG Symbols library""" start="00:03:46.400" video="mainVideo-world" id="subtitle"]]</div>[[!template text="""Hello. In this video, we will draw""" start="00:03:46.400" video="mainVideo-world" id="subtitle"]]
[[!template text="""schematics using symbols from SVG library in Emacs.""" start="00:03:48.333" video="mainVideo-world" id="subtitle"]]
[[!template text="""Press capital L to activate the symbol library""" start="00:03:52.067" video="mainVideo-world" id="subtitle"]]
[[!template text="""that you can see on the right hand side,""" start="00:03:55.000" video="mainVideo-world" id="subtitle"]]
@@ -71,9 +66,7 @@
[[!template text="""Let's connect other symbols too.""" start="00:05:00.033" video="mainVideo-world" id="subtitle"]]
[[!template text="""That's all for this video. Thanks.""" start="00:05:16.633" video="mainVideo-world" id="subtitle"]]
-[[!template new="1" text="""GNU Emacs: A multimedia editor""" start="00:05:20.140" video="mainVideo-world" id="subtitle"]]
-
-[[!template text="""Hello. In this video, we will look at""" start="00:05:20.140" video="mainVideo-world" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""GNU Emacs: A multimedia editor""" start="00:05:20.140" video="mainVideo-world" id="subtitle"]]</div>[[!template text="""Hello. In this video, we will look at""" start="00:05:20.140" video="mainVideo-world" id="subtitle"]]
[[!template text="""some basic multimedia editing using Emacs.""" start="00:05:22.167" video="mainVideo-world" id="subtitle"]]
[[!template text="""Let's start a media-edit session.""" start="00:05:24.933" video="mainVideo-world" id="subtitle"]]
[[!template text="""Let's open a video file.""" start="00:05:27.460" video="mainVideo-world" id="subtitle"]]
@@ -98,9 +91,7 @@
[[!template text="""video file in an external video player.""" start="00:07:21.900" video="mainVideo-world" id="subtitle"]]
[[!template text="""That's all for this video. Thanks.""" start="00:07:57.160" video="mainVideo-world" id="subtitle"]]
-[[!template new="1" text="""Fill PDF form using GNU Emacs""" start="00:08:03.367" video="mainVideo-world" id="subtitle"]]
-
-[[!template text="""Hello. In this video, we will look at""" start="00:08:03.367" video="mainVideo-world" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Fill PDF form using GNU Emacs""" start="00:08:03.367" video="mainVideo-world" id="subtitle"]]</div>[[!template text="""Hello. In this video, we will look at""" start="00:08:03.367" video="mainVideo-world" id="subtitle"]]
[[!template text="""editing a PDF form using GNU Emacs.""" start="00:08:05.567" video="mainVideo-world" id="subtitle"]]
[[!template text="""To start, we have to enable the annotation.""" start="00:08:09.760" video="mainVideo-world" id="subtitle"]]
[[!template text="""Then we can use Tab to move forward and Shift+Tab""" start="00:08:13.840" video="mainVideo-world" id="subtitle"]]
@@ -124,9 +115,7 @@
[[!template text="""You have city, France and Driving License selected.""" start="00:09:29.100" video="mainVideo-world" id="subtitle"]]
[[!template text="""That's all for this video. Thanks.""" start="00:09:32.620" video="mainVideo-world" id="subtitle"]]
-[[!template new="1" text="""Desktop and window management in GNU Emacs""" start="00:09:34.900" video="mainVideo-world" id="subtitle"]]
-
-[[!template text="""Hello. In this video, we will look at""" start="00:09:34.900" video="mainVideo-world" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Desktop and window management in GNU Emacs""" start="00:09:34.900" video="mainVideo-world" id="subtitle"]]</div>[[!template text="""Hello. In this video, we will look at""" start="00:09:34.900" video="mainVideo-world" id="subtitle"]]
[[!template text="""desktop and window management in GNU Emacs.""" start="00:09:37.660" video="mainVideo-world" id="subtitle"]]
[[!template text="""We'll start with `task-view`.""" start="00:09:40.460" video="mainVideo-world" id="subtitle"]]
[[!template text="""Top row shows all the desktops,""" start="00:09:47.740" video="mainVideo-world" id="subtitle"]]
@@ -145,9 +134,7 @@
[[!template text="""in this group to activate the complete group.""" start="00:11:04.867" video="mainVideo-world" id="subtitle"]]
[[!template text="""That's all for this video. Thanks.""" start="00:11:07.640" video="mainVideo-world" id="subtitle"]]
-[[!template new="1" text="""Screen mirroring in GNU Emacs""" start="00:11:10.440" video="mainVideo-world" id="subtitle"]]
-
-[[!template text="""Hello. In this video, we will look at""" start="00:11:10.440" video="mainVideo-world" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Screen mirroring in GNU Emacs""" start="00:11:10.440" video="mainVideo-world" id="subtitle"]]</div>[[!template text="""Hello. In this video, we will look at""" start="00:11:10.440" video="mainVideo-world" id="subtitle"]]
[[!template text="""screen mirroring using GNU Emacs.""" start="00:11:12.433" video="mainVideo-world" id="subtitle"]]
[[!template text="""Run `wfd`. Select an interface.""" start="00:11:14.280" video="mainVideo-world" id="subtitle"]]
[[!template text="""Now it will scan for all the available devices""" start="00:11:18.780" video="mainVideo-world" id="subtitle"]]
@@ -158,48 +145,30 @@
[[!template text="""To terminate the session, just click on quit.""" start="00:11:45.140" video="mainVideo-world" id="subtitle"]]
[[!template text="""That's all for this video. Thanks.""" start="00:11:50.220" video="mainVideo-world" id="subtitle"]]
-[[!template new="1" text="""Swipe for Text Input in GNU Emacs""" start="00:11:53.033" video="mainVideo-world" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Swipe for Text Input in GNU Emacs""" start="00:11:53.033" video="mainVideo-world" id="subtitle"]]</div>[[!template text="""[Using Sweep to swipe and type &quot;as you like it.&quot;]""" start="00:11:53.033" video="mainVideo-world" id="subtitle"]]
-[[!template text="""[Using Sweep to swipe and type &quot;as you like it.&quot;]""" start="00:11:53.033" video="mainVideo-world" id="subtitle"]]
-
-[[!template new="1" text="""Formula Editor in GNU Emacs""" start="00:12:25.533" video="mainVideo-world" id="subtitle"]]
-
-[[!template text="""[Formula Editor]""" start="00:12:25.533" video="mainVideo-world" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Formula Editor in GNU Emacs""" start="00:12:25.533" video="mainVideo-world" id="subtitle"]]</div>[[!template text="""[Formula Editor]""" start="00:12:25.533" video="mainVideo-world" id="subtitle"]]
[[!template text="""[Typing fractions in the formula]""" start="00:12:39.900" video="mainVideo-world" id="subtitle"]]
[[!template text="""[Adding brackets and an exponent]""" start="00:12:45.033" video="mainVideo-world" id="subtitle"]]
-[[!template new="1" text="""Transliteration in Emacs""" start="00:12:59.433" video="mainVideo-world" id="subtitle"]]
-
-[[!template text="""[Hindi (Devanagari script) Phonetic typing]""" start="00:12:59.433" video="mainVideo-world" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Transliteration in Emacs""" start="00:12:59.433" video="mainVideo-world" id="subtitle"]]</div>[[!template text="""[Hindi (Devanagari script) Phonetic typing]""" start="00:12:59.433" video="mainVideo-world" id="subtitle"]]
[[!template text="""[Phonetic typing Gujarati, Bangla, Kannada, and Tamil]""" start="00:13:05.200" video="mainVideo-world" id="subtitle"]]
-[[!template new="1" text="""Social Media client - Tumblr, Reddit""" start="00:13:09.433" video="mainVideo-world" id="subtitle"]]
-
-[[!template text="""[Browsing Reddit in Emacs]""" start="00:13:09.433" video="mainVideo-world" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Social Media client - Tumblr, Reddit""" start="00:13:09.433" video="mainVideo-world" id="subtitle"]]</div>[[!template text="""[Browsing Reddit in Emacs]""" start="00:13:09.433" video="mainVideo-world" id="subtitle"]]
[[!template text="""[Browsing Tumblr in Emacs]""" start="00:13:19.533" video="mainVideo-world" id="subtitle"]]
[[!template text="""[Browsing X (Twitter) in Emacs]""" start="00:13:29.533" video="mainVideo-world" id="subtitle"]]
-[[!template new="1" text="""Comics Builder""" start="00:13:40.000" video="mainVideo-world" id="subtitle"]]
-
-[[!template text="""[Generating comic from a text script]""" start="00:13:40.000" video="mainVideo-world" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Comics Builder""" start="00:13:40.000" video="mainVideo-world" id="subtitle"]]</div>[[!template text="""[Generating comic from a text script]""" start="00:13:40.000" video="mainVideo-world" id="subtitle"]]
-[[!template new="1" text="""Matching game""" start="00:13:49.567" video="mainVideo-world" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Matching game""" start="00:13:49.567" video="mainVideo-world" id="subtitle"]]</div>[[!template text="""[Matching color names with color boxes]""" start="00:13:49.567" video="mainVideo-world" id="subtitle"]]
-[[!template text="""[Matching color names with color boxes]""" start="00:13:49.567" video="mainVideo-world" id="subtitle"]]
-
-[[!template new="1" text="""Interactive XPath Builder in GNU Emacs""" start="00:13:59.567" video="mainVideo-world" id="subtitle"]]
-
-[[!template text="""[Running `xpath-builder` on an XML file]""" start="00:13:59.567" video="mainVideo-world" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Interactive XPath Builder in GNU Emacs""" start="00:13:59.567" video="mainVideo-world" id="subtitle"]]</div>[[!template text="""[Running `xpath-builder` on an XML file]""" start="00:13:59.567" video="mainVideo-world" id="subtitle"]]
[[!template text="""[Filtering `title`, `para`, and `author` from the XML]""" start="00:14:01.833" video="mainVideo-world" id="subtitle"]]
-[[!template new="1" text="""Interactive JSON Builder in GNU Emacs""" start="00:14:10.767" video="mainVideo-world" id="subtitle"]]
-
-[[!template text="""[Filtering `father`, `father.name`, `children`""" start="00:14:10.767" video="mainVideo-world" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Interactive JSON Builder in GNU Emacs""" start="00:14:10.767" video="mainVideo-world" id="subtitle"]]</div>[[!template text="""[Filtering `father`, `father.name`, `children`""" start="00:14:10.767" video="mainVideo-world" id="subtitle"]]
[[!template text="""`children[1]` from a JSON using JSON Builder]""" start="00:14:29.200" video="mainVideo-world" id="subtitle"]]
-[[!template new="1" text="""GNU Emacs as a lightweight IDE (CEDET Semantic): Java - Generate getter/setter""" start="00:14:35.233" video="mainVideo-world" id="subtitle"]]
-
-[[!template text="""Hello. In this video, we will look at""" start="00:14:35.233" video="mainVideo-world" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""GNU Emacs as a lightweight IDE (CEDET Semantic): Java - Generate getter/setter""" start="00:14:35.233" video="mainVideo-world" id="subtitle"]]</div>[[!template text="""Hello. In this video, we will look at""" start="00:14:35.233" video="mainVideo-world" id="subtitle"]]
[[!template text="""generating getters and setters in Java using Emacs.""" start="00:14:37.633" video="mainVideo-world" id="subtitle"]]
[[!template text="""We will run `srecode-getset-dialog`.""" start="00:14:41.660" video="mainVideo-world" id="subtitle"]]
[[!template text="""We will get an option to select particular fields,""" start="00:14:46.233" video="mainVideo-world" id="subtitle"]]
@@ -215,13 +184,9 @@
[[!template text="""getters and setters have been generated.""" start="00:15:22.300" video="mainVideo-world" id="subtitle"]]
[[!template text="""That's all for this video. Thanks.""" start="00:15:23.933" video="mainVideo-world" id="subtitle"]]
-[[!template new="1" text="""Generate C header""" start="00:15:26.133" video="mainVideo-world" id="subtitle"]]
-
-[[!template text="""[Generating C headers using `srecode-gen-header`]""" start="00:15:26.133" video="mainVideo-world" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Generate C header""" start="00:15:26.133" video="mainVideo-world" id="subtitle"]]</div>[[!template text="""[Generating C headers using `srecode-gen-header`]""" start="00:15:26.133" video="mainVideo-world" id="subtitle"]]
-[[!template new="1" text="""C Rename symbols""" start="00:16:11.640" video="mainVideo-world" id="subtitle"]]
-
-[[!template text="""Hello. In this video, we will look at""" start="00:16:11.640" video="mainVideo-world" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""C Rename symbols""" start="00:16:11.640" video="mainVideo-world" id="subtitle"]]</div>[[!template text="""Hello. In this video, we will look at""" start="00:16:11.640" video="mainVideo-world" id="subtitle"]]
[[!template text="""renaming method across multiple files in a project.""" start="00:16:13.833" video="mainVideo-world" id="subtitle"]]
[[!template text="""Let's start with `semantic-symref-symbol`.""" start="00:16:17.633" video="mainVideo-world" id="subtitle"]]
[[!template text="""Now we have the references.""" start="00:16:24.640" video="mainVideo-world" id="subtitle"]]
@@ -234,9 +199,7 @@
[[!template text="""more clearly. No errors.""" start="00:17:00.300" video="mainVideo-world" id="subtitle"]]
[[!template text="""That's all for this video. Thanks.""" start="00:17:04.167" video="mainVideo-world" id="subtitle"]]
-[[!template new="1" text="""SQL (offline)""" start="00:17:07.640" video="mainVideo-world" id="subtitle"]]
-
-[[!template text="""Hello. In this video, we will look at""" start="00:17:07.640" video="mainVideo-world" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""SQL (offline)""" start="00:17:07.640" video="mainVideo-world" id="subtitle"]]</div>[[!template text="""Hello. In this video, we will look at""" start="00:17:07.640" video="mainVideo-world" id="subtitle"]]
[[!template text="""SQL editing with Semantic.""" start="00:17:09.733" video="mainVideo-world" id="subtitle"]]
[[!template text="""We will define a schema in this SQL document.""" start="00:17:12.440" video="mainVideo-world" id="subtitle"]]
[[!template text="""Let's create a table.""" start="00:17:16.620" video="mainVideo-world" id="subtitle"]]
@@ -263,118 +226,10 @@
[[!template text="""That's all for this video. Thanks.""" start="00:20:16.267" video="mainVideo-world" id="subtitle"]]
[[!template text="""Slide with the text &quot;Let's Make Computing Personal.&quot;""" start="00:20:21.867" video="mainVideo-world" id="subtitle"]]
-
+</div>
Captioner: bhavin192
-<a name="world-qanda-transcript"></a>
-# Q&A transcript (unedited)
-
-[[!template text="""[Speaker 0]: Okay, folks. Thanks, Anand,""" start="00:00:07.120" video="qanda-world" id="subtitle"]]
-[[!template text="""for the great talk. So here is the live Q&A.""" start="00:00:11.259" video="qanda-world" id="subtitle"]]
-[[!template text="""Hi. Hello. I see questions being posted on""" start="00:00:22.279" video="qanda-world" id="subtitle"]]
-[[!template text="""the pad. Would you like me to read them out""" start="00:00:23.920" video="qanda-world" id="subtitle"]]
-[[!template text="""or would you prefer to read them yourself?""" start="00:00:25.320" video="qanda-world" id="subtitle"]]
-[[!template text="""[Speaker 1]: Okay. I'll try reading it out.""" start="00:00:31.880" video="qanda-world" id="subtitle"]]
-[[!template text="""If there are audio issues,""" start="00:00:33.340" video="qanda-world" id="subtitle"]]
-[[!template text="""[Speaker 0]: Sure, thanks.""" start="00:00:35.420" video="qanda-world" id="subtitle"]]
-[[!template text="""[Speaker 1]: just let me know. A lot of what you showed""" start="00:00:37.360" video="qanda-world" id="subtitle"]]
-[[!template text="""was the type of stuff Emacs didn't do very""" start="00:00:39.960" video="qanda-world" id="subtitle"]]
-[[!template text="""well. This stuff looks like it could be""" start="00:00:43.040" video="qanda-world" id="subtitle"]]
-[[!template text="""useful for using Emacs with a touch screen""" start="00:00:45.020" video="qanda-world" id="subtitle"]]
-[[!template text="""and a tablet. Have you used it for purposes""" start="00:00:46.960" video="qanda-world" id="subtitle"]]
-[[!template text="""like this? No right now it's more proof of""" start="00:00:53.160" video="qanda-world" id="subtitle"]]
-[[!template text="""concept stage so I don't use it more than you""" start="00:00:58.580" video="qanda-world" id="subtitle"]]
-[[!template text="""know just making some demo software.""" start="00:01:03.420" video="qanda-world" id="subtitle"]]
-[[!template text="""The next question is, is there a mode for""" start="00:01:12.100" video="qanda-world" id="subtitle"]]
-[[!template text="""using FFmpeg through Emacs or did you make it""" start="00:01:15.080" video="qanda-world" id="subtitle"]]
-[[!template text="""yourself? Okay so this is something that I""" start="00:01:20.160" video="qanda-world" id="subtitle"]]
-[[!template text="""built. So the base of it is XWidget in Emacs,""" start="00:01:26.800" video="qanda-world" id="subtitle"]]
-[[!template text="""which is already there.""" start="00:01:28.160" video="qanda-world" id="subtitle"]]
-[[!template text="""But then I had to add a few control code for""" start="00:01:35.080" video="qanda-world" id="subtitle"]]
-[[!template text="""controlling VLC. So ffmpeg is like a shell""" start="00:01:42.240" video="qanda-world" id="subtitle"]]
-[[!template text="""command that finally stitches those bits of""" start="00:01:46.840" video="qanda-world" id="subtitle"]]
-[[!template text="""video clips. But what actually plays is VLC,""" start="00:01:51.780" video="qanda-world" id="subtitle"]]
-[[!template text="""and it's not FFmpeg. Hope that's clear.""" start="00:01:55.860" video="qanda-world" id="subtitle"]]
-[[!template text="""The next question is these demos are always""" start="00:02:03.580" video="qanda-world" id="subtitle"]]
-[[!template text="""so impressive. Do you plan to upstream any of""" start="00:02:06.020" video="qanda-world" id="subtitle"]]
-[[!template text="""these projects into Emacs?""" start="00:02:07.040" video="qanda-world" id="subtitle"]]
-[[!template text="""Right now, okay, let me read the complete""" start="00:02:13.940" video="qanda-world" id="subtitle"]]
-[[!template text="""questions. These demos are always so""" start="00:02:16.220" video="qanda-world" id="subtitle"]]
-[[!template text="""impressive. Do you plan to upstream any of""" start="00:02:17.960" video="qanda-world" id="subtitle"]]
-[[!template text="""these projects into Emacs or to publish them""" start="00:02:19.960" video="qanda-world" id="subtitle"]]
-[[!template text="""as, for example, helper packages?""" start="00:02:21.780" video="qanda-world" id="subtitle"]]
-[[!template text="""So right now, as it stands,""" start="00:02:26.480" video="qanda-world" id="subtitle"]]
-[[!template text="""I personally don't intend to do that because""" start="00:02:30.720" video="qanda-world" id="subtitle"]]
-[[!template text="""I don't have that time but I have signed my""" start="00:02:34.900" video="qanda-world" id="subtitle"]]
-[[!template text="""signed assignment copyright assignment so""" start="00:02:38.720" video="qanda-world" id="subtitle"]]
-[[!template text="""anybody has time and motivation to do it they""" start="00:02:41.600" video="qanda-world" id="subtitle"]]
-[[!template text="""can pick up the code and help me with that.""" start="00:02:47.120" video="qanda-world" id="subtitle"]]
-[[!template text="""The next is, how did you make that electronic""" start="00:02:53.200" video="qanda-world" id="subtitle"]]
-[[!template text="""circuit diagram? Is there a mode with the""" start="00:03:00.600" video="qanda-world" id="subtitle"]]
-[[!template text="""symbols already available.""" start="00:03:02.560" video="qanda-world" id="subtitle"]]
-[[!template text="""Okay so electronic circuit diagram is you""" start="00:03:08.240" video="qanda-world" id="subtitle"]]
-[[!template text="""know the canvas mode but and what you see is""" start="00:03:13.340" video="qanda-world" id="subtitle"]]
-[[!template text="""the is an extension of that canvas mode which""" start="00:03:19.540" video="qanda-world" id="subtitle"]]
-[[!template text="""uses a symbol library.""" start="00:03:25.440" video="qanda-world" id="subtitle"]]
-[[!template text="""And so The only difference is you press""" start="00:03:31.980" video="qanda-world" id="subtitle"]]
-[[!template text="""capital L to open up that symbol library.""" start="00:03:34.160" video="qanda-world" id="subtitle"]]
-[[!template text="""In this case, this symbol library happens to""" start="00:03:37.700" video="qanda-world" id="subtitle"]]
-[[!template text="""be just a library of electronic symbols.""" start="00:03:41.380" video="qanda-world" id="subtitle"]]
-[[!template text="""It can be any category of symbols and then""" start="00:03:44.640" video="qanda-world" id="subtitle"]]
-[[!template text="""you and use it to draw on your,""" start="00:03:47.600" video="qanda-world" id="subtitle"]]
-[[!template text="""in the canvas major mode.""" start="00:03:50.640" video="qanda-world" id="subtitle"]]
-[[!template text="""Next question is, I have seen your blog post""" start="00:04:02.240" video="qanda-world" id="subtitle"]]
-[[!template text="""with some of these features But can you link""" start="00:04:04.700" video="qanda-world" id="subtitle"]]
-[[!template text="""to the repo where you are doing the""" start="00:04:06.280" video="qanda-world" id="subtitle"]]
-[[!template text="""development for these packages?""" start="00:04:07.940" video="qanda-world" id="subtitle"]]
-[[!template text="""Sure, I can do that Most of these are""" start="00:04:18.899" video="qanda-world" id="subtitle"]]
-[[!template text="""available on my blogs.""" start="00:04:20.279" video="qanda-world" id="subtitle"]]
-[[!template text="""Typically the Reddit post always has a link""" start="00:04:26.200" video="qanda-world" id="subtitle"]]
-[[!template text="""to my blog. But I'll post it in this 1 as""" start="00:04:31.480" video="qanda-world" id="subtitle"]]
-[[!template text="""well.""" start="00:04:31.680" video="qanda-world" id="subtitle"]]
-[[!template text="""[Speaker 0]: I'll quickly note that we have about 4 more""" start="00:04:48.480" video="qanda-world" id="subtitle"]]
-[[!template text="""minutes of live Q&A, but if folks have more""" start="00:04:52.540" video="qanda-world" id="subtitle"]]
-[[!template text="""questions, they're welcome to either continue""" start="00:04:55.320" video="qanda-world" id="subtitle"]]
-[[!template text="""asking on the pad or come join us here on Big""" start="00:04:59.060" video="qanda-world" id="subtitle"]]
-[[!template text="""Blue Button and continue chatting once the""" start="00:05:02.080" video="qanda-world" id="subtitle"]]
-[[!template text="""stream moves on to the next talk.""" start="00:05:03.440" video="qanda-world" id="subtitle"]]
-[[!template text="""Thank you.""" start="00:05:03.940" video="qanda-world" id="subtitle"]]
-[[!template text="""[Speaker 1]: Yes, so here's the link.""" start="00:05:13.360" video="qanda-world" id="subtitle"]]
-[[!template text="""And so right now, all of my development goes""" start="00:05:23.240" video="qanda-world" id="subtitle"]]
-[[!template text="""into a single development branch in this""" start="00:05:26.360" video="qanda-world" id="subtitle"]]
-[[!template text="""repository. But depending on the feature that""" start="00:05:28.940" video="qanda-world" id="subtitle"]]
-[[!template text="""you're looking at, you can look at that""" start="00:05:31.500" video="qanda-world" id="subtitle"]]
-[[!template text="""particular post and that post will have a""" start="00:05:33.820" video="qanda-world" id="subtitle"]]
-[[!template text="""link to the specific files that include the""" start="00:05:37.120" video="qanda-world" id="subtitle"]]
-[[!template text="""changes.""" start="00:05:37.320" video="qanda-world" id="subtitle"]]
-[[!template text="""Okay, there's a feedback.""" start="00:06:24.236" video="qanda-world" id="subtitle"]]
-[[!template text="""Thank you for showing so many new""" start="00:06:26.520" video="qanda-world" id="subtitle"]]
-[[!template text="""possibilities with Emacs.""" start="00:06:27.500" video="qanda-world" id="subtitle"]]
-[[!template text="""I'm glad you like those possibilities.""" start="00:06:30.960" video="qanda-world" id="subtitle"]]
-[[!template text="""And hopefully, you know,""" start="00:06:32.540" video="qanda-world" id="subtitle"]]
-[[!template text="""with Emacs, the possibilities are really""" start="00:06:34.540" video="qanda-world" id="subtitle"]]
-[[!template text="""endless. So I really encourage more people to""" start="00:06:38.480" video="qanda-world" id="subtitle"]]
-[[!template text="""explore it and, you know,""" start="00:06:41.120" video="qanda-world" id="subtitle"]]
-[[!template text="""try things that people have so far only been""" start="00:06:49.280" video="qanda-world" id="subtitle"]]
-[[!template text="""using other applications for.""" start="00:06:52.160" video="qanda-world" id="subtitle"]]
-[[!template text="""The next question is coming up.""" start="00:06:59.580" video="qanda-world" id="subtitle"]]
-[[!template text="""Okay, the PDF form filling is especially""" start="00:07:07.540" video="qanda-world" id="subtitle"]]
-[[!template text="""interesting. I would love to do my taxes in""" start="00:07:10.200" video="qanda-world" id="subtitle"]]
-[[!template text="""Emacs. Yes, In most cases you should be able""" start="00:07:16.400" video="qanda-world" id="subtitle"]]
-[[!template text="""to do it unless there are a lot of JavaScript""" start="00:07:18.900" video="qanda-world" id="subtitle"]]
-[[!template text="""involved with the PDF.""" start="00:07:20.500" video="qanda-world" id="subtitle"]]
-[[!template text="""For a simple form, you should be able to do""" start="00:07:24.800" video="qanda-world" id="subtitle"]]
-[[!template text="""it.""" start="00:07:24.960" video="qanda-world" id="subtitle"]]
-[[!template text="""[Speaker 0]: Okay, we have about 1 minute remaining on the""" start="00:08:19.480" video="qanda-world" id="subtitle"]]
-[[!template text="""live stream. If folks have any other""" start="00:08:21.660" video="qanda-world" id="subtitle"]]
-[[!template text="""questions, please do continue posting on the""" start="00:08:24.960" video="qanda-world" id="subtitle"]]
-[[!template text="""pad or come and join BigBlueButton with an""" start="00:08:27.540" video="qanda-world" id="subtitle"]]
-[[!template text="""ad. And thanks again, Adam,""" start="00:08:28.940" video="qanda-world" id="subtitle"]]
-[[!template text="""for a great talk and for the discussions and""" start="00:08:30.880" video="qanda-world" id="subtitle"]]
-[[!template text="""questions and answers.""" start="00:08:31.560" video="qanda-world" id="subtitle"]]
-[[!template text="""[Speaker 1]: Great, thanks.""" start="00:08:36.100" video="qanda-world" id="subtitle"]]
-
Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202023%20world%3A%20GNU%20Emacs%3A%20A%20World%20of%20Possibilities)
diff --git a/2023/info/world-before.md b/2023/info/world-before.md
index 3b34d3bb..457218f3 100644
--- a/2023/info/world-before.md
+++ b/2023/info/world-before.md
@@ -1,14 +1,14 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
[[!toc ]]
-Format: 21-min talk; Q&A: BigBlueButton conference room
+Format: 21-min talk ; Q&A: BigBlueButton conference room
Status: Q&A to be extracted from the room recordings
-<div class="vid"><video controls preload="none" id="world-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="world-mainVideo" data="""
-00:00:00.780 Draw and scribble in GNU Emacs
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-world"><source src="https://media.emacsconf.org/2023/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="mainVideo-world" data="""
+00:00.780 Draw and scribble in GNU Emacs
03:46.400 SVG Symbols library
05:20.140 GNU Emacs: A multimedia editor
08:03.367 Fill PDF form using GNU Emacs
@@ -27,6 +27,6 @@ Status: Q&A to be extracted from the room recordings
16:11.640 C Rename symbols
17:07.640 SQL (offline)
-"""]]<div></div>Duration: 20:31 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--main.opus">Download --main.opus (9.3MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--main.webm">Download --main.webm (66MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--pad.md">Download --pad.md</a></li><li><a href="https://toobnix.org/w/jFaSuNYt2FqibtcAvmVdbF">View on Toobnix</a></li></ul></div></div>
+"""]]<div></div>Duration: 20:31 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2023-world">Open Etherpad</a></li><li><a href="https://bbb.emacsverse.org/playback/presentation/2.0/playback.html?meetingId=573c5a7321e144f6cd67763c21ed7aea8f1c1497-1701617014361">Play recording from BigBlueButton</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--main.opus">Download --main.opus (9.3MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--main.webm">Download --main.webm (66MB)</a></li><li><a href="https://toobnix.org/w/jFaSuNYt2FqibtcAvmVdbF">View on Toobnix</a></li><li><a href="https://www.youtube.com/watch?v=T5yZZK18w5w">View on Youtube</a></li></ul></div></div>
# Description
<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/info/world-nav.md b/2023/info/world-nav.md
index 0c9d9fb1..6dd1afa3 100644
--- a/2023/info/world-nav.md
+++ b/2023/info/world-nav.md
@@ -3,5 +3,5 @@
Back to the [[talks]]
Previous by track: <a href="/2023/talks/scheme">Bringing joy to Scheme programming</a>
Next by track: <a href="/2023/talks/flat">A modern Emacs look-and-feel without pain</a>
-Track: <span class="sched-track Development">Development</span>
+Track: <span class="sched-track Development">Development</span> - <strong><a href="https://emacsconf.org/2023/watch/dev">Watch</a></strong>
</div>
diff --git a/2023/info/writing-after.md b/2023/info/writing-after.md
index 1523f77d..074ffac6 100644
--- a/2023/info/writing-after.md
+++ b/2023/info/writing-after.md
@@ -1,13 +1,10 @@
<!-- Automatically generated by emacsconf-publish-after-page -->
-<a name="writing-mainVideo-transcript"></a>
-# Transcript
+<div class="transcript transcript-mainVideo"><a name="writing-mainVideo-transcript"></a><h1>Transcript</h1>
-[[!template new="1" text="""Intro""" start="00:00:00.000" video="mainVideo-writing" id="subtitle"]]
-
-[[!template text="""Hello everyone, I'm Jeremy Friesen, pronouns he/him,""" start="00:00:00.000" video="mainVideo-writing" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Intro""" start="00:00:00.000" video="mainVideo-writing" id="subtitle"]]</div>[[!template text="""Hello everyone, I'm Jeremy Friesen, pronouns he/him,""" start="00:00:00.000" video="mainVideo-writing" id="subtitle"]]
[[!template text="""and today I'll be talking about""" start="00:00:04.560" video="mainVideo-writing" id="subtitle"]]
[[!template text="""how Emacs turbocharges my writing.""" start="00:00:05.880" video="mainVideo-writing" id="subtitle"]]
[[!template text="""Quick intro: I've been programming since 1998""" start="00:00:08.600" video="mainVideo-writing" id="subtitle"]]
@@ -26,9 +23,7 @@
[[!template text="""and I'm always on the lookout for minor refinements""" start="00:00:50.320" video="mainVideo-writing" id="subtitle"]]
[[!template text="""that help me stay in my thinking.""" start="00:00:53.320" video="mainVideo-writing" id="subtitle"]]
-[[!template new="1" text="""How I got here""" start="00:00:57.120" video="mainVideo-writing" id="subtitle"]]
-
-[[!template text="""How I got here was I started in WordPress,""" start="00:00:57.120" video="mainVideo-writing" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""How I got here""" start="00:00:57.120" video="mainVideo-writing" id="subtitle"]]</div>[[!template text="""How I got here was I started in WordPress,""" start="00:00:57.120" video="mainVideo-writing" id="subtitle"]]
[[!template text="""then I moved to Jekyll, and then to Hugo,""" start="00:00:59.240" video="mainVideo-writing" id="subtitle"]]
[[!template text="""and through that process I started writing in Markdown.""" start="00:01:02.600" video="mainVideo-writing" id="subtitle"]]
[[!template text="""And when I was learning Emacs,""" start="00:01:05.440" video="mainVideo-writing" id="subtitle"]]
@@ -37,9 +32,7 @@
[[!template text="""I later learned Org Mode grows with you,""" start="00:01:12.400" video="mainVideo-writing" id="subtitle"]]
[[!template text="""and that's where I'm at now.""" start="00:01:15.520" video="mainVideo-writing" id="subtitle"]]
-[[!template new="1" text="""Friction""" start="00:01:18.400" video="mainVideo-writing" id="subtitle"]]
-
-[[!template text="""But I didn't realize that friction""" start="00:01:18.400" video="mainVideo-writing" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Friction""" start="00:01:18.400" video="mainVideo-writing" id="subtitle"]]</div>[[!template text="""But I didn't realize that friction""" start="00:01:18.400" video="mainVideo-writing" id="subtitle"]]
[[!template text="""between writing Markdown for my public blog""" start="00:01:20.000" video="mainVideo-writing" id="subtitle"]]
[[!template text="""and then adopting Org Mode locally""" start="00:01:23.360" video="mainVideo-writing" id="subtitle"]]
[[!template text="""for writing and time tracking and things like that.""" start="00:01:25.480" video="mainVideo-writing" id="subtitle"]]
@@ -50,9 +43,7 @@
[[!template text="""this kind of pre-thinking,""" start="00:01:39.520" video="mainVideo-writing" id="subtitle"]]
[[!template text="""where does stuff go when it comes into and out of my brain.""" start="00:01:41.040" video="mainVideo-writing" id="subtitle"]]
-[[!template new="1" text="""Domains for notes""" start="00:01:45.960" video="mainVideo-writing" id="subtitle"]]
-
-[[!template text="""So I have many domains where I'll write towards.""" start="00:01:45.960" video="mainVideo-writing" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Domains for notes""" start="00:01:45.960" video="mainVideo-writing" id="subtitle"]]</div>[[!template text="""So I have many domains where I'll write towards.""" start="00:01:45.960" video="mainVideo-writing" id="subtitle"]]
[[!template text="""The ones for this presentation are going to be""" start="00:01:49.400" video="mainVideo-writing" id="subtitle"]]
[[!template text="""blog posts, epigraphs, glossary, and melange.""" start="00:01:51.120" video="mainVideo-writing" id="subtitle"]]
[[!template text="""Melange is, I don't know where it goes,""" start="00:01:54.160" video="mainVideo-writing" id="subtitle"]]
@@ -63,9 +54,7 @@
[[!template text="""I didn't use a lot of the functionality""" start="00:02:10.640" video="mainVideo-writing" id="subtitle"]]
[[!template text="""and I appreciate the plain text reality of Denote.""" start="00:02:13.200" video="mainVideo-writing" id="subtitle"]]
-[[!template new="1" text="""Demo""" start="00:02:15.920" video="mainVideo-writing" id="subtitle"]]
-
-[[!template text="""So let's hop into the demo.""" start="00:02:15.920" video="mainVideo-writing" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Demo""" start="00:02:15.920" video="mainVideo-writing" id="subtitle"]]</div>[[!template text="""So let's hop into the demo.""" start="00:02:15.920" video="mainVideo-writing" id="subtitle"]]
[[!template text="""I'm going to split my screen.""" start="00:02:18.800" video="mainVideo-writing" id="subtitle"]]
[[!template text="""Over on the right is going to be""" start="00:02:19.920" video="mainVideo-writing" id="subtitle"]]
[[!template text="""where I'm going to be live typing stuff.""" start="00:02:21.960" video="mainVideo-writing" id="subtitle"]]
@@ -82,9 +71,7 @@
[[!template text="""Great.""" start="00:02:50.800" video="mainVideo-writing" id="subtitle"]]
[[!template text="""We've saved it.""" start="00:02:51.520" video="mainVideo-writing" id="subtitle"]]
-[[!template new="1" text="""Dabbrev and hippie-expand""" start="00:02:55.440" video="mainVideo-writing" id="subtitle"]]
-
-[[!template text="""One of the things I encourage everybody to do""" start="00:02:55.440" video="mainVideo-writing" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Dabbrev and hippie-expand""" start="00:02:55.440" video="mainVideo-writing" id="subtitle"]]</div>[[!template text="""One of the things I encourage everybody to do""" start="00:02:55.440" video="mainVideo-writing" id="subtitle"]]
[[!template text="""is to watch Jay Dixit's presentation, Emacs for Writers.""" start="00:02:57.400" video="mainVideo-writing" id="subtitle"]]
[[!template text="""It showed me the utility of Dabbrev for quick auto correction.""" start="00:03:02.040" video="mainVideo-writing" id="subtitle"]]
[[!template text="""And I also love using hippie-expand.""" start="00:03:08.080" video="mainVideo-writing" id="subtitle"]]
@@ -96,9 +83,7 @@
[[!template text="""So I think it's important to understand these tools""" start="00:03:27.800" video="mainVideo-writing" id="subtitle"]]
[[!template text="""that help me write better.""" start="00:03:30.720" video="mainVideo-writing" id="subtitle"]]
-[[!template new="1" text="""Links""" start="00:03:32.840" video="mainVideo-writing" id="subtitle"]]
-
-[[!template text="""All right, we're going to go with links.""" start="00:03:32.840" video="mainVideo-writing" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Links""" start="00:03:32.840" video="mainVideo-writing" id="subtitle"]]</div>[[!template text="""All right, we're going to go with links.""" start="00:03:32.840" video="mainVideo-writing" id="subtitle"]]
[[!template text="""Links are foundational for the web.""" start="00:03:34.880" video="mainVideo-writing" id="subtitle"]]
[[!template text="""I'm going to insert a public link,""" start="00:03:37.000" video="mainVideo-writing" id="subtitle"]]
[[!template text="""which is a role playing game that I love,""" start="00:03:41.160" video="mainVideo-writing" id="subtitle"]]
@@ -182,9 +167,7 @@
[[!template text="""along with the citation link to it.""" start="00:07:39.400" video="mainVideo-writing" id="subtitle"]]
[[!template text="""Again, helpful to be consistent.""" start="00:07:42.600" video="mainVideo-writing" id="subtitle"]]
-[[!template new="1" text="""Conclusion""" start="00:07:49.160" video="mainVideo-writing" id="subtitle"]]
-
-[[!template text="""In conclusion, when I started learning Emacs,""" start="00:07:49.160" video="mainVideo-writing" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Conclusion""" start="00:07:49.160" video="mainVideo-writing" id="subtitle"]]</div>[[!template text="""In conclusion, when I started learning Emacs,""" start="00:07:49.160" video="mainVideo-writing" id="subtitle"]]
[[!template text="""I quickly shifted to vanilla Emacs and just started writing.""" start="00:07:52.280" video="mainVideo-writing" id="subtitle"]]
[[!template text="""As I wrote, when I needed to do something that I'd previously""" start="00:07:55.880" video="mainVideo-writing" id="subtitle"]]
[[!template text="""done in a text editor, I'd find an experiment with a package.""" start="00:07:59.520" video="mainVideo-writing" id="subtitle"]]
@@ -209,12 +192,11 @@
[[!template text="""But for now, thank you.""" start="00:08:45.440" video="mainVideo-writing" id="subtitle"]]
[[!template text="""And I look forward to your questions.""" start="00:08:47.800" video="mainVideo-writing" id="subtitle"]]
-
+</div>
Captioner: bala
-<a name="writing-qanda-transcript"></a>
-# Q&A transcript (unedited)
+<div class="transcript transcript-qanda"><a name="writing-qanda-transcript"></a><h1>Q&A transcript (unedited)</h1>
[[!template text="""[Speaker 0]: All right, I've started the recording,""" start="00:00:00.060" video="qanda-writing" id="subtitle"]]
[[!template text="""so Sasha, you don't need to worry about this.""" start="00:00:01.400" video="qanda-writing" id="subtitle"]]
@@ -514,7 +496,7 @@ Captioner: bala
[[!template text="""[Speaker 1]: We're doing great. Okay.""" start="00:15:40.440" video="qanda-writing" id="subtitle"]]
[[!template text="""[Speaker 0]: Alright, bye bye Jeremy.""" start="00:15:51.220" video="qanda-writing" id="subtitle"]]
-Questions or comments? Please e-mail [jeremy@jeremyfriesen.com](mailto:jeremy@jeremyfriesen.com?subject=Comment%20for%20EmacsConf%202023%20writing%3A%20Emacs%20turbo-charges%20my%20writing)
+</div>Questions or comments? Please e-mail [jeremy@jeremyfriesen.com](mailto:jeremy@jeremyfriesen.com?subject=Comment%20for%20EmacsConf%202023%20writing%3A%20Emacs%20turbo-charges%20my%20writing)
<!-- End of emacsconf-publish-after-page -->
diff --git a/2023/info/writing-before.md b/2023/info/writing-before.md
index e46b512f..6e01d684 100644
--- a/2023/info/writing-before.md
+++ b/2023/info/writing-before.md
@@ -1,6 +1,6 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
[[!toc ]]
-Format: 9-min talk; Q&A: BigBlueButton conference room
+Format: 9-min talk ; Q&A: BigBlueButton conference room
Status: Q&A to be extracted from the room recordings
@@ -9,7 +9,7 @@ Status: Q&A to be extracted from the room recordings
# Talk
-<div class="vid"><video controls preload="none" id="writing-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="writing-mainVideo" data="""
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-writing"><source src="https://media.emacsconf.org/2023/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="mainVideo-writing" data="""
00:00.000 Intro
00:57.120 How I got here
01:18.400 Friction
@@ -19,10 +19,10 @@ Status: Q&A to be extracted from the room recordings
03:32.840 Links
07:49.160 Conclusion
-"""]]<div></div>Duration: 08:53 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--main.opus">Download --main.opus (5.5MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--main.webm">Download --main.webm (23MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--pad.md">Download --pad.md</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen.pdf">Download .pdf</a></li><li><a href="https://toobnix.org/w/ke3UCJaJSLyQr7Emv8VxST">View on Toobnix</a></li></ul></div></div>
+"""]]<div></div>Duration: 08:53 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2023-writing">Open Etherpad</a></li><li><a href="https://bbb.emacsverse.org/playback/presentation/2.0/playback.html?meetingId=d3faf3bd5abcc5316e6a997b22b29d962480ad5c-1701537771543">Play recording from BigBlueButton</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--main.opus">Download --main.opus (5.5MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--main.webm">Download --main.webm (23MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen.pdf">Download .pdf</a></li><li><a href="https://toobnix.org/w/ke3UCJaJSLyQr7Emv8VxST">View on Toobnix</a></li><li><a href="https://www.youtube.com/watch?v=HxlEK6W7RyA">View on Youtube</a></li></ul></div></div>
# Q&A
-<div class="vid"><video controls preload="none" id="writing-qanda"><source src="https://media.emacsconf.org/2023/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--answers.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div>Listen to just the audio:<br /><audio controls preload="none" id="writing-qanda-audio" src="https://media.emacsconf.org/2023/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--answers.opus"></audio></div><div></div>Duration: 15:53 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--answers.json">Download --answers.json</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--answers.opus">Download --answers.opus (9.4MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--answers.webm">Download --answers.webm (35MB)</a></li></ul></div></div>
+<div class="vid qanda"><video controls preload="none" id="qanda-writing"><source src="https://media.emacsconf.org/2023/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--answers.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div>Listen to just the audio:<br /><audio controls preload="none" id="qanda-writing-audio" src="https://media.emacsconf.org/2023/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--answers.opus"></audio></div><div></div>Duration: 15:53 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2023-writing">Open Etherpad</a></li><li><a href="https://bbb.emacsverse.org/playback/presentation/2.0/playback.html?meetingId=d3faf3bd5abcc5316e6a997b22b29d962480ad5c-1701537771543">Play recording from BigBlueButton</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--answers.json">Download --answers.json</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--answers.opus">Download --answers.opus (9.4MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--answers.webm">Download --answers.webm (35MB)</a></li></ul></div></div>
# Description
<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2023/info/writing-nav.md b/2023/info/writing-nav.md
index fa3bdae7..1c94a3c6 100644
--- a/2023/info/writing-nav.md
+++ b/2023/info/writing-nav.md
@@ -3,5 +3,5 @@
Back to the [[talks]]
Previous by track: <a href="/2023/talks/one">one.el: the static site generator for Emacs Lisp Programmers</a>
Next by track: <a href="/2023/talks/nabokov">Why Nabokov would use Org-Mode if he were writing today</a>
-Track: <span class="sched-track General">General</span>
+Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2023/watch/gen">Watch</a></strong>
</div>
diff --git a/2023/schedule-2023-12-02.md b/2023/schedule-2023-12-02.md
index a64bad6a..52b3d6cd 100644
--- a/2023/schedule-2023-12-02.md
+++ b/2023/schedule-2023-12-02.md
@@ -1 +1 @@
-<div class="schedule-svg-container"><svg width="800" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Schedule for Saturday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="/2023/talks/sat-open" title="Saturday opening remarks" data-slug="sat-open"> <title> 9:00- 9:10 Saturday opening remarks</title> <rect x="0" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(13,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="/2023/talks/adventure" title="An Org-Mode based text adventure game for learning the basics of Emacs, inside Emacs, written in Emacs Lisp" data-slug="adventure"> <title> 9:10- 9:20 An Org-Mode based text adventure game for learning the basics of Emacs, inside Emacs, written in Emacs Lisp</title> <rect x="15" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(28,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> adventure</text></g></a> <a href="/2023/talks/uni" title="Authoring and presenting university courses with Emacs and a full libre software stack" data-slug="uni"> <title> 9:30- 9:50 Authoring and presenting university courses with Emacs and a full libre software stack</title> <rect x="47" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(76,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> uni</text></g></a> <a href="/2023/talks/teaching" title="Teaching computer and data science with literate programming tools" data-slug="teaching"> <title> 10:05-10:25 Teaching computer and data science with literate programming tools</title> <rect x="101" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(130,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> teaching</text></g></a> <a href="/2023/talks/table" title="Who needs Excel? Managing your students qualifications with org-table" data-slug="table"> <title> 10:40-10:50 Who needs Excel? Managing your students qualifications with org-table</title> <rect x="156" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(169,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> table</text></g></a> <a href="/2023/talks/one" title="one.el: the static site generator for Emacs Lisp Programmers" data-slug="one"> <title> 11:30-11:50 one.el: the static site generator for Emacs Lisp Programmers</title> <rect x="235" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(264,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> one</text></g></a> <a href="/2023/talks/writing" title="Emacs turbo-charges my writing" data-slug="writing"> <title> 1:00- 1:10 Emacs turbo-charges my writing</title> <rect x="376" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(389,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> writing</text></g></a> <a href="/2023/talks/nabokov" title="Why Nabokov would use Org-Mode if he were writing today" data-slug="nabokov"> <title> 1:25- 1:35 Why Nabokov would use Org-Mode if he were writing today</title> <rect x="415" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(428,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> nabokov</text></g></a> <a href="/2023/talks/collab" title="Collaborative data processing and documenting using org-babel" data-slug="collab"> <title> 1:50- 2:10 Collaborative data processing and documenting using org-babel</title> <rect x="454" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(483,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> collab</text></g></a> <a href="/2023/talks/solo" title="How I play TTRPGs in Emacs" data-slug="solo"> <title> 2:20- 2:40 How I play TTRPGs in Emacs</title> <rect x="501" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(530,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> solo</text></g></a> <a href="/2023/talks/ref" title="Org-Mode workflow: informal reference tracking" data-slug="ref"> <title> 2:55- 3:15 Org-Mode workflow: informal reference tracking</title> <rect x="556" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(585,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> ref</text></g></a> <a href="/2023/talks/unentangling" title="(Un)entangling projects and repos" data-slug="unentangling"> <title> 3:25- 3:35 (Un)entangling projects and repos</title> <rect x="603" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(616,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> unentangling</text></g></a> <a href="/2023/talks/devel" title="Emacs development updates" data-slug="devel"> <title> 3:45- 3:55 Emacs development updates</title> <rect x="635" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(648,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> devel</text></g></a> <a href="/2023/talks/core" title="Emacs core development: how it works" data-slug="core"> <title> 4:10- 4:50 Emacs core development: how it works</title> <rect x="674" y="15" opacity="0.8" width="62" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(734,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> core</text></g></a> <a href="/2023/talks/sat-close" title="Saturday closing remarks" data-slug="sat-close"> <title> 5:05- 5:15 Saturday closing remarks</title> <rect x="760" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(773,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="/2023/talks/matplotllm" title="MatplotLLM, iterative natural language data visualization in org-babel" data-slug="matplotllm"> <title> 10:00-10:10 MatplotLLM, iterative natural language data visualization in org-babel</title> <rect x="94" y="75" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(107,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> matplotllm</text></g></a> <a href="/2023/talks/voice" title="Enhancing productivity with voice computing" data-slug="voice"> <title> 10:20-10:40 Enhancing productivity with voice computing</title> <rect x="125" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(154,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> voice</text></g></a> <a href="/2023/talks/llm" title="LLM clients in Emacs, functionality and standardization" data-slug="llm"> <title> 10:55-11:15 LLM clients in Emacs, functionality and standardization</title> <rect x="180" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(209,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> llm</text></g></a> <a href="/2023/talks/overlay" title="Improving compiler diagnostics with overlays" data-slug="overlay"> <title> 1:00- 1:20 Improving compiler diagnostics with overlays</title> <rect x="376" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(405,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> overlay</text></g></a> <a href="/2023/talks/eval" title="Editor Integrated REPL Driven Development for all languages" data-slug="eval"> <title> 1:35- 1:45 Editor Integrated REPL Driven Development for all languages</title> <rect x="431" y="75" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(444,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eval</text></g></a> <a href="/2023/talks/repl" title="REPLs in strange places: Lua, LaTeX, LPeg, LPegRex, TikZ" data-slug="repl"> <title> 2:00- 3:00 REPLs in strange places: Lua, LaTeX, LPeg, LPegRex, TikZ</title> <rect x="470" y="75" opacity="0.8" width="94" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(562,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> repl</text></g></a> <a href="/2023/talks/doc" title="Literate Documentation with Emacs and Org Mode" data-slug="doc"> <title> 3:10- 3:50 Literate Documentation with Emacs and Org Mode</title> <rect x="580" y="75" opacity="0.8" width="62" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(640,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> doc</text></g></a> <a href="/2023/talks/windows" title="Windows into Freedom" data-slug="windows"> <title> 4:05- 4:45 Windows into Freedom</title> <rect x="666" y="75" opacity="0.8" width="62" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(726,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> windows</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 5 PM</text></g></svg></div> \ No newline at end of file
+<div class="schedule-svg-container"><svg width="800" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><title>Schedule for Saturday</title><rect width="800" height="150" x="0" y="0" fill="white"></rect><text font-size="10" fill="black" y="12" x="3">Saturday</text><a href="/2023/talks/sat-open" title="Saturday opening remarks" data-slug="sat-open"><title> 9:00- 9:10 Saturday opening remarks</title><rect x="0" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(13,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">sat-open</text></g></a><a href="/2023/talks/adventure" title="An Org-Mode based text adventure game for learning the basics of Emacs, inside Emacs, written in Emacs Lisp" data-slug="adventure"><title> 9:10- 9:20 An Org-Mode based text adventure game for learning the basics of Emacs, inside Emacs, written in Emacs Lisp</title><rect x="15" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(28,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">adventure</text></g></a><a href="/2023/talks/uni" title="Authoring and presenting university courses with Emacs and a full libre software stack" data-slug="uni"><title> 9:30- 9:50 Authoring and presenting university courses with Emacs and a full libre software stack</title><rect x="47" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(76,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">uni</text></g></a><a href="/2023/talks/teaching" title="Teaching computer and data science with literate programming tools" data-slug="teaching"><title>10:05-10:25 Teaching computer and data science with literate programming tools</title><rect x="101" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(130,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">teaching</text></g></a><a href="/2023/talks/table" title="Who needs Excel? Managing your students qualifications with org-table" data-slug="table"><title>10:40-10:50 Who needs Excel? Managing your students qualifications with org-table</title><rect x="156" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(169,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">table</text></g></a><a href="/2023/talks/one" title="one.el: the static site generator for Emacs Lisp Programmers" data-slug="one"><title>11:30-11:50 one.el: the static site generator for Emacs Lisp Programmers</title><rect x="235" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(264,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">one</text></g></a><a href="/2023/talks/writing" title="Emacs turbo-charges my writing" data-slug="writing"><title> 1:00- 1:10 Emacs turbo-charges my writing</title><rect x="376" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(389,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">writing</text></g></a><a href="/2023/talks/nabokov" title="Why Nabokov would use Org-Mode if he were writing today" data-slug="nabokov"><title> 1:25- 1:35 Why Nabokov would use Org-Mode if he were writing today</title><rect x="415" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(428,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">nabokov</text></g></a><a href="/2023/talks/collab" title="Collaborative data processing and documenting using org-babel" data-slug="collab"><title> 1:50- 2:10 Collaborative data processing and documenting using org-babel</title><rect x="454" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(483,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">collab</text></g></a><a href="/2023/talks/solo" title="How I play TTRPGs in Emacs" data-slug="solo"><title> 2:20- 2:40 How I play TTRPGs in Emacs</title><rect x="501" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(530,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">solo</text></g></a><a href="/2023/talks/ref" title="Org-Mode workflow: informal reference tracking" data-slug="ref"><title> 2:55- 3:15 Org-Mode workflow: informal reference tracking</title><rect x="556" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(585,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">ref</text></g></a><a href="/2023/talks/unentangling" title="(Un)entangling projects and repos" data-slug="unentangling"><title> 3:25- 3:35 (Un)entangling projects and repos</title><rect x="603" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(616,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">unentangling</text></g></a><a href="/2023/talks/devel" title="Emacs development updates" data-slug="devel"><title> 3:45- 3:55 Emacs development updates</title><rect x="635" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(648,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">devel</text></g></a><a href="/2023/talks/core" title="Emacs core development: how it works" data-slug="core"><title> 4:10- 4:50 Emacs core development: how it works</title><rect x="674" y="15" opacity="0.8" width="62" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(734,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">core</text></g></a><a href="/2023/talks/sat-close" title="Saturday closing remarks" data-slug="sat-close"><title> 5:05- 5:15 Saturday closing remarks</title><rect x="760" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(773,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">sat-close</text></g></a><a href="/2023/talks/matplotllm" title="MatplotLLM, iterative natural language data visualization in org-babel" data-slug="matplotllm"><title>10:00-10:10 MatplotLLM, iterative natural language data visualization in org-babel</title><rect x="94" y="75" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect><g transform="translate(107,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">matplotllm</text></g></a><a href="/2023/talks/voice" title="Enhancing productivity with voice computing" data-slug="voice"><title>10:20-10:40 Enhancing productivity with voice computing</title><rect x="125" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(154,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">voice</text></g></a><a href="/2023/talks/llm" title="LLM clients in Emacs, functionality and standardization" data-slug="llm"><title>10:55-11:15 LLM clients in Emacs, functionality and standardization</title><rect x="180" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(209,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">llm</text></g></a><a href="/2023/talks/overlay" title="Improving compiler diagnostics with overlays" data-slug="overlay"><title> 1:00- 1:20 Improving compiler diagnostics with overlays</title><rect x="376" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(405,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">overlay</text></g></a><a href="/2023/talks/eval" title="Editor Integrated REPL Driven Development for all languages" data-slug="eval"><title> 1:35- 1:45 Editor Integrated REPL Driven Development for all languages</title><rect x="431" y="75" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect><g transform="translate(444,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">eval</text></g></a><a href="/2023/talks/repl" title="REPLs in strange places: Lua, LaTeX, LPeg, LPegRex, TikZ" data-slug="repl"><title> 2:00- 3:00 REPLs in strange places: Lua, LaTeX, LPeg, LPegRex, TikZ</title><rect x="470" y="75" opacity="0.8" width="94" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect><g transform="translate(562,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">repl</text></g></a><a href="/2023/talks/doc" title="Literate Documentation with Emacs and Org Mode" data-slug="doc"><title> 3:10- 3:50 Literate Documentation with Emacs and Org Mode</title><rect x="580" y="75" opacity="0.8" width="62" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(640,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">doc</text></g></a><a href="/2023/talks/windows" title="Windows into Freedom" data-slug="windows"><title> 4:05- 4:45 Windows into Freedom</title><rect x="666" y="75" opacity="0.8" width="62" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(726,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">windows</text></g></a><g transform="translate(0,15)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="133" font-size="10" text-anchor="left">9 AM</text></g><g transform="translate(94,15)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="133" font-size="10" text-anchor="left">10 AM</text></g><g transform="translate(188,15)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="133" font-size="10" text-anchor="left">11 AM</text></g><g transform="translate(282,15)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="133" font-size="10" text-anchor="left">12 PM</text></g><g transform="translate(376,15)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="133" font-size="10" text-anchor="left">1 PM</text></g><g transform="translate(470,15)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="133" font-size="10" text-anchor="left">2 PM</text></g><g transform="translate(564,15)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="133" font-size="10" text-anchor="left">3 PM</text></g><g transform="translate(658,15)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="133" font-size="10" text-anchor="left">4 PM</text></g><g transform="translate(752,15)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="133" font-size="10" text-anchor="left">5 PM</text></g></svg></div> \ No newline at end of file
diff --git a/2023/schedule-2023-12-03.md b/2023/schedule-2023-12-03.md
index eabdc939..0a24ad74 100644
--- a/2023/schedule-2023-12-03.md
+++ b/2023/schedule-2023-12-03.md
@@ -1 +1 @@
-<div class="schedule-svg-container"><svg width="800" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Schedule for Sunday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="/2023/talks/sun-open" title="Sunday opening remarks" data-slug="sun-open"> <title> 8:58- 9:04 Sunday opening remarks</title> <rect x="-4" y="15" opacity="0.8" width="9" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(3,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-open</text></g></a> <a href="/2023/talks/hyperamp" title="Top 10 ways Hyperbole amps up Emacs" data-slug="hyperamp"> <title> 9:05- 9:25 Top 10 ways Hyperbole amps up Emacs</title> <rect x="7" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(36,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperamp</text></g></a> <a href="/2023/talks/koutline" title="Using Koutline for stream of thought journaling" data-slug="koutline"> <title> 9:40-10:00 Using Koutline for stream of thought journaling</title> <rect x="62" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(91,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> koutline</text></g></a> <a href="/2023/talks/parallel" title="Parallel text replacement" data-slug="parallel"> <title> 10:10-10:25 Parallel text replacement</title> <rect x="109" y="15" opacity="0.8" width="23" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(130,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> parallel</text></g></a> <a href="/2023/talks/eat" title="Eat and Eat powered Eshell, fast featureful terminal inside Emacs" data-slug="eat"> <title> 10:35-10:45 Eat and Eat powered Eshell, fast featureful terminal inside Emacs</title> <rect x="149" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(162,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eat</text></g></a> <a href="/2023/talks/poltys" title="The browser in a buffer" data-slug="poltys"> <title> 11:00-11:20 The browser in a buffer</title> <rect x="188" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(217,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> poltys</text></g></a> <a href="/2023/talks/cubing" title="Speedcubing in Emacs" data-slug="cubing"> <title> 11:35-11:55 Speedcubing in Emacs</title> <rect x="243" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(272,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> cubing</text></g></a> <a href="/2023/talks/emms" title="Emacs MultiMedia System (EMMS)" data-slug="emms"> <title> 1:00- 1:40 Emacs MultiMedia System (EMMS)</title> <rect x="376" y="15" opacity="0.8" width="62" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(436,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> emms</text></g></a> <a href="/2023/talks/steno" title="Programming with steno" data-slug="steno"> <title> 1:55- 2:25 Programming with steno</title> <rect x="462" y="15" opacity="0.8" width="47" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(507,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> steno</text></g></a> <a href="/2023/talks/mentor" title="Mentoring VS-Coders as an Emacsian (or How to show not tell people about the wonders of Emacs)" data-slug="mentor"> <title> 2:35- 2:45 Mentoring VS-Coders as an Emacsian (or How to show not tell people about the wonders of Emacs)</title> <rect x="525" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(538,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> mentor</text></g></a> <a href="/2023/talks/web" title="Emacs saves the Web (maybe)" data-slug="web"> <title> 3:10- 3:40 Emacs saves the Web (maybe)</title> <rect x="580" y="15" opacity="0.8" width="47" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(625,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> web</text></g></a> <a href="/2023/talks/sharing" title="Sharing Emacs is Caring Emacs: Emacs education and why I embraced video" data-slug="sharing"> <title> 3:55- 4:15 Sharing Emacs is Caring Emacs: Emacs education and why I embraced video</title> <rect x="650" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(679,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sharing</text></g></a> <a href="/2023/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"> <title> 4:30- 4:40 Sunday closing remarks</title> <rect x="705" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(718,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-close</text></g></a> <a href="/2023/talks/scheme" title="Bringing joy to Scheme programming" data-slug="scheme"> <title> 10:00-10:20 Bringing joy to Scheme programming</title> <rect x="94" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(123,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> scheme</text></g></a> <a href="/2023/talks/world" title="GNU Emacs: A World of Possibilities" data-slug="world"> <title> 10:35-10:55 GNU Emacs: A World of Possibilities</title> <rect x="149" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(178,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> world</text></g></a> <a href="/2023/talks/flat" title="A modern Emacs look-and-feel without pain" data-slug="flat"> <title> 11:10-11:20 A modern Emacs look-and-feel without pain</title> <rect x="203" y="75" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(216,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> flat</text></g></a> <a href="/2023/talks/emacsen" title="The Emacsen family, the design of an Emacs and the importance of Lisp" data-slug="emacsen"> <title> 11:35-11:55 The Emacsen family, the design of an Emacs and the importance of Lisp</title> <rect x="243" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(272,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> emacsen</text></g></a> <a href="/2023/talks/gc" title="emacs-gc-stats: Does garbage collection actually slow down Emacs?" data-slug="gc"> <title> 1:00- 1:35 emacs-gc-stats: Does garbage collection actually slow down Emacs?</title> <rect x="376" y="75" opacity="0.8" width="54" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(428,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gc</text></g></a> <a href="/2023/talks/hyperdrive" title="hyperdrive.el: Peer-to-peer filesystem in Emacs" data-slug="hyperdrive"> <title> 1:50- 2:30 hyperdrive.el: Peer-to-peer filesystem in Emacs</title> <rect x="454" y="75" opacity="0.8" width="62" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(514,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperdrive</text></g></a> <a href="/2023/talks/lspocaml" title="Writing a language server in OCaml for Emacs, fun, and profit" data-slug="lspocaml"> <title> 2:45- 3:00 Writing a language server in OCaml for Emacs, fun, and profit</title> <rect x="541" y="75" opacity="0.8" width="23" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(562,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> lspocaml</text></g></a> <a href="/2023/talks/test" title="What I learned by writing test cases for GNU Hyperbole" data-slug="test"> <title> 3:15- 3:45 What I learned by writing test cases for GNU Hyperbole</title> <rect x="588" y="75" opacity="0.8" width="47" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(633,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> test</text></g></a> <a href="/2023/talks/emacsconf" title="EmacsConf.org: How we use Org Mode and TRAMP to organize and run a multi-track conference" data-slug="emacsconf"> <title> 4:00- 4:20 EmacsConf.org: How we use Org Mode and TRAMP to organize and run a multi-track conference</title> <rect x="658" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(687,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> emacsconf</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 5 PM</text></g></svg></div> \ No newline at end of file
+<div class="schedule-svg-container"><svg width="800" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><title>Schedule for Sunday</title><rect width="800" height="150" x="0" y="0" fill="white"></rect><text font-size="10" fill="black" y="12" x="3">Sunday</text><a href="/2023/talks/sun-open" title="Sunday opening remarks" data-slug="sun-open"><title> 8:58- 9:04 Sunday opening remarks</title><rect x="-4" y="15" opacity="0.8" width="9" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(3,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">sun-open</text></g></a><a href="/2023/talks/hyperamp" title="Top 10 ways Hyperbole amps up Emacs" data-slug="hyperamp"><title> 9:05- 9:25 Top 10 ways Hyperbole amps up Emacs</title><rect x="7" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(36,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">hyperamp</text></g></a><a href="/2023/talks/koutline" title="Using Koutline for stream of thought journaling" data-slug="koutline"><title> 9:40-10:00 Using Koutline for stream of thought journaling</title><rect x="62" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(91,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">koutline</text></g></a><a href="/2023/talks/parallel" title="Parallel text replacement" data-slug="parallel"><title>10:10-10:25 Parallel text replacement</title><rect x="109" y="15" opacity="0.8" width="23" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(130,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">parallel</text></g></a><a href="/2023/talks/eat" title="Eat and Eat powered Eshell, fast featureful terminal inside Emacs" data-slug="eat"><title>10:35-10:45 Eat and Eat powered Eshell, fast featureful terminal inside Emacs</title><rect x="149" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(162,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">eat</text></g></a><a href="/2023/talks/poltys" title="The browser in a buffer" data-slug="poltys"><title>11:00-11:20 The browser in a buffer</title><rect x="188" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(217,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">poltys</text></g></a><a href="/2023/talks/cubing" title="Speedcubing in Emacs" data-slug="cubing"><title>11:35-11:55 Speedcubing in Emacs</title><rect x="243" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(272,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">cubing</text></g></a><a href="/2023/talks/emms" title="Emacs MultiMedia System (EMMS)" data-slug="emms"><title> 1:00- 1:40 Emacs MultiMedia System (EMMS)</title><rect x="376" y="15" opacity="0.8" width="62" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(436,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">emms</text></g></a><a href="/2023/talks/steno" title="Programming with steno" data-slug="steno"><title> 1:55- 2:25 Programming with steno</title><rect x="462" y="15" opacity="0.8" width="47" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(507,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">steno</text></g></a><a href="/2023/talks/mentor" title="Mentoring VS-Coders as an Emacsian (or How to show not tell people about the wonders of Emacs)" data-slug="mentor"><title> 2:35- 2:45 Mentoring VS-Coders as an Emacsian (or How to show not tell people about the wonders of Emacs)</title><rect x="525" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(538,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">mentor</text></g></a><a href="/2023/talks/web" title="Emacs saves the Web (maybe)" data-slug="web"><title> 3:10- 3:40 Emacs saves the Web (maybe)</title><rect x="580" y="15" opacity="0.8" width="47" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(625,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">web</text></g></a><a href="/2023/talks/sharing" title="Sharing Emacs is Caring Emacs: Emacs education and why I embraced video" data-slug="sharing"><title> 3:55- 4:15 Sharing Emacs is Caring Emacs: Emacs education and why I embraced video</title><rect x="650" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(679,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">sharing</text></g></a><a href="/2023/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"><title> 4:30- 4:40 Sunday closing remarks</title><rect x="705" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(718,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">sun-close</text></g></a><a href="/2023/talks/scheme" title="Bringing joy to Scheme programming" data-slug="scheme"><title>10:00-10:20 Bringing joy to Scheme programming</title><rect x="94" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(123,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">scheme</text></g></a><a href="/2023/talks/world" title="GNU Emacs: A World of Possibilities" data-slug="world"><title>10:35-10:55 GNU Emacs: A World of Possibilities</title><rect x="149" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(178,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">world</text></g></a><a href="/2023/talks/flat" title="A modern Emacs look-and-feel without pain" data-slug="flat"><title>11:10-11:20 A modern Emacs look-and-feel without pain</title><rect x="203" y="75" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(216,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">flat</text></g></a><a href="/2023/talks/emacsen" title="The Emacsen family, the design of an Emacs and the importance of Lisp" data-slug="emacsen"><title>11:35-11:55 The Emacsen family, the design of an Emacs and the importance of Lisp</title><rect x="243" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(272,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">emacsen</text></g></a><a href="/2023/talks/gc" title="emacs-gc-stats: Does garbage collection actually slow down Emacs?" data-slug="gc"><title> 1:00- 1:35 emacs-gc-stats: Does garbage collection actually slow down Emacs?</title><rect x="376" y="75" opacity="0.8" width="54" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(428,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">gc</text></g></a><a href="/2023/talks/hyperdrive" title="hyperdrive.el: Peer-to-peer filesystem in Emacs" data-slug="hyperdrive"><title> 1:50- 2:30 hyperdrive.el: Peer-to-peer filesystem in Emacs</title><rect x="454" y="75" opacity="0.8" width="62" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(514,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">hyperdrive</text></g></a><a href="/2023/talks/lspocaml" title="Writing a language server in OCaml for Emacs, fun, and profit" data-slug="lspocaml"><title> 2:45- 3:00 Writing a language server in OCaml for Emacs, fun, and profit</title><rect x="541" y="75" opacity="0.8" width="23" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(562,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">lspocaml</text></g></a><a href="/2023/talks/test" title="What I learned by writing test cases for GNU Hyperbole" data-slug="test"><title> 3:15- 3:45 What I learned by writing test cases for GNU Hyperbole</title><rect x="588" y="75" opacity="0.8" width="47" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(633,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">test</text></g></a><a href="/2023/talks/emacsconf" title="EmacsConf.org: How we use Org Mode and TRAMP to organize and run a multi-track conference" data-slug="emacsconf"><title> 4:00- 4:20 EmacsConf.org: How we use Org Mode and TRAMP to organize and run a multi-track conference</title><rect x="658" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(687,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">emacsconf</text></g></a><g transform="translate(0,15)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="133" font-size="10" text-anchor="left">9 AM</text></g><g transform="translate(94,15)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="133" font-size="10" text-anchor="left">10 AM</text></g><g transform="translate(188,15)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="133" font-size="10" text-anchor="left">11 AM</text></g><g transform="translate(282,15)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="133" font-size="10" text-anchor="left">12 PM</text></g><g transform="translate(376,15)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="133" font-size="10" text-anchor="left">1 PM</text></g><g transform="translate(470,15)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="133" font-size="10" text-anchor="left">2 PM</text></g><g transform="translate(564,15)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="133" font-size="10" text-anchor="left">3 PM</text></g><g transform="translate(658,15)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="133" font-size="10" text-anchor="left">4 PM</text></g><g transform="translate(752,15)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="133" font-size="10" text-anchor="left">5 PM</text></g></svg></div> \ No newline at end of file
diff --git a/2023/talks/flat.md b/2023/talks/flat.md
index bf579540..4cf53d5b 100644
--- a/2023/talks/flat.md
+++ b/2023/talks/flat.md
@@ -42,18 +42,32 @@ activities.
in Emacs core?
- A: About a 20-line patch.
- Q: Could you please share the code for copy and paste? Thx!
- - A: 
- - (defun flat-style(theme &rest args)
- -   (custom-set-faces
- -    `(mode-line
- -      ((t (:inherit mode-line
- -                    :box (:line-width ,mode-line-height :style
- flat-button)))) t)
- -    `(mode-line-inactive
- -      ((t (:inherit mode-line-inactive
- -                    :box (:line-width ,mode-line-height :style
- flat-button)))) t)))
- - (advice-add 'load-theme :after #'flat-style)
+ - A:
+
+ (defun flat-style (theme &rest args)
+ (custom-set-faces
+ `(mode-line
+ ((t (:inherit mode-line
+ :box (:line-width ,mode-line-height :style
+ flat-button)))) t)
+ `(mode-line-inactive
+ ((t (:inherit mode-line-inactive
+ :box (:line-width ,mode-line-height :style
+ flat-button)))) t)))
+ (advice-add 'load-theme :after #'flat-style)
+
+ - **Important change 2 years later.**
+ CHANGES IN EMACS MASTER make the code above CRASH. Emacs,
+ The new flat-style function uses set-face-attribute:
+
+ (defvar mode-line-height 8 "Size of the box arounf the mode line")
+ (defun flat-style (theme &rest _)
+ (set-face-attribute 'mode-line nil
+ :box (list :line-width mode-line-height :style 'flat-button))
+ (set-face-attribute 'mode-line-inactive nil
+ :box (list :line-width mode-line-height :style 'flat-button)))
+
+
- Q: Do you teach Emacs to any of your university students?
- A: No teaching, but a lot of introdcuing ;-)
diff --git a/2023/talks/mentor.md b/2023/talks/mentor.md
index 21b53045..70071e0e 100644
--- a/2023/talks/mentor.md
+++ b/2023/talks/mentor.md
@@ -7,7 +7,7 @@
# Mentoring VS-Coders as an Emacsian (or How to show not tell people about the wonders of Emacs)
-Jeremy Friesen (he/him) - Pronunciation: JERR-im-EE FREE-SEHN, https://takeonrules.com, <mailto:jeremy@jeremyfriesen.com>
+Jeremy Friesen (he/him) - Pronunciation: JERR-im-EE FREE-SEHN, <https://takeonrules.com>, <mailto:jeremy@jeremyfriesen.com>
[[!inline pages="internal(2023/info/mentor-before)" raw="yes"]]
diff --git a/2024.md b/2024.md
index d523d0e0..c07c694a 100644
--- a/2024.md
+++ b/2024.md
@@ -1,4 +1,5 @@
[[!meta copyright="Copyright &copy; 2021-2022 Amin Bandali; 2023-2024 Sacha Chua"]]
+[[!sidebar content=""]]
<p class="center">EmacsConf 2024 | Online Conference<br />
<b>December 7 and 8, 2024 (Sat-Sun)</b></p>
diff --git a/2024/captions/emacsconf-2024-blee--about-blee-towards-an-integrated-emacs-environment-for-enveloping-our-own-autonomy-directed-digital-ecosystem--mohsen-banan--answers.vtt b/2024/captions/emacsconf-2024-blee--about-blee-towards-an-integrated-emacs-environment-for-enveloping-our-own-autonomy-directed-digital-ecosystem--mohsen-banan--answers.vtt
index 47d7b53b..7e634529 100644
--- a/2024/captions/emacsconf-2024-blee--about-blee-towards-an-integrated-emacs-environment-for-enveloping-our-own-autonomy-directed-digital-ecosystem--mohsen-banan--answers.vtt
+++ b/2024/captions/emacsconf-2024-blee--about-blee-towards-an-integrated-emacs-environment-for-enveloping-our-own-autonomy-directed-digital-ecosystem--mohsen-banan--answers.vtt
@@ -1,4 +1,4 @@
-WEBVTT
+WEBVTT captioned by mohsen
00:00:00.000 --> 00:00:04.199
Thank you for the talk. I mean, it was a fairly long one and we
@@ -10,7 +10,7 @@ had two very distinct parts, one which dealt with a
philosophy of Libre-Halaal software and then the application,
00:00:12.080 --> 00:00:14.279
-obviously, of Bisos. So thank you so much for the
+obviously, of BISOS. So thank you so much for the
00:00:14.280 --> 00:00:17.839
presentation. Before we get started with the question, and
@@ -55,7 +55,7 @@ And I'm all for that. So the idea of BLEE is that
Others can package things, and we are seeing this in the form
00:01:32.600 --> 00:01:38.119
-of redistributions. There is Doom, there is Space Max, and
+of redistributions. There is Doom, there is Spacemacs, and
00:01:38.120 --> 00:01:44.079
we are seeing the evolution of Emacs into layers. So there is
@@ -85,16 +85,16 @@ So that was one idea. The other idea or the other theme
throughout the various talks that we saw was this concept of
00:02:42.920 --> 00:02:53.519
-mixing org mode with programming languages and What Babel
+mixing org-mode with programming languages and what Babel
00:02:53.520 --> 00:03:00.479
has done is two things. One is it has successfully
00:03:00.480 --> 00:03:06.799
-integrated org mode with all kinds of languages. And that
+integrated org-mode with all kinds of languages. And that
00:03:06.800 --> 00:03:13.039
-has happened in the context of literate programming. Um, so
+has happened in the context of literate programming. So
00:03:13.040 --> 00:03:16.839
a talk coming after mine is literate programming for the
@@ -106,10 +106,10 @@ a talk coming after mine is literate programming for the
what I am saying is that there is an alternative and that's
00:03:27.360 --> 00:03:33.839
-great, but we should also, uh, consider a traditional
+great, but we should also, consider a traditional
00:03:33.840 --> 00:03:40.159
-programming mixed with org mode and, um, Polymode is key to
+programming mixed with org-mode and, polymode is key to
00:03:40.160 --> 00:03:49.239
that. So those were some of the key concepts that I saw a
@@ -136,7 +136,7 @@ various talks last year, but it also tends to have a similar
stance than you, with the fact that text should be embedded
00:04:18.920 --> 00:04:21.919
-in programming languages rather than having Org Mode
+in programming languages rather than having Org-Mode
00:04:21.920 --> 00:04:25.439
implement, I mean, integrate other languages. And I found
@@ -157,10 +157,10 @@ fit into my talk is that the several concepts that I
introduced, namely
00:04:49.600 --> 00:04:57.879
-dynamic blocks everywhere and COMEEGA.
+Dynamic Blocks everywhere and COMEEGA.
00:04:57.880 --> 00:05:07.719
-I'd be happy to expand on those by sharing your screen in due
+I'd be happy to expand on those by sharing a screen in due
00:05:07.720 --> 00:05:12.519
course, whatever is appropriate. Sure, considering the
@@ -207,7 +207,7 @@ Right. So definitely, I would say for everybody who is on
this conference, the international edition is the right
00:06:01.960 --> 00:06:11.639
-choice. In this book, I take some aggressive stance against
+choice. In this book, I take some aggressive stances against
00:06:11.640 --> 00:06:19.279
intellectual property and I link that specifically to the
@@ -254,7 +254,7 @@ I haven't read much of that. I think there is a whole lot of
global growth and collective understanding towards this
00:07:34.200 --> 00:07:42.479
-notion that the direction we are headed in And by that, I mean
+notion that the direction we are headed in and by that, I mean
00:07:42.480 --> 00:07:46.879
American digital ecosystems
@@ -354,22 +354,22 @@ this intersect? Let me read this for a moment.
Yeah, I am not sure I fully get the point, but. Let me make a
00:10:30.600 --> 00:10:35.959
-point about my criticisms of the false movement
+point about my criticisms of the FOSS movement
00:10:35.960 --> 00:10:47.399
in the presentation and in the book. The idea is that we have
00:10:47.400 --> 00:10:53.919
-jumped on the false movement and recognize it as an
+jumped on the FOSS movement and recognize it as an
00:10:53.920 --> 00:11:02.279
-alternative But we haven't looked deeply enough to see if
+alternative but we haven't looked deeply enough to see if
00:11:02.280 --> 00:11:07.759
our own philosophy and movement have problems. The
00:11:07.760 --> 00:11:14.959
-problems that I note is that The first movement does not
+problems that I note is that the FOSS movement does not
00:11:14.960 --> 00:11:21.279
recognize clearly and explicitly that the entirety of the
@@ -384,7 +384,7 @@ piece is that it's only now that we are seeing the FOSS
movement is broader than the Western world. The third
00:11:45.480 --> 00:11:54.919
-problem is that the labels of free software and open source
+problem is that the labels of Free Software and Open Source
00:11:54.920 --> 00:12:01.159
are not necessarily correct. The fourth problem is that we
@@ -432,7 +432,7 @@ still live for 15 more seconds, do you have any last words?
Keep up the good work. Those would be my last words, that the
00:13:09.040 --> 00:13:14.239
-free software and the open source and Emacs are a very valid
+Free Software and the Open Source and Emacs are a very valid
00:13:14.240 --> 00:13:24.479
strategy for inside of IPR resistance. And thank you, Leo
@@ -480,19 +480,19 @@ Hi, John.
I was looking at the questions.
00:14:38.080 --> 00:14:46.239
-To see if there is more that I can add. So.
+To see if there is more that I can add. So,
00:14:46.240 --> 00:14:54.919
through the regard of societal impacts on ethical,
00:14:54.920 --> 00:14:58.439
-philosophical and wider force community. I'm involved in
+philosophical and wider FOSS community. I'm involved in
00:14:58.440 --> 00:15:02.239
politics in my country, my party is very sympathetic to
00:15:02.240 --> 00:15:05.277
-force ideas and I have public...
+FOSS ideas and I have public...
NOTE Q: Do you have any recommended reading materials designed for such an audience?
diff --git a/2024/captions/emacsconf-2024-color--colour-your-emacs-with-ease--ryota--answers.vtt b/2024/captions/emacsconf-2024-color--colour-your-emacs-with-ease--ryota--answers.vtt
index b27008a3..3266d254 100644
--- a/2024/captions/emacsconf-2024-color--colour-your-emacs-with-ease--ryota--answers.vtt
+++ b/2024/captions/emacsconf-2024-color--colour-your-emacs-with-ease--ryota--answers.vtt
@@ -1,747 +1,748 @@
WEBVTT
-00:00.169 --> 00:01.830
+00:00:00.000 --> 00:00:06.039
... Org mode and kind of note taking. And that meant that it wasn't
-00:02.810 --> 00:08.532
+00:00:06.040 --> 00:00:10.679
too difficult to get started with. But when I started more on
-00:08.972 --> 00:15.474
+00:00:10.680 --> 00:00:14.959
the coding side, because I'm a software engineer, you know,
-00:08.972 --> 00:15.474
+00:00:14.960 --> 00:00:20.679
on the day job. That kind of got me to think that the colors and
-00:16.366 --> 00:24.790
+00:00:20.680 --> 00:00:26.479
how themes look, how Emacs looks, was affecting. And that's
-00:25.331 --> 00:28.973
+00:00:26.480 --> 00:00:30.719
how it kind of came to picture. So I could have kind of gone
-00:29.073 --> 00:36.917
+00:00:30.720 --> 00:00:34.919
into a little bit more coding side of things, but I didn't
-00:29.073 --> 00:36.917
+00:00:34.920 --> 00:00:38.319
want to stress too much on the talk. So that's why I kind of
-00:36.957 --> 00:41.919
+00:00:38.320 --> 00:00:43.439
stuck to a very small bits of Org Mode and Elisp. And yeah, I
-00:42.319 --> 00:45.321
+00:00:43.440 --> 00:00:48.159
think that's how it came about. Yeah, but that's perfectly
-00:46.536 --> 00:48.577
+00:00:48.160 --> 00:00:52.119
fine. That's one of the chief reasons why we have two tracks
-00:49.437 --> 00:52.778
+00:00:52.120 --> 00:00:54.799
for Emacs content. We've had those for the last four years, I
-00:52.798 --> 00:55.059
+00:00:54.800 --> 00:00:57.279
think. It's because we have a general track, which is more
-00:55.119 --> 01:05.442
+00:00:57.280 --> 00:00:59.239
geared towards people who want a general... well,
-00:55.119 --> 01:05.442
+00:00:59.240 --> 00:01:01.799
generally people who are highly interested into org mode
-00:55.119 --> 01:05.442
+00:01:01.800 --> 00:01:03.999
and not necessarily into coding, but just to whet their
-00:55.119 --> 01:05.442
+00:01:04.000 --> 00:01:08.399
appetite to what can be done. And on the DevTrack, we have,
-01:06.082 --> 01:12.986
+00:01:08.400 --> 00:01:11.519
well, this year we have talked about Rust and about other
-01:06.082 --> 01:12.986
+00:01:11.520 --> 00:01:13.559
fancy things that people can do with Emacs. But, you know,
-01:13.006 --> 01:15.768
+00:01:13.560 --> 00:01:15.559
I'm also a software engineer, you know, we do this all the
-01:13.006 --> 01:15.768
+00:01:15.560 --> 00:01:18.079
time. Sometimes it's just fine to just chat about colors and
-01:15.808 --> 01:21.751
+00:01:18.080 --> 00:01:20.959
just the results of what we develop rather than how the
-01:15.808 --> 01:21.751
+00:01:20.960 --> 00:01:24.839
sausage is made. So that's completely fine too. I'm not sure
NOTE Why colour?
-01:23.733 --> 01:32.618
+00:01:24.840 --> 00:01:28.879
if you mentioned it in your presentation, but why color, out
-01:23.733 --> 01:32.618
+00:01:28.880 --> 00:01:31.479
of all the things you could be ricing on your setup, why were
-01:23.733 --> 01:32.618
+00:01:31.480 --> 00:01:37.559
you so interested about colors? I think it was just that
-01:34.870 --> 01:41.176
+00:01:37.560 --> 00:01:40.239
mainly that I had to do a lot of context switch between
-01:34.870 --> 01:41.176
+00:01:40.240 --> 00:01:44.119
different languages. Elisp is not the one because Elisp is
-01:41.576 --> 01:46.600
+00:01:44.120 --> 00:01:48.079
something that I would do for Emacs editing. But for day job,
-01:47.061 --> 01:52.385
+00:01:48.080 --> 00:01:52.999
I had to use mainly Go as I work with Kubernetes quite a bit. So
-01:52.525 --> 01:57.109
+00:01:53.000 --> 00:01:58.119
Go and also web languages like TypeScript, JavaScript, you
-01:58.090 --> 02:13.642
+00:01:58.120 --> 00:02:01.519
know, those languages, where I felt that whenever I was
-01:58.090 --> 02:13.642
+00:02:01.520 --> 00:02:05.359
switching context to a different language, I felt that it's
-01:58.090 --> 02:13.642
+00:02:05.360 --> 00:02:08.839
kind of annoying to see all the different colors in
-01:58.090 --> 02:13.642
+00:02:08.840 --> 00:02:11.999
languages like TypeScript, where, you know, VS Code way
-01:58.090 --> 02:13.642
+00:02:12.000 --> 00:02:15.799
would be very full of colors. which I felt that, okay, like,
-02:14.262 --> 02:23.569
+00:02:15.800 --> 00:02:18.759
why do I have to have that many different colors on let and
-02:14.262 --> 02:23.569
+00:02:18.760 --> 00:02:23.759
constant or the keywords where it could be just a white text?
-02:23.789 --> 02:25.170
+00:02:23.760 --> 00:02:27.679
It didn't have to be that colorful. So that was the bit, the
-02:25.890 --> 02:30.373
+00:02:27.680 --> 00:02:31.399
most annoying bit when it came to context switching. And I
-02:30.974 --> 02:35.197
+00:02:31.400 --> 00:02:34.759
felt that that just didn't happen in the Org Mode or writing
-02:30.974 --> 02:35.197
+00:02:34.760 --> 00:02:40.799
in general. So I had to find a way to make it work, make more
-02:36.017 --> 02:41.481
+00:02:40.800 --> 00:02:46.199
coding make my coding more kind of friendly to me and that's
-02:42.173 --> 02:59.576
+00:02:46.200 --> 00:02:50.039
when I thought maybe just the colors are something that's
-02:42.173 --> 02:59.576
+00:02:50.040 --> 00:02:54.039
bothering me and it actually was the case and that's how I got
-02:42.173 --> 02:59.576
+00:02:54.040 --> 00:02:59.359
to more into the color kind of journey and got too much into it
-02:42.173 --> 02:59.576
+00:02:59.360 --> 00:03:04.039
I guess. Right, and was it what eventually motivated you to
NOTE What motivated you to learn Elisp and get into the Emacs core?
-03:00.535 --> 03:05.778
+00:03:04.040 --> 00:03:06.999
learn Elisp and to get into the Emacs core? Because it's
-03:05.798 --> 03:22.406
+00:03:07.000 --> 00:03:09.399
funny how you find plenty of people using Emacs in Org Mode
-03:05.798 --> 03:22.406
+00:03:09.400 --> 00:03:11.399
and then they find something that they take particular
-03:05.798 --> 03:22.406
+00:03:11.400 --> 00:03:15.039
issue with, for you it's the color, and then they just go all
-03:05.798 --> 03:22.406
+00:03:15.040 --> 00:03:18.039
in trying to pull the rope as far as they can to try to
-03:05.798 --> 03:22.406
+00:03:18.040 --> 00:03:21.359
understand as much as possible about what code is managing
-03:05.798 --> 03:22.406
+00:03:21.360 --> 00:03:23.879
this part of the application. Like for you it was color, for
-03:22.786 --> 03:25.047
+00:03:23.880 --> 00:03:27.999
me it was the org agenda, I desperately wanted to make Org
-03:25.367 --> 03:30.692
+00:03:28.000 --> 00:03:32.439
Agenda do something that it wasn't able to do. And five
-03:31.433 --> 03:36.318
+00:03:32.440 --> 00:03:35.199
years, well, actually, no, 10 years later, I find myself
-03:31.433 --> 03:36.318
+00:03:35.200 --> 00:03:38.199
hosting Emacs Cons. So, you never know just how far you're
-03:36.598 --> 03:39.201
+00:03:38.200 --> 00:03:40.399
going to be pulling this rope. So, it's really interesting
-03:39.561 --> 03:42.224
+00:03:40.400 --> 00:03:44.679
for me that my call was this. But back to the question, is this
-03:42.464 --> 03:48.150
+00:03:44.680 --> 00:03:47.759
what eventually motivated you to get into Elisp and the core
-03:42.464 --> 03:48.150
+00:03:47.760 --> 00:03:53.439
of Emacs? I think that the original journey to move to Emacs
-03:49.798 --> 04:02.250
+00:03:53.440 --> 00:03:56.959
was around keybindings that I got annoyed with with other
-03:49.798 --> 04:02.250
+00:03:56.960 --> 00:03:59.839
solutions, not just, you know, not speaking of Emacs
-03:49.798 --> 04:02.250
+00:03:59.840 --> 00:04:02.879
keybinding or anything, like anything in general. The main
-04:02.870 --> 04:09.797
+00:04:02.880 --> 00:04:07.519
reason was that I used Dovrak keyboard layout, and that
-04:02.870 --> 04:09.797
+00:04:07.520 --> 00:04:10.799
meant that all the C-c, C-v, C-p, whatever, It just is
-04:10.257 --> 04:11.417
+00:04:10.800 --> 00:04:13.919
all over the place. So I had to find something that could work
-04:11.577 --> 04:14.298
+00:04:13.920 --> 00:04:17.039
for me. And Emacs was a solution that allowed me to do
-04:14.898 --> 04:17.499
+00:04:17.040 --> 00:04:20.479
anything. And that's the kind of the journey that it
-04:18.019 --> 04:21.519
+00:04:20.480 --> 00:04:24.039
originally started. And from there, started tweaking org
-04:21.599 --> 04:28.421
+00:04:24.040 --> 00:04:28.439
mode and writing experience to be tuned to my liking. Color
-04:29.101 --> 04:33.682
+00:04:28.440 --> 00:04:32.559
was another thing that I thought, OK, maybe I could do it
-04:29.101 --> 04:33.682
+00:04:32.560 --> 00:04:36.239
easily with org mode. And when I started to use more of the
-04:34.262 --> 04:37.983
+00:04:36.240 --> 00:04:40.799
coding side of things on Emacs, I felt that, okay, that was
-04:39.355 --> 04:41.697
+00:04:40.800 --> 00:04:45.159
something I needed to solve. So Elisp was always kind of
-04:41.877 --> 04:48.022
+00:04:45.160 --> 00:04:48.439
just a toolkit that, you know, I knew that it was available. I
-04:48.322 --> 04:52.105
+00:04:48.440 --> 00:04:52.199
knew that it would be something that I want to be able to use.
-04:52.646 --> 04:58.090
+00:04:52.200 --> 00:04:57.159
So I think in a way color was a good segue to understand how I
-04:52.646 --> 04:58.090
+00:04:57.160 --> 00:05:03.359
can kind of work out more of a complex logic with the editor
-04:59.136 --> 05:07.220
+00:05:03.360 --> 00:05:06.359
without having to write JavaScript or things that I don't
-04:59.136 --> 05:07.220
+00:05:06.360 --> 00:05:09.399
particularly like. So yeah, I think the journey around the
-05:07.440 --> 05:13.583
+00:05:09.400 --> 00:05:11.879
functional languages, functional kind of programming was
-05:07.440 --> 05:13.583
+00:05:11.880 --> 00:05:15.439
always something that I was keen about. And yeah, the whole
-05:13.943 --> 05:16.644
+00:05:15.440 --> 00:05:18.479
journey kind of made sense for me. And then moving on to the
-05:16.984 --> 05:21.246
+00:05:18.480 --> 00:05:21.999
color was just one way to get more involved in. So I can
-05:21.406 --> 05:27.069
+00:05:22.000 --> 00:05:26.279
totally see that this journey kind of making to a little bit
-05:21.406 --> 05:27.069
+00:05:26.280 --> 00:05:30.759
different angle But yeah, we shall see how that really turns
-05:27.669 --> 05:30.972
+00:05:30.760 --> 00:05:33.799
out. But for now, I think I'm happy with the color setup. Now I
-05:33.514 --> 05:35.095
+00:05:33.800 --> 00:05:37.599
can really focus on the coding. Well, that's all good. And
-05:37.156 --> 05:44.162
+00:05:37.600 --> 00:05:40.839
I'm sure plenty of people listening to you now, you know,
-05:37.156 --> 05:44.162
+00:05:40.840 --> 00:05:43.639
find this relatable, how they eventually got into
-05:37.156 --> 05:44.162
+00:05:43.640 --> 00:05:46.879
programming. Like for you, you did say that you were a
-05:44.222 --> 05:47.745
+00:05:46.880 --> 00:05:50.519
software engineer now. But I found plenty of people,
-05:48.705 --> 05:53.469
+00:05:50.520 --> 00:05:54.679
especially doing workshops, that just started you know,
-05:54.339 --> 06:01.267
+00:05:54.680 --> 00:05:57.639
their software engineering journey just with Emacs and
-05:54.339 --> 06:01.267
+00:05:57.640 --> 00:05:59.239
they just realized they were doing something completely
-05:54.339 --> 06:01.267
+00:05:59.240 --> 00:06:01.999
different, like I was studying humanities. But then you
-06:01.787 --> 00:06:02.687
+00:06:02.000 --> 00:06:05.079
touch Emacs and you realize, yeah, this whole programming
-06:01.787 --> 06:06.693
+00:06:05.080 --> 00:06:06.679
shtick is actually pretty damn cool.
-00:06:07.280 --> 00:06:09.399
+00:06:06.680 --> 00:06:09.079
And then you find yourself again,
-00:06:09.400 --> 00:06:11.039
+00:06:09.080 --> 00:06:10.999
five to 10 years later, becoming a software
-00:06:11.040 --> 00:06:12.919
+00:06:11.000 --> 00:06:12.999
engineer. So yeah, that's all good.
-00:06:12.920 --> 00:06:14.519
+00:06:13.000 --> 00:06:13.919
So we do have a couple of
-00:06:14.520 --> 00:06:18.439
+00:06:13.920 --> 00:06:18.439
questions and I'd like to move into them so that I, I mean,
-00:06:18.440 --> 00:06:22.439
+00:06:18.440 --> 00:06:22.399
people have questions and for me it's okay for me to chat with
-00:06:22.440 --> 00:06:25.119
+00:06:22.400 --> 00:06:25.119
you but obviously it's better if people ask you the question
-00:06:25.120 --> 00:06:27.679
+00:06:25.120 --> 00:06:27.639
themselves. And again, if you want to ask questions to Ryota
-00:06:27.680 --> 00:06:31.079
+00:06:27.640 --> 00:06:31.039
directly, feel free to join us on BBB and whenever we're done
-00:06:31.080 --> 00:06:33.519
+00:06:31.040 --> 00:06:33.519
with the questions on the pad, I'm more than happy
-00:06:33.520 --> 00:06:34.444
+00:06:33.520 --> 00:06:35.319
to let you ask your questions live.
NOTE Q: Is there any intention to create a library for working with more experimental color spaces? Pulling code out of Hasliberg for this purpose, perhaps?
-06:35.982 --> 00:06:37.902
+00:06:35.320 --> 00:06:37.799
All right, so starting with the first question,
-00:06:37.903 --> 00:06:45.108
+00:06:37.800 --> 00:06:39.999
is there any intention to create a library
-00:06:37.903 --> 06:45.108
+00:06:40.000 --> 00:06:42.559
for working with more experimental color spaces, pulling
-06:35.982 --> 06:45.108
+00:06:42.560 --> 00:06:45.679
code out of Hasliberg for this purpose, perhaps? Although I
-06:45.329 --> 06:46.049
+00:06:45.680 --> 00:06:50.479
do not know. Hasliberg, you might? Yeah, Hasliberg. And to
-06:49.692 --> 06:50.892
+00:06:50.480 --> 00:06:55.119
answer the question, started the journey just for myself
-06:52.859 --> 07:04.331
+00:06:55.120 --> 00:06:58.479
and I didn't think that it would be actually useful for other
-06:52.859 --> 07:04.331
+00:06:58.480 --> 00:07:03.319
use cases and this conference talk just came about kind of
-06:52.859 --> 07:04.331
+00:07:03.320 --> 00:07:08.079
out of sheer luck really. So the idea I think I can definitely
-07:04.771 --> 07:14.501
+00:07:08.080 --> 00:07:12.199
work it out and I don't think there will be too, the original
-07:04.771 --> 07:14.501
+00:07:12.200 --> 00:07:17.639
code that I started with was I had to use some color space and I
-07:15.931 --> 07:21.595
+00:07:17.640 --> 00:07:22.479
started with sRGB and then went to HSL and then went to LCH. So
-07:21.996 --> 07:24.678
+00:07:22.480 --> 00:07:25.479
I think there has been quite a bit that I learned from it. At
-07:25.458 --> 07:33.885
+00:07:25.480 --> 00:07:29.999
the same time, I may be tempted to actually maybe perhaps
-07:25.458 --> 07:33.885
+00:07:30.000 --> 00:07:34.159
contribute back to ct.el rather than creating my own. I
-07:34.105 --> 07:36.227
+00:07:34.160 --> 00:07:36.279
think that would make more sense perhaps.
-07:36.607 --> 00:07:39.548
+00:07:36.280 --> 00:07:39.479
But for my own kind of taste that I thought
-00:07:39.549 --> 00:07:42.891
+00:07:39.480 --> 00:07:42.839
that it would be something I can work out in my theme,
-00:07:42.892 --> 00:07:44.273
+00:07:42.840 --> 00:07:46.879
but I don't have any I think, you know, making a
-07:45.813 --> 07:53.975
+00:07:46.880 --> 00:07:49.999
library is definitely something that I can think about, but
-07:45.813 --> 07:53.975
+00:07:50.000 --> 00:07:53.679
perhaps maybe making it too many packages isn't exactly
-07:45.813 --> 07:53.975
+00:07:53.680 --> 00:07:57.319
what I want. But for my own use case, I think I just wanted to
-07:55.175 --> 08:06.317
+00:07:57.320 --> 00:07:59.919
have something that just didn't have any external
-07:55.175 --> 08:06.317
+00:07:59.920 --> 00:08:04.119
dependency so that I can use the vanilla Emacs with my
-07:55.175 --> 08:06.317
+00:08:04.120 --> 00:08:09.639
colors. I think that's how it started, but I'm definitely up
-08:06.757 --> 08:11.558
+00:08:09.640 --> 00:08:13.719
for it if there is interest about it. Yeah, well, thank you
-08:12.622 --> 00:08:13.615
+00:08:13.720 --> 00:08:15.279
for this. It's always good to contribute.
-00:08:16.040 --> 00:08:16.399
+00:08:15.280 --> 00:08:16.399
I'm tempted to say
-00:08:16.400 --> 00:08:18.679
+00:08:16.400 --> 00:08:18.279
that's how they get you. You know, you do something really
-00:08:18.680 --> 00:08:24.799
+00:08:18.280 --> 00:08:23.639
cool and you share it with people and they have the, you know,
-00:08:24.800 --> 00:08:27.080
+00:08:23.640 --> 00:08:27.239
they just ask you, oh, do you have your code online? And you
-08:27.166 --> 08:28.667
+00:08:27.240 --> 00:08:29.399
realize, no, I haven't pushed it. And then they start
-08:28.707 --> 08:30.107
+00:08:29.400 --> 00:08:32.359
pressing you on. well, you need to do this, this is amazing
-08:30.287 --> 08:33.349
+00:08:32.360 --> 00:08:35.879
and you need to share it. You know, I had plenty of people ask
-08:33.849 --> 08:41.735
+00:08:35.880 --> 00:08:40.519
me to share my dot files when I was tackling the org agenda
-08:33.849 --> 08:41.735
+00:08:40.520 --> 00:08:44.039
issue that I mentioned earlier. And yeah, eventually when
-08:42.575 --> 08:54.243
+00:08:44.040 --> 00:08:47.479
you get to publishing your stuff, you also feel great
-08:42.575 --> 08:54.243
+00:08:47.480 --> 00:08:50.279
because you're putting a little bit of your intelligence
-08:42.575 --> 08:54.243
+00:08:50.280 --> 00:08:53.679
into the world and it can be the start of the journey for
-08:42.575 --> 08:54.243
+00:08:53.680 --> 00:08:56.239
someone else. You know, maybe someone will find your
-08:54.283 --> 08:59.867
+00:08:56.240 --> 00:08:58.679
library at some point and realize, yeah, I wanted to do
-08:54.283 --> 08:59.867
+00:08:58.680 --> 00:09:01.239
something slightly differently. and then they either
-09:00.387 --> 09:10.793
+00:09:01.240 --> 00:09:04.439
contribute to a library or they make their own but it's a
-09:00.387 --> 09:10.793
+00:09:04.440 --> 00:09:07.359
complete journey that starts with just people taking the
-09:00.387 --> 09:10.793
+00:09:07.360 --> 00:09:12.039
time to publish the content of the brain basically. Yeah,
-09:11.894 --> 09:13.354
+00:09:12.040 --> 00:09:15.519
that's the power of open source now. It's just how we really
-09:13.654 --> 09:21.276
+00:09:15.520 --> 00:09:19.119
appreciate the open source culture being cultivated
-09:13.654 --> 09:21.276
+00:09:19.120 --> 00:09:23.159
throughout so many years. And yeah, this is something that
-09:21.736 --> 09:24.337
+00:09:23.160 --> 00:09:26.999
I'm definitely keen about. So yeah, open for suggestions.
-09:26.618 --> 09:29.298
+00:09:27.000 --> 00:09:30.079
And exactly, that's how I started with the journey. And
-00:09:29.760 --> 00:09:33.559
+00:09:30.080 --> 00:09:33.519
yeah, while this is very experimental and very personal,
-00:09:33.560 --> 00:09:38.239
+00:09:33.520 --> 00:09:38.199
yeah, I'm not, you know, tied down to one particular way
-00:09:38.240 --> 00:09:41.679
+00:09:38.200 --> 00:09:41.399
only. So yeah we'll be open to suggestions like this one
-00:09:41.680 --> 00:09:44.839
+00:09:41.400 --> 00:09:44.719
which I would definitely think about. Yeah that's amazing
-00:09:44.840 --> 00:09:46.879
+00:09:44.720 --> 00:09:46.999
and just to be clear you know this is not a there's no
-00:09:46.880 --> 00:09:47.840
+00:09:47.000 --> 00:09:50.639
incentive one. I'm not pushing you to publish your library.
-09:51.070 --> 09:57.595
+00:09:50.640 --> 00:09:53.799
You know it was very personal for you and at the end if you
-09:51.070 --> 09:57.595
+00:09:53.800 --> 00:09:56.199
believe it might be useful for others it's a nice thing to
-09:51.070 --> 09:57.595
+00:09:56.200 --> 00:09:58.799
eventually think about publishing it. But just the fact
-09:58.056 --> 10:00.117
+00:09:58.800 --> 00:10:01.439
that you showed up at EmacsConf... Sorry, I'm
-10:01.278 --> 00:10:02.698
+00:10:01.440 --> 00:10:02.639
starting to lose my voice on the morning
-00:10:02.699 --> 00:10:03.280
+00:10:02.640 --> 00:10:03.839
of the first day. That's
-10:03.520 --> 00:10:08.559
+00:10:03.840 --> 00:10:07.639
not boding well for the two next days. I mean, just one day.
-00:10:08.560 --> 00:10:10.079
+00:10:07.640 --> 00:10:09.159
But just the
-00:10:10.080 --> 00:10:13.279
+00:10:09.160 --> 00:10:13.199
fact that you're showing up at EmacsConf and sharing about
-00:10:13.280 --> 00:10:17.119
+00:10:13.200 --> 00:10:17.039
all of this, the process, how you got to it eventually, it's
-00:10:17.120 --> 00:10:19.439
+00:10:17.040 --> 00:10:19.639
also a part of sharing. And I think it's also amazing in its
-00:10:19.440 --> 00:10:26.039
+00:10:19.640 --> 00:10:26.039
own way. Absolutely. Okay, I'm going to try to read the next
-00:10:26.040 --> 00:10:31.719
+00:10:26.040 --> 00:10:31.639
question and then try to cough a little bit. So can we have...
-00:10:31.720 --> 00:10:36.919
+00:10:31.640 --> 00:10:36.759
Oh, sorry, Bala. Sorry. I was the one who asked the question.
-00:10:36.920 --> 00:10:40.120
+00:10:36.760 --> 00:10:40.279
I thought I could ask it live here rather than... Thank you.
-10:40.188 --> 10:41.368
+00:10:40.280 --> 00:10:46.039
I'll go cough a little bit. So here I am. Thanks, Ryota, for
-10:45.050 --> 10:47.190
+00:10:46.040 --> 00:10:50.519
the nice talk. This is great. I loved it. Your attention to
-10:49.531 --> 00:10:50.140
+00:10:50.520 --> 00:10:51.519
detail was awesome.
NOTE Q: Can we have a dark as well as light theme variations made from your theme?
-00:10:51.880 --> 00:10:55.079
+00:10:51.520 --> 00:10:54.959
So I was just looking at the code and I was
-00:10:55.080 --> 00:10:58.839
+00:10:54.960 --> 00:10:58.759
wondering, do you have a dark and a light theme variation
-00:10:58.840 --> 00:11:02.479
+00:10:58.760 --> 00:11:02.599
which can be made from your theme? Or do you have to customize
-00:11:02.480 --> 00:11:05.519
+00:11:02.600 --> 00:11:06.199
it every time? That was my question. And thanks for that.
-00:11:05.520 --> 00:11:07.640
+00:11:06.200 --> 00:11:09.679
Thank you very much. I appreciate your feedback and
-00:11:10.240 --> 00:11:15.079
+00:11:09.680 --> 00:11:15.039
questions. So to answer the question, the short answer is
-00:11:15.080 --> 00:11:18.639
+00:11:15.040 --> 00:11:18.439
that I do have both dark and light themes with some sorts of
-00:11:18.640 --> 00:11:22.199
+00:11:18.440 --> 00:11:22.199
standard colors that I personally liked. And there were a
-00:11:22.200 --> 00:11:26.719
+00:11:22.200 --> 00:11:26.679
few things that I showed in the demo. where I showed, I think,
-00:11:26.720 --> 00:11:30.039
+00:11:26.680 --> 00:11:29.999
three different dark theme colors. So light theme is
-00:11:30.040 --> 00:11:31.440
+00:11:30.000 --> 00:11:31.559
definitely something that I can do.
-00:11:31.800 --> 00:11:33.879
+00:11:31.560 --> 00:11:33.759
And the idea around Hasliberg theme
-00:11:33.880 --> 00:11:36.359
+00:11:33.760 --> 00:11:36.279
and just my theming in general was that
-00:11:36.360 --> 00:11:39.679
+00:11:36.280 --> 00:11:39.599
when I feel like I want to work in dark theme and when I want to
-00:11:39.680 --> 00:11:42.440
+00:11:39.600 --> 00:11:42.159
work in the standard way, I would just use the standard color.
-00:11:42.480 --> 00:11:44.959
+00:11:42.160 --> 00:11:44.919
But when I feel like maybe it's just so cold that I want
-00:11:44.960 --> 00:11:49.399
+00:11:44.920 --> 00:11:48.519
to have a bit of a warm colors near me, I would use the orange
-00:11:49.400 --> 00:11:52.359
+00:11:48.520 --> 00:11:52.279
theme, without changing too much of the kind of general
-00:11:52.360 --> 00:11:55.679
+00:11:52.280 --> 00:11:55.639
feeling and experience. So that can be said for the light
-00:11:55.680 --> 00:11:58.959
+00:11:55.640 --> 00:11:58.959
theme as well. So there is something and the kind of
-00:11:58.960 --> 00:12:04.919
+00:11:58.960 --> 00:12:04.839
customization isn't that difficult to extend. So I do have
-00:12:04.920 --> 00:12:09.079
+00:12:04.840 --> 00:12:09.359
both dark and light, but primarily I'm just looking at the
-00:12:09.080 --> 00:12:10.239
+00:12:09.360 --> 00:12:12.839
dark theme as my main driver. But yeah, they are both
-00:12:10.240 --> 00:12:13.240
+00:12:12.840 --> 00:12:18.239
available. Great. Thank you so much. I will definitely try
-00:12:18.208 --> 12:18.865
+00:12:18.240 --> 00:12:21.719
your theme out. I'm definitely on the lookout for a nice,
-12:19.205 --> 12:22.426
+00:12:21.720 --> 00:12:26.119
friendly theme. Thank you very much. As I said, this is a
-12:25.388 --> 12:27.429
+00:12:26.120 --> 00:12:31.279
personal theme. I'm not sure if it really fits everyone's
-12:29.089 --> 12:42.816
+00:12:31.280 --> 00:12:37.159
need, but it is one inspiration that I hope that can lead to
-12:29.089 --> 12:42.816
+00:12:37.160 --> 00:12:40.639
another nice theming that could work for someone
-12:29.089 --> 12:42.816
+00:12:40.640 --> 00:12:44.199
specifically for some use cases. I don't have to solve
-12:42.996 --> 12:44.977
+00:12:44.200 --> 00:12:48.719
everyone's problem. Yeah, and I mean, it was sufficient to
-12:46.553 --> 12:49.715
+00:12:48.720 --> 00:12:50.719
be inspirational to people. I mean, just Bala just
-12:49.755 --> 12:58.619
+00:12:50.720 --> 00:12:53.759
mentioned it right now, but I'm sure plenty of people who
-12:49.755 --> 12:58.619
+00:12:53.760 --> 00:12:55.999
watched live, but also people will be watching in the
-12:49.755 --> 12:58.619
+00:12:56.000 --> 00:12:58.599
future, will have the interest to speak by what you've done.
-12:58.699 --> 13:00.040
+00:12:58.600 --> 00:13:05.079
So thank you again so much for this. Yep. All right, well, I
-13:04.102 --> 13:06.603
+00:13:05.080 --> 00:13:09.719
don't see any further questions. So I suggest we move
-13:07.083 --> 13:10.525
+00:13:09.720 --> 00:13:14.279
towards closure. Ryota, do you have any last words? No, I
-13:13.775 --> 13:14.175
+00:13:14.280 --> 00:13:17.079
don't. So yeah, thank you very much for attending. And it was
-13:16.577 --> 13:18.979
+00:13:17.080 --> 00:13:20.519
great fun putting this together. And I really didn't think
-13:19.299 --> 13:27.545
+00:13:20.520 --> 00:13:24.759
that I would be talking about my personal colors and
-13:19.299 --> 13:27.545
+00:13:24.760 --> 00:13:27.759
personal favorites, like orange being my favorite color.
-13:27.845 --> 13:31.228
+00:13:27.760 --> 00:13:30.119
This wouldn't be something that I would say out in any
-13:27.845 --> 13:31.228
+00:13:30.120 --> 00:13:34.159
conference, to be honest. But it just came out to be. And
-13:33.890 --> 13:35.491
+00:13:34.160 --> 00:13:37.479
happy that I had a chance. So thank you very much for giving me
-13:35.651 --> 13:39.154
+00:13:37.480 --> 00:13:41.439
the opportunity to talk. in this amazing conference and
-13:39.574 --> 13:52.473
+00:13:41.440 --> 00:13:44.319
yeah I can't just wait to check out other talks which you know
-13:39.574 --> 13:52.473
+00:13:44.320 --> 00:13:46.919
I know that there isn't you know other talks that are
-13:39.574 --> 13:52.473
+00:13:46.920 --> 00:13:50.199
happening right now I was actually wanted to to join them and
-13:39.574 --> 13:52.473
+00:13:50.200 --> 00:13:52.759
check check that out so I will probably do that right now.
-13:53.419 --> 13:53.899
+00:13:52.760 --> 00:13:56.839
Well, sure. Well, I won't hold you any longer then. Thank
-13:56.401 --> 13:56.741
+00:13:56.840 --> 00:13:59.759
you. For me, it was just amazing to, you know, generally when
-13:57.682 --> 14:03.285
+00:13:59.760 --> 00:14:01.639
you ask someone what their favorite color, you know, they
-13:57.682 --> 14:03.285
+00:14:01.640 --> 00:14:04.399
just tell you orange or blue or whatever. They don't go then
-14:03.586 --> 14:10.690
+00:14:04.400 --> 00:14:07.039
to chat about 20 minutes about their favorite color and how
-14:03.586 --> 14:10.690
+00:14:07.040 --> 00:14:10.079
they tuned their entire editor to work exactly around their
-14:03.586 --> 14:10.690
+00:14:10.080 --> 00:14:14.759
favorite colors. So it was inspiring. And I also want to try
-14:12.912 --> 14:21.057
+00:14:14.760 --> 00:14:17.999
it out, frankly, because my theme has been utterly bad for
-14:12.912 --> 14:21.057
+00:14:18.000 --> 00:14:20.639
the last five years and I need some change into my life. All
-14:21.497 --> 14:21.677
+00:14:20.640 --> 00:14:24.319
right. Thank you so much for your time. Thank you very much,
-14:23.629 --> 14:24.654
+00:14:24.320 --> 00:14:30.640
everyone. Cheers. Bye-bye.
+
diff --git a/2024/captions/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--main--chapters.vtt b/2024/captions/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--main--chapters.vtt
index 89190453..57ef14d3 100644
--- a/2024/captions/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--main--chapters.vtt
+++ b/2024/captions/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--main--chapters.vtt
@@ -1,35 +1,35 @@
WEBVTT
-00:00:00.000 --> 00:01:41.800
+00:00:00.000 --> 00:01:41.759
Introduction
-00:01:41.800 --> 00:07:45.719
+00:01:41.760 --> 00:07:44.699
Android
-00:07:45.720 --> 00:09:27.320
+00:07:44.700 --> 00:09:30.239
EditorConfig
-00:09:27.310 --> 00:13:11.559
+00:09:30.240 --> 00:13:11.399
use-package integration with package-vc
-00:13:11.560 --> 00:15:56.679
+00:13:11.400 --> 00:15:56.839
JSON
-00:15:56.680 --> 00:17:29.639
+00:15:56.840 --> 00:17:30.719
Native compilation
-00:17:29.640 --> 00:18:16.779
+00:17:30.720 --> 00:18:16.819
Tree-sitter
-00:18:16.780 --> 00:19:34.200
+00:18:16.820 --> 00:19:34.219
Completion preview mode
-00:19:34.233 --> 00:21:16.919
+00:19:34.220 --> 00:21:16.779
package-isolate
-00:21:16.920 --> 00:23:17.939
+00:21:16.780 --> 00:23:17.879
Reindenting
-00:23:17.940 --> 00:24:43.766
+00:23:17.880 --> 00:24:43.120
Wrapping up
diff --git a/2024/captions/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--main.vtt b/2024/captions/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--main.vtt
index f0d08f0b..feebc2ed 100644
--- a/2024/captions/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--main.vtt
+++ b/2024/captions/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--main.vtt
@@ -1,1361 +1,1361 @@
-WEBVTT captioned by anush and sachac, checked by anush and bhavin
+WEBVTT captioned by anush
NOTE Introduction
-00:00.000 --> 00:06.066
+00:00:00.000 --> 00:00:06.119
Hello, and welcome to Emacs 30 Highlights at EmacsConf 2024.
-00:06.100 --> 00:08.833
+00:00:06.120 --> 00:00:08.839
Before I begin, I'd like to thank the organizers
-00:08.866 --> 00:11.800
+00:00:08.840 --> 00:00:11.799
and everyone involved for putting this all together.
-00:11.800 --> 00:13.733
+00:00:11.800 --> 00:00:13.759
While this talk is being pre-recorded,
-00:13.766 --> 00:15.233
+00:00:13.760 --> 00:00:15.239
my experience from the last few years
-00:15.266 --> 00:19.100
+00:00:15.240 --> 00:00:19.159
assures me that it will be a great experience for everyone.
-00:19.133 --> 00:21.300
+00:00:19.160 --> 00:00:21.359
My name is Philip Kaludercic.
-00:21.333 --> 00:24.466
+00:00:21.360 --> 00:00:24.479
I am a core contributor and ELPA co-maintainer.
-00:24.500 --> 00:26.066
+00:00:24.480 --> 00:00:26.079
I was honored when Sacha asked me
-00:26.100 --> 00:28.333
+00:00:26.080 --> 00:00:28.359
to take over the slot for this year.
-00:28.366 --> 00:29.866
+00:00:28.360 --> 00:00:29.879
In the past few iterations,
-00:29.900 --> 00:32.133
+00:00:29.880 --> 00:00:32.199
John Wiegley has filled a similar presentation
-00:32.166 --> 00:35.666
+00:00:32.200 --> 00:00:35.679
focusing on more general Emacs development updates.
-00:35.700 --> 00:00:38.501
+00:00:35.680 --> 00:00:38.519
This year, I will specifically focus on
-00:00:38.502 --> 00:00:41.900
+00:00:38.520 --> 00:00:41.919
highlight features from the upcoming Emacs 30 release,
-00:41.933 --> 00:44.200
+00:00:41.920 --> 00:00:43.919
which might or might not have been released
-00:44.200 --> 00:00:48.059
+00:00:43.920 --> 00:00:48.079
by the time you are seeing this.
-00:00:48.060 --> 00:51.266
+00:00:48.080 --> 00:00:51.079
As you can imagine, everything new about Emacs
-00:51.300 --> 00:55.133
+00:00:51.080 --> 00:00:55.059
can always be found in the Emacs NEWS file.
-00:55.166 --> 00:57.100
+00:00:55.060 --> 00:00:57.079
Or, alternatively,
-00:57.133 --> 01:01.800
+00:00:57.080 --> 00:01:01.919
if one doesn't want to read through the 3,000 lines here,
-01:01.800 --> 01:05.233
+00:01:01.920 --> 00:01:05.279
one can also take a look at the Emacs FAQ
-01:05.266 --> 01:08.000
+00:01:05.280 --> 00:01:07.999
and then go to the what's new about
-01:08.000 --> 01:12.300
+00:01:08.000 --> 00:01:12.219
or what's different about Emacs 30 node.
-01:12.333 --> 01:14.700
+00:01:12.220 --> 00:01:14.759
Next to these two official options,
-01:14.733 --> 01:18.200
+00:01:14.760 --> 00:01:18.599
I also have a page on Emacs Wiki
-01:18.200 --> 01:21.300
+00:01:18.600 --> 00:01:21.439
called EmacsThirtyHighlights,
-01:21.333 --> 01:24.266
+00:01:21.440 --> 00:01:24.279
highlighting some of the interesting features
-01:24.300 --> 01:28.433
+00:01:24.280 --> 00:01:28.439
with some context and suggestions on how to try them out.
-01:28.466 --> 01:30.033
+00:01:28.440 --> 00:01:30.039
This is more of a collaborative effort.
-01:30.066 --> 01:32.733
+00:01:30.040 --> 00:01:32.719
So if you see this and think something is missing,
-01:32.766 --> 01:34.500
+00:01:32.720 --> 00:01:34.519
feel free to add it.
-01:34.533 --> 01:36.833
+00:01:34.520 --> 00:01:36.839
So without further ado,
-01:36.866 --> 01:41.800
+00:01:36.840 --> 00:01:41.759
let's begin taking a look at new features in Emacs 30.
NOTE Android
-01:41.800 --> 01:44.700
+00:01:41.760 --> 00:01:44.679
The biggest one, and the one I want to mention first,
-01:44.733 --> 01:49.033
+00:01:44.680 --> 00:01:49.039
is Android support, native Android support.
-01:49.066 --> 01:51.833
+00:01:49.040 --> 00:01:51.879
As you can see here, Emacs has been ported
-01:51.866 --> 01:53.666
+00:01:51.880 --> 00:01:53.639
to the Android operating system.
-01:53.700 --> 01:56.500
+00:01:53.640 --> 00:01:56.479
What this means is that from Emacs 30 onwards,
-01:56.533 --> 02:01.066
+00:01:56.480 --> 00:02:01.279
you can build Android to target Android devices natively
-02:01.100 --> 02:06.733
+00:02:01.280 --> 00:02:06.759
and using a graphical interface.
-02:06.766 --> 02:08.433
+00:02:06.760 --> 00:02:08.799
While it has been possible to run Emacs
-02:08.466 --> 02:11.133
+00:02:08.800 --> 00:02:11.159
inside of terminal emulators on Android for a while,
-02:11.166 --> 02:13.900
+00:02:11.160 --> 00:02:13.919
this actually means that you can use Emacs
-02:13.933 --> 02:17.533
+00:02:13.920 --> 00:02:17.519
on an Android device, a phone or a tablet,
-02:17.566 --> 02:20.933
+00:02:17.520 --> 00:02:20.959
and have all the usual advantages from GUI Emacs,
-02:20.966 --> 02:23.466
+00:02:20.960 --> 00:02:23.479
such as the ability to bind all commands
-02:23.500 --> 02:25.466
+00:02:23.480 --> 00:02:25.479
without having to worry about--
-02:25.500 --> 02:27.266
+00:02:25.480 --> 00:02:27.279
all keys without having to worry
-02:27.300 --> 02:29.033
+00:02:27.280 --> 00:02:29.359
about terminal compatibility issues,
-02:29.066 --> 02:32.733
+00:02:29.360 --> 00:02:32.759
displaying images and multiple fonts
-02:32.766 --> 02:35.333
+00:02:32.760 --> 00:02:35.359
on the same display of different sizes.
-02:35.366 --> 02:37.300
+00:02:35.360 --> 00:02:37.279
I should have a recording
-02:37.333 --> 02:42.200
+00:02:37.280 --> 00:02:42.199
of that somewhere here--here we are--
-02:42.200 --> 02:44.100
+00:02:42.200 --> 00:02:44.439
which I made earlier on my phone,
-02:44.133 --> 02:47.266
+00:02:44.440 --> 00:02:47.319
because I'm recording this on a laptop--
-02:47.300 --> 02:50.466
+00:02:47.320 --> 00:02:50.479
where we can see how touch interaction works
-02:50.500 --> 02:53.333
+00:02:50.480 --> 00:02:53.199
on an Android phone. I can switch between buffers.
-02:53.366 --> 02:56.100
+00:02:53.200 --> 00:02:56.119
Here I've connected an external keyboard,
-02:56.133 --> 02:57.800
+00:02:56.120 --> 00:02:58.559
opening the Emacs website.
-02:57.800 --> 00:03:02.559
+00:02:58.560 --> 00:03:02.679
We have images that we can interact with.
-00:03:02.560 --> 00:03:04.319
+00:03:02.680 --> 00:03:05.319
We could resize them if we wanted to
-00:03:04.320 --> 03:07.400
+00:03:05.320 --> 00:03:07.559
with the image resizing commands.
-03:07.400 --> 03:10.300
+00:03:07.560 --> 00:03:10.359
Pinch-to-zoom works, so it
-03:10.333 --> 03:12.733
+00:03:10.360 --> 00:03:12.759
does realize what touchscreen interactions are.
-03:12.766 --> 03:15.233
+00:03:12.760 --> 00:03:15.239
With an external mouse, and for example,
-03:15.266 --> 03:17.800
+00:03:15.240 --> 00:03:17.799
enabling context menu mode,
-03:17.800 --> 03:23.066
+00:03:17.800 --> 00:03:22.679
I can even pop up little interaction windows,
-03:23.100 --> 00:03:28.139
+00:03:22.680 --> 00:03:27.239
which one you would usually also know from GUI Emacs.
-00:03:28.140 --> 03:33.200
+00:03:27.240 --> 00:03:32.959
TUI Emacs actually also supports them since a while now.
-03:33.200 --> 03:34.600
+00:03:32.960 --> 00:03:34.639
And in this case, I'm demonstrating
-03:34.600 --> 03:36.000
+00:03:34.640 --> 00:03:35.999
how even the touchscreen events
-03:36.000 --> 03:39.133
+00:03:36.000 --> 00:03:39.119
can be inspected using the usual help system,
-03:39.166 --> 03:43.333
+00:03:39.120 --> 00:03:43.359
and how context-mode notices
-03:43.366 --> 03:45.200
+00:03:43.360 --> 00:03:45.239
where we are and allows me to, for example,
-03:45.200 --> 03:47.800
+00:03:45.240 --> 00:03:47.799
evaluate this specific region,
-03:47.800 --> 03:49.300
+00:03:47.800 --> 00:03:49.079
which I've highlighted down there,
-03:49.333 --> 03:58.300
+00:03:49.080 --> 00:03:58.319
binding a command to touch-screen-scroll. Yeah.
-03:58.333 --> 04:00.533
+00:03:58.320 --> 00:04:00.479
One should note that these additions,
-04:00.566 --> 04:02.400
+00:04:00.480 --> 00:04:02.359
for example touchscreen interaction,
-04:02.400 --> 04:03.833
+00:04:02.360 --> 00:04:04.159
are not specific to Android,
-04:03.866 --> 04:07.066
+00:04:04.160 --> 00:04:06.839
but they also are supported in other operating systems,
-04:07.100 --> 04:12.200
+00:04:06.840 --> 00:04:12.279
such as Wayland and Xorg, which are not operating systems,
-04:12.200 --> 04:15.300
+00:04:12.280 --> 00:04:15.279
and Windows, insofar as they have touchscreen,
-04:15.333 --> 00:04:18.419
+00:04:15.280 --> 00:04:18.419
and devices have touchscreen support.
-00:04:18.420 --> 04:21.300
+00:04:18.420 --> 00:04:21.239
One should mention, or I want to mention,
-04:21.333 --> 04:24.666
+00:04:21.240 --> 00:04:24.039
that the main developer behind this feature, Po Lu,
-04:24.700 --> 04:27.500
+00:04:24.040 --> 00:04:27.319
should be complimented for the additional effort he put
-04:27.533 --> 00:04:31.019
+00:04:27.320 --> 00:04:30.979
into making sure that Emacs for Android
-00:04:31.020 --> 04:34.133
+00:04:30.980 --> 00:04:33.719
can be built using only a free software toolchain,
-04:34.166 --> 00:04:36.359
+00:04:33.720 --> 00:04:36.999
which is certainly not something one has come to expect
-00:04:36.360 --> 04:40.700
+00:04:37.000 --> 00:04:40.759
from working on Android applications,
-04:40.733 --> 04:43.833
+00:04:40.760 --> 00:04:43.839
as usually you have to agree to some terms and conditions
-04:43.866 --> 00:04:46.519
+00:04:43.840 --> 00:04:46.479
for Google-specific software.
-00:04:46.520 --> 04:49.633
+00:04:46.480 --> 00:04:49.639
Final note is that if you try and look for this online,
-04:49.666 --> 04:52.133
+00:04:49.640 --> 00:04:52.119
there are APKs you can find,
-04:52.166 --> 04:54.666
+00:04:52.120 --> 00:04:54.679
but some of them might be outdated.
-04:54.700 --> 04:59.333
+00:04:54.680 --> 00:04:59.359
To the best of my knowledge, Po Lu has...
-04:59.366 --> 05:03.400
+00:04:59.360 --> 00:05:02.399
Emacs 30 Android Sourceforge...
-05:03.400 --> 05:06.500
+00:05:02.400 --> 00:05:06.759
He has set up some system where here in Sourceforge,
-05:06.533 --> 05:12.433
+00:05:06.760 --> 00:05:12.799
there are regular and updated
-05:12.466 --> 05:14.500
+00:05:12.800 --> 00:05:14.519
APK files which you can download
-05:14.533 --> 05:16.933
+00:05:14.520 --> 00:05:17.039
to avoid having to build it yourself,
-05:16.966 --> 05:18.866
+00:05:17.040 --> 00:05:18.559
testing out the newest version
-05:18.900 --> 05:24.133
+00:05:18.560 --> 00:05:27.619
in case there are some bugs which you'd like to report.
-05:24.166 --> 05:33.100
+00:05:27.620 --> 00:05:33.119
Which-key is a package which has now been moved
-05:33.133 --> 05:35.266
+00:05:33.120 --> 00:05:34.719
from ELPA to the core.
-05:35.300 --> 00:05:39.179
+00:05:34.720 --> 00:05:38.879
If you haven't heard of which-key before, the idea is,
-00:05:39.180 --> 05:41.633
+00:05:38.880 --> 00:05:41.399
or the general pitch is that which-key
-05:41.666 --> 05:45.233
+00:05:41.400 --> 00:05:45.279
is a additional documentation interface for Emacs
-05:45.266 --> 05:49.700
+00:05:45.280 --> 00:05:49.639
for displaying various keys which you could input,
-05:49.733 --> 00:05:53.439
+00:05:49.640 --> 00:05:53.479
or various keys and key maps
-00:05:53.440 --> 05:54.833
+00:05:53.480 --> 00:05:55.479
that have been partially inputted.
-05:54.866 --> 05:57.633
+00:05:55.480 --> 00:05:57.639
A better way to demonstrate this
-05:57.666 --> 05:59.300
+00:05:57.640 --> 00:05:59.319
or to explain this is just to show it.
-05:59.333 --> 06:03.466
+00:05:59.320 --> 00:06:03.519
If we enable the which-key mode--it's a global minor mode--
-06:03.500 --> 06:06.333
+00:06:03.520 --> 00:06:06.399
then I can press, for example, C-x,
-06:06.366 --> 06:08.700
+00:06:06.400 --> 00:06:08.719
which is a prefix for the C-x keymap.
-06:08.733 --> 06:12.433
+00:06:08.720 --> 00:06:11.719
Then down here in the buffer, in this window down here,
-06:12.466 --> 06:15.333
+00:06:11.720 --> 00:06:15.599
we see various commands which we could invoke
-06:15.366 --> 06:17.900
+00:06:15.600 --> 00:06:17.919
and the keys to invoke them with.
-06:17.933 --> 06:23.000
+00:06:17.920 --> 00:06:23.039
For example, if I wanted to say C-x i for insert-file,
-06:23.000 --> 06:27.233
+00:06:23.040 --> 00:06:27.319
then I just have to press i to highlight it once again.
-06:27.266 --> 06:32.600
+00:06:27.320 --> 00:06:32.559
It should be down here. Pressing i without having to repeat
-06:32.600 --> 06:34.733
+00:06:32.560 --> 00:06:34.759
the entire key code again,
-06:34.766 --> 06:37.200
+00:06:34.760 --> 00:06:37.719
the partial key code again, just works.
-06:37.200 --> 06:41.533
+00:06:37.720 --> 00:06:41.679
This is different from the feature which Emacs has already,
-06:41.566 --> 06:45.400
+00:06:41.680 --> 00:06:45.519
which is if you have input the partial keychord,
-06:45.400 --> 06:47.033
+00:06:45.520 --> 00:06:47.039
you can press C-h
-06:47.066 --> 06:51.000
+00:06:47.040 --> 00:06:50.959
and then a help buffer pops up with a listing
-06:51.000 --> 06:54.066
+00:06:50.960 --> 00:06:54.159
of all keybindings that start with C-x.
-06:54.100 --> 06:56.633
+00:06:54.160 --> 00:06:56.639
The information is the same, the presentation is different,
-06:56.666 --> 06:59.066
+00:06:56.640 --> 00:06:59.159
because now if I wanted to do C-x i,
-06:59.100 --> 00:07:03.339
+00:06:59.160 --> 00:07:03.319
I have to repeat the entire keychord again.
-00:07:03.340 --> 07:09.466
+00:07:03.320 --> 00:07:09.479
So it's a matter of personal preference, which you prefer.
-07:09.500 --> 00:07:10.959
+00:07:09.480 --> 00:07:12.519
This is more of a traditional static approach
-00:07:10.960 --> 07:19.633
+00:07:12.520 --> 00:07:19.639
because I get a help buffer which I can search
-07:19.666 --> 07:20.900
+00:07:19.640 --> 00:07:21.119
using usual key commands,
-07:20.933 --> 07:28.133
+00:07:21.120 --> 00:07:28.159
while which-key is more of a transient and modern.
-07:28.166 --> 07:31.400
+00:07:28.160 --> 00:07:31.299
Some might prefer that approach
-07:31.400 --> 00:07:35.719
+00:07:31.300 --> 00:07:35.519
to solving the same problem.
-00:07:35.720 --> 07:39.100
+00:07:35.520 --> 00:07:39.119
Also, don't forget to check out the customization group
-07:39.133 --> 07:41.933
+00:07:39.120 --> 00:07:41.959
for which-key which has a number of options
-07:41.966 --> 00:07:45.719
+00:07:41.960 --> 00:07:44.699
which you might or might not be interested in.
NOTE EditorConfig
-00:07:45.720 --> 07:50.866
+00:07:44.700 --> 00:07:50.879
Next up, Emacs 30 has built-in EditorConfig support.
-07:50.900 --> 07:53.633
+00:07:50.880 --> 00:07:53.679
If you have not heard of EditorConfig before,
-07:53.666 --> 00:07:56.639
+00:07:53.680 --> 00:07:56.379
I believe I've linked to it down here somewhere.
-00:07:56.640 --> 00:08:00.119
+00:07:56.380 --> 00:08:00.160
Ah, there it is, EditorConfig.
-00:08:00.120 --> 00:08:09.419
+00:08:00.161 --> 00:08:05.260
This is a file format used to specify
-00:08:09.420 --> 08:12.133
+00:08:05.261 --> 00:08:11.959
common formatting rules in an editor-agnostic way.
-08:12.166 --> 08:16.266
+00:08:11.960 --> 00:08:16.319
You might compare it to .dir-locals.el files,
-08:16.300 --> 08:19.333
+00:08:16.320 --> 00:08:19.159
which is a sort of an s-expression
-08:19.366 --> 08:22.233
+00:08:19.160 --> 00:08:22.159
for setting file-local variables in Emacs.
-08:22.266 --> 08:27.266
+00:08:22.160 --> 00:08:26.559
Of course, this is restricted to the common subset
-08:27.300 --> 08:29.400
+00:08:26.560 --> 00:08:29.299
of what all editors should understand.
-08:29.400 --> 08:31.833
+00:08:29.300 --> 00:08:31.839
For example, indentation styles,
-08:31.866 --> 00:08:35.119
+00:08:31.840 --> 00:08:36.699
whether you prefer tabs or spaces,
-00:08:35.120 --> 08:38.733
+00:08:36.700 --> 00:08:38.759
tab width, file encoding, and so on.
-08:38.766 --> 00:08:43.919
+00:08:38.760 --> 00:08:43.959
So it's nothing too advanced, but it's something...
-00:08:43.920 --> 08:48.500
+00:08:43.960 --> 00:08:48.559
It is a file format which one sees popping up more
-08:48.533 --> 08:50.433
+00:08:48.560 --> 00:08:50.439
and more often in lots of projects
-08:50.466 --> 08:53.600
+00:08:50.440 --> 00:08:53.479
which want to enforce a consistent indentation style
-08:53.600 --> 08:56.633
+00:08:53.480 --> 00:08:56.639
or formatting rules for all editors in a project.
-08:56.666 --> 09:00.200
+00:08:56.640 --> 00:09:00.159
Having this built in is certainly useful in Emacs.
-09:00.200 --> 09:03.466
+00:09:00.160 --> 00:09:03.579
Though one should note that it's not enabled by default.
-09:03.500 --> 00:09:10.939
+00:09:03.580 --> 00:09:11.039
You still have to enable the global minor mode,
-00:09:10.940 --> 09:14.200
+00:09:11.040 --> 00:09:14.239
which is simply turning on this one option.
-09:14.200 --> 09:15.500
+00:09:14.240 --> 00:09:15.599
Shouldn't be more than that,
-09:15.533 --> 09:18.633
+00:09:15.600 --> 00:09:18.759
and then Emacs will respect the rules.
-09:18.666 --> 00:09:23.640
+00:09:18.760 --> 00:09:22.999
If it finds a .editorconfig file in the project directory,
-00:09:23.641 --> 00:09:25.320
+00:09:23.000 --> 00:09:25.319
then it will respect those rules
-00:09:25.321 --> 00:09:27.320
+00:09:25.320 --> 00:09:30.239
without having to do anything else.
NOTE use-package integration with package-vc
-00:09:27.310 --> 00:09:33.567
+00:09:30.240 --> 00:09:34.599
Next up, use-package integration with package-vc.
-00:09:33.568 --> 00:09:36.533
+00:09:34.600 --> 00:09:36.519
For those not familiar with either of the two,
-00:09:36.534 --> 00:09:37.533
+00:09:36.520 --> 00:09:38.119
or at least one of the two,
-00:09:37.534 --> 00:09:40.699
+00:09:38.120 --> 00:09:41.079
use-package is a popular configuration macro.
-00:09:40.700 --> 00:09:42.833
+00:09:41.080 --> 00:09:43.119
What it does is it allows
-00:09:42.866 --> 00:09:46.233
+00:09:43.120 --> 00:09:46.274
users to declaratively specify packages
-00:09:46.266 --> 00:09:48.900
+00:09:46.275 --> 00:09:48.879
they would like to have installed and configured
-00:09:48.900 --> 00:09:51.659
+00:09:48.880 --> 00:09:51.539
in their configuration file,
-00:09:51.660 --> 00:09:54.400
+00:09:51.540 --> 00:09:54.359
so that, for example, if you copy your init.el
-00:09:54.433 --> 00:09:55.900
+00:09:54.360 --> 00:09:55.959
from one system to another,
-00:09:55.900 --> 00:09:58.500
+00:09:55.960 --> 00:09:58.519
it could bootstrap the entire configuration,
-00:09:58.500 --> 00:10:00.733
+00:09:58.520 --> 00:10:00.719
downloading all the packages you want
-00:10:00.766 --> 00:10:02.366
+00:10:00.720 --> 00:10:02.239
without having to manually do this
-00:10:02.400 --> 00:10:05.139
+00:10:02.240 --> 00:10:05.039
on every system you'd like to use.
-00:10:05.140 --> 00:10:07.600
+00:10:05.040 --> 00:10:07.559
This allows configurations
-00:10:07.633 --> 00:10:10.859
+00:10:07.560 --> 00:10:11.039
to be self-encapsulated and portable.
-00:10:10.860 --> 00:10:15.059
+00:10:11.040 --> 00:10:15.959
package-vc is an extension of package.el,
-00:10:15.060 --> 00:10:19.400
+00:10:15.960 --> 00:10:19.679
which allows installing packages from an alternative.
-00:10:19.433 --> 00:10:22.366
+00:10:19.680 --> 00:10:22.279
Instead of using the standard way to install packages,
-00:10:22.400 --> 00:10:26.499
+00:10:22.280 --> 00:10:26.239
which is just download tarball and unpack it,
-00:10:26.500 --> 00:10:27.933
+00:10:26.240 --> 00:10:28.359
byte compile, and so on,
-00:10:27.966 --> 00:10:32.399
+00:10:28.360 --> 00:10:32.759
it will fetch the files for a package
-00:10:32.400 --> 00:10:34.966
+00:10:32.760 --> 00:10:35.279
directly from the source code repository
-00:10:35.000 --> 00:10:37.233
+00:10:35.280 --> 00:10:37.239
and initialize it in such a way
-00:10:37.266 --> 00:10:38.800
+00:10:37.240 --> 00:10:39.119
that package.el can work with it.
-00:10:38.833 --> 00:10:44.239
+00:10:39.120 --> 00:10:44.319
So it's just a front-end for installing packages.
-00:10:44.240 --> 00:10:46.500
+00:10:44.320 --> 00:10:46.519
Even though these two were added to Emacs 29,
-00:10:46.500 --> 00:10:48.366
+00:10:46.520 --> 00:10:48.399
we didn't have the time to work on the
-00:10:48.400 --> 00:10:52.500
+00:10:48.400 --> 00:10:52.639
use-package integration of package-vc into use-package,
-00:10:52.500 --> 00:10:54.600
+00:10:52.640 --> 00:10:55.359
which has been changed now.
-00:10:54.633 --> 00:11:00.139
+00:10:55.360 --> 00:11:00.119
What we have with Emacs 30 is that
-00:11:00.140 --> 00:11:02.833
+00:11:00.120 --> 00:11:02.839
there is a :vc keyword for use-package
-00:11:02.866 --> 00:11:05.200
+00:11:02.840 --> 00:11:05.319
with which we can instruct use-package
-00:11:05.233 --> 00:11:10.239
+00:11:05.320 --> 00:11:10.760
to not download a package using tarball,
-00:11:10.240 --> 00:11:12.433
+00:11:10.774 --> 00:11:12.519
but instead to fetch the source code
-00:11:12.466 --> 00:11:13.766
+00:11:12.520 --> 00:11:13.799
from a source code repository.
-00:11:13.800 --> 00:11:15.566
+00:11:13.800 --> 00:11:15.919
This is useful if you, for example,
-00:11:15.600 --> 00:11:18.200
+00:11:15.920 --> 00:11:18.319
have packages which you yourself work on
-00:11:18.233 --> 00:11:19.933
+00:11:18.320 --> 00:11:19.959
and know that you always want to have
-00:11:19.966 --> 00:11:21.900
+00:11:19.960 --> 00:11:21.919
the development version of the package
-00:11:21.900 --> 00:11:26.819
+00:11:21.920 --> 00:11:26.639
where you can directly commit changes you've made
-00:11:26.820 --> 00:11:29.733
+00:11:26.640 --> 00:11:29.159
to the repository and push them upstream.
-00:11:29.766 --> 00:11:32.100
+00:11:29.160 --> 00:11:32.399
Or, if you know that you want to contribute to a package,
-00:11:32.100 --> 00:11:34.966
+00:11:32.400 --> 00:11:35.559
you can use package-vc to download the source code,
-00:11:35.000 --> 00:11:37.366
+00:11:35.560 --> 00:11:37.319
have all the version control information,
-00:11:37.400 --> 00:11:41.739
+00:11:37.320 --> 00:11:41.759
prepare a patch and send it upstream.
-00:11:41.740 --> 00:11:43.800
+00:11:41.760 --> 00:11:44.119
In these examples here,
-00:11:43.833 --> 00:11:49.166
+00:11:44.120 --> 00:11:49.119
the first example Lisp instructs package-vc
-00:11:49.200 --> 00:11:52.366
+00:11:49.120 --> 00:11:52.959
to download the source code from a URL.
-00:11:52.400 --> 00:11:55.400
+00:11:52.960 --> 00:11:55.119
So this is a git URL where it will download
-00:11:55.433 --> 00:11:57.400
+00:11:55.120 --> 00:11:57.399
the source code from, and in this case,
-00:11:57.433 --> 00:12:00.000
+00:11:57.400 --> 00:12:00.399
choose the newest checkout of the source code,
-00:12:00.033 --> 00:12:04.939
+00:12:00.400 --> 00:12:05.680
not the latest release. Down here, we have another example.
-00:12:04.940 --> 00:12:08.766
+00:12:05.060 --> 00:12:09.159
I prefer to consider the following example here.
-00:12:08.800 --> 00:12:10.733
+00:12:09.160 --> 00:12:10.879
If we just had written this,
-00:12:10.766 --> 00:12:13.200
+00:12:10.880 --> 00:12:13.159
then package-vc would use the metadata
-00:12:13.233 --> 00:12:15.000
+00:12:13.160 --> 00:12:16.279
which an ELPA server provides
-00:12:15.033 --> 00:12:20.166
+00:12:16.280 --> 00:12:19.799
to fetch the URL from the official repository of,
-00:12:20.200 --> 00:12:22.833
+00:12:19.800 --> 00:12:22.839
in this case, BBDB, without having to...
-00:12:22.866 --> 00:12:27.733
+00:12:22.840 --> 00:12:28.239
It would be more or less the same like this up here,
-00:12:27.766 --> 00:12:32.700
+00:12:28.240 --> 00:12:32.639
with the simple difference that package-vc integration
-00:12:32.700 --> 00:12:36.300
+00:12:32.640 --> 00:12:36.359
into use-package doesn't check out the latest commit,
-00:12:36.300 --> 00:12:37.766
+00:12:36.360 --> 00:12:38.359
but the latest release,
-00:12:37.800 --> 00:12:44.979
+00:12:38.360 --> 00:12:44.159
just to keep configurations more deterministic by default.
-00:12:44.980 --> 00:12:47.566
+00:12:44.160 --> 00:12:47.879
Of course, if you prefer to use latest commit,
-00:12:47.600 --> 00:12:52.179
+00:12:47.880 --> 00:12:52.439
you can use a package-vc install command
-00:12:52.180 --> 00:12:54.933
+00:12:52.440 --> 00:12:54.879
or just update the package manually yourself,
-00:12:54.966 --> 00:13:01.779
+00:12:54.880 --> 00:13:01.739
which you can use using package-vc-upgrade.
-00:13:01.780 --> 00:13:04.366
+00:13:01.740 --> 00:13:04.319
Next, I'd like to focus on a few features
-00:13:04.400 --> 00:13:07.000
+00:13:04.320 --> 00:13:07.740
which one might not necessarily realize directly,
-00:13:07.033 --> 00:13:11.559
+00:13:07.741 --> 00:13:11.399
but will hopefully improve your experience with Emacs.
NOTE JSON
-00:13:11.560 --> 00:13:15.133
+00:13:11.400 --> 00:13:15.119
First up in this list is a new JSON parser.
-00:13:15.166 --> 00:13:21.959
+00:13:15.120 --> 00:13:21.399
Let's maybe show the source code for that one:
-00:13:21.960 --> 00:13:39.533
+00:13:21.400 --> 00:13:39.319
not json.el, json.c. The history of JSON parsing in Emacs
-00:13:39.566 --> 00:13:43.366
+00:13:39.320 --> 00:13:43.279
started with Emacs 23 with the addition of json.el.
-00:13:43.400 --> 00:13:46.766
+00:13:43.280 --> 00:13:46.919
This was the file which we had just opened a moment ago.
-00:13:46.800 --> 00:13:50.366
+00:13:46.920 --> 00:13:50.959
This is a JSON parser in Emacs Lisp.
-00:13:50.400 --> 00:13:53.233
+00:13:50.960 --> 00:13:53.199
It's fine, it does the job, but it can get slow
-00:13:53.266 --> 00:13:55.000
+00:13:53.200 --> 00:13:55.479
if we have a situation like where
-00:13:55.033 --> 00:14:00.319
+00:13:55.480 --> 00:14:00.479
Eglot uses a LSP server to communicate with
-00:14:00.320 --> 00:14:02.999
+00:14:00.480 --> 00:14:02.959
and the LSP server can get a bit chatty,
-00:14:03.000 --> 00:14:05.133
+00:14:02.960 --> 00:14:05.479
sending a lot of JSON data,
-00:14:05.166 --> 00:14:07.966
+00:14:05.480 --> 00:14:08.199
which all has to be parsed and garbage collected,
-00:14:08.000 --> 00:14:09.933
+00:14:08.200 --> 00:14:10.199
which can slow down Emacs a bit.
-00:14:09.966 --> 00:14:13.733
+00:14:10.200 --> 00:14:14.119
The situation was improved upon in Emacs 29
-00:14:13.766 --> 00:14:18.000
+00:14:14.120 --> 00:14:17.959
when JSON parsing was added to the core.
-00:14:18.033 --> 00:14:21.000
+00:14:17.960 --> 00:14:21.039
This was the json.c file, which we see on this side,
-00:14:21.033 --> 00:14:22.733
+00:14:21.040 --> 00:14:23.279
the old version of the json.c file,
-00:14:22.766 --> 00:14:26.700
+00:14:23.280 --> 00:14:27.119
which employed the Jansson library (it's the C library)
-00:14:26.700 --> 00:14:31.899
+00:14:27.120 --> 00:14:33.159
for parsing and accelerating JSON parsing in Emacs.
-00:14:31.900 --> 00:14:33.966
+00:14:33.160 --> 00:14:33.999
This was good enough,
-00:14:34.000 --> 00:14:36.200
+00:14:34.000 --> 00:14:36.159
or it certainly improved the situation
-00:14:36.233 --> 00:14:38.300
+00:14:36.160 --> 00:14:38.559
for a lot of LSP clients.
-00:14:38.300 --> 00:14:44.766
+00:14:38.560 --> 00:14:45.479
But in Emacs 30, the situation has been improved once more
-00:14:44.800 --> 00:14:49.800
+00:14:45.480 --> 00:14:50.359
with the addition of a JSON parser directly in Emacs.
-00:14:49.833 --> 00:14:53.566
+00:14:50.360 --> 00:14:52.999
So instead of using an external library,
-00:14:53.600 --> 00:14:57.400
+00:14:53.000 --> 00:14:57.719
there's a custom JSON parser written in C in the Emacs core,
-00:14:57.433 --> 00:15:01.539
+00:14:57.720 --> 00:15:01.559
which directly generates Elisp objects.
-00:15:01.540 --> 00:15:05.033
+00:15:01.560 --> 00:15:04.999
The advantage to this approach
-00:15:05.066 --> 00:15:06.433
+00:15:05.000 --> 00:15:06.359
compared to the Jansson approach
-00:15:06.466 --> 00:15:07.933
+00:15:06.360 --> 00:15:07.919
is that there's no intermediate format
-00:15:07.966 --> 00:15:09.200
+00:15:07.920 --> 00:15:09.199
which has to be allocated
-00:15:09.233 --> 00:15:11.500
+00:15:09.200 --> 00:15:11.559
and memory managed and freed again,
-00:15:11.500 --> 00:15:19.539
+00:15:11.560 --> 00:15:19.479
which of course incurs an additional performance overhead.
-00:15:19.540 --> 00:15:22.433
+00:15:19.480 --> 00:15:22.659
Next to this, there's also a custom serializer
-00:15:22.466 --> 00:15:29.239
+00:15:22.660 --> 00:15:27.119
for JSON contents translating a JSON object into a string.
-00:15:29.240 --> 00:15:30.640
+00:15:27.120 --> 00:15:30.279
... The consequence of this is that
-00:15:30.641 --> 00:15:35.519
+00:15:30.280 --> 00:15:35.600
there is absolutely no dependency on Jansson anymore.
-00:15:35.520 --> 00:15:38.533
+00:15:35.640 --> 00:15:38.559
This in turn means that now all Emacs users
-00:15:38.566 --> 00:15:39.800
+00:15:38.560 --> 00:15:39.799
from Emacs 30 onwards
-00:15:39.833 --> 00:15:42.733
+00:15:39.800 --> 00:15:43.119
can take advantage of this new JSON parser
-00:15:42.766 --> 00:15:44.933
+00:15:43.120 --> 00:15:44.879
and don't have to worry about whether
-00:15:44.966 --> 00:15:47.633
+00:15:44.880 --> 00:15:47.799
or not they have Jansson, this JSON parsing library,
-00:15:47.666 --> 00:15:50.433
+00:15:47.800 --> 00:15:50.999
installed on their system or not when they want
-00:15:50.466 --> 00:15:56.679
+00:15:51.000 --> 00:15:56.839
to take advantage of this accelerated JSON parsing.
NOTE Native compilation
-00:15:56.680 --> 00:16:00.366
+00:15:56.840 --> 00:16:00.639
Next up, another behind-the-scenes feature
-00:16:00.400 --> 00:16:06.406
+00:16:00.640 --> 00:16:04.559
is that if you build Emacs on your own from source,
-00:16:06.407 --> 00:16:07.766
+00:16:04.560 --> 00:16:07.879
you might know that if you wanted
-00:16:07.800 --> 00:16:09.533
+00:16:07.880 --> 00:16:09.559
to use native compilation,
-00:16:09.566 --> 00:16:12.379
+00:16:09.560 --> 00:16:12.319
so the translation of Elisp bytecodes
-00:16:12.380 --> 00:16:15.533
+00:16:12.320 --> 00:16:15.559
to whatever the native assembly
-00:16:15.566 --> 00:16:19.133
+00:16:15.560 --> 00:16:19.319
or native instruction set is on your system,
-00:16:19.166 --> 00:16:24.339
+00:16:19.320 --> 00:16:24.359
you have to specify with native compilation.
-00:16:24.340 --> 00:16:25.933
+00:16:24.360 --> 00:16:25.879
when invoking the configure script,
-00:16:25.966 --> 00:16:28.366
+00:16:25.880 --> 00:16:28.879
otherwise it would not have been enabled at all.
-00:16:28.400 --> 00:16:32.479
+00:16:28.880 --> 00:16:34.119
With Emacs 30, this step is not necessary anymore.
-00:16:32.480 --> 00:16:36.233
+00:16:34.120 --> 00:16:36.719
The configure script will automatically check
-00:16:36.266 --> 00:16:41.700
+00:16:36.720 --> 00:16:41.759
if you have the libgccjit library installed on your system,
-00:16:41.700 --> 00:16:42.766
+00:16:41.760 --> 00:16:42.879
and if that is so,
-00:16:42.800 --> 00:16:45.566
+00:16:42.880 --> 00:16:45.999
then native compilation will be enabled by default.
-00:16:45.600 --> 00:16:49.400
+00:16:46.000 --> 00:16:49.559
In other words, if you have an issue with native compilation
-00:16:49.433 --> 00:16:52.500
+00:16:49.560 --> 00:16:52.799
or prefer not to use it for whatever reason,
-00:16:52.500 --> 00:16:55.533
+00:16:52.800 --> 00:16:55.559
you now have to type --without-native-compilation
-00:16:55.566 --> 00:16:58.433
+00:16:55.560 --> 00:16:58.199
when compiling Emacs to prevent this from happening.
-00:16:58.466 --> 00:17:02.433
+00:16:58.200 --> 00:17:02.279
But native compilation was added in Emacs 28
-00:17:02.466 --> 00:17:04.333
+00:17:02.280 --> 00:17:04.399
and has proven to be a very stable
-00:17:04.366 --> 00:17:06.233
+00:17:04.400 --> 00:17:06.199
and useful feature for most people,
-00:17:06.266 --> 00:17:09.400
+00:17:06.200 --> 00:17:10.199
so there's probably no reason to do this
-00:17:09.433 --> 00:17:11.133
+00:17:10.200 --> 00:17:10.939
and you can just invoke the configure script
-00:17:11.166 --> 00:17:16.300
+00:17:10.940 --> 00:17:16.239
with one argument less. Right, and I'd like to finish up
-00:17:16.300 --> 00:17:19.500
+00:17:16.240 --> 00:17:19.399
with a few smaller features, a few smaller highlights.
-00:17:19.500 --> 00:17:29.639
+00:17:19.400 --> 00:17:30.719
Maybe we can go back to the listing here. Here we have it.
NOTE Tree-sitter
-00:17:29.640 --> 00:17:32.833
+00:17:30.720 --> 00:17:32.839
There are a few new major modes
-00:17:32.866 --> 00:17:34.333
+00:17:32.840 --> 00:17:34.239
based on the tree-sitter library.
-00:17:34.366 --> 00:17:37.939
+00:17:34.240 --> 00:17:37.739
tree-sitter is this parser library
-00:17:37.940 --> 00:17:39.933
+00:17:37.740 --> 00:17:42.879
which has been integrated into Emacs 29.
-00:17:39.966 --> 00:17:44.100
+00:17:42.880 --> 00:17:44.079
It allows the integration
-00:17:44.100 --> 00:17:48.400
+00:17:44.080 --> 00:17:48.359
of external, specialized, and quick parsers into Emacs,
-00:17:48.433 --> 00:17:52.133
+00:17:48.360 --> 00:17:52.119
which improve stuff like syntax highlighting, indentation,
-00:17:52.166 --> 00:17:55.233
+00:17:52.120 --> 00:17:55.279
structural navigation, imenu support,
-00:17:55.266 --> 00:18:01.033
+00:17:55.280 --> 00:18:00.839
by simply having a better understanding of, for example,
-00:18:01.066 --> 00:18:03.900
+00:18:00.840 --> 00:18:03.919
a HTML file, or a Lua file, a PHP file,
-00:18:03.900 --> 00:18:06.233
+00:18:03.920 --> 00:18:06.239
than what people usually implement
-00:18:06.266 --> 00:18:10.366
+00:18:06.240 --> 00:18:10.319
using regular expressions in traditional major modes.
-00:18:10.400 --> 00:18:16.779
+00:18:10.320 --> 00:18:16.819
So, a few new major modes which you can try out here.
NOTE Completion preview mode
-00:18:16.780 --> 00:18:20.033
+00:18:16.820 --> 00:18:19.959
Another interesting feature is the completion-preview-mode.
-00:18:20.066 --> 00:18:22.966
+00:18:19.960 --> 00:18:23.319
We can maybe try it out here in the scratch buffer.
-00:18:23.000 --> 00:18:28.300
+00:18:23.320 --> 00:18:28.199
If I enable completion-preview-mode...
-00:18:28.300 --> 00:18:32.033
+00:18:28.200 --> 00:18:32.719
This is a non-global minor mode,
-00:18:32.066 --> 00:18:38.600
+00:18:32.720 --> 00:18:38.479
which will display completion options inline using overlays.
-00:18:38.633 --> 00:18:43.133
+00:18:38.480 --> 00:18:43.199
For example, if I start typing a longer symbol like define,
-00:18:43.166 --> 00:18:48.200
+00:18:43.200 --> 00:18:48.119
now we have a derived mode. It suggests me to...
-00:18:48.233 --> 00:18:51.133
+00:18:48.120 --> 00:18:51.039
I can just press TAB and then it completes the option here,
-00:18:51.166 --> 00:18:51.933
+00:18:51.040 --> 00:18:51.839
but it didn't actually...
-00:18:51.966 --> 00:18:55.333
+00:18:51.840 --> 00:18:55.279
It's not actually modifying the buffer, it's not pressing,
-00:18:55.366 --> 00:18:57.100
+00:18:55.280 --> 00:18:57.039
these are just overlays,
-00:18:57.100 --> 00:18:59.533
+00:18:57.040 --> 00:18:59.519
so if I move around, it gets deleted.
-00:18:59.566 --> 00:19:02.619
+00:18:59.520 --> 00:19:02.539
It wouldn't get saved if I were to save the buffer.
-00:19:02.620 --> 00:19:04.966
+00:19:02.540 --> 00:19:04.999
The same also should work in a shell buffer.
-00:19:05.000 --> 00:19:08.366
+00:19:05.000 --> 00:19:09.239
If I enable completion preview mode here and start...
-00:19:08.400 --> 00:19:12.800
+00:19:09.240 --> 00:19:12.759
In this case, I'm using the bash completion package,
-00:19:12.833 --> 00:19:15.000
+00:19:12.760 --> 00:19:15.199
which provides additional completion information.
-00:19:15.033 --> 00:19:17.933
+00:19:15.200 --> 00:19:17.839
This is not only limited to programming systems,
-00:19:17.966 --> 00:19:22.900
+00:19:17.840 --> 00:19:22.919
but anywhere where you have completion at point in Emacs.
-00:19:22.900 --> 00:19:26.159
+00:19:22.920 --> 00:19:26.059
I can start typing here, ignore, and put ignore-backups,
-00:19:26.160 --> 00:19:30.000
+00:19:26.060 --> 00:19:29.919
and it hints to the options which I have
-00:19:30.033 --> 00:19:34.200
+00:19:29.920 --> 00:19:34.219
and allows me to complete them quickly.
NOTE package-isolate
-00:19:34.233 --> 00:19:37.966
+00:19:34.220 --> 00:19:37.879
Another small feature is the package-isolate command.
-00:19:38.000 --> 00:19:40.000
+00:19:37.880 --> 00:19:39.959
What this does is it will start
-00:19:40.033 --> 00:19:42.800
+00:19:39.960 --> 00:19:42.759
or it will prompt me for packages
-00:19:42.833 --> 00:19:44.333
+00:19:42.760 --> 00:19:44.119
I have installed in my system
-00:19:44.366 --> 00:19:46.500
+00:19:44.120 --> 00:19:46.439
and will start an isolated
-00:19:46.500 --> 00:19:51.133
+00:19:46.440 --> 00:19:51.079
or like "emacs -Q"-ish instance of emacs
-00:19:51.166 --> 00:19:53.333
+00:19:51.080 --> 00:19:53.639
with only these packages installed.
-00:19:53.366 --> 00:20:00.439
+00:19:53.640 --> 00:20:00.279
So for example, if I said I want slime and I want diff-hl,
-00:20:00.440 --> 00:20:02.700
+00:20:00.280 --> 00:20:02.279
then this is a new Emacs window.
-00:20:02.700 --> 00:20:04.533
+00:20:02.280 --> 00:20:04.439
It's unrelated to the one around.
-00:20:04.566 --> 00:20:06.500
+00:20:04.440 --> 00:20:06.839
It uses the same executable, of course,
-00:20:06.500 --> 00:20:09.939
+00:20:06.840 --> 00:20:09.939
but will not load your configuration file
-00:20:09.940 --> 00:20:13.679
+00:20:09.940 --> 00:20:13.619
or any other further customizations on your system.
-00:20:13.680 --> 00:20:15.533
+00:20:13.620 --> 00:20:15.159
All it does, it will ensure
-00:20:15.566 --> 00:20:17.933
+00:20:15.160 --> 00:20:17.919
that these packages, which are listed here,
-00:20:17.966 --> 00:20:24.599
+00:20:17.920 --> 00:20:24.499
so in our case SLIME and dependencies of SLIME and diff-hl,
-00:20:24.600 --> 00:20:25.300
+00:20:24.500 --> 00:20:25.239
in the system
-00:20:25.300 --> 00:20:29.100
+00:20:25.240 --> 00:20:29.039
so that I could, for example, as you can see here,
-00:20:29.100 --> 00:20:32.139
+00:20:29.040 --> 00:20:31.959
diff-hl-mode works.
-00:20:32.140 --> 00:20:34.766
+00:20:31.960 --> 00:20:35.479
Okay, this is not a version-controlled file.
-00:20:34.800 --> 00:20:41.200
+00:20:35.480 --> 00:20:41.119
Maybe if we take a look at, have I enabled diff-hl-mode?
-00:20:41.233 --> 00:20:44.600
+00:20:41.120 --> 00:20:44.559
It's enabled in this case. What diff-hl-mode does
-00:20:44.633 --> 00:20:48.300
+00:20:44.560 --> 00:20:48.479
is it displays these version control changes
-00:20:48.300 --> 00:20:49.566
+00:20:48.480 --> 00:20:49.999
in the fringe of a buffer.
-00:20:49.600 --> 00:20:54.133
+00:20:50.000 --> 00:20:54.079
And even though this is a uncustomized version of Emacs,
-00:20:54.166 --> 00:20:56.333
+00:20:54.080 --> 00:20:56.319
or an uncustomized instance of Emacs,
-00:20:56.366 --> 00:20:59.000
+00:20:56.320 --> 00:20:58.959
it was easy for me to load this one package,
-00:20:59.033 --> 00:21:02.033
+00:20:58.960 --> 00:21:01.959
or these two packages and all the dependencies necessary.
-00:21:02.066 --> 00:21:05.300
+00:21:01.960 --> 00:21:05.319
As you can imagine, the main purpose for this
-00:21:05.300 --> 00:21:07.733
+00:21:05.320 --> 00:21:07.719
is to make debugging issues easier.
-00:21:07.766 --> 00:21:10.566
+00:21:07.720 --> 00:21:10.519
If you want to report about an issue
-00:21:10.600 --> 00:21:14.900
+00:21:10.520 --> 00:21:14.519
you have with a package. And if I close this, it's closed
-00:21:14.900 --> 00:21:16.919
+00:21:14.520 --> 00:21:16.779
and everything's thrown away.
NOTE Reindenting
-00:21:16.920 --> 00:21:19.000
+00:21:16.780 --> 00:21:18.959
Last up, a nice feature I think
-00:21:19.033 --> 00:21:20.933
+00:21:18.960 --> 00:21:21.199
a lot of people will appreciate is,
-00:21:20.966 --> 00:21:24.300
+00:21:21.200 --> 00:21:24.239
if you are familiar with... Let's open a text buffer.
-00:21:24.300 --> 00:21:30.279
+00:21:24.240 --> 00:21:30.079
The M-q key is traditionally bound to fill-paragraph.
-00:21:30.280 --> 00:21:32.200
+00:21:30.080 --> 00:21:32.119
What this means is that...
-00:21:32.233 --> 00:21:35.000
+00:21:32.120 --> 00:21:34.999
Let's, for example, copy this text from here
-00:21:35.033 --> 00:21:40.366
+00:21:35.000 --> 00:21:40.359
and squash it all into one line. If I press M-q here,
-00:21:40.400 --> 00:21:42.719
+00:21:40.360 --> 00:21:42.399
then the lines will be broken
-00:21:42.720 --> 00:21:49.879
+00:21:42.400 --> 00:21:49.479
according to the fill column indicator up here.
-00:21:49.880 --> 00:21:52.600
+00:21:49.480 --> 00:21:52.399
This is the traditional usage of M-q,
-00:21:52.633 --> 00:21:54.200
+00:21:52.400 --> 00:21:54.119
and it still works in text-mode buffers,
-00:21:54.233 --> 00:21:55.859
+00:21:54.120 --> 00:21:56.639
but in prog-mode buffers--
-00:21:55.860 --> 00:22:00.100
+00:21:56.640 --> 00:22:00.079
so any major mode inheriting prog-mode--
-00:22:00.100 --> 00:22:02.233
+00:22:00.080 --> 00:22:02.199
M-q will now by default be bound
-00:22:02.266 --> 00:22:09.779
+00:22:02.200 --> 00:22:09.719
to prog-fill-reindent-defun. To summarize the point,
-00:22:09.780 --> 00:22:13.433
+00:22:09.720 --> 00:22:13.479
if you are editing a string or a comment,
-00:22:13.466 --> 00:22:16.039
+00:22:13.480 --> 00:22:15.919
then the comment will be filled.
-00:22:16.040 --> 00:22:19.100
+00:22:15.920 --> 00:22:19.159
But if you are outside of a comment or outside of a string,
-00:22:19.100 --> 00:22:23.166
+00:22:19.160 --> 00:22:22.919
then the defun or the top-level construct
-00:22:23.200 --> 00:22:26.159
+00:22:22.920 --> 00:22:26.119
in the programming language will be re-indented.
-00:22:26.160 --> 00:22:34.099
+00:22:26.120 --> 00:22:33.859
Let's try that out with maybe some file I have open here.
-00:22:34.100 --> 00:22:38.800
+00:22:33.860 --> 00:22:38.819
If I'm in this... Let's choose some function,
-00:22:38.833 --> 00:22:40.733
+00:22:38.820 --> 00:22:41.279
let's take this for example.
-00:22:40.766 --> 00:22:43.959
+00:22:41.280 --> 00:22:43.879
If we followed all of this again,
-00:22:43.960 --> 00:22:47.400
+00:22:43.880 --> 00:22:47.619
and I press M-q in on this paragraph,
-00:22:47.433 --> 00:22:49.433
+00:22:47.620 --> 00:22:50.039
then the paragraph gets re-indented.
-00:22:49.466 --> 00:22:55.800
+00:22:50.040 --> 00:22:54.859
But if I'm down here and I choose to break the indentation
-00:22:55.833 --> 00:22:58.166
+00:22:54.860 --> 00:22:56.180
and then press M-q,
-00:22:58.200 --> 00:23:02.333
+00:22:56.181 --> 00:23:02.399
then as you see, it practically selected the defun
-00:23:02.366 --> 00:23:03.566
+00:23:02.400 --> 00:23:03.559
and re-indented everything
-00:23:03.600 --> 00:23:06.959
-without having me to move the point around in the buffer.
+00:23:03.560 --> 00:23:05.959
+without having need to move the point around in the buffer.
-00:23:06.960 --> 00:23:08.633
+00:23:06.800 --> 00:23:08.679
So I think that's a really nice feature,
-00:23:08.666 --> 00:23:11.100
+00:23:08.680 --> 00:23:11.039
which a lot of people can appreciate.
-00:23:11.100 --> 00:23:17.939
+00:23:11.040 --> 00:23:17.879
It's one of those niceties which comes from time to time.
NOTE Wrapping up
-00:23:17.940 --> 00:23:20.633
+00:23:17.880 --> 00:23:20.679
Right, so that was my overview
-00:23:20.666 --> 00:23:22.600
+00:23:20.680 --> 00:23:22.559
of what's going to be new in Emacs 30.
-00:23:22.633 --> 00:23:24.400
+00:23:22.560 --> 00:23:24.359
I hope that most people could take away
-00:23:24.433 --> 00:23:25.579
+00:23:24.360 --> 00:23:25.659
something from this presentation
-00:23:25.580 --> 00:23:28.900
+00:23:25.660 --> 00:23:29.419
and have something to look forward
-00:23:28.900 --> 00:23:31.133
+00:23:29.420 --> 00:23:31.599
to try out after upgrading.
-00:23:31.166 --> 00:23:33.833
+00:23:31.600 --> 00:23:33.839
As mentioned initially, as of recording,
-00:23:33.866 --> 00:23:36.566
+00:23:33.840 --> 00:23:36.939
this release has not been completed yet.
-00:23:36.600 --> 00:23:38.833
+00:23:36.940 --> 00:23:38.879
If this is still not the case
-00:23:38.866 --> 00:23:40.233
+00:23:38.880 --> 00:23:40.199
when you're seeing this video,
-00:23:40.266 --> 00:23:43.833
+00:23:40.200 --> 00:23:43.799
please consider downloading and building Emacs 30 yourself.
-00:23:43.866 --> 00:23:48.200
+00:23:43.800 --> 00:23:48.319
If you have any issues, which is always the case,
-00:23:48.233 --> 00:23:56.439
+00:23:48.320 --> 00:23:56.339
please report them to using report-emacs-bug.
-00:23:56.440 --> 00:23:57.907
+00:23:56.340 --> 00:23:57.740
That will pop up a mail buffer,
-00:23:57.908 --> 00:23:59.600
+00:23:57.741 --> 00:23:59.519
and then you can describe your issue and send them out.
-00:23:59.633 --> 00:24:01.800
+00:23:59.520 --> 00:24:01.839
All bug reports are valuable,
-00:24:01.833 --> 00:24:04.433
+00:24:01.840 --> 00:24:03.999
even if they are false positives or duplicates--
-00:24:04.466 --> 00:24:05.233
+00:24:04.000 --> 00:24:05.239
it doesn't matter--
-00:24:05.266 --> 00:24:08.533
+00:24:05.240 --> 00:24:08.919
because when you take the time to submit a bug report,
-00:24:08.566 --> 00:24:12.233
+00:24:08.920 --> 00:24:12.359
which describes something that's specific to your setup,
-00:24:12.266 --> 00:24:16.700
+00:24:12.360 --> 00:24:16.839
which the developers might not have noticed or known about,
-00:24:16.700 --> 00:24:19.133
+00:24:16.840 --> 00:24:19.079
then you are certainly helping out a lot of other people
-00:24:19.166 --> 00:24:21.766
+00:24:19.080 --> 00:24:21.679
which might run into the same issue in the future.
-00:24:21.800 --> 00:24:23.200
+00:24:21.680 --> 00:24:23.359
Especially with upgrades,
-00:24:23.233 --> 00:24:26.566
+00:24:23.360 --> 00:24:26.559
it would be nice to figure out small problems
-00:24:26.600 --> 00:24:30.800
+00:24:26.560 --> 00:24:30.879
which make upgrading difficult for some people.
-00:24:30.833 --> 00:24:34.700
+00:24:30.880 --> 00:24:34.559
The ideal is, of course, to have no issues
-00:24:34.700 --> 00:24:37.199
+00:24:34.560 --> 00:24:37.199
when upgrading from one version to another.
-00:24:37.200 --> 00:24:39.566
+00:24:37.200 --> 00:24:41.939
Having said that, I thank you for your attention,
-00:24:39.600 --> 00:24:43.766
+00:24:41.940 --> 00:24:43.120
and I'm saying goodbye.
diff --git a/2024/captions/emacsconf-2024-gypsum--gypsum-my-clone-of-emacs-and-elisp-written-in-scheme--ramin-honary--answers.vtt b/2024/captions/emacsconf-2024-gypsum--gypsum-my-clone-of-emacs-and-elisp-written-in-scheme--ramin-honary--answers.vtt
index 0142a879..7c2708d9 100644
--- a/2024/captions/emacsconf-2024-gypsum--gypsum-my-clone-of-emacs-and-elisp-written-in-scheme--ramin-honary--answers.vtt
+++ b/2024/captions/emacsconf-2024-gypsum--gypsum-my-clone-of-emacs-and-elisp-written-in-scheme--ramin-honary--answers.vtt
@@ -1,725 +1,725 @@
WEBVTT
-00:00.069 --> 00:01.850
-Troy Hinckley's project that I'm talking about. I was going
+00:00:00.000 --> 00:00:02.999
+...Troy Hinckley's project that I'm talking about. I was going
-00:02.350 --> 00:22.139
+00:00:03.000 --> 00:00:08.799
to mention this in my presentation, but it's possible,
-00:02.350 --> 00:22.139
+00:00:08.800 --> 00:00:16.359
theoretically, that Troy Hinckley, his project could be
-00:02.350 --> 00:22.139
+00:00:16.360 --> 00:00:18.559
used as a scheme of limitation that actually runs my own
-00:02.350 --> 00:22.139
+00:00:18.560 --> 00:00:23.759
version of Emacs. And although, you know, This is
-00:25.478 --> 00:29.380
+00:00:23.760 --> 00:00:30.719
completely theoretical, and I don't know how difficult
-00:25.478 --> 00:29.380
+00:00:30.720 --> 00:00:34.079
that would be. But if Troy Hinckley implemented enough of
-00:30.781 --> 00:47.029
+00:00:34.080 --> 00:00:39.879
the R7-RS standard in Rust, it would theoretically be
-00:30.781 --> 00:47.029
+00:00:39.880 --> 00:00:46.719
possible to run the Gypsum editor in Troy Hinckley's own
-00:30.781 --> 00:47.029
+00:00:46.720 --> 00:00:50.239
editor. I thought that was kind of interesting, and I
-00:48.270 --> 00:53.833
+00:00:50.240 --> 00:00:59.119
thought it was worth mentioning, at least in the questions
-00:48.270 --> 00:53.833
+00:00:59.120 --> 00:01:12.159
and answers.
-01:12.179 --> 01:14.080
+00:01:12.160 --> 00:01:16.199
I also mentioned this in the presentation. I wanted to see
-01:14.940 --> 01:22.364
+00:01:16.200 --> 00:01:20.119
Robin Templeton's project presentation, but
-01:14.940 --> 01:22.364
+00:01:20.120 --> 00:01:22.399
unfortunately it's going to be at like four in the morning
-01:14.940 --> 01:22.364
+00:01:22.400 --> 00:01:26.239
for me. So I'm going to try and watch that tomorrow, but
-01:22.984 --> 01:31.428
+00:01:26.240 --> 00:01:29.559
that's also going to be a very interesting project to keep an
-01:22.984 --> 01:31.428
+00:01:29.560 --> 00:01:34.039
eye on if you're interested in Scheme. That's the project
-01:33.149 --> 01:38.051
+00:01:34.040 --> 00:01:37.519
where you've got the Guylain interpreter running inside of
-01:33.149 --> 01:38.051
+00:01:37.520 --> 00:02:04.679
the Emacs process. It's dynamically linked as a library.
-02:04.699 --> 02:06.748
+00:02:04.680 --> 00:02:08.759
I'm ready for questions from anybody. You can ask or you can
-02:07.431 --> 02:09.079
+00:02:08.760 --> 00:02:32.079
type. It's up to you.
-02:32.319 --> 02:34.521
+00:02:32.080 --> 00:02:37.319
Okay, let me check the etherpad.
-02:37.304 --> 02:38.245
+00:02:37.320 --> 00:02:41.159
Let's see here.
-02:41.208 --> 02:42.830
+00:02:41.160 --> 00:02:42.719
I'm not sure if I'm doing that right.
-02:46.373 --> 02:47.554
+00:02:42.720 --> 00:02:54.199
Let me check one more time. Oh, there it goes.
-02:54.221 --> 02:55.702
+00:02:54.200 --> 00:03:00.079
Let's see, so this is...
-03:00.151 --> 03:02.072
+00:03:00.080 --> 00:03:02.239
I didn't know about that first bit of history. Oh, I've heard
-03:02.332 --> 00:03:09.369
+00:03:02.240 --> 00:03:06.119
RMS say that Scheme Guile is just a nicer Lisp, but I didn't
-03:02.332 --> 03:09.776
+00:03:06.120 --> 00:03:09.079
know there were concrete talks attempts to use Guile for
-03:02.332 --> 03:09.776
+00:03:09.080 --> 00:03:14.319
Emacs that early. Let's see, that was from janneke.
NOTE Q: I'm curious to know how the hell guile-emacs deals with all of the dynamically scoped modules out there. Is there any effort to automatically modularize and namespace stuff?
-00:03:09.370 --> 00:03:19.241
+00:03:14.320 --> 00:03:17.439
I'm curious to know how the hell Guile Emacs deals with all the
-03:14.318 --> 03:19.241
+00:03:17.440 --> 00:03:21.359
dynamically scoped modules out there. Is there any effort
-03:20.181 --> 03:24.943
+00:03:21.360 --> 00:03:29.759
to automatically modularize and name? Let's see.
-03:30.523 --> 03:35.806
+00:03:29.760 --> 00:03:40.919
That might be a better question for Robin Templeton. In my
-03:36.727 --> 03:46.573
+00:03:40.920 --> 00:03:44.639
own project,
-03:36.727 --> 03:46.573
+00:03:44.640 --> 00:03:49.399
there's no module system for Emacs Lisp. There is a module
-03:46.693 --> 03:48.234
+00:03:49.400 --> 00:03:55.559
system for Scheme. And the Emacs Lisp interpreter runs in
-03:49.695 --> 03:55.158
+00:03:55.560 --> 00:04:01.599
its own environment. the require system or whatever module
-03:57.068 --> 04:11.736
+00:04:01.600 --> 00:04:06.359
system that Emacs has, once it's implemented, all of that
-03:57.068 --> 04:11.736
+00:04:06.360 --> 00:04:09.759
would just happen inside of the Emacs Lisp environment,
-03:57.068 --> 04:11.736
+00:04:09.760 --> 00:04:12.399
which is inside of the Scheme environment. And
-04:12.437 --> 04:15.898
+00:04:12.400 --> 00:04:21.479
environments are objects in Scheme.
-04:21.522 --> 04:24.103
+00:04:21.480 --> 00:04:26.399
I think a more difficult question is how to handle
-04:26.420 --> 04:31.942
+00:04:26.400 --> 00:04:33.279
threading, and Scheme has very good threading built in, in
-04:26.420 --> 04:31.942
+00:04:33.280 --> 00:04:34.839
Serphe-18[??].
-04:34.283 --> 04:48.028
+00:04:34.840 --> 00:04:43.399
But I don't think it will be easy to write Emacs Lisp form
-04:34.283 --> 04:48.028
+00:04:43.400 --> 00:04:48.479
bindings to the Scheme multi-threading implementation.
-04:48.548 --> 04:50.749
+00:04:48.480 --> 00:04:52.279
Emacs Lisp was just not cut out for that kind of thing. So I
-04:51.710 --> 04:59.894
+00:04:52.280 --> 00:04:56.559
think each Emacs Lisp, you could, I suppose, have multiple
-04:51.710 --> 04:59.894
+00:04:56.560 --> 00:05:00.039
threads each running their own Emacs Lisp environment.
-05:01.375 --> 05:02.956
+00:05:00.040 --> 00:05:04.999
Scheme would make that very simple to do.
-05:06.018 --> 05:16.744
+00:05:05.000 --> 00:05:08.759
And then there'd just be a question of how you would get those
-05:06.018 --> 05:16.744
+00:05:08.760 --> 00:05:11.679
different interpreters to communicate with each other,
-05:06.018 --> 05:16.744
+00:05:11.680 --> 00:05:16.279
perhaps using the same protocol that's used by the Emacs
-05:06.018 --> 05:16.744
+00:05:16.280 --> 00:05:23.639
server. But I haven't thought that far ahead yet.
NOTE Q: Would it be possible to support a GUI toolkit other than GTK?
-05:23.646 --> 05:28.709
+00:05:23.640 --> 00:05:26.839
Would it be possible to support a GUI toolkit other than the
-05:23.646 --> 05:28.709
+00:05:26.840 --> 00:05:31.319
GTK? Like, how is it still supports Lucid? Yes, this is
-05:31.291 --> 05:33.232
+00:05:31.320 --> 00:05:36.999
absolutely a goal of the project. I'm trying to keep the back
-05:33.873 --> 05:38.416
+00:05:37.000 --> 00:05:41.599
end separate as possible. The scheme has what you call
-05:39.817 --> 05:42.478
+00:05:41.600 --> 00:05:45.239
parameters. And these are like global variables that are
-05:43.199 --> 05:46.221
+00:05:45.240 --> 00:05:50.519
still somewhat thread safe. And every call to the GUI goes
-05:47.484 --> 05:51.225
+00:05:50.520 --> 00:05:58.199
through a parameter. So the Emacs, the interpreter and the
-05:52.125 --> 05:59.367
+00:05:58.200 --> 00:06:01.679
editor logic is all in one module. And then that module calls
-05:59.987 --> 06:04.309
+00:06:01.680 --> 00:06:06.319
out into a separate GUI module. And then you can implement
-06:04.989 --> 06:07.690
+00:06:06.320 --> 00:06:11.599
different GUI modules. So you could have one for GTK3, one
-06:08.430 --> 06:13.171
+00:06:11.600 --> 00:06:16.879
for GTK4, if you want to write the extern C bindings around Qt
-06:13.843 --> 06:20.725
+00:06:16.880 --> 00:06:21.199
or full tick, that would certainly be possible as well. It
-06:21.185 --> 06:32.168
+00:06:21.200 --> 00:06:25.919
would be nice maybe to have an SDL implementation based
-06:21.185 --> 06:32.168
+00:06:25.920 --> 00:06:30.999
maybe on Chikiti or some kind of immediate mode GUI,
-06:21.185 --> 06:32.168
+00:06:31.000 --> 00:06:37.399
something like that. But definitely GTK3 through Guile GI
-06:33.808 --> 06:38.750
+00:06:37.400 --> 00:06:41.319
is the reference implementation. Things start there. But
-06:41.298 --> 06:43.959
+00:06:41.320 --> 00:06:43.999
I'm very interested in supporting other GUIs, yes. Let's
-06:45.199 --> 00:06:45.256
+00:06:44.000 --> 00:06:46.039
see.
NOTE Q: Do you plan to provide improvements to Elisp as a language, or is the focus on a compatibility layer to facilitate doing all new extensions, etc. in Scheme?
-00:06:45.257 --> 00:06:45.879
+00:06:46.040 --> 00:06:50.759
Question, do you plan to provide improvements to ELisp
-06:47.540 --> 06:56.342
+00:06:50.760 --> 00:06:54.519
as a language or focus on a compatibility layer to
-06:47.540 --> 06:56.342
+00:06:54.520 --> 00:06:57.999
facilitate all new extensions in Scheme? Yeah, the second
-06:57.142 --> 06:57.962
+00:06:58.000 --> 00:07:04.719
one. I want to move off to Scheme. I would like for this
-07:03.384 --> 07:05.264
+00:07:04.720 --> 00:07:08.999
project to try and keep up to date with each new release of
-07:05.666 --> 07:10.789
+00:07:09.000 --> 00:07:13.799
Emacs and Emacs Lisp. That's a difficult moving target to
-07:11.850 --> 07:14.552
+00:07:13.800 --> 00:07:18.639
follow, I realize. But to the greatest extent possible, any
-07:15.152 --> 07:23.397
+00:07:18.640 --> 00:07:25.239
new features to Emacs Lisp will be pulled in from GNU Emacs.
-07:25.419 --> 07:29.041
+00:07:25.240 --> 00:07:28.599
If we happen to be able to implement something cool in
-07:25.419 --> 07:29.041
+00:07:28.600 --> 00:07:31.639
Scheme, and be able to port it over to Emacs Lisp, then sure,
-07:29.437 --> 07:36.543
+00:07:31.640 --> 00:07:35.799
it'd be nice to be able to upload or to submit that upstream to
-07:29.437 --> 07:36.543
+00:07:35.800 --> 00:07:43.079
the GNU Emacs. But I think I would prefer to have new features
-07:38.584 --> 07:43.708
+00:07:43.080 --> 00:07:47.799
written in Scheme. I would like this gypsum to be more of a
-07:43.989 --> 07:52.075
+00:07:47.800 --> 00:07:51.479
Scheme app platform that just happens to be able to also run
-07:43.989 --> 07:52.075
+00:07:51.480 --> 00:07:56.199
Emacs Lisp. That's how I see it. Of course, this will be a
-07:54.577 --> 07:56.699
+00:07:56.200 --> 00:08:00.799
community project. I'm open to debate about that if anybody
-07:58.809 --> 08:02.012
+00:08:00.800 --> 00:08:02.079
wants to convince me otherwise.
-08:08.439 --> 08:11.683
+00:08:02.080 --> 00:08:11.759
Why is being able to interpret all of that EL a useful goal?
-08:12.464 --> 08:14.626
+00:08:11.760 --> 00:08:15.519
Sure, there is a lot of code written in Elisp. Can we
-08:15.206 --> 08:17.749
+00:08:15.520 --> 00:08:18.959
consider... Oh, it's still being written. Please go ahead
-08:18.390 --> 08:19.491
+00:08:18.960 --> 00:08:19.439
and finish writing.
NOTE Q: Can we consider a translator like utility to convert elisp to scheme, once guile-emacs becomes a reality?
-08:29.673 --> 08:35.576
+00:08:19.440 --> 00:08:32.519
Can we consider a translator like utility to convert eLisp
-08:29.673 --> 08:35.576
+00:08:32.520 --> 00:08:37.519
to Scheme once Guile-Emacs has become a reality?
-08:36.716 --> 08:37.076
+00:08:37.520 --> 00:08:42.119
Certainly. For the time being, I just wanted to get the
-08:38.717 --> 08:42.639
+00:08:42.120 --> 00:08:47.559
interpreter running. So the actual, the Guile-Emacs Lisp,
-08:44.520 --> 08:58.666
+00:08:47.560 --> 00:08:51.919
the one that was written in 2011 that I didn't write, that
-08:44.520 --> 08:58.666
+00:08:51.920 --> 00:08:57.599
actually does compile to, I think it's the tree
-08:44.520 --> 08:58.666
+00:08:57.600 --> 00:08:59.239
intermediate representation It's one of the intermediate
-08:59.076 --> 09:03.697
+00:08:59.240 --> 00:09:03.759
languages that Guile uses to compile Guile scheme itself.
-09:04.817 --> 09:09.299
+00:09:03.760 --> 00:09:09.079
So the Emacs lisp that was written before actually does
-09:04.817 --> 09:09.299
+00:09:09.080 --> 00:09:13.119
that. It actually compiles and makes use of the entire Guile
-09:09.339 --> 09:20.761
+00:09:13.120 --> 00:09:17.479
compiler tool chain and actually produces like JIT
-09:09.339 --> 09:20.761
+00:09:17.480 --> 00:09:21.719
compilable binaries, which is really cool. Like I said,
-09:23.342 --> 09:25.943
+00:09:21.720 --> 00:09:27.519
that's the one that I had trouble getting to work properly.
-09:29.209 --> 09:30.890
+00:09:27.520 --> 00:09:34.399
Maybe we can follow that architecture. I'm not sure how to do
-09:33.052 --> 09:45.102
+00:09:34.400 --> 00:09:37.919
that, but I would like to be able to do some kind of
-09:33.052 --> 09:45.102
+00:09:37.920 --> 00:09:41.999
translating, keeping in mind that we want to have this be
-09:33.052 --> 09:45.102
+00:09:42.000 --> 00:09:48.919
portable, do various schemes. And so Guile makes this very
-09:45.988 --> 09:50.289
+00:09:48.920 --> 00:09:52.719
easy, but other schemes don't. Gambit might do this pretty
-09:51.549 --> 09:53.530
+00:09:52.720 --> 00:09:57.919
well as well. It compiles to C and then compiles C down to a
-09:53.950 --> 10:01.471
+00:09:57.920 --> 00:10:06.159
dynamically linkable library. So yeah, I think probably
-10:03.372 --> 10:09.373
+00:10:06.160 --> 00:10:09.559
the most portable, I'm just thinking out loud right now,
-10:10.652 --> 10:21.715
+00:10:09.560 --> 00:10:13.239
most portable implementation will just be able to
-10:10.652 --> 10:21.715
+00:10:13.240 --> 00:10:17.119
translate Emacs Lisp directly to Scheme, which is not what
-10:10.652 --> 10:21.715
+00:10:17.120 --> 00:10:22.439
the old Guile Emacs Lisp implementation does. That goes to
-10:21.755 --> 10:26.777
+00:10:22.440 --> 00:10:26.439
TreeIL, so it's very, very Guile-specific, can't be
-10:21.755 --> 10:26.777
+00:10:26.440 --> 00:10:30.799
ported. But yeah, if we could somehow get Emacs Lisp
-10:28.359 --> 10:42.045
+00:10:30.800 --> 00:10:36.999
translated to Scheme and then compiled, say, in Shea Scheme
-10:28.359 --> 10:42.045
+00:10:37.000 --> 00:10:40.879
or Gambit or MIT Scheme or one of those other compilers, that
-10:28.359 --> 10:42.045
+00:10:40.880 --> 00:10:44.919
would be very cool. And I would absolutely love to do that.
-10:44.906 --> 10:49.948
+00:10:44.920 --> 00:10:49.279
And I would very quickly accept any code into the code base
-10:44.906 --> 10:49.948
+00:10:49.280 --> 00:10:50.599
that would do that.
NOTE Q: Why is being able to interpret all of \`init.el\` an useful goal?
-10:54.390 --> 10:56.291
+00:10:50.600 --> 00:10:59.119
Oh, and to answer the question about init.el,
-10:59.207 --> 11:17.215
+00:10:59.120 --> 00:11:02.839
It's just because people spend a lot of time on their configs
-10:59.207 --> 11:17.215
+00:11:02.840 --> 00:11:06.959
and it would be nice if, you know, you're starting to use this
-10:59.207 --> 11:17.215
+00:11:06.960 --> 00:11:14.079
new editor and want it to be similar to Emacs users, just the
-10:59.207 --> 11:17.215
+00:11:14.080 --> 00:11:16.519
Emacs community in general and people who are familiar with
-10:59.207 --> 11:17.215
+00:11:16.520 --> 00:11:20.879
using Emacs. It would be more useful to everybody in the
-11:17.715 --> 11:25.379
+00:11:20.880 --> 00:11:25.119
Emacs community if this were more compatible with GNU
-11:17.715 --> 11:25.379
+00:11:25.120 --> 00:11:35.999
Emacs. And so that's why that's, I think that's an important
-11:25.679 --> 11:27.960
+00:11:36.000 --> 00:11:38.559
goal.
-11:34.465 --> 11:35.467
+00:11:38.560 --> 00:12:01.839
Question is not yet. Great. Oh, here comes another
-11:38.471 --> 11:39.613
+00:12:01.840 --> 00:12:02.279
question.
NOTE Q: What is the plan to handle elisp packages that depend on 3rd party/external libraries? (libgit/magit or rg/ripgrep)?
-12:08.539 --> 12:17.742
+00:12:02.280 --> 00:12:11.879
Okay, what is the plan to handle elisp packages that depend
-12:08.539 --> 12:17.742
+00:12:11.880 --> 00:12:16.119
on third-party or external libraries like git or magit
-12:08.539 --> 12:17.742
+00:12:16.120 --> 00:12:22.719
or ripgrep? So that's going to be tricky. It depends on how
-12:21.523 --> 12:26.224
+00:12:22.720 --> 00:12:27.079
these external packages are linked into emacs. If it's
-12:26.844 --> 12:33.646
+00:12:27.080 --> 00:12:32.879
going to be a dynamic library like Robin Templeton's
-12:26.844 --> 12:33.646
+00:12:32.880 --> 00:12:38.039
project which you load the libgit library into the Emacs
-12:35.289 --> 12:41.931
+00:12:38.040 --> 00:12:43.159
process, that is going to be extremely difficult. So if you
-12:44.032 --> 12:52.975
+00:12:43.160 --> 00:12:49.359
have an external library like, I don't know, libgit or
-12:44.032 --> 12:52.975
+00:12:49.360 --> 00:12:59.279
what's the GUI thing? Cabal. No, not Cabal. Cairo, libcairo
-12:57.736 --> 13:01.398
+00:12:59.280 --> 00:13:01.439
to do SVG graphics and so on.
-13:04.483 --> 13:17.480
+00:13:01.440 --> 00:13:09.719
You can do that very easily with Guile, but then on top of
-13:04.483 --> 13:17.480
+00:13:09.720 --> 00:13:14.719
that, implementing Emacs list bindings to it, I mean,
-13:04.483 --> 13:17.480
+00:13:14.720 --> 00:13:17.199
you've got two layers there, and that makes things pretty
-13:04.483 --> 13:17.480
+00:13:17.200 --> 00:13:23.119
difficult. So it's possible. And to some degree, maybe
-13:21.935 --> 13:30.842
+00:13:23.120 --> 00:13:27.799
necessary for example, Cairo, if we want to do SVG graphics
-13:21.935 --> 13:30.842
+00:13:27.800 --> 00:13:30.599
the way that Emacs Lisp does, we're going to have to have
-13:21.935 --> 13:30.842
+00:13:30.600 --> 00:13:33.959
that. So that would be necessary. We would have to have those
-13:32.643 --> 13:33.944
+00:13:33.960 --> 00:13:39.199
two layers. Yes, let's do that. But if it's like for Magit,
-13:38.047 --> 13:50.596
+00:13:39.200 --> 00:13:45.479
you can just call out to your git process, and then you're
-13:38.047 --> 13:50.596
+00:13:45.480 --> 00:13:50.719
just using the regular process APIs that Emacs Lisp has. And
-13:51.451 --> 13:58.475
+00:13:50.720 --> 00:13:57.119
that can be, already we, like Guile has some very good
-13:51.451 --> 13:58.475
+00:13:57.120 --> 00:14:08.079
implementations for process management. And so it would
-13:59.055 --> 14:05.438
+00:14:08.080 --> 00:14:12.439
just be a matter of wrapping up those in the Emacs lisp form
-13:59.055 --> 14:05.438
+00:14:12.440 --> 00:14:24.919
bindings. So yeah, dynamic libraries, I wanna try to avoid.
-14:12.222 --> 14:20.366
+00:14:24.920 --> 00:14:32.799
And I would prefer to do things more through, you know,
-14:12.222 --> 14:20.366
+00:14:32.800 --> 00:14:40.399
launching a child process in the Emacs process. and then
-14:20.956 --> 14:24.798
+00:14:40.400 --> 00:14:47.239
communicating over the standard in, standard out
-14:20.956 --> 14:24.798
+00:14:47.240 --> 00:14:47.959
channels.
-14:29.460 --> 14:40.386
+00:14:47.960 --> 00:14:52.799
That's the easier way to do things, I think, because then you
-14:29.460 --> 14:40.386
+00:14:52.800 --> 00:14:58.519
can just use the process library that Emacs already has, and
-14:29.460 --> 14:40.386
+00:14:58.520 --> 00:15:03.239
you can just reuse all of that code.
-14:43.969 --> 14:49.912
+00:15:03.240 --> 00:15:09.079
I'm not sure how ripgrep works, unfortunately, but I
-14:43.969 --> 14:49.912
+00:15:09.080 --> 00:15:15.279
believe that's also a process, a child process. So, we can
-14:50.412 --> 14:53.774
+00:15:15.280 --> 00:15:23.479
just reuse all of the Emacs Lisp code that does that already.
-14:54.014 --> 15:05.979
+00:15:23.480 --> 00:15:30.399
We just need to make sure that the process management
-14:54.014 --> 15:05.979
+00:15:30.400 --> 00:15:35.119
implementation and scheme is properly bound to Emacs Lisp,
-14:54.014 --> 15:05.979
+00:15:35.120 --> 00:15:43.359
and it works the same as GNU Emacs does. Once that's all set,
-15:06.360 --> 15:13.383
+00:15:43.360 --> 00:15:48.399
then these porcelains, like around git, should fall into
-15:06.360 --> 15:13.383
+00:15:48.400 --> 00:15:55.279
place. without too much difficulty, hopefully.
NOTE Q: Not really a question, but how about Schemacs as a name?
-15:21.112 --> 15:22.593
+00:15:55.280 --> 00:15:59.199
How about Schemax as a name? I like the name. I like that name.
-15:28.937 --> 15:32.920
+00:15:59.200 --> 00:16:03.119
I haven't really looked into like, is that already used or is
-15:28.937 --> 15:32.920
+00:16:03.120 --> 00:16:09.759
that going to be confusing? But certainly something we can
-15:33.380 --> 15:35.021
+00:16:09.760 --> 00:16:10.959
discuss.
-15:38.243 --> 15:39.264
+00:16:10.960 --> 00:16:13.039
Another thing I should mention,
-15:42.157 --> 15:48.278
+00:16:13.040 --> 00:16:18.759
I should probably set up a server or something like Discord
-15:42.157 --> 15:48.278
+00:16:18.760 --> 00:16:25.359
or something like that. Discourse, not Discord.
-15:51.619 --> 15:56.220
+00:16:25.360 --> 00:16:31.599
Discourse, the open source one, where we could actually
-15:51.619 --> 15:56.220
+00:16:31.600 --> 00:16:49.239
chat about this stuff. For the time being, ActivityPub,
-15:56.540 --> 16:05.562
+00:16:49.240 --> 00:16:52.399
mostly Mastodon, is how I communicate with people in real
-15:56.540 --> 16:05.562
+00:16:52.400 --> 00:16:57.279
time, that or email. So if you want to get a hold of me, check
-16:09.809 --> 16:15.571
+00:16:57.280 --> 00:17:02.439
the notes for this presentation and just send me an email.
-16:16.752 --> 16:18.012
+00:17:02.440 --> 00:17:09.039
Any question at all is fine. If you want to contribute code,
-16:19.633 --> 16:25.495
+00:17:09.040 --> 00:17:12.799
if you want to just learn how to contribute code, send me any
-16:19.633 --> 16:25.495
+00:17:12.800 --> 00:17:22.199
questions. It's fine. I'm happy to answer them. And we can
-16:30.256 --> 16:31.757
+00:17:22.200 --> 00:17:25.879
talk about the name as well.
NOTE Q: Why is it not feasible for the Emacs layer that interprets Emacs Lisp (the core in C) ot have a Scheme interpreter, instead of using Guile?
-16:45.931 --> 16:54.215
+00:17:25.880 --> 00:17:30.239
Okay, why is it not feasible for the Emacs layer that
-16:45.931 --> 16:54.215
+00:17:30.240 --> 00:17:34.319
interprets Emacs Lisp, the core in C, have a Scheme
-16:45.931 --> 16:54.215
+00:17:34.320 --> 00:17:39.799
interpreter instead of using Guile? Let's see, I have to,
-16:55.496 --> 16:57.257
+00:17:39.800 --> 00:17:48.799
okay. Emacs layer interprets Emacs Lisp, the core in C, have
-16:57.737 --> 17:05.942
+00:17:48.800 --> 00:17:54.079
a Scheme interpreter instead of using Guile. Okay, so that,
-17:07.362 --> 17:13.906
+00:17:54.080 --> 00:17:59.959
the question xlarsx is asking, xlars, x, So Lars is asking,
-17:14.744 --> 17:28.093
+00:17:59.960 --> 00:18:02.319
is it not feasible for there to be an
-17:14.744 --> 17:28.093
+00:18:02.320 --> 00:18:06.839
Emacs layer that interprets Emacs Lisp have a scheme
-17:14.744 --> 17:28.093
+00:18:06.840 --> 00:18:33.079
interpreter? This is Robin Templeton's project. And
-17:30.815 --> 17:32.156
+00:18:33.080 --> 00:18:39.839
they're presenting later today. So check the roster and be
-17:32.697 --> 17:41.303
+00:18:39.840 --> 00:18:45.199
sure to see that presentation because that's exactly what
-17:32.697 --> 17:41.303
+00:18:45.200 --> 00:18:52.119
Robin Templeton is doing. That's not what I'm doing though.
-17:44.419 --> 17:46.459
+00:18:52.120 --> 00:18:57.239
I'm trying to create something in Scheme. But yes, there is
-17:48.280 --> 17:54.921
+00:18:57.240 --> 00:19:02.959
an attempt to get an Scheme interpreter to run inside of
-17:48.280 --> 17:54.921
+00:19:02.960 --> 00:19:07.159
Emacs itself. And it has its own method of binding to Emacs
-17:55.181 --> 18:05.323
+00:19:07.160 --> 00:19:11.199
Lisp functions and translating data like Lisp structures
-17:55.181 --> 18:05.323
+00:19:11.200 --> 00:19:14.439
between Guile Scheme and Emacs Lisp. Robin will explain all
-18:05.943 --> 18:08.284
+00:19:14.440 --> 00:19:15.799
of that in their presentation.
-18:28.519 --> 18:33.020
+00:19:15.800 --> 00:19:18.919
OK, I think I've got through all the questions on Etherpad.
-18:33.620 --> 18:35.500
+00:19:18.920 --> 00:19:23.879
But I'm going to hang out here for a bit longer. And yeah, feel
-18:37.621 --> 18:46.182
+00:19:23.880 --> 00:19:28.239
free to do a video chat with me or send me more questions on
-18:37.621 --> 18:46.182
+00:19:28.240 --> 00:19:33.839
Etherpad or here in the big blue button. And so I'm just going
-18:47.002 --> 18:48.082
+00:19:33.840 --> 00:21:49.119
to hang out. And thanks for asking all your questions. And
-18:51.663 --> 18:56.024
+00:21:49.120 --> 00:21:50.839
yeah, I look forward to working with all of you if you're
-18:51.663 --> 18:56.024
+00:21:50.840 --> 00:21:51.799
interested. take it easy. Thanks so much for the talk and
-18:59.935 --> 19:08.180
+00:21:51.800 --> 00:21:53.199
looking forward to seeing some of your progress as this
-18:59.935 --> 19:08.180
+00:21:53.200 --> 00:21:54.359
moves forward, exciting space. We'll go ahead and leave the
-19:09.261 --> 19:14.925
+00:21:54.360 --> 00:21:54.879
room open for you and thanks for offering to hang out and chat
-19:09.261 --> 19:14.925
+00:21:54.880 --> 00:21:55.639
with other people that come by. Feel free to throw something
-19:15.025 --> 19:18.287
+00:21:55.640 --> 00:21:56.719
in the chat if you want to remind people you're still here.
-19:19.557 --> 19:25.143
+00:21:56.720 --> 00:21:57.919
Meanwhile, on the stream, we have moved along to our next
-19:19.557 --> 19:25.143
+00:21:57.920 --> 00:21:59.599
talk on Rust, and that is just getting started. But again,
-19:25.283 --> 19:30.549
+00:21:59.600 --> 00:22:00.479
we're continuing to record this, and I'll just keep an eye on
-19:25.283 --> 19:30.549
+00:22:00.480 --> 00:22:01.239
it to stop the recording. Thank you. Thank you. It was
-19:33.352 --> 19:33.853
+00:22:01.240 --> 00:22:01.559
awesome.
-21:47.935 --> 21:50.558
+00:22:01.560 --> 00:22:03.959
So it seems like it's slowed down here for the Q&A. I don't see
-21:50.638 --> 21:53.741
+00:22:03.960 --> 00:22:05.439
anybody else on BBB, so I'm going to go ahead and stop the
-21:50.638 --> 21:53.741
+00:22:05.440 --> 00:22:08.479
recording. We can start it back up. I would say, yes, there's
-21:55.282 --> 21:58.906
+00:22:08.480 --> 00:22:09.519
a lot of things you can do with this. You can handle
-21:58.926 --> 22:00.627
+00:22:09.520 --> 00:22:11.239
processing. Yeah, I'm going to try and join over the chat for
-22:02.029 --> 22:07.614
+00:22:11.240 --> 00:22:14.679
the next talk. I'm not sure if I can do both big blue buttons at
-22:08.635 --> 22:11.538
+00:22:14.680 --> 00:22:15.759
the same time. You should be able to just watch your mute
-22:13.206 --> 22:19.998
+00:22:15.760 --> 00:22:19.159
settings and mute tab settings and whatever all you have to
-22:13.206 --> 22:19.998
+00:22:19.160 --> 00:23:37.800
avoid bleed through. Okay.
diff --git a/2024/captions/emacsconf-2024-julia--exploring-shared-philosophies-in-julia-and-emacs--gabriele-bozzola--answers.vtt b/2024/captions/emacsconf-2024-julia--exploring-shared-philosophies-in-julia-and-emacs--gabriele-bozzola--answers.vtt
index d37f80ef..5f0d3fc5 100644
--- a/2024/captions/emacsconf-2024-julia--exploring-shared-philosophies-in-julia-and-emacs--gabriele-bozzola--answers.vtt
+++ b/2024/captions/emacsconf-2024-julia--exploring-shared-philosophies-in-julia-and-emacs--gabriele-bozzola--answers.vtt
@@ -2,345 +2,345 @@ WEBVTT
NOTE Q: Do you have any suggestions for interactive debugging of Julia code in Emacs?
-00:00.089 --> 00:00.829
+00:00:00.000 --> 00:00:05.319
... answer to that. I, I think the infrastructure for an
-00:01.509 --> 00:14.192
+00:00:05.320 --> 00:00:08.599
ecosystem in Julia in general is as mature as other
-00:01.509 --> 00:14.192
+00:00:08.600 --> 00:00:12.559
languages, and even debugger infiltrator themselves are
-00:01.509 --> 00:14.192
+00:00:12.560 --> 00:00:17.519
not particularly well developed. And so I don't think
-00:15.853 --> 00:19.214
+00:00:17.520 --> 00:00:21.519
there's much we can do about that right now. I think that it's
-00:21.570 --> 00:28.057
+00:00:21.520 --> 00:00:25.999
unfortunate that most of the development for these type of
-00:21.570 --> 00:28.057
+00:00:26.000 --> 00:00:31.759
tools is tightly linked to VS code. But even there, I don't
-00:29.218 --> 00:36.225
+00:00:31.760 --> 00:00:35.719
think that there's much done in terms of interactive
-00:29.218 --> 00:36.225
+00:00:35.720 --> 00:00:42.359
debugging. So I, yeah, I think this has to be worked on mostly
-00:36.866 --> 00:43.213
+00:00:42.360 --> 00:00:47.519
on the Julia side first. And then probably Emacs can get
-00:43.820 --> 00:48.303
+00:00:47.520 --> 00:00:51.239
something out of that. I know that there's development in
-00:49.183 --> 00:57.728
+00:00:51.240 --> 00:00:55.559
debugger.jl itself for future releases to make it at least
-00:49.183 --> 00:57.728
+00:00:55.560 --> 00:01:01.839
faster and more stable. But yeah, I think we're not there as
-00:58.809 --> 01:03.852
+00:01:01.840 --> 00:01:06.879
Julia community itself. So let alone Emacs, integration
-01:04.192 --> 01:07.234
+00:01:06.880 --> 00:01:11.239
with Emacs. The way I personally debug is mostly using,
-01:08.286 --> 01:15.508
+00:01:11.240 --> 00:01:15.199
well, debugger and infiltrator with Julia REPL mode in
NOTE Q: Can you call out something that Julia has that Emacs does not, and which could benefit Emacs?
-01:08.286 --> 01:15.508
+00:01:15.200 --> 00:01:21.679
Emacs. The second question, can you call out something that
-01:18.009 --> 01:24.891
+00:01:21.680 --> 00:01:26.839
Julia has that Emacs does not and which could benefit Emacs?
-01:26.852 --> 01:27.852
+00:01:26.840 --> 00:01:31.879
Nothing stands out to me except the usual multi-threading
-01:28.848 --> 01:32.552
+00:01:31.880 --> 00:01:36.119
and things like this. I don't necessarily see something
-01:33.432 --> 01:46.783
+00:01:36.120 --> 00:01:42.479
that Julia has going on that DMX doesn't have, but I see some
-01:33.432 --> 01:46.783
+00:01:42.480 --> 00:01:45.839
differences and approaches that I think are important,
-01:33.432 --> 01:46.783
+00:01:45.840 --> 00:01:49.759
like the community. I think Julia is a very active and tight
-01:47.384 --> 01:50.266
+00:01:49.760 --> 00:01:54.159
community. Julia uses Slack and is very, very active. I
-01:54.093 --> 01:57.736
+00:01:54.160 --> 00:01:56.559
think he might say something like that, but it's maybe more
-01:54.093 --> 01:57.736
+00:01:56.560 --> 00:02:01.799
on Reddit, IRC. JuliaCon is big and brings together lots and
-01:59.078 --> 02:02.381
+00:02:01.800 --> 00:02:05.159
lots of people. And I think the sense of community is really
-02:03.221 --> 02:05.263
+00:02:05.160 --> 00:02:10.479
powerful. It's very easy to essentially meet people that
-02:06.364 --> 02:16.834
+00:02:10.480 --> 00:02:12.919
are interested in what we're building and interested in
-02:06.364 --> 02:16.834
+00:02:12.920 --> 00:02:15.999
what we're doing and interested in Julian, our, you know,
-02:06.364 --> 02:16.834
+00:02:16.000 --> 00:02:21.239
hacker spirit. I think Emacs is a very strong community.
-02:21.228 --> 02:26.151
+00:02:21.240 --> 00:02:24.279
We're here on a Saturday talking about Emacs, which again
-02:21.228 --> 02:26.151
+00:02:24.280 --> 00:02:29.679
proves that we are doing this. But I'd like to emphasize that
-02:27.192 --> 02:35.696
+00:02:29.680 --> 00:02:33.639
the community is a really important aspect in Julia that I
-02:27.192 --> 02:35.696
+00:02:33.640 --> 00:02:38.159
think we should double down on our side. The next question is
NOTE Q: Is there a way to use lisp syntax with Julia, like hy for python or lisp flavoured erlang?
-02:36.797 --> 02:44.841
+00:02:38.160 --> 00:02:46.519
about Lisp syntax with Julia, like what we can do in Python.
-02:48.038 --> 02:53.180
+00:02:46.520 --> 00:02:52.359
I don't think that's, I don't, I am not aware of any package
-02:48.038 --> 02:53.180
+00:02:52.360 --> 00:02:56.879
that does that. I would bet that there's something there. I
-02:56.722 --> 02:58.063
+00:02:56.880 --> 00:03:01.519
think that that's possible. Indeed, there used to be a Lisp
-02:59.243 --> 03:07.027
+00:03:01.520 --> 00:03:08.079
interpreter in Julia itself until the latest release. The
-03:07.647 --> 03:12.229
+00:03:08.080 --> 00:03:12.039
syntax parsing was done with a Lisp, it was called TemtoList
-03:07.647 --> 03:12.229
+00:03:12.040 --> 00:03:18.679
indeed. I think this got rid, get rid of this for our more
-03:16.124 --> 03:23.489
+00:03:18.680 --> 00:03:23.039
Julia-based solution that is faster and with better code
-03:16.124 --> 03:23.489
+00:03:23.040 --> 00:03:28.599
provenance. I think that it should be possible to use the
-03:25.430 --> 03:35.437
+00:03:28.600 --> 00:03:33.319
metaprogramming features in Julia to change the structure
-03:25.430 --> 03:35.437
+00:03:33.320 --> 00:03:38.159
of your syntax to be a Lispy syntax. I do want to emphasize
-03:36.238 --> 00:03:44.664
+00:03:38.160 --> 00:03:43.879
that Julia is heavily inspired by Lisp, so I wouldn't be
-03:36.238 --> 03:44.664
+00:03:43.880 --> 00:03:49.239
surprised if if something like this were possible.
-03:49.309 --> 00:03:51.167
+00:03:49.240 --> 00:03:51.239
I have tried Julia Snail.
NOTE Q: Have you tried the Julia Snail package for Emacs? It tries to be like SLY/SLIME for Common Lisp.
-00:03:51.168 --> 00:03:51.070
+00:03:51.240 --> 00:03:54.399
So the next question is about Julia
-03:51.270 --> 03:52.712
+00:03:54.400 --> 00:03:58.199
Snail. I found Julia REPL to be a little bit easier to set up
-03:53.312 --> 03:58.436
+00:03:58.200 --> 00:04:02.839
and use. So I just settled on that. I should maybe revisit
-04:00.918 --> 04:03.480
+00:04:02.840 --> 00:04:05.999
that. In particular, I use the Julia REPL with the vterm
-04:03.720 --> 04:11.406
+00:04:06.000 --> 00:04:10.959
backend, which essentially makes a companion REPL to my
-04:03.720 --> 04:11.406
+00:04:10.960 --> 00:04:15.439
scripts. And that works for me. I do think that the tooling
-04:15.638 --> 04:16.518
+00:04:15.440 --> 00:04:19.239
uh, could be improved. I think there is definitely much room
-04:17.399 --> 04:22.040
+00:04:19.240 --> 00:04:26.079
and I would like to see improvement in that area. Um, and, uh,
NOTE Q: Is there a data inspector for a Julia REPL available that you can use in Emacs?
-04:22.940 --> 04:28.322
+00:04:26.080 --> 00:04:31.639
so we have data inspector for Julia REPL.
-04:32.043 --> 04:34.784
+00:04:31.640 --> 00:04:37.279
I don't think so. I don't, is there any data inspector
-04:34.804 --> 04:39.826
+00:04:37.280 --> 00:04:40.439
in for, for the Julia REPL that we can use in Emacs?
-04:43.223 --> 00:04:43.489
+00:04:40.440 --> 00:04:44.839
I'm not sure. I don't think so.
-00:04:44.840 --> 00:04:47.839
+00:04:44.840 --> 00:04:47.799
I think the way I look at data is
-00:04:47.840 --> 00:04:50.519
+00:04:47.800 --> 00:04:50.519
essentially ignoring Emacs when encoded. It's just using the
-00:04:50.520 --> 00:04:54.759
+00:04:50.520 --> 00:04:56.839
REPL. And again, with Julia REPL. So I'm not aware of any
-00:04:54.760 --> 00:04:57.720
+00:04:56.840 --> 00:05:00.479
specialized tool And again, maybe this is, again, a good
-04:58.652 --> 05:05.595
+00:05:00.480 --> 00:05:04.279
moment to emphasize that tooling, the Julia community
-04:58.652 --> 05:05.595
+00:05:04.280 --> 00:05:09.079
clusters around VS Code. And there is tools like the, pretty
-05:06.315 --> 05:11.578
+00:05:09.080 --> 00:05:14.199
much all the work with VS Code, unfortunately. And while
-05:12.578 --> 05:21.242
+00:05:14.200 --> 00:05:17.759
there's a very, very decent Julia mode and Julia repo mode
-05:12.578 --> 05:21.242
+00:05:17.760 --> 00:05:21.439
and Julia snail, there's definitely, definitely room for
-05:12.578 --> 05:21.242
+00:05:21.440 --> 00:05:24.359
improvement.
NOTE Q: Have you tried literate programming Julia (using Org babel or some other means) in Emacs?
-05:24.443 --> 05:28.145
+00:05:24.360 --> 00:05:27.759
Next, we have a question about literate programming in
-05:24.443 --> 05:28.145
+00:05:27.760 --> 00:05:32.439
Julia. I haven't done much of it with Org Babel or
-05:29.505 --> 05:32.906
+00:05:32.440 --> 00:05:37.079
anything else. I haven't done much of it. I can say that Julia
-05:35.827 --> 05:46.070
+00:05:37.080 --> 00:05:40.719
has developed a new iteration of notebooks called Pluto.
-05:46.090 --> 05:48.471
+00:05:40.720 --> 00:05:47.119
Here I'm thinking about Jupyter notebooks. The Pluto
-05:51.021 --> 06:02.988
+00:05:47.120 --> 00:05:55.359
notebooks for Julia try to remove a bunch of the pain points
-05:51.021 --> 06:02.988
+00:05:55.360 --> 00:06:00.439
that Jupyter notebooks have, meaning you cannot easily
-05:51.021 --> 06:02.988
+00:06:00.440 --> 00:06:03.639
commit them to Git or things like this.
-06:06.450 --> 06:09.152
+00:06:03.640 --> 00:06:09.279
I haven't used them, but I know some people are very fond of
-06:06.450 --> 06:09.152
+00:06:09.280 --> 00:06:13.559
them. And so I think that that's what some of the Julia
-06:09.872 --> 06:15.195
+00:06:13.560 --> 00:06:16.879
community would use for notebooks. And I think they can
-06:15.315 --> 06:19.298
+00:06:16.880 --> 00:06:22.239
interact with Emacs with no problem. And that would be a form
-06:20.974 --> 06:23.035
+00:06:22.240 --> 00:06:26.879
of later programming. But if you can do it in Python, you can
-06:24.015 --> 06:27.696
+00:06:26.880 --> 00:06:32.119
do it in Julia. I think there is no reason. And actually, you
-06:30.617 --> 06:38.719
+00:06:32.120 --> 00:06:35.839
can take advantage of all this just-in-time or
-06:30.617 --> 06:38.719
+00:06:35.840 --> 00:06:38.239
just-out-of-time compilation by keeping the same
-06:30.617 --> 06:38.719
+00:06:38.240 --> 00:06:45.199
session. So I think it will be definitely a nice use case. So
-06:44.681 --> 06:47.222
+00:06:45.200 --> 00:06:49.199
these are the questions that I see here. I'm going to scroll
-06:48.561 --> 06:54.486
+00:06:49.200 --> 00:06:52.759
through the comments and see if there's something that I
-06:48.561 --> 06:54.486
+00:06:52.760 --> 00:06:57.319
should say about comments. I'm excited people want to learn
-06:56.228 --> 06:57.669
+00:06:57.320 --> 00:07:02.519
Julia. I have to say that if I want to do GPU computing
-06:58.990 --> 07:06.757
+00:07:02.520 --> 00:07:06.399
nowadays, I find it much easier to do it with Julia than with
-06:58.990 --> 07:06.757
+00:07:06.400 --> 00:07:11.759
CUDA. So I encourage people to look into that. And I do,
-07:11.758 --> 07:26.807
+00:07:11.760 --> 00:07:19.359
again, I would like to share what makes me excited about
-07:11.758 --> 07:26.807
+00:07:19.360 --> 00:07:23.799
Emacs, about this being open, being collaborative, being
-07:11.758 --> 07:26.807
+00:07:23.800 --> 00:07:26.399
respectable with documentation is something that I find in
-07:11.758 --> 07:26.807
+00:07:26.400 --> 00:07:30.999
Julia. So I think people that are excited about the same
-07:27.367 --> 07:35.192
+00:07:31.000 --> 00:07:35.279
features will find a little bit of joy in working with Julia.
-07:38.214 --> 07:39.675
+00:07:35.280 --> 00:07:41.999
I think I addressed what I have here. I don't know if there's
-07:40.189 --> 07:43.532
+00:07:42.000 --> 00:07:43.559
anything else that I should add.
-07:51.718 --> 07:54.000
+00:07:43.560 --> 00:07:52.879
It took me a minute to unmute there.
-00:07:54.040 --> 00:07:58.399
+00:07:52.880 --> 00:07:57.519
No, I think that was awesome. And thank you so much.
-00:07:58.400 --> 00:08:00.399
+00:07:57.520 --> 00:08:00.119
I guess I thought it would
-00:08:00.400 --> 00:08:06.559
+00:08:00.120 --> 00:08:06.279
collapse that shared area on BBB, my mistake, on the stream,
-00:08:06.560 --> 00:08:12.399
+00:08:06.280 --> 00:08:12.359
or I would have left it open. But in any case, no, I thought
-00:08:12.400 --> 00:08:15.079
+00:08:12.360 --> 00:08:15.079
that was great. You did a great job of responding to all the
-00:08:15.080 --> 00:08:17.879
+00:08:15.080 --> 00:08:17.839
questions and comments. And thank you again so much for your
-00:08:17.880 --> 00:08:20.920
+00:08:17.840 --> 00:08:23.199
talk and getting us all excited to learn Julia. Thank you.
-08:24.094 --> 08:25.275
+00:08:23.200 --> 00:08:27.759
Enjoy EmacsConf. And again, thanks so much for attending,
-08:25.335 --> 08:30.220
+00:08:27.760 --> 00:08:42.400
for being EmacsConf. Thank you.
diff --git a/2024/captions/emacsconf-2024-org-update--the-future-of-org--ihor-radchenko--main.vtt b/2024/captions/emacsconf-2024-org-update--the-future-of-org--ihor-radchenko--main.vtt
index 6b092bd1..9a13366b 100644
--- a/2024/captions/emacsconf-2024-org-update--the-future-of-org--ihor-radchenko--main.vtt
+++ b/2024/captions/emacsconf-2024-org-update--the-future-of-org--ihor-radchenko--main.vtt
@@ -1810,7 +1810,7 @@ participate in the mailing list, it's not ideal, but I can
still work with this. I am on IRC, I am on Matrix,
00:35:16.006 --> 00:35:19.799
-you can ping me, it's yantar2.
+you can ping me, it's yantar92.
00:35:19.800 --> 00:35:22.347
We also have monthly meetup,
diff --git a/2024/captions/emacsconf-2024-papers--writing-academic-papers-in-orgroam--vincent-conus--answers.vtt b/2024/captions/emacsconf-2024-papers--writing-academic-papers-in-orgroam--vincent-conus--answers.vtt
index 392644e1..1ab5dd02 100644
--- a/2024/captions/emacsconf-2024-papers--writing-academic-papers-in-orgroam--vincent-conus--answers.vtt
+++ b/2024/captions/emacsconf-2024-papers--writing-academic-papers-in-orgroam--vincent-conus--answers.vtt
@@ -1,27 +1,33 @@
WEBVTT indexed by sachac
-00:00:00.000 --> 00:00:04.639
-mentally over the next couple of days, but I can assure you
+00:00:00.000 --> 00:00:03.667
+... mentally over the next couple of days, but I can assure you
-00:00:04.640 --> 00:00:06.759
+00:00:03.668 --> 00:00:06.759
that it will be many organizers in the background also
00:00:06.760 --> 00:00:10.199
working. You'll probably get to see us later on. But for now,
-00:00:10.200 --> 00:00:13.639
-without further ado, I want to say hi to Vincent. Hi,
+00:00:10.200 --> 00:00:12.775
+without further ado, I want to say hi to Vincent.
-00:00:13.640 --> 00:00:19.039
-Vincent. Hi, thanks for having me. Yeah, and thanks for
+00:00:12.776 --> 00:00:15.417
+Hi, Vincent.
-00:00:19.040 --> 00:00:22.919
+00:00:15.418 --> 00:00:17.458
+Hi, thanks for having me.
+
+00:00:17.459 --> 00:00:18.099
+Yeah, and thanks for
+
+00:00:18.140 --> 00:00:22.902
coming and thanks for presenting. I mean, you didn't decide
-00:00:22.920 --> 00:00:25.639
+00:00:22.942 --> 00:00:25.704
to go first. It's mostly the time zone for you which decided
-00:00:25.640 --> 00:00:28.919
+00:00:25.724 --> 00:00:28.883
for you because I believe you are in Japan, correctly. Yeah,
00:00:28.920 --> 00:00:33.039
@@ -39,14 +45,17 @@ France. So for me, it's only 3 p.m. For you, it's probably 9 or
00:00:43.960 --> 00:00:47.959
10 p.m. if I'm correct. Already 11 here, yeah. It's already
-00:00:47.960 --> 00:00:53.519
-11, so thank you for staying up so late for us. And how about we
+00:00:47.960 --> 00:00:51.678
+11, so thank you for staying up so late for us.
+
+00:00:51.679 --> 00:00:55.181
+And how about we just get started with the questions
-00:00:53.520 --> 00:00:55.639
-just get started with the questions because you've just
+00:00:55.182 --> 00:00:56.521
+because you've just presented something
-00:00:55.640 --> 00:00:59.239
-presented something that is very dear to my heart, which is
+00:00:56.522 --> 00:00:59.200
+that is very dear to my heart, which is
00:00:59.240 --> 00:01:01.959
writing academic paper with Org Mode, which is, for the
@@ -192,16 +201,16 @@ hand in Emacs.
00:04:12.960 --> 00:04:16.159
I was just going to add something because you know
-00:04:16.160 --> 00:04:20.919
+00:04:16.160 --> 00:04:19.024
org-roam-bibtex is actually one of the packages that I
-00:04:20.920 --> 00:04:25.279
+00:04:19.025 --> 00:04:25.399
developed and I got it working with Zotero because for me it
-00:04:25.280 --> 00:04:28.839
+00:04:25.400 --> 00:04:28.524
was convenient. I was studying humanities and for me it was
-00:04:28.840 --> 00:04:32.599
+00:04:28.525 --> 00:04:32.599
very easy to connect reference taken in my browser with
00:04:32.600 --> 00:04:36.799
@@ -441,19 +450,19 @@ answer is no. That's mostly what I was presenting in the
00:09:43.240 --> 00:09:44.279
slide.
-00:09:44.280 --> 00:09:50.839
+00:09:44.280 --> 00:09:48.000
Actually, that's also why I made the presentation, because
-00:09:50.840 --> 00:09:59.759
+00:09:48.001 --> 00:09:51.940
if someone has a solution, I would gladly take it. No, the way
-00:09:59.760 --> 00:10:05.079
-I do it is that I have to add a I don't have that on top of my head.
+00:09:51.941 --> 00:09:57.500
+I do it is that I have to add a... I don't have that on top of my head.
-00:10:05.080 --> 00:10:10.599
-plus. Yeah, exactly. So I just make a custom class with the
+00:09:57.501 --> 00:10:09.582
+plus. Yeah, exactly. So I just make a custom org-latex class with the
-00:10:10.600 --> 00:10:16.159
+00:10:09.583 --> 00:10:16.159
name of the latex template. In general, I think people use
00:10:16.160 --> 00:10:19.359
@@ -469,7 +478,7 @@ section to the same section. I just changed the name of the
class. And this way it allows to import the, the CLS and then
00:10:33.720 --> 00:10:39.079
-the rest is just like putting the tech template that is
+the rest is just like putting the TeX template that is
00:10:39.080 --> 00:10:48.519
provided either in headers, in LaTeX headers at the top or
@@ -487,7 +496,7 @@ Sometimes they need some different formatting, but no,
it's not really easy because it needs to modify some
00:11:09.080 --> 00:11:12.359
-configuration in Unix to do that. Then after that, a little
+configuration in Emacs to do that. Then after that, a little
00:11:12.360 --> 00:11:15.719
bit like manually adapt the templates into your org notes.
diff --git a/2024/captions/emacsconf-2024-project--managing-writing-project-metadata-with-orgmode--blaine-mooers--answers.vtt b/2024/captions/emacsconf-2024-project--managing-writing-project-metadata-with-orgmode--blaine-mooers--answers.vtt
index 14ca3104..803490e2 100644
--- a/2024/captions/emacsconf-2024-project--managing-writing-project-metadata-with-orgmode--blaine-mooers--answers.vtt
+++ b/2024/captions/emacsconf-2024-project--managing-writing-project-metadata-with-orgmode--blaine-mooers--answers.vtt
@@ -342,10 +342,10 @@ I'll switch over to the writing log for the project B, and
00:08:48.000 --> 00:08:51.359
I'll go to the diary section at the beginning. I'll make a
-00:08:51.360 --> 00:08:57.279
+00:08:51.360 --> 00:08:59.333
little to-do list and maybe look at the prior entry in the
-00:08:57.280 --> 00:09:03.199
+00:08:59.334 --> 00:09:03.199
diary if I need to reboot my memory. And then I'll move on to
00:09:03.200 --> 00:09:07.919
@@ -390,7 +390,7 @@ to your ability to think about something in very similar
00:09:57.000 --> 00:09:59.399
terms to how a computer would think about something. You've
-00:09:59.400 --> 00:10:02.399
+00:09:59.833 --> 00:10:02.399
mentioned in your presentation the cost of context
00:10:02.400 --> 00:10:04.919
@@ -470,16 +470,16 @@ try to prime my mind about project B, or I might still have
00:11:44.800 --> 00:11:48.199
ideas that are flowing about project A. And I'll record
-00:11:48.200 --> 00:11:51.439
+00:11:48.200 --> 00:11:50.982
those in the digital voice recorder. And then when I get to
-00:11:51.440 --> 00:11:54.599
+00:11:50.983 --> 00:11:54.441
the lab, I'll transfer the audio file to my computer, and
-00:11:54.600 --> 00:12:00.159
-I'll transcribe it using a whisper. So I've set up some
+00:11:54.442 --> 00:12:00.066
+I'll transcribe it using Whisper. So I've set up some
-00:12:00.160 --> 00:12:03.759
+00:12:00.067 --> 00:12:03.759
Python scripts and bash functions to go through and I
00:12:03.760 --> 00:12:10.999
@@ -512,17 +512,20 @@ when I'm teaching, when I'm in seminar, other committee
00:12:53.040 --> 00:12:58.359
meetings, traveling, then I'll capture ideas on paper. I
-00:12:58.360 --> 00:13:02.399
+00:12:58.360 --> 00:13:01.649
don't have a cell phone. I'm trying to be the last human on
-00:13:02.400 --> 00:13:07.359
+00:13:01.650 --> 00:13:07.316
earth without a cell phone. I think I would be so distracted
-00:13:07.360 --> 00:13:12.719
-by a cell phone. Worst person on the planet, I would be
+00:13:07.317 --> 00:13:12.442
+by a cell phone. I would be the worst person on the planet,
-00:13:12.720 --> 00:13:16.399
-totally focused on my cell phone if I had one. So I'm like one
+00:13:12.443 --> 00:13:14.163
+I would be totally focused on my cell phone
+
+00:13:14.164 --> 00:13:16.399
+if I had one. So I'm like one
00:13:16.400 --> 00:13:22.999
of the few people left who can read a map. So I do run into some
diff --git a/2024/captions/emacsconf-2024-transducers--transducers-finally-ergonomic-data-processing-for-emacs--colin-woodbury--answers.vtt b/2024/captions/emacsconf-2024-transducers--transducers-finally-ergonomic-data-processing-for-emacs--colin-woodbury--answers.vtt
index 375cad2a..e8cb84c4 100644
--- a/2024/captions/emacsconf-2024-transducers--transducers-finally-ergonomic-data-processing-for-emacs--colin-woodbury--answers.vtt
+++ b/2024/captions/emacsconf-2024-transducers--transducers-finally-ergonomic-data-processing-for-emacs--colin-woodbury--answers.vtt
@@ -10,7 +10,7 @@ morning here in Tokyo.
Are we connected all right?
00:00:37.880 --> 00:00:40.879
-Okay, I seem to be struggling still with my audio. 1 2nd
+Okay, I seem to be struggling still with my audio. One second...
00:00:40.880 --> 00:00:44.519
calling. Yeah, you were muted for a moment there. Okay,
diff --git a/2024/draft-schedule.md b/2024/draft-schedule.md
index 8d74af98..41ef8291 100644
--- a/2024/draft-schedule.md
+++ b/2024/draft-schedule.md
@@ -6,46 +6,46 @@ Jump to: <a href="#date-2024-12-07">Sat Dec 7</a> - <a href="#date-2024-12-08">S
[[!inline pages="internal(2024/schedule-2024-12-07)" raw="yes"]]
<div class="schedule" data-start="2024-12-07T14:00:00+0000" data-end="2024-12-07T22:30:00+0000" data-tracks="General,Development">
-[[!template id=sched time="""10""" q-and-a="""<a href="https://pad.emacsconf.org/2024-sat-open">Etherpad</a>""" pad="""https://pad.emacsconf.org/2024-sat-open""" startutc="""2024-12-07T14:00:00+0000""" endutc="""2024-12-07T14:10:00+0000""" start="""9:00""" end="""9:10""" title="""Saturday opening remarks""" url="""/2024/talks/sat-open""" track="""General""" watch="""https://emacsconf.org/2024/watch/gen""" slug="""sat-open""" note="""video posted, video: 04:50"""]]
-[[!template id=sched time="""10""" q-and-a="""<a href="https://media.emacsconf.org/2024/current/bbb-papers.html">BBB</a>""" pad="""https://pad.emacsconf.org/2024-papers""" startutc="""2024-12-07T14:10:00+0000""" endutc="""2024-12-07T14:20:00+0000""" start="""9:10""" end="""9:20""" title="""Writing academic papers in Org-Roam""" url="""/2024/talks/papers""" speakers="""Vincent Conus""" track="""General""" watch="""https://emacsconf.org/2024/watch/gen""" slug="""papers""" note="""captioned, video posted, Q&A posted, video: 10:07, answers: 19:01"""]]
-[[!template id=sched time="""20""" q-and-a="""<a href="https://media.emacsconf.org/2024/current/bbb-project.html">BBB</a>""" pad="""https://pad.emacsconf.org/2024-project""" startutc="""2024-12-07T14:40:00+0000""" endutc="""2024-12-07T15:00:00+0000""" start="""9:40""" end="""10:00""" title="""Managing writing project metadata with org-mode""" url="""/2024/talks/project""" speakers="""Blaine Mooers""" track="""General""" watch="""https://emacsconf.org/2024/watch/gen""" slug="""project""" note="""captioned, video posted, Q&A posted, video: 21:38, answers: 1:02:41"""]]
-[[!template id=sched time="""20""" q-and-a="""<a href="https://media.emacsconf.org/2024/current/bbb-gypsum.html">BBB</a>""" pad="""https://pad.emacsconf.org/2024-gypsum""" startutc="""2024-12-07T15:00:00+0000""" endutc="""2024-12-07T15:20:00+0000""" start="""10:00""" end="""10:20""" title="""Gypsum: my clone of Emacs and ELisp written in Scheme""" url="""/2024/talks/gypsum""" speakers="""Ramin Honary""" track="""Development""" watch="""https://emacsconf.org/2024/watch/dev""" slug="""gypsum""" note="""captioned, video posted, Q&A posted, video: 24:36, answers: 23:38"""]]
-[[!template id=sched time="""40""" q-and-a="""<a href="https://media.emacsconf.org/2024/current/bbb-org-update.html">BBB</a>""" pad="""https://pad.emacsconf.org/2024-org-update""" startutc="""2024-12-07T15:20:00+0000""" endutc="""2024-12-07T16:00:00+0000""" start="""10:20""" end="""11:00""" title="""The Future of Org""" url="""/2024/talks/org-update""" speakers="""Ihor Radchenko""" track="""General""" watch="""https://emacsconf.org/2024/watch/gen""" slug="""org-update""" note="""captioned, video posted, Q&A posted, video: 39:35, answers: 30:39"""]]
-[[!template id=sched time="""20""" q-and-a="""<a href="https://media.emacsconf.org/2024/current/bbb-rust.html">BBB</a>""" pad="""https://pad.emacsconf.org/2024-rust""" startutc="""2024-12-07T15:40:00+0000""" endutc="""2024-12-07T16:00:00+0000""" start="""10:40""" end="""11:00""" title="""An experimental Emacs core in Rust""" url="""/2024/talks/rust""" speakers="""Troy Hinckley""" track="""Development""" watch="""https://emacsconf.org/2024/watch/dev""" slug="""rust""" note="""captioned, video posted, Q&A posted, video: 20:06, answers: 19:15"""]]
-[[!template id=sched time="""10""" q-and-a="""<a href="https://media.emacsconf.org/2024/current/bbb-color.html">BBB</a>""" pad="""https://pad.emacsconf.org/2024-color""" startutc="""2024-12-07T16:20:00+0000""" endutc="""2024-12-07T16:30:00+0000""" start="""11:20""" end="""11:30""" title="""Colour your Emacs with ease""" url="""/2024/talks/color""" speakers="""Ryota Sawada""" track="""General""" watch="""https://emacsconf.org/2024/watch/gen""" slug="""color""" note="""captioned, video posted, Q&A posted, video: 11:48, answers: 14:31"""]]
-[[!template id=sched time="""25""" q-and-a="""<a href="https://media.emacsconf.org/2024/current/bbb-p-search.html">BBB</a>""" pad="""https://pad.emacsconf.org/2024-p-search""" startutc="""2024-12-07T16:20:00+0000""" endutc="""2024-12-07T16:45:00+0000""" start="""11:20""" end="""11:45""" title="""p-search: a local search engine in Emacs""" url="""/2024/talks/p-search""" speakers="""Zac Romero""" track="""Development""" watch="""https://emacsconf.org/2024/watch/dev""" slug="""p-search""" note="""captioned, video posted, Q&A posted, video: 22:42"""]]
-[[!template id=sched time="""10""" q-and-a="""<a href="https://media.emacsconf.org/2024/current/bbb-julia.html">BBB</a>""" pad="""https://pad.emacsconf.org/2024-julia""" startutc="""2024-12-07T18:00:00+0000""" endutc="""2024-12-07T18:10:00+0000""" start="""1:00""" end="""1:10""" title="""Exploring shared philosophies in Julia and Emacs""" url="""/2024/talks/julia""" speakers="""Gabriele Bozzola""" track="""Development""" watch="""https://emacsconf.org/2024/watch/dev""" slug="""julia""" note="""captioned, video posted, Q&A posted, video: 09:17"""]]
-[[!template id=sched time="""10""" q-and-a="""<a href="https://media.emacsconf.org/2024/current/bbb-theme.html">BBB</a>""" pad="""https://pad.emacsconf.org/2024-theme""" startutc="""2024-12-07T18:00:00+0000""" endutc="""2024-12-07T18:10:00+0000""" start="""1:00""" end="""1:10""" title="""My journey of finding and creating the “perfect” Emacs theme""" url="""/2024/talks/theme""" speakers="""MetroWind""" track="""General""" watch="""https://emacsconf.org/2024/watch/gen""" slug="""theme""" note="""captioned, video posted, Q&A posted, video: 11:28, answers: 09:51"""]]
-[[!template id=sched time="""20""" q-and-a="""<a href="https://media.emacsconf.org/2024/current/bbb-guile.html">BBB</a>""" pad="""https://pad.emacsconf.org/2024-guile""" startutc="""2024-12-07T18:25:00+0000""" endutc="""2024-12-07T18:45:00+0000""" start="""1:25""" end="""1:45""" title="""Beguiling Emacs: Guile-Emacs relaunched!""" url="""/2024/talks/guile""" speakers="""Robin Templeton""" track="""Development""" watch="""https://emacsconf.org/2024/watch/dev""" slug="""guile""" note="""captioned, video posted, Q&A posted, video: 15:57"""]]
-[[!template id=sched time="""15""" q-and-a="""<a href="https://chat.emacsconf.org/?join=emacsconf">#emacsconf, speaker nick: lispmacs</a>""" pad="""https://pad.emacsconf.org/2024-water""" startutc="""2024-12-07T18:30:00+0000""" endutc="""2024-12-07T18:45:00+0000""" start="""1:30""" end="""1:45""" title="""Watering my (digital) plant with Emacs timers""" url="""/2024/talks/water""" speakers="""Christopher Howard""" track="""General""" watch="""https://emacsconf.org/2024/watch/gen""" slug="""water""" note="""captioned, video posted, video: 13:50"""]]
-[[!template id=sched time="""10""" q-and-a="""<a href="https://media.emacsconf.org/2024/current/bbb-secrets.html">BBB</a>""" pad="""https://pad.emacsconf.org/2024-secrets""" startutc="""2024-12-07T18:55:00+0000""" endutc="""2024-12-07T19:05:00+0000""" start="""1:55""" end="""2:05""" title="""Committing secrets with git using sops-mode""" url="""/2024/talks/secrets""" speakers="""Jonathan Otsuka""" track="""Development""" watch="""https://emacsconf.org/2024/watch/dev""" slug="""secrets""" note="""video posted, video: 14:57"""]]
-[[!template id=sched time="""40""" q-and-a="""<a href="https://chat.emacsconf.org/?join=emacsconf">#emacsconf, speaker nick: lispmacs</a>""" pad="""https://pad.emacsconf.org/2024-shell""" startutc="""2024-12-07T18:55:00+0000""" endutc="""2024-12-07T19:35:00+0000""" start="""1:55""" end="""2:35""" title="""Emacs as a shell""" url="""/2024/talks/shell""" speakers="""Christopher Howard""" track="""General""" watch="""https://emacsconf.org/2024/watch/gen""" slug="""shell""" note="""captioned, video posted, video: 37:13"""]]
-[[!template id=sched time="""60""" q-and-a="""<a href="https://media.emacsconf.org/2024/current/bbb-mcclim.html">BBB</a>""" pad="""https://pad.emacsconf.org/2024-mcclim""" startutc="""2024-12-07T19:25:00+0000""" endutc="""2024-12-07T20:25:00+0000""" start="""2:25""" end="""3:25""" title="""Elisp and McCLIM""" url="""/2024/talks/mcclim""" speakers="""screwlisp""" track="""Development""" watch="""https://emacsconf.org/2024/watch/dev""" slug="""mcclim""" note="""captioned, video posted, Q&A posted, video: 34:29"""]]
-[[!template id=sched time="""20""" q-and-a="""<a href="https://media.emacsconf.org/2024/current/bbb-casual.html">BBB</a>""" pad="""https://pad.emacsconf.org/2024-casual""" startutc="""2024-12-07T19:45:00+0000""" endutc="""2024-12-07T20:05:00+0000""" start="""2:45""" end="""3:05""" title="""Re-imagining the Emacs user experience with Casual Suite""" url="""/2024/talks/casual""" speakers="""Charles Choi""" track="""General""" watch="""https://emacsconf.org/2024/watch/gen""" slug="""casual""" note="""captioned, video posted, Q&A posted, video: 18:24, answers: 22:12"""]]
-[[!template id=sched time="""20""" q-and-a="""<a href="https://media.emacsconf.org/2024/current/bbb-hyperdrive.html">BBB</a>""" pad="""https://pad.emacsconf.org/2024-hyperdrive""" startutc="""2024-12-07T20:25:00+0000""" endutc="""2024-12-07T20:45:00+0000""" start="""3:25""" end="""3:45""" title="""New in hyperdrive.el: quick install, peer graph, transclusion!""" url="""/2024/talks/hyperdrive""" speakers="""Joseph Turner""" track="""General""" watch="""https://emacsconf.org/2024/watch/gen""" slug="""hyperdrive""" note="""captioned, video posted, Q&A posted, video: 20:25, answers: 22:34"""]]
-[[!template id=sched time="""40""" q-and-a="""<a href="https://pad.emacsconf.org/2024-maxima">Etherpad</a>""" pad="""https://pad.emacsconf.org/2024-maxima""" startutc="""2024-12-07T20:45:00+0000""" endutc="""2024-12-07T21:05:00+0000""" start="""3:45""" end="""4:05""" title="""Emacs, eev, and Maxima - now!""" url="""/2024/talks/maxima""" speakers="""Eduardo Ochs""" track="""Development""" watch="""https://emacsconf.org/2024/watch/dev""" slug="""maxima""" note="""captioned, video posted, Q&A posted, video: 30:34"""]]
-[[!template id=sched time="""10""" q-and-a="""<a href="https://media.emacsconf.org/2024/current/bbb-writing.html">BBB</a>""" pad="""https://pad.emacsconf.org/2024-writing""" startutc="""2024-12-07T21:05:00+0000""" endutc="""2024-12-07T21:15:00+0000""" start="""4:05""" end="""4:15""" title="""Emacs Writing Studio""" url="""/2024/talks/writing""" speakers="""Peter Prevos""" track="""General""" watch="""https://emacsconf.org/2024/watch/gen""" slug="""writing""" note="""captioned, video posted, video: 13:31"""]]
-[[!template id=sched time="""25""" q-and-a="""<a href="https://media.emacsconf.org/2024/current/bbb-emacs30.html">BBB</a>""" pad="""https://pad.emacsconf.org/2024-emacs30""" startutc="""2024-12-07T21:25:00+0000""" endutc="""2024-12-07T21:50:00+0000""" start="""4:25""" end="""4:50""" title="""Emacs 30 Highlights""" url="""/2024/talks/emacs30""" speakers="""Philip Kaludercic""" track="""General""" watch="""https://emacsconf.org/2024/watch/gen""" slug="""emacs30""" note="""captioned, video posted, Q&A posted, video: 24:55, answers: 23:36"""]]
-[[!template id=sched time="""10""" q-and-a="""<a href="https://pad.emacsconf.org/2024-sat-close">Etherpad</a>""" pad="""https://pad.emacsconf.org/2024-sat-close""" startutc="""2024-12-07T22:00:00+0000""" endutc="""2024-12-07T22:10:00+0000""" start="""5:00""" end="""5:10""" title="""Saturday closing remarks""" url="""/2024/talks/sat-close""" track="""General""" watch="""https://emacsconf.org/2024/watch/gen""" slug="""sat-close""" note="""video posted, video: 05:49"""]]</div>
+[[!template id=sched time="""10""" q-and-a="""<a href="https://pad.emacsconf.org/2024-sat-open">Etherpad</a>""" startutc="""2024-12-07T14:00:00+0000""" endutc="""2024-12-07T14:10:00+0000""" start="""9:00""" end="""9:10""" title="""Saturday opening remarks""" url="""/2024/talks/sat-open""" track="""General""" watch="""https://emacsconf.org/2024/watch/gen""" slug="""sat-open""" note="""video posted, video: 04:50"""]]
+[[!template id=sched time="""10""" q-and-a="""<a href="https://media.emacsconf.org/2024/current/bbb-papers.html">BBB</a>""" startutc="""2024-12-07T14:10:00+0000""" endutc="""2024-12-07T14:20:00+0000""" start="""9:10""" end="""9:20""" title="""Writing academic papers in Org-Roam""" url="""/2024/talks/papers""" speakers="""Vincent Conus""" track="""General""" watch="""https://emacsconf.org/2024/watch/gen""" slug="""papers""" note="""captioned, video posted, Q&A posted, video: 10:07, answers: 19:01"""]]
+[[!template id=sched time="""20""" q-and-a="""<a href="https://media.emacsconf.org/2024/current/bbb-project.html">BBB</a>""" startutc="""2024-12-07T14:40:00+0000""" endutc="""2024-12-07T15:00:00+0000""" start="""9:40""" end="""10:00""" title="""Managing writing project metadata with org-mode""" url="""/2024/talks/project""" speakers="""Blaine Mooers""" track="""General""" watch="""https://emacsconf.org/2024/watch/gen""" slug="""project""" note="""captioned, video posted, Q&A posted, video: 21:38, answers: 1:02:41"""]]
+[[!template id=sched time="""20""" q-and-a="""<a href="https://media.emacsconf.org/2024/current/bbb-gypsum.html">BBB</a>""" startutc="""2024-12-07T15:00:00+0000""" endutc="""2024-12-07T15:20:00+0000""" start="""10:00""" end="""10:20""" title="""Gypsum: my clone of Emacs and ELisp written in Scheme""" url="""/2024/talks/gypsum""" speakers="""Ramin Honary""" track="""Development""" watch="""https://emacsconf.org/2024/watch/dev""" slug="""gypsum""" note="""captioned, video posted, Q&A posted, video: 24:36, answers: 23:38"""]]
+[[!template id=sched time="""40""" q-and-a="""<a href="https://media.emacsconf.org/2024/current/bbb-org-update.html">BBB</a>""" startutc="""2024-12-07T15:20:00+0000""" endutc="""2024-12-07T16:00:00+0000""" start="""10:20""" end="""11:00""" title="""The Future of Org""" url="""/2024/talks/org-update""" speakers="""Ihor Radchenko""" track="""General""" watch="""https://emacsconf.org/2024/watch/gen""" slug="""org-update""" note="""captioned, video posted, Q&A posted, video: 39:35, answers: 30:39"""]]
+[[!template id=sched time="""20""" q-and-a="""<a href="https://media.emacsconf.org/2024/current/bbb-rust.html">BBB</a>""" startutc="""2024-12-07T15:40:00+0000""" endutc="""2024-12-07T16:00:00+0000""" start="""10:40""" end="""11:00""" title="""An experimental Emacs core in Rust""" url="""/2024/talks/rust""" speakers="""Troy Hinckley""" track="""Development""" watch="""https://emacsconf.org/2024/watch/dev""" slug="""rust""" note="""captioned, video posted, Q&A posted, video: 20:06, answers: 19:15"""]]
+[[!template id=sched time="""10""" q-and-a="""<a href="https://media.emacsconf.org/2024/current/bbb-color.html">BBB</a>""" startutc="""2024-12-07T16:20:00+0000""" endutc="""2024-12-07T16:30:00+0000""" start="""11:20""" end="""11:30""" title="""Colour your Emacs with ease""" url="""/2024/talks/color""" speakers="""Ryota Sawada""" track="""General""" watch="""https://emacsconf.org/2024/watch/gen""" slug="""color""" note="""captioned, video posted, Q&A posted, video: 11:48, answers: 14:31"""]]
+[[!template id=sched time="""25""" q-and-a="""<a href="https://media.emacsconf.org/2024/current/bbb-p-search.html">BBB</a>""" startutc="""2024-12-07T16:20:00+0000""" endutc="""2024-12-07T16:45:00+0000""" start="""11:20""" end="""11:45""" title="""p-search: a local search engine in Emacs""" url="""/2024/talks/p-search""" speakers="""Zac Romero""" track="""Development""" watch="""https://emacsconf.org/2024/watch/dev""" slug="""p-search""" note="""captioned, video posted, Q&A posted, video: 22:42"""]]
+[[!template id=sched time="""10""" q-and-a="""<a href="https://media.emacsconf.org/2024/current/bbb-julia.html">BBB</a>""" startutc="""2024-12-07T18:00:00+0000""" endutc="""2024-12-07T18:10:00+0000""" start="""1:00""" end="""1:10""" title="""Exploring shared philosophies in Julia and Emacs""" url="""/2024/talks/julia""" speakers="""Gabriele Bozzola""" track="""Development""" watch="""https://emacsconf.org/2024/watch/dev""" slug="""julia""" note="""captioned, video posted, Q&A posted, video: 09:17"""]]
+[[!template id=sched time="""10""" q-and-a="""<a href="https://media.emacsconf.org/2024/current/bbb-theme.html">BBB</a>""" startutc="""2024-12-07T18:00:00+0000""" endutc="""2024-12-07T18:10:00+0000""" start="""1:00""" end="""1:10""" title="""My journey of finding and creating the “perfect” Emacs theme""" url="""/2024/talks/theme""" speakers="""MetroWind""" track="""General""" watch="""https://emacsconf.org/2024/watch/gen""" slug="""theme""" note="""captioned, video posted, Q&A posted, video: 11:28, answers: 09:51"""]]
+[[!template id=sched time="""20""" q-and-a="""<a href="https://media.emacsconf.org/2024/current/bbb-guile.html">BBB</a>""" startutc="""2024-12-07T18:25:00+0000""" endutc="""2024-12-07T18:45:00+0000""" start="""1:25""" end="""1:45""" title="""Beguiling Emacs: Guile-Emacs relaunched!""" url="""/2024/talks/guile""" speakers="""Robin Templeton""" track="""Development""" watch="""https://emacsconf.org/2024/watch/dev""" slug="""guile""" note="""captioned, video posted, Q&A posted, video: 15:57"""]]
+[[!template id=sched time="""15""" q-and-a="""<a href="https://chat.emacsconf.org/?join=emacsconf">#emacsconf, speaker nick: lispmacs</a>""" startutc="""2024-12-07T18:30:00+0000""" endutc="""2024-12-07T18:45:00+0000""" start="""1:30""" end="""1:45""" title="""Watering my (digital) plant with Emacs timers""" url="""/2024/talks/water""" speakers="""Christopher Howard""" track="""General""" watch="""https://emacsconf.org/2024/watch/gen""" slug="""water""" note="""captioned, video posted, video: 13:50"""]]
+[[!template id=sched time="""10""" q-and-a="""<a href="https://media.emacsconf.org/2024/current/bbb-secrets.html">BBB</a>""" startutc="""2024-12-07T18:55:00+0000""" endutc="""2024-12-07T19:05:00+0000""" start="""1:55""" end="""2:05""" title="""Committing secrets with git using sops-mode""" url="""/2024/talks/secrets""" speakers="""Jonathan Otsuka""" track="""Development""" watch="""https://emacsconf.org/2024/watch/dev""" slug="""secrets""" note="""video posted, video: 14:57"""]]
+[[!template id=sched time="""40""" q-and-a="""<a href="https://chat.emacsconf.org/?join=emacsconf">#emacsconf, speaker nick: lispmacs</a>""" startutc="""2024-12-07T18:55:00+0000""" endutc="""2024-12-07T19:35:00+0000""" start="""1:55""" end="""2:35""" title="""Emacs as a shell""" url="""/2024/talks/shell""" speakers="""Christopher Howard""" track="""General""" watch="""https://emacsconf.org/2024/watch/gen""" slug="""shell""" note="""captioned, video posted, video: 37:13"""]]
+[[!template id=sched time="""60""" q-and-a="""<a href="https://media.emacsconf.org/2024/current/bbb-mcclim.html">BBB</a>""" startutc="""2024-12-07T19:25:00+0000""" endutc="""2024-12-07T20:25:00+0000""" start="""2:25""" end="""3:25""" title="""Elisp and McCLIM""" url="""/2024/talks/mcclim""" speakers="""screwlisp""" track="""Development""" watch="""https://emacsconf.org/2024/watch/dev""" slug="""mcclim""" note="""captioned, video posted, Q&A posted, video: 34:29"""]]
+[[!template id=sched time="""20""" q-and-a="""<a href="https://media.emacsconf.org/2024/current/bbb-casual.html">BBB</a>""" startutc="""2024-12-07T19:45:00+0000""" endutc="""2024-12-07T20:05:00+0000""" start="""2:45""" end="""3:05""" title="""Re-imagining the Emacs user experience with Casual Suite""" url="""/2024/talks/casual""" speakers="""Charles Choi""" track="""General""" watch="""https://emacsconf.org/2024/watch/gen""" slug="""casual""" note="""captioned, video posted, Q&A posted, video: 18:24, answers: 22:12"""]]
+[[!template id=sched time="""20""" q-and-a="""<a href="https://media.emacsconf.org/2024/current/bbb-hyperdrive.html">BBB</a>""" startutc="""2024-12-07T20:25:00+0000""" endutc="""2024-12-07T20:45:00+0000""" start="""3:25""" end="""3:45""" title="""New in hyperdrive.el: quick install, peer graph, transclusion!""" url="""/2024/talks/hyperdrive""" speakers="""Joseph Turner""" track="""General""" watch="""https://emacsconf.org/2024/watch/gen""" slug="""hyperdrive""" note="""captioned, video posted, Q&A posted, video: 20:25, answers: 22:34"""]]
+[[!template id=sched time="""40""" q-and-a="""<a href="https://pad.emacsconf.org/2024-maxima">Etherpad</a>""" startutc="""2024-12-07T20:45:00+0000""" endutc="""2024-12-07T21:05:00+0000""" start="""3:45""" end="""4:05""" title="""Emacs, eev, and Maxima - now!""" url="""/2024/talks/maxima""" speakers="""Eduardo Ochs""" track="""Development""" watch="""https://emacsconf.org/2024/watch/dev""" slug="""maxima""" note="""captioned, video posted, Q&A posted, video: 30:34"""]]
+[[!template id=sched time="""10""" q-and-a="""<a href="https://media.emacsconf.org/2024/current/bbb-writing.html">BBB</a>""" startutc="""2024-12-07T21:05:00+0000""" endutc="""2024-12-07T21:15:00+0000""" start="""4:05""" end="""4:15""" title="""Emacs Writing Studio""" url="""/2024/talks/writing""" speakers="""Peter Prevos""" track="""General""" watch="""https://emacsconf.org/2024/watch/gen""" slug="""writing""" note="""captioned, video posted, video: 13:31"""]]
+[[!template id=sched time="""25""" q-and-a="""<a href="https://media.emacsconf.org/2024/current/bbb-emacs30.html">BBB</a>""" startutc="""2024-12-07T21:25:00+0000""" endutc="""2024-12-07T21:50:00+0000""" start="""4:25""" end="""4:50""" title="""Emacs 30 Highlights""" url="""/2024/talks/emacs30""" speakers="""Philip Kaludercic""" track="""General""" watch="""https://emacsconf.org/2024/watch/gen""" slug="""emacs30""" note="""captioned, video posted, Q&A posted, video: 24:55, answers: 23:36"""]]
+[[!template id=sched time="""10""" q-and-a="""<a href="https://pad.emacsconf.org/2024-sat-close">Etherpad</a>""" startutc="""2024-12-07T22:00:00+0000""" endutc="""2024-12-07T22:10:00+0000""" start="""5:00""" end="""5:10""" title="""Saturday closing remarks""" url="""/2024/talks/sat-close""" track="""General""" watch="""https://emacsconf.org/2024/watch/gen""" slug="""sat-close""" note="""video posted, video: 05:49"""]]</div>
Jump to: <a href="#date-2024-12-07">Sat Dec 7</a> - <a href="#date-2024-12-08">Sun Dec 8</a><a name="date-2024-12-08"></a>
# Sunday Dec 8, 2024
[[!inline pages="internal(2024/schedule-2024-12-08)" raw="yes"]]
<div class="schedule" data-start="2024-12-08T14:00:00+0000" data-end="2024-12-08T22:30:00+0000" data-tracks="General,Development">
-[[!template id=sched status="""done""" time="""10""" q-and-a="""<a href="https://pad.emacsconf.org/2024-sun-open">Etherpad</a>""" pad="""https://pad.emacsconf.org/2024-sun-open""" startutc="""2024-12-08T14:00:00+0000""" endutc="""2024-12-08T14:10:00+0000""" start="""9:00""" end="""9:10""" title="""Sunday opening remarks""" url="""/2024/talks/sun-open""" track="""General""" watch="""https://emacsconf.org/2024/watch/gen""" slug="""sun-open""" note="""video posted, video: 04:37"""]]
-[[!template id=sched time="""10""" q-and-a="""<a href="https://pad.emacsconf.org/2024-links">Etherpad</a>""" pad="""https://pad.emacsconf.org/2024-links""" startutc="""2024-12-08T14:10:00+0000""" endutc="""2024-12-08T14:20:00+0000""" start="""9:10""" end="""9:20""" title="""Unlocking linked data: replacing specialized apps with an Org-based semantic wiki""" url="""/2024/talks/links""" speakers="""Abhinav Tushar""" track="""General""" watch="""https://emacsconf.org/2024/watch/gen""" slug="""links""" note="""captioned, video posted, video: 11:21"""]]
-[[!template id=sched time="""20""" q-and-a="""<a href="https://chat.emacsconf.org/?join=emacsconf">#emacsconf, speaker nick: cosmicexplorer</a>""" note="""Development-focused; on the general track for scheduling reasons""" pad="""https://pad.emacsconf.org/2024-regex""" startutc="""2024-12-08T14:30:00+0000""" endutc="""2024-12-08T14:50:00+0000""" start="""9:30""" end="""9:50""" title="""Emacs regex compilation and future directions for expressive pattern matching""" url="""/2024/talks/regex""" speakers="""Danny McClanahan""" track="""General""" watch="""https://emacsconf.org/2024/watch/gen""" slug="""regex""" note="""captioned, video posted, video: 24:56"""]]
-[[!template id=sched time="""20""" q-and-a="""<a href="https://media.emacsconf.org/2024/current/bbb-learning.html">BBB</a>""" pad="""https://pad.emacsconf.org/2024-learning""" startutc="""2024-12-08T15:00:00+0000""" endutc="""2024-12-08T15:20:00+0000""" start="""10:00""" end="""10:20""" title="""Survival of the skillest: Thriving in the learning jungle""" url="""/2024/talks/learning""" speakers="""Bala Ramadurai""" track="""General""" watch="""https://emacsconf.org/2024/watch/gen""" slug="""learning""" note="""captioned, video posted, Q&A posted, video: 19:39, answers: 24:41"""]]
-[[!template id=sched time="""45""" q-and-a="""<a href="https://media.emacsconf.org/2024/current/bbb-blee.html">BBB</a>""" pad="""https://pad.emacsconf.org/2024-blee""" startutc="""2024-12-08T15:30:00+0000""" endutc="""2024-12-08T16:15:00+0000""" start="""10:30""" end="""11:15""" title="""About Blee: enveloping our own autonomy directed digital ecosystem with Emacs""" url="""/2024/talks/blee""" speakers="""Mohsen BANAN""" track="""General""" watch="""https://emacsconf.org/2024/watch/gen""" slug="""blee""" note="""captioned, video posted, Q&A posted, video: 45:30, answers: 18:11"""]]
-[[!template id=sched time="""15""" q-and-a="""<a href="https://media.emacsconf.org/2024/current/bbb-hyperbole.html">BBB</a>""" pad="""https://pad.emacsconf.org/2024-hyperbole""" startutc="""2024-12-08T16:30:00+0000""" endutc="""2024-12-08T16:45:00+0000""" start="""11:30""" end="""11:45""" title="""Fun things with GNU Hyperbole""" url="""/2024/talks/hyperbole""" speakers="""Mats Lidell""" track="""General""" watch="""https://emacsconf.org/2024/watch/gen""" slug="""hyperbole""" note="""captioned, video posted, Q&A posted, video: 14:10, answers: 21:56"""]]
-[[!template id=sched time="""20""" q-and-a="""<a href="https://media.emacsconf.org/2024/current/bbb-open-mic.html">BBB</a>""" pad="""https://pad.emacsconf.org/2024-open-mic""" startutc="""2024-12-08T18:00:00+0000""" endutc="""2024-12-08T18:30:00+0000""" start="""1:00""" end="""1:30""" title="""Open mic/pad for quick updates etc.""" url="""/2024/talks/open-mic""" track="""General""" watch="""https://emacsconf.org/2024/watch/gen""" slug="""open-mic""" note="""video posted, video: 40:13"""]]
-[[!template id=sched time="""15""" q-and-a="""<a href="https://media.emacsconf.org/2024/current/bbb-pgmacs.html">BBB</a>""" note="""Development-focused; on the general track for scheduling reasons""" pad="""https://pad.emacsconf.org/2024-pgmacs""" startutc="""2024-12-08T18:40:00+0000""" endutc="""2024-12-08T18:55:00+0000""" start="""1:40""" end="""1:55""" title="""PGmacs: browsing and editing PostgreSQL databases from Emacs""" url="""/2024/talks/pgmacs""" speakers="""Eric Marsden""" track="""General""" watch="""https://emacsconf.org/2024/watch/gen""" slug="""pgmacs""" note="""captioned, video posted, Q&A posted, video: 13:17, answers: 20:02"""]]
-[[!template id=sched time="""20""" q-and-a="""<a href="https://media.emacsconf.org/2024/current/bbb-literate.html">BBB</a>""" pad="""https://pad.emacsconf.org/2024-literate""" startutc="""2024-12-08T19:15:00+0000""" endutc="""2024-12-08T19:35:00+0000""" start="""2:15""" end="""2:35""" title="""Literate programming for the 21st Century""" url="""/2024/talks/literate""" speakers="""Howard Abrams""" track="""General""" watch="""https://emacsconf.org/2024/watch/gen""" slug="""literate""" note="""captioned, video posted, Q&A posted, video: 15:51, answers: 22:48"""]]
-[[!template id=sched time="""10""" q-and-a="""<a href="https://media.emacsconf.org/2024/current/bbb-students.html">BBB</a>""" pad="""https://pad.emacsconf.org/2024-students""" startutc="""2024-12-08T20:00:00+0000""" endutc="""2024-12-08T20:10:00+0000""" start="""3:00""" end="""3:10""" title="""An example of a cohesive student workflow in Emacs""" url="""/2024/talks/students""" speakers="""Daniel Pinkston""" track="""General""" watch="""https://emacsconf.org/2024/watch/gen""" slug="""students""" note="""captioned, video posted, Q&A posted, video: 08:27"""]]
-[[!template id=sched time="""20""" q-and-a="""<a href="https://pad.emacsconf.org/2024-sharing">Etherpad</a>""" pad="""https://pad.emacsconf.org/2024-sharing""" startutc="""2024-12-08T20:20:00+0000""" endutc="""2024-12-08T20:40:00+0000""" start="""3:20""" end="""3:40""" title="""So you want to be an Emacs-fluencer?""" url="""/2024/talks/sharing""" speakers="""Gopar""" track="""General""" watch="""https://emacsconf.org/2024/watch/gen""" slug="""sharing""" note="""captioned, video posted, video: 21:40"""]]
-[[!template id=sched time="""30""" q-and-a="""<a href="https://media.emacsconf.org/2024/current/bbb-transducers.html">BBB</a>""" note="""Development-focused; on the general track for scheduling reasons""" pad="""https://pad.emacsconf.org/2024-transducers""" startutc="""2024-12-08T21:00:00+0000""" endutc="""2024-12-08T21:30:00+0000""" start="""4:00""" end="""4:30""" title="""Transducers: finally, ergonomic data processing for Emacs!""" url="""/2024/talks/transducers""" speakers="""Colin Woodbury""" track="""General""" watch="""https://emacsconf.org/2024/watch/gen""" slug="""transducers""" note="""captioned, video posted, Q&A posted, video: 26:51, answers: 25:24"""]]
-[[!template id=sched time="""10""" q-and-a="""<a href="https://media.emacsconf.org/2024/current/bbb-sun-close.html">BBB</a>""" pad="""https://pad.emacsconf.org/2024-sun-close""" startutc="""2024-12-08T21:50:00+0000""" endutc="""2024-12-08T22:00:00+0000""" start="""4:50""" end="""5:00""" title="""Sunday closing remarks""" url="""/2024/talks/sun-close""" track="""General""" watch="""https://emacsconf.org/2024/watch/gen""" slug="""sun-close""" note="""video posted, Q&A posted, video: 01:59"""]]</div><div class="cancelled">Cancelled:<ul><li>Reproducibly building Emacs: “Hey your checksum is the same as mine!” - Aaron Grothe</li>
+[[!template id=sched status="""done""" time="""10""" q-and-a="""<a href="https://pad.emacsconf.org/2024-sun-open">Etherpad</a>""" startutc="""2024-12-08T14:00:00+0000""" endutc="""2024-12-08T14:10:00+0000""" start="""9:00""" end="""9:10""" title="""Sunday opening remarks""" url="""/2024/talks/sun-open""" track="""General""" watch="""https://emacsconf.org/2024/watch/gen""" slug="""sun-open""" note="""video posted, video: 04:37"""]]
+[[!template id=sched time="""10""" q-and-a="""<a href="https://pad.emacsconf.org/2024-links">Etherpad</a>""" startutc="""2024-12-08T14:10:00+0000""" endutc="""2024-12-08T14:20:00+0000""" start="""9:10""" end="""9:20""" title="""Unlocking linked data: replacing specialized apps with an Org-based semantic wiki""" url="""/2024/talks/links""" speakers="""Abhinav Tushar""" track="""General""" watch="""https://emacsconf.org/2024/watch/gen""" slug="""links""" note="""captioned, video posted, video: 11:21"""]]
+[[!template id=sched time="""20""" q-and-a="""<a href="https://chat.emacsconf.org/?join=emacsconf">#emacsconf, speaker nick: cosmicexplorer</a>""" note="""Development-focused; on the general track for scheduling reasons""" startutc="""2024-12-08T14:30:00+0000""" endutc="""2024-12-08T14:50:00+0000""" start="""9:30""" end="""9:50""" title="""Emacs regex compilation and future directions for expressive pattern matching""" url="""/2024/talks/regex""" speakers="""Danny McClanahan""" track="""General""" watch="""https://emacsconf.org/2024/watch/gen""" slug="""regex""" note="""captioned, video posted, video: 24:56"""]]
+[[!template id=sched time="""20""" q-and-a="""<a href="https://media.emacsconf.org/2024/current/bbb-learning.html">BBB</a>""" startutc="""2024-12-08T15:00:00+0000""" endutc="""2024-12-08T15:20:00+0000""" start="""10:00""" end="""10:20""" title="""Survival of the skillest: Thriving in the learning jungle""" url="""/2024/talks/learning""" speakers="""Bala Ramadurai""" track="""General""" watch="""https://emacsconf.org/2024/watch/gen""" slug="""learning""" note="""captioned, video posted, Q&A posted, video: 19:39, answers: 24:41"""]]
+[[!template id=sched time="""45""" q-and-a="""<a href="https://media.emacsconf.org/2024/current/bbb-blee.html">BBB</a>""" startutc="""2024-12-08T15:30:00+0000""" endutc="""2024-12-08T16:15:00+0000""" start="""10:30""" end="""11:15""" title="""About Blee: enveloping our own autonomy directed digital ecosystem with Emacs""" url="""/2024/talks/blee""" speakers="""Mohsen BANAN""" track="""General""" watch="""https://emacsconf.org/2024/watch/gen""" slug="""blee""" note="""captioned, video posted, Q&A posted, video: 45:30, answers: 18:11"""]]
+[[!template id=sched time="""15""" q-and-a="""<a href="https://media.emacsconf.org/2024/current/bbb-hyperbole.html">BBB</a>""" startutc="""2024-12-08T16:30:00+0000""" endutc="""2024-12-08T16:45:00+0000""" start="""11:30""" end="""11:45""" title="""Fun things with GNU Hyperbole""" url="""/2024/talks/hyperbole""" speakers="""Mats Lidell""" track="""General""" watch="""https://emacsconf.org/2024/watch/gen""" slug="""hyperbole""" note="""captioned, video posted, Q&A posted, video: 14:10, answers: 21:56"""]]
+[[!template id=sched time="""20""" q-and-a="""<a href="https://media.emacsconf.org/2024/current/bbb-open-mic.html">BBB</a>""" startutc="""2024-12-08T18:00:00+0000""" endutc="""2024-12-08T18:30:00+0000""" start="""1:00""" end="""1:30""" title="""Open mic/pad for quick updates etc.""" url="""/2024/talks/open-mic""" track="""General""" watch="""https://emacsconf.org/2024/watch/gen""" slug="""open-mic""" note="""video posted, video: 40:13"""]]
+[[!template id=sched time="""15""" q-and-a="""<a href="https://media.emacsconf.org/2024/current/bbb-pgmacs.html">BBB</a>""" note="""Development-focused; on the general track for scheduling reasons""" startutc="""2024-12-08T18:40:00+0000""" endutc="""2024-12-08T18:55:00+0000""" start="""1:40""" end="""1:55""" title="""PGmacs: browsing and editing PostgreSQL databases from Emacs""" url="""/2024/talks/pgmacs""" speakers="""Eric Marsden""" track="""General""" watch="""https://emacsconf.org/2024/watch/gen""" slug="""pgmacs""" note="""captioned, video posted, Q&A posted, video: 13:17, answers: 20:02"""]]
+[[!template id=sched time="""20""" q-and-a="""<a href="https://media.emacsconf.org/2024/current/bbb-literate.html">BBB</a>""" startutc="""2024-12-08T19:15:00+0000""" endutc="""2024-12-08T19:35:00+0000""" start="""2:15""" end="""2:35""" title="""Literate programming for the 21st Century""" url="""/2024/talks/literate""" speakers="""Howard Abrams""" track="""General""" watch="""https://emacsconf.org/2024/watch/gen""" slug="""literate""" note="""captioned, video posted, Q&A posted, video: 15:51, answers: 22:48"""]]
+[[!template id=sched time="""10""" q-and-a="""<a href="https://media.emacsconf.org/2024/current/bbb-students.html">BBB</a>""" startutc="""2024-12-08T20:00:00+0000""" endutc="""2024-12-08T20:10:00+0000""" start="""3:00""" end="""3:10""" title="""An example of a cohesive student workflow in Emacs""" url="""/2024/talks/students""" speakers="""Daniel Pinkston""" track="""General""" watch="""https://emacsconf.org/2024/watch/gen""" slug="""students""" note="""captioned, video posted, Q&A posted, video: 08:27"""]]
+[[!template id=sched time="""20""" q-and-a="""<a href="https://pad.emacsconf.org/2024-sharing">Etherpad</a>""" startutc="""2024-12-08T20:20:00+0000""" endutc="""2024-12-08T20:40:00+0000""" start="""3:20""" end="""3:40""" title="""So you want to be an Emacs-fluencer?""" url="""/2024/talks/sharing""" speakers="""Gopar""" track="""General""" watch="""https://emacsconf.org/2024/watch/gen""" slug="""sharing""" note="""captioned, video posted, video: 21:40"""]]
+[[!template id=sched time="""30""" q-and-a="""<a href="https://media.emacsconf.org/2024/current/bbb-transducers.html">BBB</a>""" note="""Development-focused; on the general track for scheduling reasons""" startutc="""2024-12-08T21:00:00+0000""" endutc="""2024-12-08T21:30:00+0000""" start="""4:00""" end="""4:30""" title="""Transducers: finally, ergonomic data processing for Emacs!""" url="""/2024/talks/transducers""" speakers="""Colin Woodbury""" track="""General""" watch="""https://emacsconf.org/2024/watch/gen""" slug="""transducers""" note="""captioned, video posted, Q&A posted, video: 26:51, answers: 25:24"""]]
+[[!template id=sched time="""10""" q-and-a="""<a href="https://media.emacsconf.org/2024/current/bbb-sun-close.html">BBB</a>""" startutc="""2024-12-08T21:50:00+0000""" endutc="""2024-12-08T22:00:00+0000""" start="""4:50""" end="""5:00""" title="""Sunday closing remarks""" url="""/2024/talks/sun-close""" track="""General""" watch="""https://emacsconf.org/2024/watch/gen""" slug="""sun-close""" note="""video posted, Q&A posted, video: 01:59"""]]</div><div class="cancelled">Cancelled:<ul><li>Reproducibly building Emacs: “Hey your checksum is the same as mine!” - Aaron Grothe</li>
<li>Immersive language learning with Emacs - Sebastian Dümcke</li>
<li>HyWiki: Fast, hyperlinked note-taking with no markup required - Bob Weiner</li>
<li>The Free Life Planner: Empowering lives with Emacs-based AI - Andrew Dougherty</li>
diff --git a/2024/info/blee-after.md b/2024/info/blee-after.md
index dd748b9f..933840ee 100644
--- a/2024/info/blee-after.md
+++ b/2024/info/blee-after.md
@@ -806,12 +806,12 @@
Captioner: mohsen
-<div class="transcript transcript-qanda"><a name="blee-qanda-transcript"></a><h1>Q&A transcript (unedited)</h1>
+<div class="transcript transcript-qanda"><a name="blee-qanda-transcript"></a><h1>Q&A transcript</h1>
[[!template text="""Thank you for the talk. I mean, it was a fairly long one and we""" start="00:00:00.000" video="qanda-blee" id="subtitle"]]
[[!template text="""had two very distinct parts, one which dealt with a""" start="00:00:04.200" video="qanda-blee" id="subtitle"]]
[[!template text="""philosophy of Libre-Halaal software and then the application,""" start="00:00:08.000" video="qanda-blee" id="subtitle"]]
-[[!template text="""obviously, of Bisos. So thank you so much for the""" start="00:00:12.080" video="qanda-blee" id="subtitle"]]
+[[!template text="""obviously, of BISOS. So thank you so much for the""" start="00:00:12.080" video="qanda-blee" id="subtitle"]]
[[!template text="""presentation. Before we get started with the question, and""" start="00:00:14.280" video="qanda-blee" id="subtitle"]]
[[!template text="""for the record, we have about 14 minutes of question time, is""" start="00:00:17.840" video="qanda-blee" id="subtitle"]]
[[!template text="""there anything that you'd like to add on top of your""" start="00:00:21.800" video="qanda-blee" id="subtitle"]]
@@ -826,7 +826,7 @@ Captioner: mohsen
[[!template text="""observation of working with Emacs versus working on Emacs.""" start="00:01:10.600" video="qanda-blee" id="subtitle"]]
[[!template text="""And I'm all for that. So the idea of BLEE is that""" start="00:01:20.640" video="qanda-blee" id="subtitle"]]
[[!template text="""Others can package things, and we are seeing this in the form""" start="00:01:28.280" video="qanda-blee" id="subtitle"]]
-[[!template text="""of redistributions. There is Doom, there is Space Max, and""" start="00:01:32.600" video="qanda-blee" id="subtitle"]]
+[[!template text="""of redistributions. There is Doom, there is Spacemacs, and""" start="00:01:32.600" video="qanda-blee" id="subtitle"]]
[[!template text="""we are seeing the evolution of Emacs into layers. So there is""" start="00:01:38.120" video="qanda-blee" id="subtitle"]]
[[!template text="""the core Emacs, and there are layers on top of it. And Peter""" start="00:01:44.080" video="qanda-blee" id="subtitle"]]
[[!template text="""also mentioned about too much choice, this notion of""" start="00:01:50.120" video="qanda-blee" id="subtitle"]]
@@ -836,15 +836,15 @@ Captioner: mohsen
[[!template text="""less. And that is not necessarily a bad thing.""" start="00:02:24.160" video="qanda-blee" id="subtitle"]]
[[!template text="""So that was one idea. The other idea or the other theme""" start="00:02:31.160" video="qanda-blee" id="subtitle"]]
[[!template text="""throughout the various talks that we saw was this concept of""" start="00:02:36.720" video="qanda-blee" id="subtitle"]]
-[[!template text="""mixing org mode with programming languages and What Babel""" start="00:02:42.920" video="qanda-blee" id="subtitle"]]
+[[!template text="""mixing org-mode with programming languages and what Babel""" start="00:02:42.920" video="qanda-blee" id="subtitle"]]
[[!template text="""has done is two things. One is it has successfully""" start="00:02:53.520" video="qanda-blee" id="subtitle"]]
-[[!template text="""integrated org mode with all kinds of languages. And that""" start="00:03:00.480" video="qanda-blee" id="subtitle"]]
-[[!template text="""has happened in the context of literate programming. Um, so""" start="00:03:06.800" video="qanda-blee" id="subtitle"]]
+[[!template text="""integrated org-mode with all kinds of languages. And that""" start="00:03:00.480" video="qanda-blee" id="subtitle"]]
+[[!template text="""has happened in the context of literate programming. So""" start="00:03:06.800" video="qanda-blee" id="subtitle"]]
[[!template text="""a talk coming after mine is literate programming for the""" start="00:03:13.040" video="qanda-blee" id="subtitle"]]
[[!template text="""21st century, mixing org mode with program languages. And""" start="00:03:16.840" video="qanda-blee" id="subtitle"]]
[[!template text="""what I am saying is that there is an alternative and that's""" start="00:03:22.400" video="qanda-blee" id="subtitle"]]
-[[!template text="""great, but we should also, uh, consider a traditional""" start="00:03:27.360" video="qanda-blee" id="subtitle"]]
-[[!template text="""programming mixed with org mode and, um, Polymode is key to""" start="00:03:33.840" video="qanda-blee" id="subtitle"]]
+[[!template text="""great, but we should also, consider a traditional""" start="00:03:27.360" video="qanda-blee" id="subtitle"]]
+[[!template text="""programming mixed with org-mode and, polymode is key to""" start="00:03:33.840" video="qanda-blee" id="subtitle"]]
[[!template text="""that. So those were some of the key concepts that I saw a""" start="00:03:40.160" video="qanda-blee" id="subtitle"]]
[[!template text="""resonance with as the conference went forward. Yeah, and I""" start="00:03:49.240" video="qanda-blee" id="subtitle"]]
[[!template text="""think, if my memory serves me right, we have another talk""" start="00:03:55.800" video="qanda-blee" id="subtitle"]]
@@ -853,15 +853,15 @@ Captioner: mohsen
[[!template text="""familiar with it, Mohsen, you might have seen it from""" start="00:04:07.920" video="qanda-blee" id="subtitle"]]
[[!template text="""various talks last year, but it also tends to have a similar""" start="00:04:10.360" video="qanda-blee" id="subtitle"]]
[[!template text="""stance than you, with the fact that text should be embedded""" start="00:04:14.640" video="qanda-blee" id="subtitle"]]
-[[!template text="""in programming languages rather than having Org Mode""" start="00:04:18.920" video="qanda-blee" id="subtitle"]]
+[[!template text="""in programming languages rather than having Org-Mode""" start="00:04:18.920" video="qanda-blee" id="subtitle"]]
[[!template text="""implement, I mean, integrate other languages. And I found""" start="00:04:21.920" video="qanda-blee" id="subtitle"]]
[[!template text="""it funny that we have your talk and this talk which are about""" start="00:04:25.440" video="qanda-blee" id="subtitle"]]
[[!template text="""the other direction, which I find very resonating as well.""" start="00:04:28.360" video="qanda-blee" id="subtitle"]]
[[!template text="""Right, right, right. So in terms of other things that did not""" start="00:04:33.000" video="qanda-blee" id="subtitle"]]
[[!template text="""fit into my talk is that the several concepts that I""" start="00:04:40.440" video="qanda-blee" id="subtitle"]]
[[!template text="""introduced, namely""" start="00:04:47.000" video="qanda-blee" id="subtitle"]]
-[[!template text="""dynamic blocks everywhere and COMEEGA.""" start="00:04:49.600" video="qanda-blee" id="subtitle"]]
-[[!template text="""I'd be happy to expand on those by sharing your screen in due""" start="00:04:57.880" video="qanda-blee" id="subtitle"]]
+[[!template text="""Dynamic Blocks everywhere and COMEEGA.""" start="00:04:49.600" video="qanda-blee" id="subtitle"]]
+[[!template text="""I'd be happy to expand on those by sharing a screen in due""" start="00:04:57.880" video="qanda-blee" id="subtitle"]]
[[!template text="""course, whatever is appropriate. Sure, considering the""" start="00:05:07.720" video="qanda-blee" id="subtitle"]]
[[!template text="""time that we have, we only have about 8 minutes 30 and we""" start="00:05:12.520" video="qanda-blee" id="subtitle"]]
[[!template text="""already have about four, five questions actually. I""" start="00:05:16.120" video="qanda-blee" id="subtitle"]]
@@ -877,7 +877,7 @@ Captioner: mohsen
[[!template text="""second edition. So I thought it would be better to ask.""" start="00:05:45.480" video="qanda-blee" id="subtitle"]]
[[!template text="""Right. So definitely, I would say for everybody who is on""" start="00:05:48.200" video="qanda-blee" id="subtitle"]]
[[!template text="""this conference, the international edition is the right""" start="00:05:56.120" video="qanda-blee" id="subtitle"]]
-[[!template text="""choice. In this book, I take some aggressive stance against""" start="00:06:01.960" video="qanda-blee" id="subtitle"]]
+[[!template text="""choice. In this book, I take some aggressive stances against""" start="00:06:01.960" video="qanda-blee" id="subtitle"]]
[[!template text="""intellectual property and I link that specifically to the""" start="00:06:11.640" video="qanda-blee" id="subtitle"]]
[[!template text="""American culture. So there are pieces in the book where the""" start="00:06:19.280" video="qanda-blee" id="subtitle"]]
[[!template text="""typical American audience may be offended. And if your skin""" start="00:06:27.440" video="qanda-blee" id="subtitle"]]
@@ -893,7 +893,7 @@ Captioner: mohsen
[[!template text="""Varoufakis' Technofeudalism?""" start="00:07:10.320" video="qanda-blee" id="subtitle"]]
[[!template text="""I haven't read much of that. I think there is a whole lot of""" start="00:07:14.640" video="qanda-blee" id="subtitle"]]
[[!template text="""global growth and collective understanding towards this""" start="00:07:24.920" video="qanda-blee" id="subtitle"]]
-[[!template text="""notion that the direction we are headed in And by that, I mean""" start="00:07:34.200" video="qanda-blee" id="subtitle"]]
+[[!template text="""notion that the direction we are headed in and by that, I mean""" start="00:07:34.200" video="qanda-blee" id="subtitle"]]
[[!template text="""American digital ecosystems""" start="00:07:42.480" video="qanda-blee" id="subtitle"]]
[[!template text="""are dangerous and that we should revisit""" start="00:07:46.880" video="qanda-blee" id="subtitle"]]
[[!template text="""the entirety of the model and strategy.""" start="00:07:53.160" video="qanda-blee" id="subtitle"]]
@@ -927,17 +927,17 @@ Captioner: mohsen
[[!template text="""with a series that honored what Star Trek used to be. Does""" start="00:09:54.960" video="qanda-blee" id="subtitle"]]
[[!template text="""this intersect? Let me read this for a moment.""" start="00:09:58.000" video="qanda-blee" id="subtitle"]]
[[!template text="""Yeah, I am not sure I fully get the point, but. Let me make a""" start="00:10:21.840" video="qanda-blee" id="subtitle"]]
-[[!template text="""point about my criticisms of the false movement""" start="00:10:30.600" video="qanda-blee" id="subtitle"]]
+[[!template text="""point about my criticisms of the FOSS movement""" start="00:10:30.600" video="qanda-blee" id="subtitle"]]
[[!template text="""in the presentation and in the book. The idea is that we have""" start="00:10:35.960" video="qanda-blee" id="subtitle"]]
-[[!template text="""jumped on the false movement and recognize it as an""" start="00:10:47.400" video="qanda-blee" id="subtitle"]]
-[[!template text="""alternative But we haven't looked deeply enough to see if""" start="00:10:53.920" video="qanda-blee" id="subtitle"]]
+[[!template text="""jumped on the FOSS movement and recognize it as an""" start="00:10:47.400" video="qanda-blee" id="subtitle"]]
+[[!template text="""alternative but we haven't looked deeply enough to see if""" start="00:10:53.920" video="qanda-blee" id="subtitle"]]
[[!template text="""our own philosophy and movement have problems. The""" start="00:11:02.280" video="qanda-blee" id="subtitle"]]
-[[!template text="""problems that I note is that The first movement does not""" start="00:11:07.760" video="qanda-blee" id="subtitle"]]
+[[!template text="""problems that I note is that the FOSS movement does not""" start="00:11:07.760" video="qanda-blee" id="subtitle"]]
[[!template text="""recognize clearly and explicitly that the entirety of the""" start="00:11:14.960" video="qanda-blee" id="subtitle"]]
[[!template text="""intellectual property rights regime is flawed. The second""" start="00:11:21.280" video="qanda-blee" id="subtitle"]]
[[!template text="""piece is that it's only now that we are seeing the FOSS""" start="00:11:30.400" video="qanda-blee" id="subtitle"]]
[[!template text="""movement is broader than the Western world. The third""" start="00:11:37.240" video="qanda-blee" id="subtitle"]]
-[[!template text="""problem is that the labels of free software and open source""" start="00:11:45.480" video="qanda-blee" id="subtitle"]]
+[[!template text="""problem is that the labels of Free Software and Open Source""" start="00:11:45.480" video="qanda-blee" id="subtitle"]]
[[!template text="""are not necessarily correct. The fourth problem is that we""" start="00:11:54.920" video="qanda-blee" id="subtitle"]]
[[!template text="""are not paying enough attention to establishing a""" start="00:12:01.160" video="qanda-blee" id="subtitle"]]
[[!template text="""relationship with society.""" start="00:12:07.240" video="qanda-blee" id="subtitle"]]
@@ -953,7 +953,7 @@ Captioner: mohsen
[[!template text="""pad in the BBB chat so you can open it on your end. But as we are""" start="00:12:51.800" video="qanda-blee" id="subtitle"]]
[[!template text="""still live for 15 more seconds, do you have any last words?""" start="00:12:56.520" video="qanda-blee" id="subtitle"]]
[[!template text="""Keep up the good work. Those would be my last words, that the""" start="00:12:59.320" video="qanda-blee" id="subtitle"]]
-[[!template text="""free software and the open source and Emacs are a very valid""" start="00:13:09.040" video="qanda-blee" id="subtitle"]]
+[[!template text="""Free Software and the Open Source and Emacs are a very valid""" start="00:13:09.040" video="qanda-blee" id="subtitle"]]
[[!template text="""strategy for inside of IPR resistance. And thank you, Leo""" start="00:13:14.240" video="qanda-blee" id="subtitle"]]
[[!template text="""and Sacha and the rest of the folks for this wonderful yearly""" start="00:13:24.480" video="qanda-blee" id="subtitle"]]
[[!template text="""event. Well, thank you so much. And it's always a pleasure to""" start="00:13:29.720" video="qanda-blee" id="subtitle"]]
@@ -969,11 +969,11 @@ Captioner: mohsen
[[!template text="""Great. I see one more person in the room.""" start="00:14:04.040" video="qanda-blee" id="subtitle"]]
[[!template text="""Hi, John.""" start="00:14:23.440" video="qanda-blee" id="subtitle"]]
[[!template text="""I was looking at the questions.""" start="00:14:35.680" video="qanda-blee" id="subtitle"]]
-[[!template text="""To see if there is more that I can add. So.""" start="00:14:38.080" video="qanda-blee" id="subtitle"]]
+[[!template text="""To see if there is more that I can add. So,""" start="00:14:38.080" video="qanda-blee" id="subtitle"]]
[[!template text="""through the regard of societal impacts on ethical,""" start="00:14:46.240" video="qanda-blee" id="subtitle"]]
-[[!template text="""philosophical and wider force community. I'm involved in""" start="00:14:54.920" video="qanda-blee" id="subtitle"]]
+[[!template text="""philosophical and wider FOSS community. I'm involved in""" start="00:14:54.920" video="qanda-blee" id="subtitle"]]
[[!template text="""politics in my country, my party is very sympathetic to""" start="00:14:58.440" video="qanda-blee" id="subtitle"]]
-[[!template text="""force ideas and I have public...""" start="00:15:02.240" video="qanda-blee" id="subtitle"]]
+[[!template text="""FOSS ideas and I have public...""" start="00:15:02.240" video="qanda-blee" id="subtitle"]]
<div class="transcript-heading">[[!template new="1" text="""Q: Do you have any recommended reading materials designed for such an audience?""" start="00:15:05.278" video="qanda-blee" id="subtitle"]]</div>[[!template text="""Do you have any recommendation""" start="00:15:05.278" video="qanda-blee" id="subtitle"]]
[[!template text="""to reading materials designed for such an audience? Um,""" start="00:15:08.040" video="qanda-blee" id="subtitle"]]
diff --git a/2024/info/blee-before.md b/2024/info/blee-before.md
index ef67e9fa..e96b5b09 100644
--- a/2024/info/blee-before.md
+++ b/2024/info/blee-before.md
@@ -1,7 +1,6 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
[[!toc ]]
Format: 46-min talk ; Q&A: BigBlueButton conference room
-Etherpad: <https://pad.emacsconf.org/2024-blee>
Status: TO_CAPTION_QA
@@ -10,7 +9,7 @@ Status: TO_CAPTION_QA
# Talk
-<div class="vid"><video controls preload="none" id="blee-mainVideo"><source src="https://media.emacsconf.org/2024/emacsconf-2024-blee--about-blee-towards-an-integrated-emacs-environment-for-enveloping-our-own-autonomy-directed-digital-ecosystem--mohsen-banan--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-blee--about-blee-towards-an-integrated-emacs-environment-for-enveloping-our-own-autonomy-directed-digital-ecosystem--mohsen-banan--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2024/captions/emacsconf-2024-blee--about-blee-towards-an-integrated-emacs-environment-for-enveloping-our-own-autonomy-directed-digital-ecosystem--mohsen-banan--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="blee-mainVideo" data="""
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-blee"><source src="https://media.emacsconf.org/2024/emacsconf-2024-blee--about-blee-towards-an-integrated-emacs-environment-for-enveloping-our-own-autonomy-directed-digital-ecosystem--mohsen-banan--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-blee--about-blee-towards-an-integrated-emacs-environment-for-enveloping-our-own-autonomy-directed-digital-ecosystem--mohsen-banan--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2024/captions/emacsconf-2024-blee--about-blee-towards-an-integrated-emacs-environment-for-enveloping-our-own-autonomy-directed-digital-ecosystem--mohsen-banan--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="mainVideo-blee" data="""
00:00.000 Introduction
05:17.550 Blee: A Bigger and Different Vision for Emacs
08:02.817 The ``Nature of Polyexistentials'' Book
@@ -27,17 +26,17 @@ Status: TO_CAPTION_QA
42:54.267 Economics and Business Dimmensions of ByStar Digital Ecosystem
43:38.433 Pointers for Digging Deeper
-"""]]<div></div>Duration: 45:30 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2024-blee">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-blee--about-blee-towards-an-integrated-emacs-environment-for-enveloping-our-own-autonomy-directed-digital-ecosystem--mohsen-banan--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-blee--about-blee-towards-an-integrated-emacs-environment-for-enveloping-our-own-autonomy-directed-digital-ecosystem--mohsen-banan--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-blee--about-blee-towards-an-integrated-emacs-environment-for-enveloping-our-own-autonomy-directed-digital-ecosystem--mohsen-banan--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-blee--about-blee-towards-an-integrated-emacs-environment-for-enveloping-our-own-autonomy-directed-digital-ecosystem--mohsen-banan--main.webm">Download --main.webm (110MB)</a></li><li><a href="https://toobnix.org/w/4VywQEXSoLARtG1JZf9hoo">View on Toobnix</a></li></ul></div></div>
+"""]]<div></div>Duration: 45:30 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-blee--about-blee-towards-an-integrated-emacs-environment-for-enveloping-our-own-autonomy-directed-digital-ecosystem--mohsen-banan--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-blee--about-blee-towards-an-integrated-emacs-environment-for-enveloping-our-own-autonomy-directed-digital-ecosystem--mohsen-banan--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-blee--about-blee-towards-an-integrated-emacs-environment-for-enveloping-our-own-autonomy-directed-digital-ecosystem--mohsen-banan--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-blee--about-blee-towards-an-integrated-emacs-environment-for-enveloping-our-own-autonomy-directed-digital-ecosystem--mohsen-banan--main.webm">Download --main.webm (110MB)</a></li><li><a href="https://toobnix.org/w/4VywQEXSoLARtG1JZf9hoo">View on Toobnix</a></li><li><a href="https://youtu.be/wa6tjBXZiTU">View on Youtube</a></li></ul></div></div>
# Q&A
-<div class="vid"><video controls preload="none" id="blee-qanda"><source src="https://media.emacsconf.org/2024/emacsconf-2024-blee--about-blee-towards-an-integrated-emacs-environment-for-enveloping-our-own-autonomy-directed-digital-ecosystem--mohsen-banan--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-blee--about-blee-towards-an-integrated-emacs-environment-for-enveloping-our-own-autonomy-directed-digital-ecosystem--mohsen-banan--answers.vtt" default />"""<track kind="chapters" label="Chapters" src="/2024/captions/emacsconf-2024-blee--about-blee-towards-an-integrated-emacs-environment-for-enveloping-our-own-autonomy-directed-digital-ecosystem--mohsen-banan--answers--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="blee-qanda" data="""
+<div class="vid qanda"><video controls preload="none" id="qanda-blee"><source src="https://media.emacsconf.org/2024/emacsconf-2024-blee--about-blee-towards-an-integrated-emacs-environment-for-enveloping-our-own-autonomy-directed-digital-ecosystem--mohsen-banan--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-blee--about-blee-towards-an-integrated-emacs-environment-for-enveloping-our-own-autonomy-directed-digital-ecosystem--mohsen-banan--answers.vtt" default />"""<track kind="chapters" label="Chapters" src="/2024/captions/emacsconf-2024-blee--about-blee-towards-an-integrated-emacs-environment-for-enveloping-our-own-autonomy-directed-digital-ecosystem--mohsen-banan--answers--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="qanda-blee" data="""
05:33.280 Q: I'm from Brazil, which edition would you recommend?
07:07.080 Q: Thank you for this talk! How does your perspective interface with works such as Yanis Varoufakis' Technofeudalism?
08:21.980 Q: To what extent do you agree that the introduction of proprietary systems in education creates an environment for exploitation while at the same time diluting the learning value of the curriculum?
09:40.053 Q: As a specific example of how "ownership is not clean" ...
15:05.278 Q: Do you have any recommended reading materials designed for such an audience?
-"""]]<div>Listen to just the audio:<br /><audio controls preload="none" id="blee-qanda-audio" src="https://media.emacsconf.org/2024/emacsconf-2024-blee--about-blee-towards-an-integrated-emacs-environment-for-enveloping-our-own-autonomy-directed-digital-ecosystem--mohsen-banan--answers.opus"></audio></div><div></div>Duration: 18:11 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2024-blee">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-blee--about-blee-towards-an-integrated-emacs-environment-for-enveloping-our-own-autonomy-directed-digital-ecosystem--mohsen-banan--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-blee--about-blee-towards-an-integrated-emacs-environment-for-enveloping-our-own-autonomy-directed-digital-ecosystem--mohsen-banan--answers.opus">Download --answers.opus (8.9MB)</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-blee--about-blee-towards-an-integrated-emacs-environment-for-enveloping-our-own-autonomy-directed-digital-ecosystem--mohsen-banan--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-blee--about-blee-towards-an-integrated-emacs-environment-for-enveloping-our-own-autonomy-directed-digital-ecosystem--mohsen-banan--answers.webm">Download --answers.webm (41MB)</a></li></ul></div></div>
+"""]]<div>Listen to just the audio:<br /><audio controls preload="none" id="qanda-blee-audio" src="https://media.emacsconf.org/2024/emacsconf-2024-blee--about-blee-towards-an-integrated-emacs-environment-for-enveloping-our-own-autonomy-directed-digital-ecosystem--mohsen-banan--answers.opus"></audio></div><div></div>Duration: 18:11 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-blee--about-blee-towards-an-integrated-emacs-environment-for-enveloping-our-own-autonomy-directed-digital-ecosystem--mohsen-banan--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-blee--about-blee-towards-an-integrated-emacs-environment-for-enveloping-our-own-autonomy-directed-digital-ecosystem--mohsen-banan--answers.opus">Download --answers.opus (8.9MB)</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-blee--about-blee-towards-an-integrated-emacs-environment-for-enveloping-our-own-autonomy-directed-digital-ecosystem--mohsen-banan--answers.vtt">Download --answers.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-blee--about-blee-towards-an-integrated-emacs-environment-for-enveloping-our-own-autonomy-directed-digital-ecosystem--mohsen-banan--answers.webm">Download --answers.webm (41MB)</a></li><li><a href="https://toobnix.org/w/1kJVXirsko1Q6eUNXGQkwQ">View on Toobnix</a></li><li><a href="https://www.youtube.com/watch?v=dtTwQfMGGeg">View on Youtube</a></li></ul></div></div>
# Description
<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2024/info/casual-before.md b/2024/info/casual-before.md
index 7bd0566e..c580fe70 100644
--- a/2024/info/casual-before.md
+++ b/2024/info/casual-before.md
@@ -1,7 +1,6 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
[[!toc ]]
Format: 19-min talk ; Q&A: BigBlueButton conference room
-Etherpad: <https://pad.emacsconf.org/2024-casual>
Status: TO_CAPTION_QA
@@ -10,7 +9,7 @@ Status: TO_CAPTION_QA
# Talk
-<div class="vid"><video controls preload="none" id="casual-mainVideo"><source src="https://media.emacsconf.org/2024/emacsconf-2024-casual--reimagining-the-emacs-user-experience-with-casual-suite--charles-choi--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-casual--reimagining-the-emacs-user-experience-with-casual-suite--charles-choi--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2024/captions/emacsconf-2024-casual--reimagining-the-emacs-user-experience-with-casual-suite--charles-choi--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="casual-mainVideo" data="""
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-casual"><source src="https://media.emacsconf.org/2024/emacsconf-2024-casual--reimagining-the-emacs-user-experience-with-casual-suite--charles-choi--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-casual--reimagining-the-emacs-user-experience-with-casual-suite--charles-choi--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2024/captions/emacsconf-2024-casual--reimagining-the-emacs-user-experience-with-casual-suite--charles-choi--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="mainVideo-casual" data="""
00:00.000 introduction
00:43.800 Recall vs recognition
02:34.800 Emacs with keyboard-driven menus
@@ -30,11 +29,11 @@ Status: TO_CAPTION_QA
17:02.640 Casual has transformed my user experience with Emacs
17:34.451 Thanks and acknowledgements
-"""]]<div></div>Duration: 18:24 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2024-casual">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-casual--reimagining-the-emacs-user-experience-with-casual-suite--charles-choi--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-casual--reimagining-the-emacs-user-experience-with-casual-suite--charles-choi--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-casual--reimagining-the-emacs-user-experience-with-casual-suite--charles-choi--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-casual--reimagining-the-emacs-user-experience-with-casual-suite--charles-choi--main.webm">Download --main.webm (32MB)</a></li><li><a href="https://toobnix.org/w/5vCCqXFtWJ3EK7W3HKPRUD">View on Toobnix</a></li></ul></div></div>
+"""]]<div></div>Duration: 18:24 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-casual--reimagining-the-emacs-user-experience-with-casual-suite--charles-choi--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-casual--reimagining-the-emacs-user-experience-with-casual-suite--charles-choi--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-casual--reimagining-the-emacs-user-experience-with-casual-suite--charles-choi--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-casual--reimagining-the-emacs-user-experience-with-casual-suite--charles-choi--main.webm">Download --main.webm (32MB)</a></li><li><a href="https://toobnix.org/w/5vCCqXFtWJ3EK7W3HKPRUD">View on Toobnix</a></li><li><a href="https://youtu.be/-eMmmAKcFR4">View on Youtube</a></li></ul></div></div>
# Q&A
-<div class="vid"><video controls preload="none" id="casual-qanda"><source src="https://media.emacsconf.org/2024/emacsconf-2024-casual--reimagining-the-emacs-user-experience-with-casual-suite--charles-choi--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-casual--reimagining-the-emacs-user-experience-with-casual-suite--charles-choi--answers.vtt" default />"""<track kind="chapters" label="Chapters" src="/2024/captions/emacsconf-2024-casual--reimagining-the-emacs-user-experience-with-casual-suite--charles-choi--answers--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="casual-qanda" data="""
+<div class="vid qanda"><video controls preload="none" id="qanda-casual"><source src="https://media.emacsconf.org/2024/emacsconf-2024-casual--reimagining-the-emacs-user-experience-with-casual-suite--charles-choi--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-casual--reimagining-the-emacs-user-experience-with-casual-suite--charles-choi--answers.vtt" default />"""<track kind="chapters" label="Chapters" src="/2024/captions/emacsconf-2024-casual--reimagining-the-emacs-user-experience-with-casual-suite--charles-choi--answers--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="qanda-casual" data="""
00:00.000 Opening
03:13.600 Q: I wonder whether casual can only be used with the packages you
07:10.854 Q: Are there any patterns emerging, such that it would seem possible to 1) systematize 2) automate(?) the mapping of mode commands to keyboard-driven menus? Possibly even have an auto casual wrapper for an uncovered mode?
@@ -43,6 +42,6 @@ Status: TO_CAPTION_QA
14:40.282 Q: What modes are you working on at the moment for casual / are excited to explore?
18:14.280 Getting older
-"""]]<div>Listen to just the audio:<br /><audio controls preload="none" id="casual-qanda-audio" src="https://media.emacsconf.org/2024/emacsconf-2024-casual--reimagining-the-emacs-user-experience-with-casual-suite--charles-choi--answers.opus"></audio></div><div></div>Duration: 22:12 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2024-casual">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-casual--reimagining-the-emacs-user-experience-with-casual-suite--charles-choi--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-casual--reimagining-the-emacs-user-experience-with-casual-suite--charles-choi--answers.opus">Download --answers.opus (12MB)</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-casual--reimagining-the-emacs-user-experience-with-casual-suite--charles-choi--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-casual--reimagining-the-emacs-user-experience-with-casual-suite--charles-choi--answers.webm">Download --answers.webm (44MB)</a></li></ul></div></div>
+"""]]<div>Listen to just the audio:<br /><audio controls preload="none" id="qanda-casual-audio" src="https://media.emacsconf.org/2024/emacsconf-2024-casual--reimagining-the-emacs-user-experience-with-casual-suite--charles-choi--answers.opus"></audio></div><div></div>Duration: 22:12 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-casual--reimagining-the-emacs-user-experience-with-casual-suite--charles-choi--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-casual--reimagining-the-emacs-user-experience-with-casual-suite--charles-choi--answers.opus">Download --answers.opus (12MB)</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-casual--reimagining-the-emacs-user-experience-with-casual-suite--charles-choi--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-casual--reimagining-the-emacs-user-experience-with-casual-suite--charles-choi--answers.webm">Download --answers.webm (44MB)</a></li><li><a href="https://toobnix.org/w/bNSTtnXSKU3neu6Cpts6YZ">View on Toobnix</a></li><li><a href="https://www.youtube.com/watch?v=x9wPkqNlwrc">View on Youtube</a></li></ul></div></div>
# Description
<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2024/info/color-after.md b/2024/info/color-after.md
index fd9b31fd..a6726801 100644
--- a/2024/info/color-after.md
+++ b/2024/info/color-after.md
@@ -192,256 +192,256 @@ Captioner: sachac
<div class="transcript transcript-qanda"><a name="color-qanda-transcript"></a><h1>Q&A transcript (unedited)</h1>
-[[!template text="""... Org mode and kind of note taking. And that meant that it wasn't""" start="00:00:00.169" video="qanda-color" id="subtitle"]]
-[[!template text="""too difficult to get started with. But when I started more on""" start="00:00:02.810" video="qanda-color" id="subtitle"]]
-[[!template text="""the coding side, because I'm a software engineer, you know,""" start="00:00:08.972" video="qanda-color" id="subtitle"]]
-[[!template text="""on the day job. That kind of got me to think that the colors and""" start="00:00:08.972" video="qanda-color" id="subtitle"]]
-[[!template text="""how themes look, how Emacs looks, was affecting. And that's""" start="00:00:16.366" video="qanda-color" id="subtitle"]]
-[[!template text="""how it kind of came to picture. So I could have kind of gone""" start="00:00:25.331" video="qanda-color" id="subtitle"]]
-[[!template text="""into a little bit more coding side of things, but I didn't""" start="00:00:29.073" video="qanda-color" id="subtitle"]]
-[[!template text="""want to stress too much on the talk. So that's why I kind of""" start="00:00:29.073" video="qanda-color" id="subtitle"]]
-[[!template text="""stuck to a very small bits of Org Mode and Elisp. And yeah, I""" start="00:00:36.957" video="qanda-color" id="subtitle"]]
-[[!template text="""think that's how it came about. Yeah, but that's perfectly""" start="00:00:42.319" video="qanda-color" id="subtitle"]]
-[[!template text="""fine. That's one of the chief reasons why we have two tracks""" start="00:00:46.536" video="qanda-color" id="subtitle"]]
-[[!template text="""for Emacs content. We've had those for the last four years, I""" start="00:00:49.437" video="qanda-color" id="subtitle"]]
-[[!template text="""think. It's because we have a general track, which is more""" start="00:00:52.798" video="qanda-color" id="subtitle"]]
-[[!template text="""geared towards people who want a general... well,""" start="00:00:55.119" video="qanda-color" id="subtitle"]]
-[[!template text="""generally people who are highly interested into org mode""" start="00:00:55.119" video="qanda-color" id="subtitle"]]
-[[!template text="""and not necessarily into coding, but just to whet their""" start="00:00:55.119" video="qanda-color" id="subtitle"]]
-[[!template text="""appetite to what can be done. And on the DevTrack, we have,""" start="00:00:55.119" video="qanda-color" id="subtitle"]]
-[[!template text="""well, this year we have talked about Rust and about other""" start="00:01:06.082" video="qanda-color" id="subtitle"]]
-[[!template text="""fancy things that people can do with Emacs. But, you know,""" start="00:01:06.082" video="qanda-color" id="subtitle"]]
-[[!template text="""I'm also a software engineer, you know, we do this all the""" start="00:01:13.006" video="qanda-color" id="subtitle"]]
-[[!template text="""time. Sometimes it's just fine to just chat about colors and""" start="00:01:13.006" video="qanda-color" id="subtitle"]]
-[[!template text="""just the results of what we develop rather than how the""" start="00:01:15.808" video="qanda-color" id="subtitle"]]
-[[!template text="""sausage is made. So that's completely fine too. I'm not sure""" start="00:01:15.808" video="qanda-color" id="subtitle"]]
+[[!template text="""... Org mode and kind of note taking. And that meant that it wasn't""" start="00:00:00.000" video="qanda-color" id="subtitle"]]
+[[!template text="""too difficult to get started with. But when I started more on""" start="00:00:06.040" video="qanda-color" id="subtitle"]]
+[[!template text="""the coding side, because I'm a software engineer, you know,""" start="00:00:10.680" video="qanda-color" id="subtitle"]]
+[[!template text="""on the day job. That kind of got me to think that the colors and""" start="00:00:14.960" video="qanda-color" id="subtitle"]]
+[[!template text="""how themes look, how Emacs looks, was affecting. And that's""" start="00:00:20.680" video="qanda-color" id="subtitle"]]
+[[!template text="""how it kind of came to picture. So I could have kind of gone""" start="00:00:26.480" video="qanda-color" id="subtitle"]]
+[[!template text="""into a little bit more coding side of things, but I didn't""" start="00:00:30.720" video="qanda-color" id="subtitle"]]
+[[!template text="""want to stress too much on the talk. So that's why I kind of""" start="00:00:34.920" video="qanda-color" id="subtitle"]]
+[[!template text="""stuck to a very small bits of Org Mode and Elisp. And yeah, I""" start="00:00:38.320" video="qanda-color" id="subtitle"]]
+[[!template text="""think that's how it came about. Yeah, but that's perfectly""" start="00:00:43.440" video="qanda-color" id="subtitle"]]
+[[!template text="""fine. That's one of the chief reasons why we have two tracks""" start="00:00:48.160" video="qanda-color" id="subtitle"]]
+[[!template text="""for Emacs content. We've had those for the last four years, I""" start="00:00:52.120" video="qanda-color" id="subtitle"]]
+[[!template text="""think. It's because we have a general track, which is more""" start="00:00:54.800" video="qanda-color" id="subtitle"]]
+[[!template text="""geared towards people who want a general... well,""" start="00:00:57.280" video="qanda-color" id="subtitle"]]
+[[!template text="""generally people who are highly interested into org mode""" start="00:00:59.240" video="qanda-color" id="subtitle"]]
+[[!template text="""and not necessarily into coding, but just to whet their""" start="00:01:01.800" video="qanda-color" id="subtitle"]]
+[[!template text="""appetite to what can be done. And on the DevTrack, we have,""" start="00:01:04.000" video="qanda-color" id="subtitle"]]
+[[!template text="""well, this year we have talked about Rust and about other""" start="00:01:08.400" video="qanda-color" id="subtitle"]]
+[[!template text="""fancy things that people can do with Emacs. But, you know,""" start="00:01:11.520" video="qanda-color" id="subtitle"]]
+[[!template text="""I'm also a software engineer, you know, we do this all the""" start="00:01:13.560" video="qanda-color" id="subtitle"]]
+[[!template text="""time. Sometimes it's just fine to just chat about colors and""" start="00:01:15.560" video="qanda-color" id="subtitle"]]
+[[!template text="""just the results of what we develop rather than how the""" start="00:01:18.080" video="qanda-color" id="subtitle"]]
+[[!template text="""sausage is made. So that's completely fine too. I'm not sure""" start="00:01:20.960" video="qanda-color" id="subtitle"]]
-<div class="transcript-heading">[[!template new="1" text="""Why colour?""" start="00:01:23.733" video="qanda-color" id="subtitle"]]</div>[[!template text="""if you mentioned it in your presentation, but why color, out""" start="00:01:23.733" video="qanda-color" id="subtitle"]]
-[[!template text="""of all the things you could be ricing on your setup, why were""" start="00:01:23.733" video="qanda-color" id="subtitle"]]
-[[!template text="""you so interested about colors? I think it was just that""" start="00:01:23.733" video="qanda-color" id="subtitle"]]
-[[!template text="""mainly that I had to do a lot of context switch between""" start="00:01:34.870" video="qanda-color" id="subtitle"]]
-[[!template text="""different languages. Elisp is not the one because Elisp is""" start="00:01:34.870" video="qanda-color" id="subtitle"]]
-[[!template text="""something that I would do for Emacs editing. But for day job,""" start="00:01:41.576" video="qanda-color" id="subtitle"]]
-[[!template text="""I had to use mainly Go as I work with Kubernetes quite a bit. So""" start="00:01:47.061" video="qanda-color" id="subtitle"]]
-[[!template text="""Go and also web languages like TypeScript, JavaScript, you""" start="00:01:52.525" video="qanda-color" id="subtitle"]]
-[[!template text="""know, those languages, where I felt that whenever I was""" start="00:01:58.090" video="qanda-color" id="subtitle"]]
-[[!template text="""switching context to a different language, I felt that it's""" start="00:01:58.090" video="qanda-color" id="subtitle"]]
-[[!template text="""kind of annoying to see all the different colors in""" start="00:01:58.090" video="qanda-color" id="subtitle"]]
-[[!template text="""languages like TypeScript, where, you know, VS Code way""" start="00:01:58.090" video="qanda-color" id="subtitle"]]
-[[!template text="""would be very full of colors. which I felt that, okay, like,""" start="00:01:58.090" video="qanda-color" id="subtitle"]]
-[[!template text="""why do I have to have that many different colors on let and""" start="00:02:14.262" video="qanda-color" id="subtitle"]]
-[[!template text="""constant or the keywords where it could be just a white text?""" start="00:02:14.262" video="qanda-color" id="subtitle"]]
-[[!template text="""It didn't have to be that colorful. So that was the bit, the""" start="00:02:23.789" video="qanda-color" id="subtitle"]]
-[[!template text="""most annoying bit when it came to context switching. And I""" start="00:02:25.890" video="qanda-color" id="subtitle"]]
-[[!template text="""felt that that just didn't happen in the Org Mode or writing""" start="00:02:30.974" video="qanda-color" id="subtitle"]]
-[[!template text="""in general. So I had to find a way to make it work, make more""" start="00:02:30.974" video="qanda-color" id="subtitle"]]
-[[!template text="""coding make my coding more kind of friendly to me and that's""" start="00:02:36.017" video="qanda-color" id="subtitle"]]
-[[!template text="""when I thought maybe just the colors are something that's""" start="00:02:42.173" video="qanda-color" id="subtitle"]]
-[[!template text="""bothering me and it actually was the case and that's how I got""" start="00:02:42.173" video="qanda-color" id="subtitle"]]
-[[!template text="""to more into the color kind of journey and got too much into it""" start="00:02:42.173" video="qanda-color" id="subtitle"]]
-[[!template text="""I guess. Right, and was it what eventually motivated you to""" start="00:02:42.173" video="qanda-color" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Why colour?""" start="00:01:24.840" video="qanda-color" id="subtitle"]]</div>[[!template text="""if you mentioned it in your presentation, but why color, out""" start="00:01:24.840" video="qanda-color" id="subtitle"]]
+[[!template text="""of all the things you could be ricing on your setup, why were""" start="00:01:28.880" video="qanda-color" id="subtitle"]]
+[[!template text="""you so interested about colors? I think it was just that""" start="00:01:31.480" video="qanda-color" id="subtitle"]]
+[[!template text="""mainly that I had to do a lot of context switch between""" start="00:01:37.560" video="qanda-color" id="subtitle"]]
+[[!template text="""different languages. Elisp is not the one because Elisp is""" start="00:01:40.240" video="qanda-color" id="subtitle"]]
+[[!template text="""something that I would do for Emacs editing. But for day job,""" start="00:01:44.120" video="qanda-color" id="subtitle"]]
+[[!template text="""I had to use mainly Go as I work with Kubernetes quite a bit. So""" start="00:01:48.080" video="qanda-color" id="subtitle"]]
+[[!template text="""Go and also web languages like TypeScript, JavaScript, you""" start="00:01:53.000" video="qanda-color" id="subtitle"]]
+[[!template text="""know, those languages, where I felt that whenever I was""" start="00:01:58.120" video="qanda-color" id="subtitle"]]
+[[!template text="""switching context to a different language, I felt that it's""" start="00:02:01.520" video="qanda-color" id="subtitle"]]
+[[!template text="""kind of annoying to see all the different colors in""" start="00:02:05.360" video="qanda-color" id="subtitle"]]
+[[!template text="""languages like TypeScript, where, you know, VS Code way""" start="00:02:08.840" video="qanda-color" id="subtitle"]]
+[[!template text="""would be very full of colors. which I felt that, okay, like,""" start="00:02:12.000" video="qanda-color" id="subtitle"]]
+[[!template text="""why do I have to have that many different colors on let and""" start="00:02:15.800" video="qanda-color" id="subtitle"]]
+[[!template text="""constant or the keywords where it could be just a white text?""" start="00:02:18.760" video="qanda-color" id="subtitle"]]
+[[!template text="""It didn't have to be that colorful. So that was the bit, the""" start="00:02:23.760" video="qanda-color" id="subtitle"]]
+[[!template text="""most annoying bit when it came to context switching. And I""" start="00:02:27.680" video="qanda-color" id="subtitle"]]
+[[!template text="""felt that that just didn't happen in the Org Mode or writing""" start="00:02:31.400" video="qanda-color" id="subtitle"]]
+[[!template text="""in general. So I had to find a way to make it work, make more""" start="00:02:34.760" video="qanda-color" id="subtitle"]]
+[[!template text="""coding make my coding more kind of friendly to me and that's""" start="00:02:40.800" video="qanda-color" id="subtitle"]]
+[[!template text="""when I thought maybe just the colors are something that's""" start="00:02:46.200" video="qanda-color" id="subtitle"]]
+[[!template text="""bothering me and it actually was the case and that's how I got""" start="00:02:50.040" video="qanda-color" id="subtitle"]]
+[[!template text="""to more into the color kind of journey and got too much into it""" start="00:02:54.040" video="qanda-color" id="subtitle"]]
+[[!template text="""I guess. Right, and was it what eventually motivated you to""" start="00:02:59.360" video="qanda-color" id="subtitle"]]
-<div class="transcript-heading">[[!template new="1" text="""What motivated you to learn Elisp and get into the Emacs core?""" start="00:03:00.535" video="qanda-color" id="subtitle"]]</div>[[!template text="""learn Elisp and to get into the Emacs core? Because it's""" start="00:03:00.535" video="qanda-color" id="subtitle"]]
-[[!template text="""funny how you find plenty of people using Emacs in Org Mode""" start="00:03:05.798" video="qanda-color" id="subtitle"]]
-[[!template text="""and then they find something that they take particular""" start="00:03:05.798" video="qanda-color" id="subtitle"]]
-[[!template text="""issue with, for you it's the color, and then they just go all""" start="00:03:05.798" video="qanda-color" id="subtitle"]]
-[[!template text="""in trying to pull the rope as far as they can to try to""" start="00:03:05.798" video="qanda-color" id="subtitle"]]
-[[!template text="""understand as much as possible about what code is managing""" start="00:03:05.798" video="qanda-color" id="subtitle"]]
-[[!template text="""this part of the application. Like for you it was color, for""" start="00:03:05.798" video="qanda-color" id="subtitle"]]
-[[!template text="""me it was the org agenda, I desperately wanted to make Org""" start="00:03:22.786" video="qanda-color" id="subtitle"]]
-[[!template text="""Agenda do something that it wasn't able to do. And five""" start="00:03:25.367" video="qanda-color" id="subtitle"]]
-[[!template text="""years, well, actually, no, 10 years later, I find myself""" start="00:03:31.433" video="qanda-color" id="subtitle"]]
-[[!template text="""hosting Emacs Cons. So, you never know just how far you're""" start="00:03:31.433" video="qanda-color" id="subtitle"]]
-[[!template text="""going to be pulling this rope. So, it's really interesting""" start="00:03:36.598" video="qanda-color" id="subtitle"]]
-[[!template text="""for me that my call was this. But back to the question, is this""" start="00:03:39.561" video="qanda-color" id="subtitle"]]
-[[!template text="""what eventually motivated you to get into Elisp and the core""" start="00:03:42.464" video="qanda-color" id="subtitle"]]
-[[!template text="""of Emacs? I think that the original journey to move to Emacs""" start="00:03:42.464" video="qanda-color" id="subtitle"]]
-[[!template text="""was around keybindings that I got annoyed with with other""" start="00:03:49.798" video="qanda-color" id="subtitle"]]
-[[!template text="""solutions, not just, you know, not speaking of Emacs""" start="00:03:49.798" video="qanda-color" id="subtitle"]]
-[[!template text="""keybinding or anything, like anything in general. The main""" start="00:03:49.798" video="qanda-color" id="subtitle"]]
-[[!template text="""reason was that I used Dovrak keyboard layout, and that""" start="00:04:02.870" video="qanda-color" id="subtitle"]]
-[[!template text="""meant that all the C-c, C-v, C-p, whatever, It just is""" start="00:04:02.870" video="qanda-color" id="subtitle"]]
-[[!template text="""all over the place. So I had to find something that could work""" start="00:04:10.257" video="qanda-color" id="subtitle"]]
-[[!template text="""for me. And Emacs was a solution that allowed me to do""" start="00:04:11.577" video="qanda-color" id="subtitle"]]
-[[!template text="""anything. And that's the kind of the journey that it""" start="00:04:14.898" video="qanda-color" id="subtitle"]]
-[[!template text="""originally started. And from there, started tweaking org""" start="00:04:18.019" video="qanda-color" id="subtitle"]]
-[[!template text="""mode and writing experience to be tuned to my liking. Color""" start="00:04:21.599" video="qanda-color" id="subtitle"]]
-[[!template text="""was another thing that I thought, OK, maybe I could do it""" start="00:04:29.101" video="qanda-color" id="subtitle"]]
-[[!template text="""easily with org mode. And when I started to use more of the""" start="00:04:29.101" video="qanda-color" id="subtitle"]]
-[[!template text="""coding side of things on Emacs, I felt that, okay, that was""" start="00:04:34.262" video="qanda-color" id="subtitle"]]
-[[!template text="""something I needed to solve. So Elisp was always kind of""" start="00:04:39.355" video="qanda-color" id="subtitle"]]
-[[!template text="""just a toolkit that, you know, I knew that it was available. I""" start="00:04:41.877" video="qanda-color" id="subtitle"]]
-[[!template text="""knew that it would be something that I want to be able to use.""" start="00:04:48.322" video="qanda-color" id="subtitle"]]
-[[!template text="""So I think in a way color was a good segue to understand how I""" start="00:04:52.646" video="qanda-color" id="subtitle"]]
-[[!template text="""can kind of work out more of a complex logic with the editor""" start="00:04:52.646" video="qanda-color" id="subtitle"]]
-[[!template text="""without having to write JavaScript or things that I don't""" start="00:04:59.136" video="qanda-color" id="subtitle"]]
-[[!template text="""particularly like. So yeah, I think the journey around the""" start="00:04:59.136" video="qanda-color" id="subtitle"]]
-[[!template text="""functional languages, functional kind of programming was""" start="00:05:07.440" video="qanda-color" id="subtitle"]]
-[[!template text="""always something that I was keen about. And yeah, the whole""" start="00:05:07.440" video="qanda-color" id="subtitle"]]
-[[!template text="""journey kind of made sense for me. And then moving on to the""" start="00:05:13.943" video="qanda-color" id="subtitle"]]
-[[!template text="""color was just one way to get more involved in. So I can""" start="00:05:16.984" video="qanda-color" id="subtitle"]]
-[[!template text="""totally see that this journey kind of making to a little bit""" start="00:05:21.406" video="qanda-color" id="subtitle"]]
-[[!template text="""different angle But yeah, we shall see how that really turns""" start="00:05:21.406" video="qanda-color" id="subtitle"]]
-[[!template text="""out. But for now, I think I'm happy with the color setup. Now I""" start="00:05:27.669" video="qanda-color" id="subtitle"]]
-[[!template text="""can really focus on the coding. Well, that's all good. And""" start="00:05:33.514" video="qanda-color" id="subtitle"]]
-[[!template text="""I'm sure plenty of people listening to you now, you know,""" start="00:05:37.156" video="qanda-color" id="subtitle"]]
-[[!template text="""find this relatable, how they eventually got into""" start="00:05:37.156" video="qanda-color" id="subtitle"]]
-[[!template text="""programming. Like for you, you did say that you were a""" start="00:05:37.156" video="qanda-color" id="subtitle"]]
-[[!template text="""software engineer now. But I found plenty of people,""" start="00:05:44.222" video="qanda-color" id="subtitle"]]
-[[!template text="""especially doing workshops, that just started you know,""" start="00:05:48.705" video="qanda-color" id="subtitle"]]
-[[!template text="""their software engineering journey just with Emacs and""" start="00:05:54.339" video="qanda-color" id="subtitle"]]
-[[!template text="""they just realized they were doing something completely""" start="00:05:54.339" video="qanda-color" id="subtitle"]]
-[[!template text="""different, like I was studying humanities. But then you""" start="00:05:54.339" video="qanda-color" id="subtitle"]]
-[[!template text="""touch Emacs and you realize, yeah, this whole programming""" start="00:06:01.787" video="qanda-color" id="subtitle"]]
-[[!template text="""shtick is actually pretty damn cool.""" start="00:06:01.787" video="qanda-color" id="subtitle"]]
-[[!template text="""And then you find yourself again,""" start="00:06:07.280" video="qanda-color" id="subtitle"]]
-[[!template text="""five to 10 years later, becoming a software""" start="00:06:09.400" video="qanda-color" id="subtitle"]]
-[[!template text="""engineer. So yeah, that's all good.""" start="00:06:11.040" video="qanda-color" id="subtitle"]]
-[[!template text="""So we do have a couple of""" start="00:06:12.920" video="qanda-color" id="subtitle"]]
-[[!template text="""questions and I'd like to move into them so that I, I mean,""" start="00:06:14.520" video="qanda-color" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""What motivated you to learn Elisp and get into the Emacs core?""" start="00:03:04.040" video="qanda-color" id="subtitle"]]</div>[[!template text="""learn Elisp and to get into the Emacs core? Because it's""" start="00:03:04.040" video="qanda-color" id="subtitle"]]
+[[!template text="""funny how you find plenty of people using Emacs in Org Mode""" start="00:03:07.000" video="qanda-color" id="subtitle"]]
+[[!template text="""and then they find something that they take particular""" start="00:03:09.400" video="qanda-color" id="subtitle"]]
+[[!template text="""issue with, for you it's the color, and then they just go all""" start="00:03:11.400" video="qanda-color" id="subtitle"]]
+[[!template text="""in trying to pull the rope as far as they can to try to""" start="00:03:15.040" video="qanda-color" id="subtitle"]]
+[[!template text="""understand as much as possible about what code is managing""" start="00:03:18.040" video="qanda-color" id="subtitle"]]
+[[!template text="""this part of the application. Like for you it was color, for""" start="00:03:21.360" video="qanda-color" id="subtitle"]]
+[[!template text="""me it was the org agenda, I desperately wanted to make Org""" start="00:03:23.880" video="qanda-color" id="subtitle"]]
+[[!template text="""Agenda do something that it wasn't able to do. And five""" start="00:03:28.000" video="qanda-color" id="subtitle"]]
+[[!template text="""years, well, actually, no, 10 years later, I find myself""" start="00:03:32.440" video="qanda-color" id="subtitle"]]
+[[!template text="""hosting Emacs Cons. So, you never know just how far you're""" start="00:03:35.200" video="qanda-color" id="subtitle"]]
+[[!template text="""going to be pulling this rope. So, it's really interesting""" start="00:03:38.200" video="qanda-color" id="subtitle"]]
+[[!template text="""for me that my call was this. But back to the question, is this""" start="00:03:40.400" video="qanda-color" id="subtitle"]]
+[[!template text="""what eventually motivated you to get into Elisp and the core""" start="00:03:44.680" video="qanda-color" id="subtitle"]]
+[[!template text="""of Emacs? I think that the original journey to move to Emacs""" start="00:03:47.760" video="qanda-color" id="subtitle"]]
+[[!template text="""was around keybindings that I got annoyed with with other""" start="00:03:53.440" video="qanda-color" id="subtitle"]]
+[[!template text="""solutions, not just, you know, not speaking of Emacs""" start="00:03:56.960" video="qanda-color" id="subtitle"]]
+[[!template text="""keybinding or anything, like anything in general. The main""" start="00:03:59.840" video="qanda-color" id="subtitle"]]
+[[!template text="""reason was that I used Dovrak keyboard layout, and that""" start="00:04:02.880" video="qanda-color" id="subtitle"]]
+[[!template text="""meant that all the C-c, C-v, C-p, whatever, It just is""" start="00:04:07.520" video="qanda-color" id="subtitle"]]
+[[!template text="""all over the place. So I had to find something that could work""" start="00:04:10.800" video="qanda-color" id="subtitle"]]
+[[!template text="""for me. And Emacs was a solution that allowed me to do""" start="00:04:13.920" video="qanda-color" id="subtitle"]]
+[[!template text="""anything. And that's the kind of the journey that it""" start="00:04:17.040" video="qanda-color" id="subtitle"]]
+[[!template text="""originally started. And from there, started tweaking org""" start="00:04:20.480" video="qanda-color" id="subtitle"]]
+[[!template text="""mode and writing experience to be tuned to my liking. Color""" start="00:04:24.040" video="qanda-color" id="subtitle"]]
+[[!template text="""was another thing that I thought, OK, maybe I could do it""" start="00:04:28.440" video="qanda-color" id="subtitle"]]
+[[!template text="""easily with org mode. And when I started to use more of the""" start="00:04:32.560" video="qanda-color" id="subtitle"]]
+[[!template text="""coding side of things on Emacs, I felt that, okay, that was""" start="00:04:36.240" video="qanda-color" id="subtitle"]]
+[[!template text="""something I needed to solve. So Elisp was always kind of""" start="00:04:40.800" video="qanda-color" id="subtitle"]]
+[[!template text="""just a toolkit that, you know, I knew that it was available. I""" start="00:04:45.160" video="qanda-color" id="subtitle"]]
+[[!template text="""knew that it would be something that I want to be able to use.""" start="00:04:48.440" video="qanda-color" id="subtitle"]]
+[[!template text="""So I think in a way color was a good segue to understand how I""" start="00:04:52.200" video="qanda-color" id="subtitle"]]
+[[!template text="""can kind of work out more of a complex logic with the editor""" start="00:04:57.160" video="qanda-color" id="subtitle"]]
+[[!template text="""without having to write JavaScript or things that I don't""" start="00:05:03.360" video="qanda-color" id="subtitle"]]
+[[!template text="""particularly like. So yeah, I think the journey around the""" start="00:05:06.360" video="qanda-color" id="subtitle"]]
+[[!template text="""functional languages, functional kind of programming was""" start="00:05:09.400" video="qanda-color" id="subtitle"]]
+[[!template text="""always something that I was keen about. And yeah, the whole""" start="00:05:11.880" video="qanda-color" id="subtitle"]]
+[[!template text="""journey kind of made sense for me. And then moving on to the""" start="00:05:15.440" video="qanda-color" id="subtitle"]]
+[[!template text="""color was just one way to get more involved in. So I can""" start="00:05:18.480" video="qanda-color" id="subtitle"]]
+[[!template text="""totally see that this journey kind of making to a little bit""" start="00:05:22.000" video="qanda-color" id="subtitle"]]
+[[!template text="""different angle But yeah, we shall see how that really turns""" start="00:05:26.280" video="qanda-color" id="subtitle"]]
+[[!template text="""out. But for now, I think I'm happy with the color setup. Now I""" start="00:05:30.760" video="qanda-color" id="subtitle"]]
+[[!template text="""can really focus on the coding. Well, that's all good. And""" start="00:05:33.800" video="qanda-color" id="subtitle"]]
+[[!template text="""I'm sure plenty of people listening to you now, you know,""" start="00:05:37.600" video="qanda-color" id="subtitle"]]
+[[!template text="""find this relatable, how they eventually got into""" start="00:05:40.840" video="qanda-color" id="subtitle"]]
+[[!template text="""programming. Like for you, you did say that you were a""" start="00:05:43.640" video="qanda-color" id="subtitle"]]
+[[!template text="""software engineer now. But I found plenty of people,""" start="00:05:46.880" video="qanda-color" id="subtitle"]]
+[[!template text="""especially doing workshops, that just started you know,""" start="00:05:50.520" video="qanda-color" id="subtitle"]]
+[[!template text="""their software engineering journey just with Emacs and""" start="00:05:54.680" video="qanda-color" id="subtitle"]]
+[[!template text="""they just realized they were doing something completely""" start="00:05:57.640" video="qanda-color" id="subtitle"]]
+[[!template text="""different, like I was studying humanities. But then you""" start="00:05:59.240" video="qanda-color" id="subtitle"]]
+[[!template text="""touch Emacs and you realize, yeah, this whole programming""" start="00:06:02.000" video="qanda-color" id="subtitle"]]
+[[!template text="""shtick is actually pretty damn cool.""" start="00:06:05.080" video="qanda-color" id="subtitle"]]
+[[!template text="""And then you find yourself again,""" start="00:06:06.680" video="qanda-color" id="subtitle"]]
+[[!template text="""five to 10 years later, becoming a software""" start="00:06:09.080" video="qanda-color" id="subtitle"]]
+[[!template text="""engineer. So yeah, that's all good.""" start="00:06:11.000" video="qanda-color" id="subtitle"]]
+[[!template text="""So we do have a couple of""" start="00:06:13.000" video="qanda-color" id="subtitle"]]
+[[!template text="""questions and I'd like to move into them so that I, I mean,""" start="00:06:13.920" video="qanda-color" id="subtitle"]]
[[!template text="""people have questions and for me it's okay for me to chat with""" start="00:06:18.440" video="qanda-color" id="subtitle"]]
-[[!template text="""you but obviously it's better if people ask you the question""" start="00:06:22.440" video="qanda-color" id="subtitle"]]
+[[!template text="""you but obviously it's better if people ask you the question""" start="00:06:22.400" video="qanda-color" id="subtitle"]]
[[!template text="""themselves. And again, if you want to ask questions to Ryota""" start="00:06:25.120" video="qanda-color" id="subtitle"]]
-[[!template text="""directly, feel free to join us on BBB and whenever we're done""" start="00:06:27.680" video="qanda-color" id="subtitle"]]
-[[!template text="""with the questions on the pad, I'm more than happy""" start="00:06:31.080" video="qanda-color" id="subtitle"]]
+[[!template text="""directly, feel free to join us on BBB and whenever we're done""" start="00:06:27.640" video="qanda-color" id="subtitle"]]
+[[!template text="""with the questions on the pad, I'm more than happy""" start="00:06:31.040" video="qanda-color" id="subtitle"]]
[[!template text="""to let you ask your questions live.""" start="00:06:33.520" video="qanda-color" id="subtitle"]]
-<div class="transcript-heading">[[!template new="1" text="""Q: Is there any intention to create a library for working with more experimental color spaces? Pulling code out of Hasliberg for this purpose, perhaps?""" start="00:06:35.982" video="qanda-color" id="subtitle"]]</div>[[!template text="""All right, so starting with the first question,""" start="00:06:35.982" video="qanda-color" id="subtitle"]]
-[[!template text="""is there any intention to create a library""" start="00:06:37.903" video="qanda-color" id="subtitle"]]
-[[!template text="""for working with more experimental color spaces, pulling""" start="00:06:37.903" video="qanda-color" id="subtitle"]]
-[[!template text="""code out of Hasliberg for this purpose, perhaps? Although I""" start="00:06:35.982" video="qanda-color" id="subtitle"]]
-[[!template text="""do not know. Hasliberg, you might? Yeah, Hasliberg. And to""" start="00:06:45.329" video="qanda-color" id="subtitle"]]
-[[!template text="""answer the question, started the journey just for myself""" start="00:06:49.692" video="qanda-color" id="subtitle"]]
-[[!template text="""and I didn't think that it would be actually useful for other""" start="00:06:52.859" video="qanda-color" id="subtitle"]]
-[[!template text="""use cases and this conference talk just came about kind of""" start="00:06:52.859" video="qanda-color" id="subtitle"]]
-[[!template text="""out of sheer luck really. So the idea I think I can definitely""" start="00:06:52.859" video="qanda-color" id="subtitle"]]
-[[!template text="""work it out and I don't think there will be too, the original""" start="00:07:04.771" video="qanda-color" id="subtitle"]]
-[[!template text="""code that I started with was I had to use some color space and I""" start="00:07:04.771" video="qanda-color" id="subtitle"]]
-[[!template text="""started with sRGB and then went to HSL and then went to LCH. So""" start="00:07:15.931" video="qanda-color" id="subtitle"]]
-[[!template text="""I think there has been quite a bit that I learned from it. At""" start="00:07:21.996" video="qanda-color" id="subtitle"]]
-[[!template text="""the same time, I may be tempted to actually maybe perhaps""" start="00:07:25.458" video="qanda-color" id="subtitle"]]
-[[!template text="""contribute back to ct.el rather than creating my own. I""" start="00:07:25.458" video="qanda-color" id="subtitle"]]
-[[!template text="""think that would make more sense perhaps.""" start="00:07:34.105" video="qanda-color" id="subtitle"]]
-[[!template text="""But for my own kind of taste that I thought""" start="00:07:36.607" video="qanda-color" id="subtitle"]]
-[[!template text="""that it would be something I can work out in my theme,""" start="00:07:39.549" video="qanda-color" id="subtitle"]]
-[[!template text="""but I don't have any I think, you know, making a""" start="00:07:42.892" video="qanda-color" id="subtitle"]]
-[[!template text="""library is definitely something that I can think about, but""" start="00:07:45.813" video="qanda-color" id="subtitle"]]
-[[!template text="""perhaps maybe making it too many packages isn't exactly""" start="00:07:45.813" video="qanda-color" id="subtitle"]]
-[[!template text="""what I want. But for my own use case, I think I just wanted to""" start="00:07:45.813" video="qanda-color" id="subtitle"]]
-[[!template text="""have something that just didn't have any external""" start="00:07:55.175" video="qanda-color" id="subtitle"]]
-[[!template text="""dependency so that I can use the vanilla Emacs with my""" start="00:07:55.175" video="qanda-color" id="subtitle"]]
-[[!template text="""colors. I think that's how it started, but I'm definitely up""" start="00:07:55.175" video="qanda-color" id="subtitle"]]
-[[!template text="""for it if there is interest about it. Yeah, well, thank you""" start="00:08:06.757" video="qanda-color" id="subtitle"]]
-[[!template text="""for this. It's always good to contribute.""" start="00:08:12.622" video="qanda-color" id="subtitle"]]
-[[!template text="""I'm tempted to say""" start="00:08:16.040" video="qanda-color" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Q: Is there any intention to create a library for working with more experimental color spaces? Pulling code out of Hasliberg for this purpose, perhaps?""" start="00:06:35.320" video="qanda-color" id="subtitle"]]</div>[[!template text="""All right, so starting with the first question,""" start="00:06:35.320" video="qanda-color" id="subtitle"]]
+[[!template text="""is there any intention to create a library""" start="00:06:37.800" video="qanda-color" id="subtitle"]]
+[[!template text="""for working with more experimental color spaces, pulling""" start="00:06:40.000" video="qanda-color" id="subtitle"]]
+[[!template text="""code out of Hasliberg for this purpose, perhaps? Although I""" start="00:06:42.560" video="qanda-color" id="subtitle"]]
+[[!template text="""do not know. Hasliberg, you might? Yeah, Hasliberg. And to""" start="00:06:45.680" video="qanda-color" id="subtitle"]]
+[[!template text="""answer the question, started the journey just for myself""" start="00:06:50.480" video="qanda-color" id="subtitle"]]
+[[!template text="""and I didn't think that it would be actually useful for other""" start="00:06:55.120" video="qanda-color" id="subtitle"]]
+[[!template text="""use cases and this conference talk just came about kind of""" start="00:06:58.480" video="qanda-color" id="subtitle"]]
+[[!template text="""out of sheer luck really. So the idea I think I can definitely""" start="00:07:03.320" video="qanda-color" id="subtitle"]]
+[[!template text="""work it out and I don't think there will be too, the original""" start="00:07:08.080" video="qanda-color" id="subtitle"]]
+[[!template text="""code that I started with was I had to use some color space and I""" start="00:07:12.200" video="qanda-color" id="subtitle"]]
+[[!template text="""started with sRGB and then went to HSL and then went to LCH. So""" start="00:07:17.640" video="qanda-color" id="subtitle"]]
+[[!template text="""I think there has been quite a bit that I learned from it. At""" start="00:07:22.480" video="qanda-color" id="subtitle"]]
+[[!template text="""the same time, I may be tempted to actually maybe perhaps""" start="00:07:25.480" video="qanda-color" id="subtitle"]]
+[[!template text="""contribute back to ct.el rather than creating my own. I""" start="00:07:30.000" video="qanda-color" id="subtitle"]]
+[[!template text="""think that would make more sense perhaps.""" start="00:07:34.160" video="qanda-color" id="subtitle"]]
+[[!template text="""But for my own kind of taste that I thought""" start="00:07:36.280" video="qanda-color" id="subtitle"]]
+[[!template text="""that it would be something I can work out in my theme,""" start="00:07:39.480" video="qanda-color" id="subtitle"]]
+[[!template text="""but I don't have any I think, you know, making a""" start="00:07:42.840" video="qanda-color" id="subtitle"]]
+[[!template text="""library is definitely something that I can think about, but""" start="00:07:46.880" video="qanda-color" id="subtitle"]]
+[[!template text="""perhaps maybe making it too many packages isn't exactly""" start="00:07:50.000" video="qanda-color" id="subtitle"]]
+[[!template text="""what I want. But for my own use case, I think I just wanted to""" start="00:07:53.680" video="qanda-color" id="subtitle"]]
+[[!template text="""have something that just didn't have any external""" start="00:07:57.320" video="qanda-color" id="subtitle"]]
+[[!template text="""dependency so that I can use the vanilla Emacs with my""" start="00:07:59.920" video="qanda-color" id="subtitle"]]
+[[!template text="""colors. I think that's how it started, but I'm definitely up""" start="00:08:04.120" video="qanda-color" id="subtitle"]]
+[[!template text="""for it if there is interest about it. Yeah, well, thank you""" start="00:08:09.640" video="qanda-color" id="subtitle"]]
+[[!template text="""for this. It's always good to contribute.""" start="00:08:13.720" video="qanda-color" id="subtitle"]]
+[[!template text="""I'm tempted to say""" start="00:08:15.280" video="qanda-color" id="subtitle"]]
[[!template text="""that's how they get you. You know, you do something really""" start="00:08:16.400" video="qanda-color" id="subtitle"]]
-[[!template text="""cool and you share it with people and they have the, you know,""" start="00:08:18.680" video="qanda-color" id="subtitle"]]
-[[!template text="""they just ask you, oh, do you have your code online? And you""" start="00:08:24.800" video="qanda-color" id="subtitle"]]
-[[!template text="""realize, no, I haven't pushed it. And then they start""" start="00:08:27.166" video="qanda-color" id="subtitle"]]
-[[!template text="""pressing you on. well, you need to do this, this is amazing""" start="00:08:28.707" video="qanda-color" id="subtitle"]]
-[[!template text="""and you need to share it. You know, I had plenty of people ask""" start="00:08:30.287" video="qanda-color" id="subtitle"]]
-[[!template text="""me to share my dot files when I was tackling the org agenda""" start="00:08:33.849" video="qanda-color" id="subtitle"]]
-[[!template text="""issue that I mentioned earlier. And yeah, eventually when""" start="00:08:33.849" video="qanda-color" id="subtitle"]]
-[[!template text="""you get to publishing your stuff, you also feel great""" start="00:08:42.575" video="qanda-color" id="subtitle"]]
-[[!template text="""because you're putting a little bit of your intelligence""" start="00:08:42.575" video="qanda-color" id="subtitle"]]
-[[!template text="""into the world and it can be the start of the journey for""" start="00:08:42.575" video="qanda-color" id="subtitle"]]
-[[!template text="""someone else. You know, maybe someone will find your""" start="00:08:42.575" video="qanda-color" id="subtitle"]]
-[[!template text="""library at some point and realize, yeah, I wanted to do""" start="00:08:54.283" video="qanda-color" id="subtitle"]]
-[[!template text="""something slightly differently. and then they either""" start="00:08:54.283" video="qanda-color" id="subtitle"]]
-[[!template text="""contribute to a library or they make their own but it's a""" start="00:09:00.387" video="qanda-color" id="subtitle"]]
-[[!template text="""complete journey that starts with just people taking the""" start="00:09:00.387" video="qanda-color" id="subtitle"]]
-[[!template text="""time to publish the content of the brain basically. Yeah,""" start="00:09:00.387" video="qanda-color" id="subtitle"]]
-[[!template text="""that's the power of open source now. It's just how we really""" start="00:09:11.894" video="qanda-color" id="subtitle"]]
-[[!template text="""appreciate the open source culture being cultivated""" start="00:09:13.654" video="qanda-color" id="subtitle"]]
-[[!template text="""throughout so many years. And yeah, this is something that""" start="00:09:13.654" video="qanda-color" id="subtitle"]]
-[[!template text="""I'm definitely keen about. So yeah, open for suggestions.""" start="00:09:21.736" video="qanda-color" id="subtitle"]]
-[[!template text="""And exactly, that's how I started with the journey. And""" start="00:09:26.618" video="qanda-color" id="subtitle"]]
-[[!template text="""yeah, while this is very experimental and very personal,""" start="00:09:29.760" video="qanda-color" id="subtitle"]]
-[[!template text="""yeah, I'm not, you know, tied down to one particular way""" start="00:09:33.560" video="qanda-color" id="subtitle"]]
-[[!template text="""only. So yeah we'll be open to suggestions like this one""" start="00:09:38.240" video="qanda-color" id="subtitle"]]
-[[!template text="""which I would definitely think about. Yeah that's amazing""" start="00:09:41.680" video="qanda-color" id="subtitle"]]
-[[!template text="""and just to be clear you know this is not a there's no""" start="00:09:44.840" video="qanda-color" id="subtitle"]]
-[[!template text="""incentive one. I'm not pushing you to publish your library.""" start="00:09:46.880" video="qanda-color" id="subtitle"]]
-[[!template text="""You know it was very personal for you and at the end if you""" start="00:09:51.070" video="qanda-color" id="subtitle"]]
-[[!template text="""believe it might be useful for others it's a nice thing to""" start="00:09:51.070" video="qanda-color" id="subtitle"]]
-[[!template text="""eventually think about publishing it. But just the fact""" start="00:09:51.070" video="qanda-color" id="subtitle"]]
-[[!template text="""that you showed up at EmacsConf... Sorry, I'm""" start="00:09:58.056" video="qanda-color" id="subtitle"]]
-[[!template text="""starting to lose my voice on the morning""" start="00:10:01.278" video="qanda-color" id="subtitle"]]
-[[!template text="""of the first day. That's""" start="00:10:02.699" video="qanda-color" id="subtitle"]]
-[[!template text="""not boding well for the two next days. I mean, just one day.""" start="00:10:03.520" video="qanda-color" id="subtitle"]]
-[[!template text="""But just the""" start="00:10:08.560" video="qanda-color" id="subtitle"]]
-[[!template text="""fact that you're showing up at EmacsConf and sharing about""" start="00:10:10.080" video="qanda-color" id="subtitle"]]
-[[!template text="""all of this, the process, how you got to it eventually, it's""" start="00:10:13.280" video="qanda-color" id="subtitle"]]
-[[!template text="""also a part of sharing. And I think it's also amazing in its""" start="00:10:17.120" video="qanda-color" id="subtitle"]]
-[[!template text="""own way. Absolutely. Okay, I'm going to try to read the next""" start="00:10:19.440" video="qanda-color" id="subtitle"]]
+[[!template text="""cool and you share it with people and they have the, you know,""" start="00:08:18.280" video="qanda-color" id="subtitle"]]
+[[!template text="""they just ask you, oh, do you have your code online? And you""" start="00:08:23.640" video="qanda-color" id="subtitle"]]
+[[!template text="""realize, no, I haven't pushed it. And then they start""" start="00:08:27.240" video="qanda-color" id="subtitle"]]
+[[!template text="""pressing you on. well, you need to do this, this is amazing""" start="00:08:29.400" video="qanda-color" id="subtitle"]]
+[[!template text="""and you need to share it. You know, I had plenty of people ask""" start="00:08:32.360" video="qanda-color" id="subtitle"]]
+[[!template text="""me to share my dot files when I was tackling the org agenda""" start="00:08:35.880" video="qanda-color" id="subtitle"]]
+[[!template text="""issue that I mentioned earlier. And yeah, eventually when""" start="00:08:40.520" video="qanda-color" id="subtitle"]]
+[[!template text="""you get to publishing your stuff, you also feel great""" start="00:08:44.040" video="qanda-color" id="subtitle"]]
+[[!template text="""because you're putting a little bit of your intelligence""" start="00:08:47.480" video="qanda-color" id="subtitle"]]
+[[!template text="""into the world and it can be the start of the journey for""" start="00:08:50.280" video="qanda-color" id="subtitle"]]
+[[!template text="""someone else. You know, maybe someone will find your""" start="00:08:53.680" video="qanda-color" id="subtitle"]]
+[[!template text="""library at some point and realize, yeah, I wanted to do""" start="00:08:56.240" video="qanda-color" id="subtitle"]]
+[[!template text="""something slightly differently. and then they either""" start="00:08:58.680" video="qanda-color" id="subtitle"]]
+[[!template text="""contribute to a library or they make their own but it's a""" start="00:09:01.240" video="qanda-color" id="subtitle"]]
+[[!template text="""complete journey that starts with just people taking the""" start="00:09:04.440" video="qanda-color" id="subtitle"]]
+[[!template text="""time to publish the content of the brain basically. Yeah,""" start="00:09:07.360" video="qanda-color" id="subtitle"]]
+[[!template text="""that's the power of open source now. It's just how we really""" start="00:09:12.040" video="qanda-color" id="subtitle"]]
+[[!template text="""appreciate the open source culture being cultivated""" start="00:09:15.520" video="qanda-color" id="subtitle"]]
+[[!template text="""throughout so many years. And yeah, this is something that""" start="00:09:19.120" video="qanda-color" id="subtitle"]]
+[[!template text="""I'm definitely keen about. So yeah, open for suggestions.""" start="00:09:23.160" video="qanda-color" id="subtitle"]]
+[[!template text="""And exactly, that's how I started with the journey. And""" start="00:09:27.000" video="qanda-color" id="subtitle"]]
+[[!template text="""yeah, while this is very experimental and very personal,""" start="00:09:30.080" video="qanda-color" id="subtitle"]]
+[[!template text="""yeah, I'm not, you know, tied down to one particular way""" start="00:09:33.520" video="qanda-color" id="subtitle"]]
+[[!template text="""only. So yeah we'll be open to suggestions like this one""" start="00:09:38.200" video="qanda-color" id="subtitle"]]
+[[!template text="""which I would definitely think about. Yeah that's amazing""" start="00:09:41.400" video="qanda-color" id="subtitle"]]
+[[!template text="""and just to be clear you know this is not a there's no""" start="00:09:44.720" video="qanda-color" id="subtitle"]]
+[[!template text="""incentive one. I'm not pushing you to publish your library.""" start="00:09:47.000" video="qanda-color" id="subtitle"]]
+[[!template text="""You know it was very personal for you and at the end if you""" start="00:09:50.640" video="qanda-color" id="subtitle"]]
+[[!template text="""believe it might be useful for others it's a nice thing to""" start="00:09:53.800" video="qanda-color" id="subtitle"]]
+[[!template text="""eventually think about publishing it. But just the fact""" start="00:09:56.200" video="qanda-color" id="subtitle"]]
+[[!template text="""that you showed up at EmacsConf... Sorry, I'm""" start="00:09:58.800" video="qanda-color" id="subtitle"]]
+[[!template text="""starting to lose my voice on the morning""" start="00:10:01.440" video="qanda-color" id="subtitle"]]
+[[!template text="""of the first day. That's""" start="00:10:02.640" video="qanda-color" id="subtitle"]]
+[[!template text="""not boding well for the two next days. I mean, just one day.""" start="00:10:03.840" video="qanda-color" id="subtitle"]]
+[[!template text="""But just the""" start="00:10:07.640" video="qanda-color" id="subtitle"]]
+[[!template text="""fact that you're showing up at EmacsConf and sharing about""" start="00:10:09.160" video="qanda-color" id="subtitle"]]
+[[!template text="""all of this, the process, how you got to it eventually, it's""" start="00:10:13.200" video="qanda-color" id="subtitle"]]
+[[!template text="""also a part of sharing. And I think it's also amazing in its""" start="00:10:17.040" video="qanda-color" id="subtitle"]]
+[[!template text="""own way. Absolutely. Okay, I'm going to try to read the next""" start="00:10:19.640" video="qanda-color" id="subtitle"]]
[[!template text="""question and then try to cough a little bit. So can we have...""" start="00:10:26.040" video="qanda-color" id="subtitle"]]
-[[!template text="""Oh, sorry, Bala. Sorry. I was the one who asked the question.""" start="00:10:31.720" video="qanda-color" id="subtitle"]]
-[[!template text="""I thought I could ask it live here rather than... Thank you.""" start="00:10:36.920" video="qanda-color" id="subtitle"]]
-[[!template text="""I'll go cough a little bit. So here I am. Thanks, Ryota, for""" start="00:10:40.188" video="qanda-color" id="subtitle"]]
-[[!template text="""the nice talk. This is great. I loved it. Your attention to""" start="00:10:45.050" video="qanda-color" id="subtitle"]]
-[[!template text="""detail was awesome.""" start="00:10:49.531" video="qanda-color" id="subtitle"]]
+[[!template text="""Oh, sorry, Bala. Sorry. I was the one who asked the question.""" start="00:10:31.640" video="qanda-color" id="subtitle"]]
+[[!template text="""I thought I could ask it live here rather than... Thank you.""" start="00:10:36.760" video="qanda-color" id="subtitle"]]
+[[!template text="""I'll go cough a little bit. So here I am. Thanks, Ryota, for""" start="00:10:40.280" video="qanda-color" id="subtitle"]]
+[[!template text="""the nice talk. This is great. I loved it. Your attention to""" start="00:10:46.040" video="qanda-color" id="subtitle"]]
+[[!template text="""detail was awesome.""" start="00:10:50.520" video="qanda-color" id="subtitle"]]
-<div class="transcript-heading">[[!template new="1" text="""Q: Can we have a dark as well as light theme variations made from your theme?""" start="00:10:51.880" video="qanda-color" id="subtitle"]]</div>[[!template text="""So I was just looking at the code and I was""" start="00:10:51.880" video="qanda-color" id="subtitle"]]
-[[!template text="""wondering, do you have a dark and a light theme variation""" start="00:10:55.080" video="qanda-color" id="subtitle"]]
-[[!template text="""which can be made from your theme? Or do you have to customize""" start="00:10:58.840" video="qanda-color" id="subtitle"]]
-[[!template text="""it every time? That was my question. And thanks for that.""" start="00:11:02.480" video="qanda-color" id="subtitle"]]
-[[!template text="""Thank you very much. I appreciate your feedback and""" start="00:11:05.520" video="qanda-color" id="subtitle"]]
-[[!template text="""questions. So to answer the question, the short answer is""" start="00:11:10.240" video="qanda-color" id="subtitle"]]
-[[!template text="""that I do have both dark and light themes with some sorts of""" start="00:11:15.080" video="qanda-color" id="subtitle"]]
-[[!template text="""standard colors that I personally liked. And there were a""" start="00:11:18.640" video="qanda-color" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Q: Can we have a dark as well as light theme variations made from your theme?""" start="00:10:51.520" video="qanda-color" id="subtitle"]]</div>[[!template text="""So I was just looking at the code and I was""" start="00:10:51.520" video="qanda-color" id="subtitle"]]
+[[!template text="""wondering, do you have a dark and a light theme variation""" start="00:10:54.960" video="qanda-color" id="subtitle"]]
+[[!template text="""which can be made from your theme? Or do you have to customize""" start="00:10:58.760" video="qanda-color" id="subtitle"]]
+[[!template text="""it every time? That was my question. And thanks for that.""" start="00:11:02.600" video="qanda-color" id="subtitle"]]
+[[!template text="""Thank you very much. I appreciate your feedback and""" start="00:11:06.200" video="qanda-color" id="subtitle"]]
+[[!template text="""questions. So to answer the question, the short answer is""" start="00:11:09.680" video="qanda-color" id="subtitle"]]
+[[!template text="""that I do have both dark and light themes with some sorts of""" start="00:11:15.040" video="qanda-color" id="subtitle"]]
+[[!template text="""standard colors that I personally liked. And there were a""" start="00:11:18.440" video="qanda-color" id="subtitle"]]
[[!template text="""few things that I showed in the demo. where I showed, I think,""" start="00:11:22.200" video="qanda-color" id="subtitle"]]
-[[!template text="""three different dark theme colors. So light theme is""" start="00:11:26.720" video="qanda-color" id="subtitle"]]
-[[!template text="""definitely something that I can do.""" start="00:11:30.040" video="qanda-color" id="subtitle"]]
-[[!template text="""And the idea around Hasliberg theme""" start="00:11:31.800" video="qanda-color" id="subtitle"]]
-[[!template text="""and just my theming in general was that""" start="00:11:33.880" video="qanda-color" id="subtitle"]]
-[[!template text="""when I feel like I want to work in dark theme and when I want to""" start="00:11:36.360" video="qanda-color" id="subtitle"]]
-[[!template text="""work in the standard way, I would just use the standard color.""" start="00:11:39.680" video="qanda-color" id="subtitle"]]
-[[!template text="""But when I feel like maybe it's just so cold that I want""" start="00:11:42.480" video="qanda-color" id="subtitle"]]
-[[!template text="""to have a bit of a warm colors near me, I would use the orange""" start="00:11:44.960" video="qanda-color" id="subtitle"]]
-[[!template text="""theme, without changing too much of the kind of general""" start="00:11:49.400" video="qanda-color" id="subtitle"]]
-[[!template text="""feeling and experience. So that can be said for the light""" start="00:11:52.360" video="qanda-color" id="subtitle"]]
-[[!template text="""theme as well. So there is something and the kind of""" start="00:11:55.680" video="qanda-color" id="subtitle"]]
+[[!template text="""three different dark theme colors. So light theme is""" start="00:11:26.680" video="qanda-color" id="subtitle"]]
+[[!template text="""definitely something that I can do.""" start="00:11:30.000" video="qanda-color" id="subtitle"]]
+[[!template text="""And the idea around Hasliberg theme""" start="00:11:31.560" video="qanda-color" id="subtitle"]]
+[[!template text="""and just my theming in general was that""" start="00:11:33.760" video="qanda-color" id="subtitle"]]
+[[!template text="""when I feel like I want to work in dark theme and when I want to""" start="00:11:36.280" video="qanda-color" id="subtitle"]]
+[[!template text="""work in the standard way, I would just use the standard color.""" start="00:11:39.600" video="qanda-color" id="subtitle"]]
+[[!template text="""But when I feel like maybe it's just so cold that I want""" start="00:11:42.160" video="qanda-color" id="subtitle"]]
+[[!template text="""to have a bit of a warm colors near me, I would use the orange""" start="00:11:44.920" video="qanda-color" id="subtitle"]]
+[[!template text="""theme, without changing too much of the kind of general""" start="00:11:48.520" video="qanda-color" id="subtitle"]]
+[[!template text="""feeling and experience. So that can be said for the light""" start="00:11:52.280" video="qanda-color" id="subtitle"]]
+[[!template text="""theme as well. So there is something and the kind of""" start="00:11:55.640" video="qanda-color" id="subtitle"]]
[[!template text="""customization isn't that difficult to extend. So I do have""" start="00:11:58.960" video="qanda-color" id="subtitle"]]
-[[!template text="""both dark and light, but primarily I'm just looking at the""" start="00:12:04.920" video="qanda-color" id="subtitle"]]
-[[!template text="""dark theme as my main driver. But yeah, they are both""" start="00:12:09.080" video="qanda-color" id="subtitle"]]
-[[!template text="""available. Great. Thank you so much. I will definitely try""" start="00:12:10.240" video="qanda-color" id="subtitle"]]
-[[!template text="""your theme out. I'm definitely on the lookout for a nice,""" start="00:12:18.208" video="qanda-color" id="subtitle"]]
-[[!template text="""friendly theme. Thank you very much. As I said, this is a""" start="00:12:19.205" video="qanda-color" id="subtitle"]]
-[[!template text="""personal theme. I'm not sure if it really fits everyone's""" start="00:12:25.388" video="qanda-color" id="subtitle"]]
-[[!template text="""need, but it is one inspiration that I hope that can lead to""" start="00:12:29.089" video="qanda-color" id="subtitle"]]
-[[!template text="""another nice theming that could work for someone""" start="00:12:29.089" video="qanda-color" id="subtitle"]]
-[[!template text="""specifically for some use cases. I don't have to solve""" start="00:12:29.089" video="qanda-color" id="subtitle"]]
-[[!template text="""everyone's problem. Yeah, and I mean, it was sufficient to""" start="00:12:42.996" video="qanda-color" id="subtitle"]]
-[[!template text="""be inspirational to people. I mean, just Bala just""" start="00:12:46.553" video="qanda-color" id="subtitle"]]
-[[!template text="""mentioned it right now, but I'm sure plenty of people who""" start="00:12:49.755" video="qanda-color" id="subtitle"]]
-[[!template text="""watched live, but also people will be watching in the""" start="00:12:49.755" video="qanda-color" id="subtitle"]]
-[[!template text="""future, will have the interest to speak by what you've done.""" start="00:12:49.755" video="qanda-color" id="subtitle"]]
-[[!template text="""So thank you again so much for this. Yep. All right, well, I""" start="00:12:58.699" video="qanda-color" id="subtitle"]]
-[[!template text="""don't see any further questions. So I suggest we move""" start="00:13:04.102" video="qanda-color" id="subtitle"]]
-[[!template text="""towards closure. Ryota, do you have any last words? No, I""" start="00:13:07.083" video="qanda-color" id="subtitle"]]
-[[!template text="""don't. So yeah, thank you very much for attending. And it was""" start="00:13:13.775" video="qanda-color" id="subtitle"]]
-[[!template text="""great fun putting this together. And I really didn't think""" start="00:13:16.577" video="qanda-color" id="subtitle"]]
-[[!template text="""that I would be talking about my personal colors and""" start="00:13:19.299" video="qanda-color" id="subtitle"]]
-[[!template text="""personal favorites, like orange being my favorite color.""" start="00:13:19.299" video="qanda-color" id="subtitle"]]
-[[!template text="""This wouldn't be something that I would say out in any""" start="00:13:27.845" video="qanda-color" id="subtitle"]]
-[[!template text="""conference, to be honest. But it just came out to be. And""" start="00:13:27.845" video="qanda-color" id="subtitle"]]
-[[!template text="""happy that I had a chance. So thank you very much for giving me""" start="00:13:33.890" video="qanda-color" id="subtitle"]]
-[[!template text="""the opportunity to talk. in this amazing conference and""" start="00:13:35.651" video="qanda-color" id="subtitle"]]
-[[!template text="""yeah I can't just wait to check out other talks which you know""" start="00:13:39.574" video="qanda-color" id="subtitle"]]
-[[!template text="""I know that there isn't you know other talks that are""" start="00:13:39.574" video="qanda-color" id="subtitle"]]
-[[!template text="""happening right now I was actually wanted to to join them and""" start="00:13:39.574" video="qanda-color" id="subtitle"]]
-[[!template text="""check check that out so I will probably do that right now.""" start="00:13:39.574" video="qanda-color" id="subtitle"]]
-[[!template text="""Well, sure. Well, I won't hold you any longer then. Thank""" start="00:13:53.419" video="qanda-color" id="subtitle"]]
-[[!template text="""you. For me, it was just amazing to, you know, generally when""" start="00:13:56.401" video="qanda-color" id="subtitle"]]
-[[!template text="""you ask someone what their favorite color, you know, they""" start="00:13:57.682" video="qanda-color" id="subtitle"]]
-[[!template text="""just tell you orange or blue or whatever. They don't go then""" start="00:13:57.682" video="qanda-color" id="subtitle"]]
-[[!template text="""to chat about 20 minutes about their favorite color and how""" start="00:14:03.586" video="qanda-color" id="subtitle"]]
-[[!template text="""they tuned their entire editor to work exactly around their""" start="00:14:03.586" video="qanda-color" id="subtitle"]]
-[[!template text="""favorite colors. So it was inspiring. And I also want to try""" start="00:14:03.586" video="qanda-color" id="subtitle"]]
-[[!template text="""it out, frankly, because my theme has been utterly bad for""" start="00:14:12.912" video="qanda-color" id="subtitle"]]
-[[!template text="""the last five years and I need some change into my life. All""" start="00:14:12.912" video="qanda-color" id="subtitle"]]
-[[!template text="""right. Thank you so much for your time. Thank you very much,""" start="00:14:21.497" video="qanda-color" id="subtitle"]]
-[[!template text="""everyone. Cheers. Bye-bye.""" start="00:14:23.629" video="qanda-color" id="subtitle"]]
+[[!template text="""both dark and light, but primarily I'm just looking at the""" start="00:12:04.840" video="qanda-color" id="subtitle"]]
+[[!template text="""dark theme as my main driver. But yeah, they are both""" start="00:12:09.360" video="qanda-color" id="subtitle"]]
+[[!template text="""available. Great. Thank you so much. I will definitely try""" start="00:12:12.840" video="qanda-color" id="subtitle"]]
+[[!template text="""your theme out. I'm definitely on the lookout for a nice,""" start="00:12:18.240" video="qanda-color" id="subtitle"]]
+[[!template text="""friendly theme. Thank you very much. As I said, this is a""" start="00:12:21.720" video="qanda-color" id="subtitle"]]
+[[!template text="""personal theme. I'm not sure if it really fits everyone's""" start="00:12:26.120" video="qanda-color" id="subtitle"]]
+[[!template text="""need, but it is one inspiration that I hope that can lead to""" start="00:12:31.280" video="qanda-color" id="subtitle"]]
+[[!template text="""another nice theming that could work for someone""" start="00:12:37.160" video="qanda-color" id="subtitle"]]
+[[!template text="""specifically for some use cases. I don't have to solve""" start="00:12:40.640" video="qanda-color" id="subtitle"]]
+[[!template text="""everyone's problem. Yeah, and I mean, it was sufficient to""" start="00:12:44.200" video="qanda-color" id="subtitle"]]
+[[!template text="""be inspirational to people. I mean, just Bala just""" start="00:12:48.720" video="qanda-color" id="subtitle"]]
+[[!template text="""mentioned it right now, but I'm sure plenty of people who""" start="00:12:50.720" video="qanda-color" id="subtitle"]]
+[[!template text="""watched live, but also people will be watching in the""" start="00:12:53.760" video="qanda-color" id="subtitle"]]
+[[!template text="""future, will have the interest to speak by what you've done.""" start="00:12:56.000" video="qanda-color" id="subtitle"]]
+[[!template text="""So thank you again so much for this. Yep. All right, well, I""" start="00:12:58.600" video="qanda-color" id="subtitle"]]
+[[!template text="""don't see any further questions. So I suggest we move""" start="00:13:05.080" video="qanda-color" id="subtitle"]]
+[[!template text="""towards closure. Ryota, do you have any last words? No, I""" start="00:13:09.720" video="qanda-color" id="subtitle"]]
+[[!template text="""don't. So yeah, thank you very much for attending. And it was""" start="00:13:14.280" video="qanda-color" id="subtitle"]]
+[[!template text="""great fun putting this together. And I really didn't think""" start="00:13:17.080" video="qanda-color" id="subtitle"]]
+[[!template text="""that I would be talking about my personal colors and""" start="00:13:20.520" video="qanda-color" id="subtitle"]]
+[[!template text="""personal favorites, like orange being my favorite color.""" start="00:13:24.760" video="qanda-color" id="subtitle"]]
+[[!template text="""This wouldn't be something that I would say out in any""" start="00:13:27.760" video="qanda-color" id="subtitle"]]
+[[!template text="""conference, to be honest. But it just came out to be. And""" start="00:13:30.120" video="qanda-color" id="subtitle"]]
+[[!template text="""happy that I had a chance. So thank you very much for giving me""" start="00:13:34.160" video="qanda-color" id="subtitle"]]
+[[!template text="""the opportunity to talk. in this amazing conference and""" start="00:13:37.480" video="qanda-color" id="subtitle"]]
+[[!template text="""yeah I can't just wait to check out other talks which you know""" start="00:13:41.440" video="qanda-color" id="subtitle"]]
+[[!template text="""I know that there isn't you know other talks that are""" start="00:13:44.320" video="qanda-color" id="subtitle"]]
+[[!template text="""happening right now I was actually wanted to to join them and""" start="00:13:46.920" video="qanda-color" id="subtitle"]]
+[[!template text="""check check that out so I will probably do that right now.""" start="00:13:50.200" video="qanda-color" id="subtitle"]]
+[[!template text="""Well, sure. Well, I won't hold you any longer then. Thank""" start="00:13:52.760" video="qanda-color" id="subtitle"]]
+[[!template text="""you. For me, it was just amazing to, you know, generally when""" start="00:13:56.840" video="qanda-color" id="subtitle"]]
+[[!template text="""you ask someone what their favorite color, you know, they""" start="00:13:59.760" video="qanda-color" id="subtitle"]]
+[[!template text="""just tell you orange or blue or whatever. They don't go then""" start="00:14:01.640" video="qanda-color" id="subtitle"]]
+[[!template text="""to chat about 20 minutes about their favorite color and how""" start="00:14:04.400" video="qanda-color" id="subtitle"]]
+[[!template text="""they tuned their entire editor to work exactly around their""" start="00:14:07.040" video="qanda-color" id="subtitle"]]
+[[!template text="""favorite colors. So it was inspiring. And I also want to try""" start="00:14:10.080" video="qanda-color" id="subtitle"]]
+[[!template text="""it out, frankly, because my theme has been utterly bad for""" start="00:14:14.760" video="qanda-color" id="subtitle"]]
+[[!template text="""the last five years and I need some change into my life. All""" start="00:14:18.000" video="qanda-color" id="subtitle"]]
+[[!template text="""right. Thank you so much for your time. Thank you very much,""" start="00:14:20.640" video="qanda-color" id="subtitle"]]
+[[!template text="""everyone. Cheers. Bye-bye.""" start="00:14:24.320" video="qanda-color" 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%20color%3A%20Colour%20your%20Emacs%20with%20ease)
diff --git a/2024/info/color-before.md b/2024/info/color-before.md
index 12a5abfb..89145fbd 100644
--- a/2024/info/color-before.md
+++ b/2024/info/color-before.md
@@ -1,7 +1,6 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
[[!toc ]]
Format: 12-min talk ; Q&A: BigBlueButton conference room
-Etherpad: <https://pad.emacsconf.org/2024-color>
Status: TO_CAPTION_QA
@@ -10,7 +9,7 @@ Status: TO_CAPTION_QA
# Talk
-<div class="vid"><video controls preload="none" id="color-mainVideo"><source src="https://media.emacsconf.org/2024/emacsconf-2024-color--colour-your-emacs-with-ease--ryota--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-color--colour-your-emacs-with-ease--ryota--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2024/captions/emacsconf-2024-color--colour-your-emacs-with-ease--ryota--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="color-mainVideo" data="""
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-color"><source src="https://media.emacsconf.org/2024/emacsconf-2024-color--colour-your-emacs-with-ease--ryota--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-color--colour-your-emacs-with-ease--ryota--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2024/captions/emacsconf-2024-color--colour-your-emacs-with-ease--ryota--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="mainVideo-color" data="""
00:00.000 Introduction
00:58.668 What colour do you like?
03:42.120 Colour spaces: HSL, LCH , and more
@@ -18,16 +17,16 @@ Status: TO_CAPTION_QA
08:08.400 Hasliberg theme
11:06.240 Wrap up
-"""]]<div></div>Duration: 11:48 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2024-color">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-color--colour-your-emacs-with-ease--ryota--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-color--colour-your-emacs-with-ease--ryota--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-color--colour-your-emacs-with-ease--ryota--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-color--colour-your-emacs-with-ease--ryota--main.webm">Download --main.webm (39MB)</a></li><li><a href="https://toobnix.org/w/oAGLWntah15B4XHLX19Uqc">View on Toobnix</a></li></ul></div></div>
+"""]]<div></div>Duration: 11:48 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-color--colour-your-emacs-with-ease--ryota--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-color--colour-your-emacs-with-ease--ryota--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-color--colour-your-emacs-with-ease--ryota--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-color--colour-your-emacs-with-ease--ryota--main.webm">Download --main.webm (39MB)</a></li><li><a href="https://toobnix.org/w/oAGLWntah15B4XHLX19Uqc">View on Toobnix</a></li><li><a href="https://youtu.be/w1Khu7G0MFg">View on Youtube</a></li></ul></div></div>
# Q&A
-<div class="vid"><video controls preload="none" id="color-qanda"><source src="https://media.emacsconf.org/2024/emacsconf-2024-color--colour-your-emacs-with-ease--ryota--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-color--colour-your-emacs-with-ease--ryota--answers.vtt" default />"""<track kind="chapters" label="Chapters" src="/2024/captions/emacsconf-2024-color--colour-your-emacs-with-ease--ryota--answers--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="color-qanda" data="""
-01:23.733 Why colour?
-03:00.535 What motivated you to learn Elisp and get into the Emacs core?
-06:35.982 Q: Is there any intention to create a library for working with more experimental color spaces? Pulling code out of Hasliberg for this purpose, perhaps?
-10:51.880 Q: Can we have a dark as well as light theme variations made from your theme?
+<div class="vid qanda"><video controls preload="none" id="qanda-color"><source src="https://media.emacsconf.org/2024/emacsconf-2024-color--colour-your-emacs-with-ease--ryota--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-color--colour-your-emacs-with-ease--ryota--answers.vtt" default />"""<track kind="chapters" label="Chapters" src="/2024/captions/emacsconf-2024-color--colour-your-emacs-with-ease--ryota--answers--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="qanda-color" data="""
+01:24.840 Why colour?
+03:04.040 What motivated you to learn Elisp and get into the Emacs core?
+06:35.320 Q: Is there any intention to create a library for working with more experimental color spaces? Pulling code out of Hasliberg for this purpose, perhaps?
+10:51.520 Q: Can we have a dark as well as light theme variations made from your theme?
-"""]]<div>Listen to just the audio:<br /><audio controls preload="none" id="color-qanda-audio" src="https://media.emacsconf.org/2024/emacsconf-2024-color--colour-your-emacs-with-ease--ryota--answers.opus"></audio></div><div></div>Duration: 14:31 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2024-color">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-color--colour-your-emacs-with-ease--ryota--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-color--colour-your-emacs-with-ease--ryota--answers.opus">Download --answers.opus (8.4MB)</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-color--colour-your-emacs-with-ease--ryota--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-color--colour-your-emacs-with-ease--ryota--answers.webm">Download --answers.webm (25MB)</a></li></ul></div></div>
+"""]]<div>Listen to just the audio:<br /><audio controls preload="none" id="qanda-color-audio" src="https://media.emacsconf.org/2024/emacsconf-2024-color--colour-your-emacs-with-ease--ryota--answers.opus"></audio></div><div></div>Duration: 14:31 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-color--colour-your-emacs-with-ease--ryota--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-color--colour-your-emacs-with-ease--ryota--answers.opus">Download --answers.opus (8.4MB)</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-color--colour-your-emacs-with-ease--ryota--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-color--colour-your-emacs-with-ease--ryota--answers.webm">Download --answers.webm (25MB)</a></li><li><a href="https://toobnix.org/w/6JccKrjCLLxcpRuhqScfn2">View on Toobnix</a></li><li><a href="https://www.youtube.com/watch?v=JJB8mxYEen8">View on Youtube</a></li></ul></div></div>
# Description
<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2024/info/emacs30-after.md b/2024/info/emacs30-after.md
index 1e64a9c4..7c4c24b3 100644
--- a/2024/info/emacs30-after.md
+++ b/2024/info/emacs30-after.md
@@ -5,461 +5,461 @@
<div class="transcript-heading">[[!template new="1" text="""Introduction""" start="00:00:00.000" video="mainVideo-emacs30" id="subtitle"]]</div>[[!template text="""Hello, and welcome to Emacs 30 Highlights at EmacsConf 2024.""" start="00:00:00.000" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""Before I begin, I'd like to thank the organizers""" start="00:00:06.100" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""and everyone involved for putting this all together.""" start="00:00:08.866" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""Before I begin, I'd like to thank the organizers""" start="00:00:06.120" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""and everyone involved for putting this all together.""" start="00:00:08.840" video="mainVideo-emacs30" id="subtitle"]]
[[!template text="""While this talk is being pre-recorded,""" start="00:00:11.800" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""my experience from the last few years""" start="00:00:13.766" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""assures me that it will be a great experience for everyone.""" start="00:00:15.266" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""My name is Philip Kaludercic.""" start="00:00:19.133" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""I am a core contributor and ELPA co-maintainer.""" start="00:00:21.333" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""I was honored when Sacha asked me""" start="00:00:24.500" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""to take over the slot for this year.""" start="00:00:26.100" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""In the past few iterations,""" start="00:00:28.366" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""John Wiegley has filled a similar presentation""" start="00:00:29.900" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""focusing on more general Emacs development updates.""" start="00:00:32.166" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""This year, I will specifically focus on""" start="00:00:35.700" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""highlight features from the upcoming Emacs 30 release,""" start="00:00:38.502" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""which might or might not have been released""" start="00:00:41.933" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""by the time you are seeing this.""" start="00:00:44.200" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""As you can imagine, everything new about Emacs""" start="00:00:48.060" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""can always be found in the Emacs NEWS file.""" start="00:00:51.300" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""Or, alternatively,""" start="00:00:55.166" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""if one doesn't want to read through the 3,000 lines here,""" start="00:00:57.133" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""one can also take a look at the Emacs FAQ""" start="00:01:01.800" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""and then go to the what's new about""" start="00:01:05.266" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""my experience from the last few years""" start="00:00:13.760" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""assures me that it will be a great experience for everyone.""" start="00:00:15.240" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""My name is Philip Kaludercic.""" start="00:00:19.160" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""I am a core contributor and ELPA co-maintainer.""" start="00:00:21.360" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""I was honored when Sacha asked me""" start="00:00:24.480" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""to take over the slot for this year.""" start="00:00:26.080" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""In the past few iterations,""" start="00:00:28.360" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""John Wiegley has filled a similar presentation""" start="00:00:29.880" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""focusing on more general Emacs development updates.""" start="00:00:32.200" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""This year, I will specifically focus on""" start="00:00:35.680" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""highlight features from the upcoming Emacs 30 release,""" start="00:00:38.520" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""which might or might not have been released""" start="00:00:41.920" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""by the time you are seeing this.""" start="00:00:43.920" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""As you can imagine, everything new about Emacs""" start="00:00:48.080" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""can always be found in the Emacs NEWS file.""" start="00:00:51.080" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""Or, alternatively,""" start="00:00:55.060" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""if one doesn't want to read through the 3,000 lines here,""" start="00:00:57.080" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""one can also take a look at the Emacs FAQ""" start="00:01:01.920" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""and then go to the what's new about""" start="00:01:05.280" video="mainVideo-emacs30" id="subtitle"]]
[[!template text="""or what's different about Emacs 30 node.""" start="00:01:08.000" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""Next to these two official options,""" start="00:01:12.333" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""I also have a page on Emacs Wiki""" start="00:01:14.733" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""called EmacsThirtyHighlights,""" start="00:01:18.200" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""highlighting some of the interesting features""" start="00:01:21.333" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""with some context and suggestions on how to try them out.""" start="00:01:24.300" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""This is more of a collaborative effort.""" start="00:01:28.466" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""So if you see this and think something is missing,""" start="00:01:30.066" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""feel free to add it.""" start="00:01:32.766" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""So without further ado,""" start="00:01:34.533" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""let's begin taking a look at new features in Emacs 30.""" start="00:01:36.866" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""Next to these two official options,""" start="00:01:12.220" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""I also have a page on Emacs Wiki""" start="00:01:14.760" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""called EmacsThirtyHighlights,""" start="00:01:18.600" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""highlighting some of the interesting features""" start="00:01:21.440" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""with some context and suggestions on how to try them out.""" start="00:01:24.280" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""This is more of a collaborative effort.""" start="00:01:28.440" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""So if you see this and think something is missing,""" start="00:01:30.040" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""feel free to add it.""" start="00:01:32.720" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""So without further ado,""" start="00:01:34.520" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""let's begin taking a look at new features in Emacs 30.""" start="00:01:36.840" video="mainVideo-emacs30" id="subtitle"]]
-<div class="transcript-heading">[[!template new="1" text="""Android""" start="00:01:41.800" video="mainVideo-emacs30" id="subtitle"]]</div>[[!template text="""The biggest one, and the one I want to mention first,""" start="00:01:41.800" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""is Android support, native Android support.""" start="00:01:44.733" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""As you can see here, Emacs has been ported""" start="00:01:49.066" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""to the Android operating system.""" start="00:01:51.866" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""What this means is that from Emacs 30 onwards,""" start="00:01:53.700" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""you can build Android to target Android devices natively""" start="00:01:56.533" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""and using a graphical interface.""" start="00:02:01.100" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""While it has been possible to run Emacs""" start="00:02:06.766" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""inside of terminal emulators on Android for a while,""" start="00:02:08.466" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""this actually means that you can use Emacs""" start="00:02:11.166" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""on an Android device, a phone or a tablet,""" start="00:02:13.933" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""and have all the usual advantages from GUI Emacs,""" start="00:02:17.566" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""such as the ability to bind all commands""" start="00:02:20.966" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""without having to worry about--""" start="00:02:23.500" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""all keys without having to worry""" start="00:02:25.500" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""about terminal compatibility issues,""" start="00:02:27.300" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""displaying images and multiple fonts""" start="00:02:29.066" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""on the same display of different sizes.""" start="00:02:32.766" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""I should have a recording""" start="00:02:35.366" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""of that somewhere here--here we are--""" start="00:02:37.333" video="mainVideo-emacs30" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Android""" start="00:01:41.760" video="mainVideo-emacs30" id="subtitle"]]</div>[[!template text="""The biggest one, and the one I want to mention first,""" start="00:01:41.760" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""is Android support, native Android support.""" start="00:01:44.680" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""As you can see here, Emacs has been ported""" start="00:01:49.040" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""to the Android operating system.""" start="00:01:51.880" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""What this means is that from Emacs 30 onwards,""" start="00:01:53.640" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""you can build Android to target Android devices natively""" start="00:01:56.480" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""and using a graphical interface.""" start="00:02:01.280" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""While it has been possible to run Emacs""" start="00:02:06.760" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""inside of terminal emulators on Android for a while,""" start="00:02:08.800" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""this actually means that you can use Emacs""" start="00:02:11.160" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""on an Android device, a phone or a tablet,""" start="00:02:13.920" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""and have all the usual advantages from GUI Emacs,""" start="00:02:17.520" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""such as the ability to bind all commands""" start="00:02:20.960" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""without having to worry about--""" start="00:02:23.480" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""all keys without having to worry""" start="00:02:25.480" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""about terminal compatibility issues,""" start="00:02:27.280" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""displaying images and multiple fonts""" start="00:02:29.360" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""on the same display of different sizes.""" start="00:02:32.760" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""I should have a recording""" start="00:02:35.360" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""of that somewhere here--here we are--""" start="00:02:37.280" video="mainVideo-emacs30" id="subtitle"]]
[[!template text="""which I made earlier on my phone,""" start="00:02:42.200" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""because I'm recording this on a laptop--""" start="00:02:44.133" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""where we can see how touch interaction works""" start="00:02:47.300" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""on an Android phone. I can switch between buffers.""" start="00:02:50.500" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""Here I've connected an external keyboard,""" start="00:02:53.366" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""opening the Emacs website.""" start="00:02:56.133" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""We have images that we can interact with.""" start="00:02:57.800" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""We could resize them if we wanted to""" start="00:03:02.560" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""with the image resizing commands.""" start="00:03:04.320" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""Pinch-to-zoom works, so it""" start="00:03:07.400" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""does realize what touchscreen interactions are.""" start="00:03:10.333" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""With an external mouse, and for example,""" start="00:03:12.766" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""enabling context menu mode,""" start="00:03:15.266" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""because I'm recording this on a laptop--""" start="00:02:44.440" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""where we can see how touch interaction works""" start="00:02:47.320" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""on an Android phone. I can switch between buffers.""" start="00:02:50.480" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""Here I've connected an external keyboard,""" start="00:02:53.200" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""opening the Emacs website.""" start="00:02:56.120" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""We have images that we can interact with.""" start="00:02:58.560" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""We could resize them if we wanted to""" start="00:03:02.680" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""with the image resizing commands.""" start="00:03:05.320" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""Pinch-to-zoom works, so it""" start="00:03:07.560" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""does realize what touchscreen interactions are.""" start="00:03:10.360" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""With an external mouse, and for example,""" start="00:03:12.760" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""enabling context menu mode,""" start="00:03:15.240" video="mainVideo-emacs30" id="subtitle"]]
[[!template text="""I can even pop up little interaction windows,""" start="00:03:17.800" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""which one you would usually also know from GUI Emacs.""" start="00:03:23.100" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""TUI Emacs actually also supports them since a while now.""" start="00:03:28.140" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""And in this case, I'm demonstrating""" start="00:03:33.200" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""how even the touchscreen events""" start="00:03:34.600" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""which one you would usually also know from GUI Emacs.""" start="00:03:22.680" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""TUI Emacs actually also supports them since a while now.""" start="00:03:27.240" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""And in this case, I'm demonstrating""" start="00:03:32.960" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""how even the touchscreen events""" start="00:03:34.640" video="mainVideo-emacs30" id="subtitle"]]
[[!template text="""can be inspected using the usual help system,""" start="00:03:36.000" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""and how context-mode notices""" start="00:03:39.166" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""where we are and allows me to, for example,""" start="00:03:43.366" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""evaluate this specific region,""" start="00:03:45.200" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""and how context-mode notices""" start="00:03:39.120" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""where we are and allows me to, for example,""" start="00:03:43.360" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""evaluate this specific region,""" start="00:03:45.240" video="mainVideo-emacs30" id="subtitle"]]
[[!template text="""which I've highlighted down there,""" start="00:03:47.800" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""binding a command to touch-screen-scroll. Yeah.""" start="00:03:49.333" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""One should note that these additions,""" start="00:03:58.333" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""for example touchscreen interaction,""" start="00:04:00.566" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""are not specific to Android,""" start="00:04:02.400" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""but they also are supported in other operating systems,""" start="00:04:03.866" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""such as Wayland and Xorg, which are not operating systems,""" start="00:04:07.100" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""and Windows, insofar as they have touchscreen,""" start="00:04:12.200" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""and devices have touchscreen support.""" start="00:04:15.333" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""binding a command to touch-screen-scroll. Yeah.""" start="00:03:49.080" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""One should note that these additions,""" start="00:03:58.320" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""for example touchscreen interaction,""" start="00:04:00.480" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""are not specific to Android,""" start="00:04:02.360" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""but they also are supported in other operating systems,""" start="00:04:04.160" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""such as Wayland and Xorg, which are not operating systems,""" start="00:04:06.840" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""and Windows, insofar as they have touchscreen,""" start="00:04:12.280" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""and devices have touchscreen support.""" start="00:04:15.280" video="mainVideo-emacs30" id="subtitle"]]
[[!template text="""One should mention, or I want to mention,""" start="00:04:18.420" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""that the main developer behind this feature, Po Lu,""" start="00:04:21.333" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""should be complimented for the additional effort he put""" start="00:04:24.700" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""into making sure that Emacs for Android""" start="00:04:27.533" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""can be built using only a free software toolchain,""" start="00:04:31.020" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""which is certainly not something one has come to expect""" start="00:04:34.166" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""from working on Android applications,""" start="00:04:36.360" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""as usually you have to agree to some terms and conditions""" start="00:04:40.733" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""for Google-specific software.""" start="00:04:43.866" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""Final note is that if you try and look for this online,""" start="00:04:46.520" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""there are APKs you can find,""" start="00:04:49.666" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""but some of them might be outdated.""" start="00:04:52.166" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""To the best of my knowledge, Po Lu has...""" start="00:04:54.700" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""Emacs 30 Android Sourceforge...""" start="00:04:59.366" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""He has set up some system where here in Sourceforge,""" start="00:05:03.400" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""there are regular and updated""" start="00:05:06.533" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""APK files which you can download""" start="00:05:12.466" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""to avoid having to build it yourself,""" start="00:05:14.533" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""testing out the newest version""" start="00:05:16.966" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""in case there are some bugs which you'd like to report.""" start="00:05:18.900" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""Which-key is a package which has now been moved""" start="00:05:24.166" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""from ELPA to the core.""" start="00:05:33.133" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""If you haven't heard of which-key before, the idea is,""" start="00:05:35.300" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""or the general pitch is that which-key""" start="00:05:39.180" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""is a additional documentation interface for Emacs""" start="00:05:41.666" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""for displaying various keys which you could input,""" start="00:05:45.266" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""or various keys and key maps""" start="00:05:49.733" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""that have been partially inputted.""" start="00:05:53.440" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""A better way to demonstrate this""" start="00:05:54.866" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""or to explain this is just to show it.""" start="00:05:57.666" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""If we enable the which-key mode--it's a global minor mode--""" start="00:05:59.333" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""then I can press, for example, C-x,""" start="00:06:03.500" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""which is a prefix for the C-x keymap.""" start="00:06:06.366" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""Then down here in the buffer, in this window down here,""" start="00:06:08.733" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""we see various commands which we could invoke""" start="00:06:12.466" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""and the keys to invoke them with.""" start="00:06:15.366" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""For example, if I wanted to say C-x i for insert-file,""" start="00:06:17.933" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""then I just have to press i to highlight it once again.""" start="00:06:23.000" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""It should be down here. Pressing i without having to repeat""" start="00:06:27.266" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""the entire key code again,""" start="00:06:32.600" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""the partial key code again, just works.""" start="00:06:34.766" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""This is different from the feature which Emacs has already,""" start="00:06:37.200" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""which is if you have input the partial keychord,""" start="00:06:41.566" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""you can press C-h""" start="00:06:45.400" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""and then a help buffer pops up with a listing""" start="00:06:47.066" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""of all keybindings that start with C-x.""" start="00:06:51.000" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""The information is the same, the presentation is different,""" start="00:06:54.100" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""because now if I wanted to do C-x i,""" start="00:06:56.666" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""I have to repeat the entire keychord again.""" start="00:06:59.100" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""So it's a matter of personal preference, which you prefer.""" start="00:07:03.340" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""This is more of a traditional static approach""" start="00:07:09.500" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""because I get a help buffer which I can search""" start="00:07:10.960" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""using usual key commands,""" start="00:07:19.666" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""while which-key is more of a transient and modern.""" start="00:07:20.933" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""Some might prefer that approach""" start="00:07:28.166" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""to solving the same problem.""" start="00:07:31.400" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""Also, don't forget to check out the customization group""" start="00:07:35.720" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""for which-key which has a number of options""" start="00:07:39.133" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""which you might or might not be interested in.""" start="00:07:41.966" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""that the main developer behind this feature, Po Lu,""" start="00:04:21.240" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""should be complimented for the additional effort he put""" start="00:04:24.040" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""into making sure that Emacs for Android""" start="00:04:27.320" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""can be built using only a free software toolchain,""" start="00:04:30.980" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""which is certainly not something one has come to expect""" start="00:04:33.720" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""from working on Android applications,""" start="00:04:37.000" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""as usually you have to agree to some terms and conditions""" start="00:04:40.760" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""for Google-specific software.""" start="00:04:43.840" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""Final note is that if you try and look for this online,""" start="00:04:46.480" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""there are APKs you can find,""" start="00:04:49.640" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""but some of them might be outdated.""" start="00:04:52.120" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""To the best of my knowledge, Po Lu has...""" start="00:04:54.680" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""Emacs 30 Android Sourceforge...""" start="00:04:59.360" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""He has set up some system where here in Sourceforge,""" start="00:05:02.400" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""there are regular and updated""" start="00:05:06.760" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""APK files which you can download""" start="00:05:12.800" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""to avoid having to build it yourself,""" start="00:05:14.520" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""testing out the newest version""" start="00:05:17.040" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""in case there are some bugs which you'd like to report.""" start="00:05:18.560" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""Which-key is a package which has now been moved""" start="00:05:27.620" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""from ELPA to the core.""" start="00:05:33.120" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""If you haven't heard of which-key before, the idea is,""" start="00:05:34.720" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""or the general pitch is that which-key""" start="00:05:38.880" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""is a additional documentation interface for Emacs""" start="00:05:41.400" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""for displaying various keys which you could input,""" start="00:05:45.280" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""or various keys and key maps""" start="00:05:49.640" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""that have been partially inputted.""" start="00:05:53.480" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""A better way to demonstrate this""" start="00:05:55.480" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""or to explain this is just to show it.""" start="00:05:57.640" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""If we enable the which-key mode--it's a global minor mode--""" start="00:05:59.320" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""then I can press, for example, C-x,""" start="00:06:03.520" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""which is a prefix for the C-x keymap.""" start="00:06:06.400" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""Then down here in the buffer, in this window down here,""" start="00:06:08.720" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""we see various commands which we could invoke""" start="00:06:11.720" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""and the keys to invoke them with.""" start="00:06:15.600" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""For example, if I wanted to say C-x i for insert-file,""" start="00:06:17.920" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""then I just have to press i to highlight it once again.""" start="00:06:23.040" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""It should be down here. Pressing i without having to repeat""" start="00:06:27.320" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""the entire key code again,""" start="00:06:32.560" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""the partial key code again, just works.""" start="00:06:34.760" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""This is different from the feature which Emacs has already,""" start="00:06:37.720" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""which is if you have input the partial keychord,""" start="00:06:41.680" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""you can press C-h""" start="00:06:45.520" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""and then a help buffer pops up with a listing""" start="00:06:47.040" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""of all keybindings that start with C-x.""" start="00:06:50.960" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""The information is the same, the presentation is different,""" start="00:06:54.160" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""because now if I wanted to do C-x i,""" start="00:06:56.640" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""I have to repeat the entire keychord again.""" start="00:06:59.160" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""So it's a matter of personal preference, which you prefer.""" start="00:07:03.320" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""This is more of a traditional static approach""" start="00:07:09.480" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""because I get a help buffer which I can search""" start="00:07:12.520" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""using usual key commands,""" start="00:07:19.640" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""while which-key is more of a transient and modern.""" start="00:07:21.120" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""Some might prefer that approach""" start="00:07:28.160" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""to solving the same problem.""" start="00:07:31.300" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""Also, don't forget to check out the customization group""" start="00:07:35.520" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""for which-key which has a number of options""" start="00:07:39.120" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""which you might or might not be interested in.""" start="00:07:41.960" video="mainVideo-emacs30" id="subtitle"]]
-<div class="transcript-heading">[[!template new="1" text="""EditorConfig""" start="00:07:45.720" video="mainVideo-emacs30" id="subtitle"]]</div>[[!template text="""Next up, Emacs 30 has built-in EditorConfig support.""" start="00:07:45.720" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""If you have not heard of EditorConfig before,""" start="00:07:50.900" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""I believe I've linked to it down here somewhere.""" start="00:07:53.666" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""Ah, there it is, EditorConfig.""" start="00:07:56.640" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""This is a file format used to specify""" start="00:08:00.120" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""common formatting rules in an editor-agnostic way.""" start="00:08:09.420" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""You might compare it to .dir-locals.el files,""" start="00:08:12.166" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""which is a sort of an s-expression""" start="00:08:16.300" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""for setting file-local variables in Emacs.""" start="00:08:19.366" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""Of course, this is restricted to the common subset""" start="00:08:22.266" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""of what all editors should understand.""" start="00:08:27.300" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""For example, indentation styles,""" start="00:08:29.400" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""whether you prefer tabs or spaces,""" start="00:08:31.866" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""tab width, file encoding, and so on.""" start="00:08:35.120" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""So it's nothing too advanced, but it's something...""" start="00:08:38.766" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""It is a file format which one sees popping up more""" start="00:08:43.920" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""and more often in lots of projects""" start="00:08:48.533" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""which want to enforce a consistent indentation style""" start="00:08:50.466" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""or formatting rules for all editors in a project.""" start="00:08:53.600" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""Having this built in is certainly useful in Emacs.""" start="00:08:56.666" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""Though one should note that it's not enabled by default.""" start="00:09:00.200" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""You still have to enable the global minor mode,""" start="00:09:03.500" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""which is simply turning on this one option.""" start="00:09:10.940" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""Shouldn't be more than that,""" start="00:09:14.200" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""and then Emacs will respect the rules.""" start="00:09:15.533" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""If it finds a .editorconfig file in the project directory,""" start="00:09:18.666" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""then it will respect those rules""" start="00:09:23.641" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""without having to do anything else.""" start="00:09:25.321" video="mainVideo-emacs30" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""EditorConfig""" start="00:07:44.700" video="mainVideo-emacs30" id="subtitle"]]</div>[[!template text="""Next up, Emacs 30 has built-in EditorConfig support.""" start="00:07:44.700" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""If you have not heard of EditorConfig before,""" start="00:07:50.880" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""I believe I've linked to it down here somewhere.""" start="00:07:53.680" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""Ah, there it is, EditorConfig.""" start="00:07:56.380" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""This is a file format used to specify""" start="00:08:00.161" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""common formatting rules in an editor-agnostic way.""" start="00:08:05.261" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""You might compare it to .dir-locals.el files,""" start="00:08:11.960" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""which is a sort of an s-expression""" start="00:08:16.320" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""for setting file-local variables in Emacs.""" start="00:08:19.160" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""Of course, this is restricted to the common subset""" start="00:08:22.160" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""of what all editors should understand.""" start="00:08:26.560" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""For example, indentation styles,""" start="00:08:29.300" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""whether you prefer tabs or spaces,""" start="00:08:31.840" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""tab width, file encoding, and so on.""" start="00:08:36.700" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""So it's nothing too advanced, but it's something...""" start="00:08:38.760" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""It is a file format which one sees popping up more""" start="00:08:43.960" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""and more often in lots of projects""" start="00:08:48.560" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""which want to enforce a consistent indentation style""" start="00:08:50.440" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""or formatting rules for all editors in a project.""" start="00:08:53.480" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""Having this built in is certainly useful in Emacs.""" start="00:08:56.640" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""Though one should note that it's not enabled by default.""" start="00:09:00.160" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""You still have to enable the global minor mode,""" start="00:09:03.580" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""which is simply turning on this one option.""" start="00:09:11.040" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""Shouldn't be more than that,""" start="00:09:14.240" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""and then Emacs will respect the rules.""" start="00:09:15.600" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""If it finds a .editorconfig file in the project directory,""" start="00:09:18.760" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""then it will respect those rules""" start="00:09:23.000" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""without having to do anything else.""" start="00:09:25.320" video="mainVideo-emacs30" id="subtitle"]]
-<div class="transcript-heading">[[!template new="1" text="""use-package integration with package-vc""" start="00:09:27.310" video="mainVideo-emacs30" id="subtitle"]]</div>[[!template text="""Next up, use-package integration with package-vc.""" start="00:09:27.310" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""For those not familiar with either of the two,""" start="00:09:33.568" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""or at least one of the two,""" start="00:09:36.534" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""use-package is a popular configuration macro.""" start="00:09:37.534" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""What it does is it allows""" start="00:09:40.700" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""users to declaratively specify packages""" start="00:09:42.866" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""they would like to have installed and configured""" start="00:09:46.266" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""in their configuration file,""" start="00:09:48.900" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""so that, for example, if you copy your init.el""" start="00:09:51.660" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""from one system to another,""" start="00:09:54.433" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""it could bootstrap the entire configuration,""" start="00:09:55.900" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""downloading all the packages you want""" start="00:09:58.500" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""without having to manually do this""" start="00:10:00.766" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""on every system you'd like to use.""" start="00:10:02.400" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""This allows configurations""" start="00:10:05.140" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""to be self-encapsulated and portable.""" start="00:10:07.633" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""package-vc is an extension of package.el,""" start="00:10:10.860" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""which allows installing packages from an alternative.""" start="00:10:15.060" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""Instead of using the standard way to install packages,""" start="00:10:19.433" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""which is just download tarball and unpack it,""" start="00:10:22.400" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""byte compile, and so on,""" start="00:10:26.500" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""it will fetch the files for a package""" start="00:10:27.966" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""directly from the source code repository""" start="00:10:32.400" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""and initialize it in such a way""" start="00:10:35.000" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""that package.el can work with it.""" start="00:10:37.266" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""So it's just a front-end for installing packages.""" start="00:10:38.833" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""Even though these two were added to Emacs 29,""" start="00:10:44.240" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""we didn't have the time to work on the""" start="00:10:46.500" video="mainVideo-emacs30" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""use-package integration with package-vc""" start="00:09:30.240" video="mainVideo-emacs30" id="subtitle"]]</div>[[!template text="""Next up, use-package integration with package-vc.""" start="00:09:30.240" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""For those not familiar with either of the two,""" start="00:09:34.600" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""or at least one of the two,""" start="00:09:36.520" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""use-package is a popular configuration macro.""" start="00:09:38.120" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""What it does is it allows""" start="00:09:41.080" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""users to declaratively specify packages""" start="00:09:43.120" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""they would like to have installed and configured""" start="00:09:46.275" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""in their configuration file,""" start="00:09:48.880" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""so that, for example, if you copy your init.el""" start="00:09:51.540" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""from one system to another,""" start="00:09:54.360" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""it could bootstrap the entire configuration,""" start="00:09:55.960" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""downloading all the packages you want""" start="00:09:58.520" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""without having to manually do this""" start="00:10:00.720" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""on every system you'd like to use.""" start="00:10:02.240" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""This allows configurations""" start="00:10:05.040" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""to be self-encapsulated and portable.""" start="00:10:07.560" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""package-vc is an extension of package.el,""" start="00:10:11.040" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""which allows installing packages from an alternative.""" start="00:10:15.960" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""Instead of using the standard way to install packages,""" start="00:10:19.680" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""which is just download tarball and unpack it,""" start="00:10:22.280" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""byte compile, and so on,""" start="00:10:26.240" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""it will fetch the files for a package""" start="00:10:28.360" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""directly from the source code repository""" start="00:10:32.760" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""and initialize it in such a way""" start="00:10:35.280" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""that package.el can work with it.""" start="00:10:37.240" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""So it's just a front-end for installing packages.""" start="00:10:39.120" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""Even though these two were added to Emacs 29,""" start="00:10:44.320" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""we didn't have the time to work on the""" start="00:10:46.520" video="mainVideo-emacs30" id="subtitle"]]
[[!template text="""use-package integration of package-vc into use-package,""" start="00:10:48.400" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""which has been changed now.""" start="00:10:52.500" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""What we have with Emacs 30 is that""" start="00:10:54.633" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""there is a :vc keyword for use-package""" start="00:11:00.140" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""with which we can instruct use-package""" start="00:11:02.866" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""to not download a package using tarball,""" start="00:11:05.233" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""but instead to fetch the source code""" start="00:11:10.240" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""from a source code repository.""" start="00:11:12.466" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""which has been changed now.""" start="00:10:52.640" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""What we have with Emacs 30 is that""" start="00:10:55.360" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""there is a :vc keyword for use-package""" start="00:11:00.120" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""with which we can instruct use-package""" start="00:11:02.840" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""to not download a package using tarball,""" start="00:11:05.320" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""but instead to fetch the source code""" start="00:11:10.774" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""from a source code repository.""" start="00:11:12.520" video="mainVideo-emacs30" id="subtitle"]]
[[!template text="""This is useful if you, for example,""" start="00:11:13.800" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""have packages which you yourself work on""" start="00:11:15.600" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""and know that you always want to have""" start="00:11:18.233" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""the development version of the package""" start="00:11:19.966" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""where you can directly commit changes you've made""" start="00:11:21.900" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""to the repository and push them upstream.""" start="00:11:26.820" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""Or, if you know that you want to contribute to a package,""" start="00:11:29.766" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""you can use package-vc to download the source code,""" start="00:11:32.100" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""have all the version control information,""" start="00:11:35.000" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""prepare a patch and send it upstream.""" start="00:11:37.400" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""In these examples here,""" start="00:11:41.740" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""the first example Lisp instructs package-vc""" start="00:11:43.833" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""to download the source code from a URL.""" start="00:11:49.200" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""So this is a git URL where it will download""" start="00:11:52.400" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""the source code from, and in this case,""" start="00:11:55.433" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""choose the newest checkout of the source code,""" start="00:11:57.433" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""not the latest release. Down here, we have another example.""" start="00:12:00.033" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""I prefer to consider the following example here.""" start="00:12:04.940" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""If we just had written this,""" start="00:12:08.800" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""then package-vc would use the metadata""" start="00:12:10.766" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""which an ELPA server provides""" start="00:12:13.233" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""to fetch the URL from the official repository of,""" start="00:12:15.033" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""in this case, BBDB, without having to...""" start="00:12:20.200" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""It would be more or less the same like this up here,""" start="00:12:22.866" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""with the simple difference that package-vc integration""" start="00:12:27.766" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""into use-package doesn't check out the latest commit,""" start="00:12:32.700" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""but the latest release,""" start="00:12:36.300" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""just to keep configurations more deterministic by default.""" start="00:12:37.800" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""Of course, if you prefer to use latest commit,""" start="00:12:44.980" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""you can use a package-vc install command""" start="00:12:47.600" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""or just update the package manually yourself,""" start="00:12:52.180" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""which you can use using package-vc-upgrade.""" start="00:12:54.966" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""Next, I'd like to focus on a few features""" start="00:13:01.780" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""which one might not necessarily realize directly,""" start="00:13:04.400" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""but will hopefully improve your experience with Emacs.""" start="00:13:07.033" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""have packages which you yourself work on""" start="00:11:15.920" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""and know that you always want to have""" start="00:11:18.320" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""the development version of the package""" start="00:11:19.960" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""where you can directly commit changes you've made""" start="00:11:21.920" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""to the repository and push them upstream.""" start="00:11:26.640" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""Or, if you know that you want to contribute to a package,""" start="00:11:29.160" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""you can use package-vc to download the source code,""" start="00:11:32.400" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""have all the version control information,""" start="00:11:35.560" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""prepare a patch and send it upstream.""" start="00:11:37.320" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""In these examples here,""" start="00:11:41.760" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""the first example Lisp instructs package-vc""" start="00:11:44.120" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""to download the source code from a URL.""" start="00:11:49.120" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""So this is a git URL where it will download""" start="00:11:52.960" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""the source code from, and in this case,""" start="00:11:55.120" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""choose the newest checkout of the source code,""" start="00:11:57.400" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""not the latest release. Down here, we have another example.""" start="00:12:00.400" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""I prefer to consider the following example here.""" start="00:12:05.060" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""If we just had written this,""" start="00:12:09.160" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""then package-vc would use the metadata""" start="00:12:10.880" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""which an ELPA server provides""" start="00:12:13.160" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""to fetch the URL from the official repository of,""" start="00:12:16.280" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""in this case, BBDB, without having to...""" start="00:12:19.800" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""It would be more or less the same like this up here,""" start="00:12:22.840" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""with the simple difference that package-vc integration""" start="00:12:28.240" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""into use-package doesn't check out the latest commit,""" start="00:12:32.640" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""but the latest release,""" start="00:12:36.360" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""just to keep configurations more deterministic by default.""" start="00:12:38.360" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""Of course, if you prefer to use latest commit,""" start="00:12:44.160" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""you can use a package-vc install command""" start="00:12:47.880" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""or just update the package manually yourself,""" start="00:12:52.440" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""which you can use using package-vc-upgrade.""" start="00:12:54.880" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""Next, I'd like to focus on a few features""" start="00:13:01.740" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""which one might not necessarily realize directly,""" start="00:13:04.320" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""but will hopefully improve your experience with Emacs.""" start="00:13:07.741" video="mainVideo-emacs30" id="subtitle"]]
-<div class="transcript-heading">[[!template new="1" text="""JSON""" start="00:13:11.560" video="mainVideo-emacs30" id="subtitle"]]</div>[[!template text="""First up in this list is a new JSON parser.""" start="00:13:11.560" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""Let's maybe show the source code for that one:""" start="00:13:15.166" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""not json.el, json.c. The history of JSON parsing in Emacs""" start="00:13:21.960" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""started with Emacs 23 with the addition of json.el.""" start="00:13:39.566" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""This was the file which we had just opened a moment ago.""" start="00:13:43.400" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""This is a JSON parser in Emacs Lisp.""" start="00:13:46.800" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""It's fine, it does the job, but it can get slow""" start="00:13:50.400" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""if we have a situation like where""" start="00:13:53.266" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""Eglot uses a LSP server to communicate with""" start="00:13:55.033" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""and the LSP server can get a bit chatty,""" start="00:14:00.320" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""sending a lot of JSON data,""" start="00:14:03.000" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""which all has to be parsed and garbage collected,""" start="00:14:05.166" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""which can slow down Emacs a bit.""" start="00:14:08.000" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""The situation was improved upon in Emacs 29""" start="00:14:09.966" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""when JSON parsing was added to the core.""" start="00:14:13.766" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""This was the json.c file, which we see on this side,""" start="00:14:18.033" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""the old version of the json.c file,""" start="00:14:21.033" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""which employed the Jansson library (it's the C library)""" start="00:14:22.766" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""for parsing and accelerating JSON parsing in Emacs.""" start="00:14:26.700" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""This was good enough,""" start="00:14:31.900" video="mainVideo-emacs30" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""JSON""" start="00:13:11.400" video="mainVideo-emacs30" id="subtitle"]]</div>[[!template text="""First up in this list is a new JSON parser.""" start="00:13:11.400" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""Let's maybe show the source code for that one:""" start="00:13:15.120" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""not json.el, json.c. The history of JSON parsing in Emacs""" start="00:13:21.400" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""started with Emacs 23 with the addition of json.el.""" start="00:13:39.320" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""This was the file which we had just opened a moment ago.""" start="00:13:43.280" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""This is a JSON parser in Emacs Lisp.""" start="00:13:46.920" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""It's fine, it does the job, but it can get slow""" start="00:13:50.960" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""if we have a situation like where""" start="00:13:53.200" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""Eglot uses a LSP server to communicate with""" start="00:13:55.480" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""and the LSP server can get a bit chatty,""" start="00:14:00.480" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""sending a lot of JSON data,""" start="00:14:02.960" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""which all has to be parsed and garbage collected,""" start="00:14:05.480" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""which can slow down Emacs a bit.""" start="00:14:08.200" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""The situation was improved upon in Emacs 29""" start="00:14:10.200" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""when JSON parsing was added to the core.""" start="00:14:14.120" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""This was the json.c file, which we see on this side,""" start="00:14:17.960" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""the old version of the json.c file,""" start="00:14:21.040" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""which employed the Jansson library (it's the C library)""" start="00:14:23.280" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""for parsing and accelerating JSON parsing in Emacs.""" start="00:14:27.120" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""This was good enough,""" start="00:14:33.160" video="mainVideo-emacs30" id="subtitle"]]
[[!template text="""or it certainly improved the situation""" start="00:14:34.000" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""for a lot of LSP clients.""" start="00:14:36.233" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""But in Emacs 30, the situation has been improved once more""" start="00:14:38.300" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""with the addition of a JSON parser directly in Emacs.""" start="00:14:44.800" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""So instead of using an external library,""" start="00:14:49.833" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""there's a custom JSON parser written in C in the Emacs core,""" start="00:14:53.600" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""which directly generates Elisp objects.""" start="00:14:57.433" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""The advantage to this approach""" start="00:15:01.540" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""compared to the Jansson approach""" start="00:15:05.066" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""is that there's no intermediate format""" start="00:15:06.466" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""which has to be allocated""" start="00:15:07.966" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""and memory managed and freed again,""" start="00:15:09.233" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""which of course incurs an additional performance overhead.""" start="00:15:11.500" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""Next to this, there's also a custom serializer""" start="00:15:19.540" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""for JSON contents translating a JSON object into a string.""" start="00:15:22.466" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""... The consequence of this is that""" start="00:15:29.240" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""there is absolutely no dependency on Jansson anymore.""" start="00:15:30.641" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""This in turn means that now all Emacs users""" start="00:15:35.520" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""from Emacs 30 onwards""" start="00:15:38.566" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""can take advantage of this new JSON parser""" start="00:15:39.833" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""and don't have to worry about whether""" start="00:15:42.766" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""or not they have Jansson, this JSON parsing library,""" start="00:15:44.966" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""installed on their system or not when they want""" start="00:15:47.666" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""to take advantage of this accelerated JSON parsing.""" start="00:15:50.466" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""for a lot of LSP clients.""" start="00:14:36.160" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""But in Emacs 30, the situation has been improved once more""" start="00:14:38.560" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""with the addition of a JSON parser directly in Emacs.""" start="00:14:45.480" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""So instead of using an external library,""" start="00:14:50.360" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""there's a custom JSON parser written in C in the Emacs core,""" start="00:14:53.000" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""which directly generates Elisp objects.""" start="00:14:57.720" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""The advantage to this approach""" start="00:15:01.560" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""compared to the Jansson approach""" start="00:15:05.000" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""is that there's no intermediate format""" start="00:15:06.360" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""which has to be allocated""" start="00:15:07.920" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""and memory managed and freed again,""" start="00:15:09.200" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""which of course incurs an additional performance overhead.""" start="00:15:11.560" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""Next to this, there's also a custom serializer""" start="00:15:19.480" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""for JSON contents translating a JSON object into a string.""" start="00:15:22.660" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""... The consequence of this is that""" start="00:15:27.120" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""there is absolutely no dependency on Jansson anymore.""" start="00:15:30.280" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""This in turn means that now all Emacs users""" start="00:15:35.640" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""from Emacs 30 onwards""" start="00:15:38.560" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""can take advantage of this new JSON parser""" start="00:15:39.800" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""and don't have to worry about whether""" start="00:15:43.120" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""or not they have Jansson, this JSON parsing library,""" start="00:15:44.880" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""installed on their system or not when they want""" start="00:15:47.800" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""to take advantage of this accelerated JSON parsing.""" start="00:15:51.000" video="mainVideo-emacs30" id="subtitle"]]
-<div class="transcript-heading">[[!template new="1" text="""Native compilation""" start="00:15:56.680" video="mainVideo-emacs30" id="subtitle"]]</div>[[!template text="""Next up, another behind-the-scenes feature""" start="00:15:56.680" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""is that if you build Emacs on your own from source,""" start="00:16:00.400" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""you might know that if you wanted""" start="00:16:06.407" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""to use native compilation,""" start="00:16:07.800" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""so the translation of Elisp bytecodes""" start="00:16:09.566" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""to whatever the native assembly""" start="00:16:12.380" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""or native instruction set is on your system,""" start="00:16:15.566" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""you have to specify with native compilation.""" start="00:16:19.166" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""when invoking the configure script,""" start="00:16:24.340" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""otherwise it would not have been enabled at all.""" start="00:16:25.966" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""With Emacs 30, this step is not necessary anymore.""" start="00:16:28.400" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""The configure script will automatically check""" start="00:16:32.480" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""if you have the libgccjit library installed on your system,""" start="00:16:36.266" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""and if that is so,""" start="00:16:41.700" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""then native compilation will be enabled by default.""" start="00:16:42.800" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""In other words, if you have an issue with native compilation""" start="00:16:45.600" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""or prefer not to use it for whatever reason,""" start="00:16:49.433" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""you now have to type --without-native-compilation""" start="00:16:52.500" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""when compiling Emacs to prevent this from happening.""" start="00:16:55.566" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""But native compilation was added in Emacs 28""" start="00:16:58.466" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""and has proven to be a very stable""" start="00:17:02.466" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""and useful feature for most people,""" start="00:17:04.366" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""so there's probably no reason to do this""" start="00:17:06.266" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""and you can just invoke the configure script""" start="00:17:09.433" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""with one argument less. Right, and I'd like to finish up""" start="00:17:11.166" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""with a few smaller features, a few smaller highlights.""" start="00:17:16.300" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""Maybe we can go back to the listing here. Here we have it.""" start="00:17:19.500" video="mainVideo-emacs30" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Native compilation""" start="00:15:56.840" video="mainVideo-emacs30" id="subtitle"]]</div>[[!template text="""Next up, another behind-the-scenes feature""" start="00:15:56.840" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""is that if you build Emacs on your own from source,""" start="00:16:00.640" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""you might know that if you wanted""" start="00:16:04.560" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""to use native compilation,""" start="00:16:07.880" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""so the translation of Elisp bytecodes""" start="00:16:09.560" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""to whatever the native assembly""" start="00:16:12.320" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""or native instruction set is on your system,""" start="00:16:15.560" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""you have to specify with native compilation.""" start="00:16:19.320" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""when invoking the configure script,""" start="00:16:24.360" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""otherwise it would not have been enabled at all.""" start="00:16:25.880" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""With Emacs 30, this step is not necessary anymore.""" start="00:16:28.880" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""The configure script will automatically check""" start="00:16:34.120" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""if you have the libgccjit library installed on your system,""" start="00:16:36.720" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""and if that is so,""" start="00:16:41.760" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""then native compilation will be enabled by default.""" start="00:16:42.880" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""In other words, if you have an issue with native compilation""" start="00:16:46.000" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""or prefer not to use it for whatever reason,""" start="00:16:49.560" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""you now have to type --without-native-compilation""" start="00:16:52.800" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""when compiling Emacs to prevent this from happening.""" start="00:16:55.560" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""But native compilation was added in Emacs 28""" start="00:16:58.200" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""and has proven to be a very stable""" start="00:17:02.280" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""and useful feature for most people,""" start="00:17:04.400" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""so there's probably no reason to do this""" start="00:17:06.200" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""and you can just invoke the configure script""" start="00:17:10.200" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""with one argument less. Right, and I'd like to finish up""" start="00:17:10.940" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""with a few smaller features, a few smaller highlights.""" start="00:17:16.240" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""Maybe we can go back to the listing here. Here we have it.""" start="00:17:19.400" video="mainVideo-emacs30" id="subtitle"]]
-<div class="transcript-heading">[[!template new="1" text="""Tree-sitter""" start="00:17:29.640" video="mainVideo-emacs30" id="subtitle"]]</div>[[!template text="""There are a few new major modes""" start="00:17:29.640" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""based on the tree-sitter library.""" start="00:17:32.866" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""tree-sitter is this parser library""" start="00:17:34.366" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""which has been integrated into Emacs 29.""" start="00:17:37.940" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""It allows the integration""" start="00:17:39.966" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""of external, specialized, and quick parsers into Emacs,""" start="00:17:44.100" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""which improve stuff like syntax highlighting, indentation,""" start="00:17:48.433" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""structural navigation, imenu support,""" start="00:17:52.166" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""by simply having a better understanding of, for example,""" start="00:17:55.266" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""a HTML file, or a Lua file, a PHP file,""" start="00:18:01.066" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""than what people usually implement""" start="00:18:03.900" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""using regular expressions in traditional major modes.""" start="00:18:06.266" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""So, a few new major modes which you can try out here.""" start="00:18:10.400" video="mainVideo-emacs30" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Tree-sitter""" start="00:17:30.720" video="mainVideo-emacs30" id="subtitle"]]</div>[[!template text="""There are a few new major modes""" start="00:17:30.720" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""based on the tree-sitter library.""" start="00:17:32.840" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""tree-sitter is this parser library""" start="00:17:34.240" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""which has been integrated into Emacs 29.""" start="00:17:37.740" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""It allows the integration""" start="00:17:42.880" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""of external, specialized, and quick parsers into Emacs,""" start="00:17:44.080" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""which improve stuff like syntax highlighting, indentation,""" start="00:17:48.360" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""structural navigation, imenu support,""" start="00:17:52.120" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""by simply having a better understanding of, for example,""" start="00:17:55.280" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""a HTML file, or a Lua file, a PHP file,""" start="00:18:00.840" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""than what people usually implement""" start="00:18:03.920" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""using regular expressions in traditional major modes.""" start="00:18:06.240" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""So, a few new major modes which you can try out here.""" start="00:18:10.320" video="mainVideo-emacs30" id="subtitle"]]
-<div class="transcript-heading">[[!template new="1" text="""Completion preview mode""" start="00:18:16.780" video="mainVideo-emacs30" id="subtitle"]]</div>[[!template text="""Another interesting feature is the completion-preview-mode.""" start="00:18:16.780" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""We can maybe try it out here in the scratch buffer.""" start="00:18:20.066" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""If I enable completion-preview-mode...""" start="00:18:23.000" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""This is a non-global minor mode,""" start="00:18:28.300" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""which will display completion options inline using overlays.""" start="00:18:32.066" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""For example, if I start typing a longer symbol like define,""" start="00:18:38.633" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""now we have a derived mode. It suggests me to...""" start="00:18:43.166" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""I can just press TAB and then it completes the option here,""" start="00:18:48.233" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""but it didn't actually...""" start="00:18:51.166" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""It's not actually modifying the buffer, it's not pressing,""" start="00:18:51.966" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""these are just overlays,""" start="00:18:55.366" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""so if I move around, it gets deleted.""" start="00:18:57.100" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""It wouldn't get saved if I were to save the buffer.""" start="00:18:59.566" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""The same also should work in a shell buffer.""" start="00:19:02.620" video="mainVideo-emacs30" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Completion preview mode""" start="00:18:16.820" video="mainVideo-emacs30" id="subtitle"]]</div>[[!template text="""Another interesting feature is the completion-preview-mode.""" start="00:18:16.820" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""We can maybe try it out here in the scratch buffer.""" start="00:18:19.960" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""If I enable completion-preview-mode...""" start="00:18:23.320" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""This is a non-global minor mode,""" start="00:18:28.200" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""which will display completion options inline using overlays.""" start="00:18:32.720" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""For example, if I start typing a longer symbol like define,""" start="00:18:38.480" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""now we have a derived mode. It suggests me to...""" start="00:18:43.200" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""I can just press TAB and then it completes the option here,""" start="00:18:48.120" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""but it didn't actually...""" start="00:18:51.040" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""It's not actually modifying the buffer, it's not pressing,""" start="00:18:51.840" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""these are just overlays,""" start="00:18:55.280" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""so if I move around, it gets deleted.""" start="00:18:57.040" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""It wouldn't get saved if I were to save the buffer.""" start="00:18:59.520" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""The same also should work in a shell buffer.""" start="00:19:02.540" video="mainVideo-emacs30" id="subtitle"]]
[[!template text="""If I enable completion preview mode here and start...""" start="00:19:05.000" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""In this case, I'm using the bash completion package,""" start="00:19:08.400" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""which provides additional completion information.""" start="00:19:12.833" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""This is not only limited to programming systems,""" start="00:19:15.033" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""but anywhere where you have completion at point in Emacs.""" start="00:19:17.966" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""I can start typing here, ignore, and put ignore-backups,""" start="00:19:22.900" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""and it hints to the options which I have""" start="00:19:26.160" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""and allows me to complete them quickly.""" start="00:19:30.033" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""In this case, I'm using the bash completion package,""" start="00:19:09.240" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""which provides additional completion information.""" start="00:19:12.760" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""This is not only limited to programming systems,""" start="00:19:15.200" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""but anywhere where you have completion at point in Emacs.""" start="00:19:17.840" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""I can start typing here, ignore, and put ignore-backups,""" start="00:19:22.920" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""and it hints to the options which I have""" start="00:19:26.060" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""and allows me to complete them quickly.""" start="00:19:29.920" video="mainVideo-emacs30" id="subtitle"]]
-<div class="transcript-heading">[[!template new="1" text="""package-isolate""" start="00:19:34.233" video="mainVideo-emacs30" id="subtitle"]]</div>[[!template text="""Another small feature is the package-isolate command.""" start="00:19:34.233" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""What this does is it will start""" start="00:19:38.000" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""or it will prompt me for packages""" start="00:19:40.033" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""I have installed in my system""" start="00:19:42.833" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""and will start an isolated""" start="00:19:44.366" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""or like &quot;emacs -Q&quot;-ish instance of emacs""" start="00:19:46.500" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""with only these packages installed.""" start="00:19:51.166" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""So for example, if I said I want slime and I want diff-hl,""" start="00:19:53.366" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""then this is a new Emacs window.""" start="00:20:00.440" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""It's unrelated to the one around.""" start="00:20:02.700" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""It uses the same executable, of course,""" start="00:20:04.566" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""but will not load your configuration file""" start="00:20:06.500" video="mainVideo-emacs30" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""package-isolate""" start="00:19:34.220" video="mainVideo-emacs30" id="subtitle"]]</div>[[!template text="""Another small feature is the package-isolate command.""" start="00:19:34.220" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""What this does is it will start""" start="00:19:37.880" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""or it will prompt me for packages""" start="00:19:39.960" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""I have installed in my system""" start="00:19:42.760" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""and will start an isolated""" start="00:19:44.120" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""or like &quot;emacs -Q&quot;-ish instance of emacs""" start="00:19:46.440" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""with only these packages installed.""" start="00:19:51.080" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""So for example, if I said I want slime and I want diff-hl,""" start="00:19:53.640" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""then this is a new Emacs window.""" start="00:20:00.280" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""It's unrelated to the one around.""" start="00:20:02.280" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""It uses the same executable, of course,""" start="00:20:04.440" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""but will not load your configuration file""" start="00:20:06.840" video="mainVideo-emacs30" id="subtitle"]]
[[!template text="""or any other further customizations on your system.""" start="00:20:09.940" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""All it does, it will ensure""" start="00:20:13.680" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""that these packages, which are listed here,""" start="00:20:15.566" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""so in our case SLIME and dependencies of SLIME and diff-hl,""" start="00:20:17.966" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""in the system""" start="00:20:24.600" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""so that I could, for example, as you can see here,""" start="00:20:25.300" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""diff-hl-mode works.""" start="00:20:29.100" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""Okay, this is not a version-controlled file.""" start="00:20:32.140" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""Maybe if we take a look at, have I enabled diff-hl-mode?""" start="00:20:34.800" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""It's enabled in this case. What diff-hl-mode does""" start="00:20:41.233" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""is it displays these version control changes""" start="00:20:44.633" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""in the fringe of a buffer.""" start="00:20:48.300" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""And even though this is a uncustomized version of Emacs,""" start="00:20:49.600" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""or an uncustomized instance of Emacs,""" start="00:20:54.166" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""it was easy for me to load this one package,""" start="00:20:56.366" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""or these two packages and all the dependencies necessary.""" start="00:20:59.033" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""As you can imagine, the main purpose for this""" start="00:21:02.066" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""is to make debugging issues easier.""" start="00:21:05.300" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""If you want to report about an issue""" start="00:21:07.766" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""you have with a package. And if I close this, it's closed""" start="00:21:10.600" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""and everything's thrown away.""" start="00:21:14.900" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""All it does, it will ensure""" start="00:20:13.620" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""that these packages, which are listed here,""" start="00:20:15.160" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""so in our case SLIME and dependencies of SLIME and diff-hl,""" start="00:20:17.920" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""in the system""" start="00:20:24.500" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""so that I could, for example, as you can see here,""" start="00:20:25.240" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""diff-hl-mode works.""" start="00:20:29.040" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""Okay, this is not a version-controlled file.""" start="00:20:31.960" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""Maybe if we take a look at, have I enabled diff-hl-mode?""" start="00:20:35.480" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""It's enabled in this case. What diff-hl-mode does""" start="00:20:41.120" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""is it displays these version control changes""" start="00:20:44.560" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""in the fringe of a buffer.""" start="00:20:48.480" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""And even though this is a uncustomized version of Emacs,""" start="00:20:50.000" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""or an uncustomized instance of Emacs,""" start="00:20:54.080" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""it was easy for me to load this one package,""" start="00:20:56.320" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""or these two packages and all the dependencies necessary.""" start="00:20:58.960" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""As you can imagine, the main purpose for this""" start="00:21:01.960" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""is to make debugging issues easier.""" start="00:21:05.320" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""If you want to report about an issue""" start="00:21:07.720" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""you have with a package. And if I close this, it's closed""" start="00:21:10.520" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""and everything's thrown away.""" start="00:21:14.520" video="mainVideo-emacs30" id="subtitle"]]
-<div class="transcript-heading">[[!template new="1" text="""Reindenting""" start="00:21:16.920" video="mainVideo-emacs30" id="subtitle"]]</div>[[!template text="""Last up, a nice feature I think""" start="00:21:16.920" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""a lot of people will appreciate is,""" start="00:21:19.033" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""if you are familiar with... Let's open a text buffer.""" start="00:21:20.966" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""The M-q key is traditionally bound to fill-paragraph.""" start="00:21:24.300" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""What this means is that...""" start="00:21:30.280" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""Let's, for example, copy this text from here""" start="00:21:32.233" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""and squash it all into one line. If I press M-q here,""" start="00:21:35.033" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""then the lines will be broken""" start="00:21:40.400" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""according to the fill column indicator up here.""" start="00:21:42.720" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""This is the traditional usage of M-q,""" start="00:21:49.880" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""and it still works in text-mode buffers,""" start="00:21:52.633" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""but in prog-mode buffers--""" start="00:21:54.233" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""so any major mode inheriting prog-mode--""" start="00:21:55.860" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""M-q will now by default be bound""" start="00:22:00.100" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""to prog-fill-reindent-defun. To summarize the point,""" start="00:22:02.266" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""if you are editing a string or a comment,""" start="00:22:09.780" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""then the comment will be filled.""" start="00:22:13.466" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""But if you are outside of a comment or outside of a string,""" start="00:22:16.040" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""then the defun or the top-level construct""" start="00:22:19.100" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""in the programming language will be re-indented.""" start="00:22:23.200" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""Let's try that out with maybe some file I have open here.""" start="00:22:26.160" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""If I'm in this... Let's choose some function,""" start="00:22:34.100" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""let's take this for example.""" start="00:22:38.833" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""If we followed all of this again,""" start="00:22:40.766" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""and I press M-q in on this paragraph,""" start="00:22:43.960" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""then the paragraph gets re-indented.""" start="00:22:47.433" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""But if I'm down here and I choose to break the indentation""" start="00:22:49.466" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""and then press M-q,""" start="00:22:55.833" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""then as you see, it practically selected the defun""" start="00:22:58.200" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""and re-indented everything""" start="00:23:02.366" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""without having me to move the point around in the buffer.""" start="00:23:03.600" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""So I think that's a really nice feature,""" start="00:23:06.960" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""which a lot of people can appreciate.""" start="00:23:08.666" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""It's one of those niceties which comes from time to time.""" start="00:23:11.100" video="mainVideo-emacs30" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Reindenting""" start="00:21:16.780" video="mainVideo-emacs30" id="subtitle"]]</div>[[!template text="""Last up, a nice feature I think""" start="00:21:16.780" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""a lot of people will appreciate is,""" start="00:21:18.960" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""if you are familiar with... Let's open a text buffer.""" start="00:21:21.200" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""The M-q key is traditionally bound to fill-paragraph.""" start="00:21:24.240" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""What this means is that...""" start="00:21:30.080" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""Let's, for example, copy this text from here""" start="00:21:32.120" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""and squash it all into one line. If I press M-q here,""" start="00:21:35.000" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""then the lines will be broken""" start="00:21:40.360" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""according to the fill column indicator up here.""" start="00:21:42.400" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""This is the traditional usage of M-q,""" start="00:21:49.480" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""and it still works in text-mode buffers,""" start="00:21:52.400" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""but in prog-mode buffers--""" start="00:21:54.120" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""so any major mode inheriting prog-mode--""" start="00:21:56.640" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""M-q will now by default be bound""" start="00:22:00.080" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""to prog-fill-reindent-defun. To summarize the point,""" start="00:22:02.200" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""if you are editing a string or a comment,""" start="00:22:09.720" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""then the comment will be filled.""" start="00:22:13.480" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""But if you are outside of a comment or outside of a string,""" start="00:22:15.920" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""then the defun or the top-level construct""" start="00:22:19.160" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""in the programming language will be re-indented.""" start="00:22:22.920" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""Let's try that out with maybe some file I have open here.""" start="00:22:26.120" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""If I'm in this... Let's choose some function,""" start="00:22:33.860" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""let's take this for example.""" start="00:22:38.820" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""If we followed all of this again,""" start="00:22:41.280" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""and I press M-q in on this paragraph,""" start="00:22:43.880" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""then the paragraph gets re-indented.""" start="00:22:47.620" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""But if I'm down here and I choose to break the indentation""" start="00:22:50.040" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""and then press M-q,""" start="00:22:54.860" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""then as you see, it practically selected the defun""" start="00:22:56.181" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""and re-indented everything""" start="00:23:02.400" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""without having need to move the point around in the buffer.""" start="00:23:03.560" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""So I think that's a really nice feature,""" start="00:23:06.800" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""which a lot of people can appreciate.""" start="00:23:08.680" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""It's one of those niceties which comes from time to time.""" start="00:23:11.040" video="mainVideo-emacs30" id="subtitle"]]
-<div class="transcript-heading">[[!template new="1" text="""Wrapping up""" start="00:23:17.940" video="mainVideo-emacs30" id="subtitle"]]</div>[[!template text="""Right, so that was my overview""" start="00:23:17.940" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""of what's going to be new in Emacs 30.""" start="00:23:20.666" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""I hope that most people could take away""" start="00:23:22.633" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""something from this presentation""" start="00:23:24.433" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""and have something to look forward""" start="00:23:25.580" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""to try out after upgrading.""" start="00:23:28.900" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""As mentioned initially, as of recording,""" start="00:23:31.166" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""this release has not been completed yet.""" start="00:23:33.866" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""If this is still not the case""" start="00:23:36.600" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""when you're seeing this video,""" start="00:23:38.866" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""please consider downloading and building Emacs 30 yourself.""" start="00:23:40.266" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""If you have any issues, which is always the case,""" start="00:23:43.866" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""please report them to using report-emacs-bug.""" start="00:23:48.233" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""That will pop up a mail buffer,""" start="00:23:56.440" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""and then you can describe your issue and send them out.""" start="00:23:57.908" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""All bug reports are valuable,""" start="00:23:59.633" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""even if they are false positives or duplicates--""" start="00:24:01.833" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""it doesn't matter--""" start="00:24:04.466" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""because when you take the time to submit a bug report,""" start="00:24:05.266" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""which describes something that's specific to your setup,""" start="00:24:08.566" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""which the developers might not have noticed or known about,""" start="00:24:12.266" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""then you are certainly helping out a lot of other people""" start="00:24:16.700" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""which might run into the same issue in the future.""" start="00:24:19.166" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""Especially with upgrades,""" start="00:24:21.800" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""it would be nice to figure out small problems""" start="00:24:23.233" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""which make upgrading difficult for some people.""" start="00:24:26.600" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""The ideal is, of course, to have no issues""" start="00:24:30.833" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""when upgrading from one version to another.""" start="00:24:34.700" video="mainVideo-emacs30" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Wrapping up""" start="00:23:17.880" video="mainVideo-emacs30" id="subtitle"]]</div>[[!template text="""Right, so that was my overview""" start="00:23:17.880" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""of what's going to be new in Emacs 30.""" start="00:23:20.680" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""I hope that most people could take away""" start="00:23:22.560" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""something from this presentation""" start="00:23:24.360" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""and have something to look forward""" start="00:23:25.660" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""to try out after upgrading.""" start="00:23:29.420" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""As mentioned initially, as of recording,""" start="00:23:31.600" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""this release has not been completed yet.""" start="00:23:33.840" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""If this is still not the case""" start="00:23:36.940" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""when you're seeing this video,""" start="00:23:38.880" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""please consider downloading and building Emacs 30 yourself.""" start="00:23:40.200" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""If you have any issues, which is always the case,""" start="00:23:43.800" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""please report them to using report-emacs-bug.""" start="00:23:48.320" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""That will pop up a mail buffer,""" start="00:23:56.340" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""and then you can describe your issue and send them out.""" start="00:23:57.741" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""All bug reports are valuable,""" start="00:23:59.520" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""even if they are false positives or duplicates--""" start="00:24:01.840" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""it doesn't matter--""" start="00:24:04.000" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""because when you take the time to submit a bug report,""" start="00:24:05.240" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""which describes something that's specific to your setup,""" start="00:24:08.920" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""which the developers might not have noticed or known about,""" start="00:24:12.360" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""then you are certainly helping out a lot of other people""" start="00:24:16.840" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""which might run into the same issue in the future.""" start="00:24:19.080" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""Especially with upgrades,""" start="00:24:21.680" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""it would be nice to figure out small problems""" start="00:24:23.360" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""which make upgrading difficult for some people.""" start="00:24:26.560" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""The ideal is, of course, to have no issues""" start="00:24:30.880" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""when upgrading from one version to another.""" start="00:24:34.560" video="mainVideo-emacs30" id="subtitle"]]
[[!template text="""Having said that, I thank you for your attention,""" start="00:24:37.200" video="mainVideo-emacs30" id="subtitle"]]
-[[!template text="""and I'm saying goodbye.""" start="00:24:39.600" video="mainVideo-emacs30" id="subtitle"]]
+[[!template text="""and I'm saying goodbye.""" start="00:24:41.940" video="mainVideo-emacs30" id="subtitle"]]
</div>
diff --git a/2024/info/emacs30-before.md b/2024/info/emacs30-before.md
index 0729ca64..fbefd7b3 100644
--- a/2024/info/emacs30-before.md
+++ b/2024/info/emacs30-before.md
@@ -1,7 +1,6 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
[[!toc ]]
Format: 25-min talk ; Q&A: BigBlueButton conference room
-Etherpad: <https://pad.emacsconf.org/2024-emacs30>
Status: TO_CAPTION_QA
@@ -10,24 +9,24 @@ Status: TO_CAPTION_QA
# Talk
-<div class="vid"><video controls preload="none" id="emacs30-mainVideo"><source src="https://media.emacsconf.org/2024/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2024/captions/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="emacs30-mainVideo" data="""
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-emacs30"><source src="https://media.emacsconf.org/2024/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2024/captions/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="mainVideo-emacs30" data="""
00:00.000 Introduction
-01:41.800 Android
-07:45.720 EditorConfig
-09:27.310 use-package integration with package-vc
-13:11.560 JSON
-15:56.680 Native compilation
-17:29.640 Tree-sitter
-18:16.780 Completion preview mode
-19:34.233 package-isolate
-21:16.920 Reindenting
-23:17.940 Wrapping up
-
-"""]]<div></div>Duration: 24:55 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2024-emacs30">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--edited.webm">Download --edited.webm (52MB)</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--main.webm">Download --main.webm (60MB)</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--notes.org">Download --notes.org</a></li><li><a href="https://toobnix.org/w/fxFD5JMMkmj1bazUw4zErx">View on Toobnix</a></li></ul></div></div>
+01:41.760 Android
+07:44.700 EditorConfig
+09:30.240 use-package integration with package-vc
+13:11.400 JSON
+15:56.840 Native compilation
+17:30.720 Tree-sitter
+18:16.820 Completion preview mode
+19:34.220 package-isolate
+21:16.780 Reindenting
+23:17.880 Wrapping up
+
+"""]]<div></div>Duration: 24:55 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--edited.webm">Download --edited.webm (52MB)</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--main.opus">Download --main.opus (15MB)</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--main.webm">Download --main.webm (53MB)</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--notes.org">Download --notes.org</a></li><li><a href="https://toobnix.org/w/bPze1S1o61QaYXTJuEQFHK">View on Toobnix</a></li><li><a href="https://youtu.be/V1mnDK_tuAs">View on Youtube</a></li></ul></div></div>
# Q&A
-<div class="vid"><video controls preload="none" id="emacs30-qanda"><source src="https://media.emacsconf.org/2024/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--answers.vtt" default />"""<track kind="chapters" label="Chapters" src="/2024/captions/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--answers--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="emacs30-qanda" data="""
+<div class="vid qanda"><video controls preload="none" id="qanda-emacs30"><source src="https://media.emacsconf.org/2024/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--answers.vtt" default />"""<track kind="chapters" label="Chapters" src="/2024/captions/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--answers--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="qanda-emacs30" data="""
00:16.280 Q: which-key was a third-party package for a long time. Is there work to bring any other popular packages into core Emacs for Emacs 31+? (magit, counsel, etc)
04:06.467 Q: Any way to get the goodness of Emacs for android with this other stuff?
05:15.754 Q: Does package-vc download a tarball from the specified git repository or clone the repository itself?
@@ -36,6 +35,6 @@ Status: TO_CAPTION_QA
09:08.648 Q: I am worried about the situation on non-free systems. There was talk about the Windows and the macOS versions being as good as unmaintained. Where do we go from here?
11:35.280 Q: Is there a best practice on what Org to use when following emacs-latest?
-"""]]<div>Listen to just the audio:<br /><audio controls preload="none" id="emacs30-qanda-audio" src="https://media.emacsconf.org/2024/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--answers.opus"></audio></div><div></div>Duration: 23:36 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2024-emacs30">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--answers.opus">Download --answers.opus (10MB)</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--answers.webm">Download --answers.webm (39MB)</a></li></ul></div></div>
+"""]]<div>Listen to just the audio:<br /><audio controls preload="none" id="qanda-emacs30-audio" src="https://media.emacsconf.org/2024/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--answers.opus"></audio></div><div></div>Duration: 23:36 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--answers.opus">Download --answers.opus (10MB)</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--answers.webm">Download --answers.webm (39MB)</a></li><li><a href="https://www.youtube.com/watch?v=xFPpk_lE9Ss">View on Youtube</a></li></ul></div></div>
# Description
<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2024/info/guile-before.md b/2024/info/guile-before.md
index 15e63ee8..d3d7099f 100644
--- a/2024/info/guile-before.md
+++ b/2024/info/guile-before.md
@@ -1,7 +1,6 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
[[!toc ]]
Format: 16-min talk ; Q&A: BigBlueButton conference room
-Etherpad: <https://pad.emacsconf.org/2024-guile>
Status: TO_CAPTION_QA
@@ -10,11 +9,11 @@ Status: TO_CAPTION_QA
# Talk
-<div class="vid"><video controls preload="none" id="guile-mainVideo"><source src="https://media.emacsconf.org/2024/emacsconf-2024-guile--beguiling-emacs-guileemacs-relaunched--robin-templeton--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-guile--beguiling-emacs-guileemacs-relaunched--robin-templeton--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 15:57 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2024-guile">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-guile--beguiling-emacs-guileemacs-relaunched--robin-templeton--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-guile--beguiling-emacs-guileemacs-relaunched--robin-templeton--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-guile--beguiling-emacs-guileemacs-relaunched--robin-templeton--main.vtt.vtt">Download --main.vtt.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-guile--beguiling-emacs-guileemacs-relaunched--robin-templeton--main.webm">Download --main.webm (61MB)</a></li><li><a href="https://toobnix.org/w/iizGyFwoAetXBw3Uy67vwj">View on Toobnix</a></li></ul></div></div>
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-guile"><source src="https://media.emacsconf.org/2024/emacsconf-2024-guile--beguiling-emacs-guileemacs-relaunched--robin-templeton--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-guile--beguiling-emacs-guileemacs-relaunched--robin-templeton--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 15:57 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-guile--beguiling-emacs-guileemacs-relaunched--robin-templeton--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-guile--beguiling-emacs-guileemacs-relaunched--robin-templeton--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-guile--beguiling-emacs-guileemacs-relaunched--robin-templeton--main.vtt.vtt">Download --main.vtt.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-guile--beguiling-emacs-guileemacs-relaunched--robin-templeton--main.webm">Download --main.webm (61MB)</a></li><li><a href="https://toobnix.org/w/iizGyFwoAetXBw3Uy67vwj">View on Toobnix</a></li><li><a href="https://youtu.be/yjC162DnsKI">View on Youtube</a></li></ul></div></div>
# Q&A
-<div class="vid"><video controls preload="none" id="guile-qanda"><source src="https://media.emacsconf.org/2024/emacsconf-2024-guile--beguiling-emacs-guileemacs-relaunched--robin-templeton--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-guile--beguiling-emacs-guileemacs-relaunched--robin-templeton--answers.vtt" default />"""<track kind="chapters" label="Chapters" src="/2024/captions/emacsconf-2024-guile--beguiling-emacs-guileemacs-relaunched--robin-templeton--answers--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="guile-qanda" data="""
+<div class="vid qanda"><video controls preload="none" id="qanda-guile"><source src="https://media.emacsconf.org/2024/emacsconf-2024-guile--beguiling-emacs-guileemacs-relaunched--robin-templeton--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-guile--beguiling-emacs-guileemacs-relaunched--robin-templeton--answers.vtt" default />"""<track kind="chapters" label="Chapters" src="/2024/captions/emacsconf-2024-guile--beguiling-emacs-guileemacs-relaunched--robin-templeton--answers--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="qanda-guile" data="""
03:01.480 Q: About fibers: My understanding is that the problem with making Elisp concurrent is that none of the data structures (buffer, cons, vector, window etc) are concurrency-safe.  How do fibers help with this?
04:28.080 Q: Do you have a rough idea of how much of Guile is written in C?
06:19.240 Q: A Common Lisp implementation for Guile sounds really cool! Is there already work on this underway?
@@ -23,6 +22,6 @@ Status: TO_CAPTION_QA
12:30.000 Q: Do you think guile-emacs will be able to use or (collaborate with) some of the other awesome projects around Emacs Lisp?
15:04.200 Q: SBCL, ...You mentioned Robert Strandh's SICL along with SBCL---does that work help with the implementation of CL in Guile?
-"""]]<div>Listen to just the audio:<br /><audio controls preload="none" id="guile-qanda-audio" src="https://media.emacsconf.org/2024/emacsconf-2024-guile--beguiling-emacs-guileemacs-relaunched--robin-templeton--answers.opus"></audio></div><div></div><div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2024-guile">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-guile--beguiling-emacs-guileemacs-relaunched--robin-templeton--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-guile--beguiling-emacs-guileemacs-relaunched--robin-templeton--answers.opus">Download --answers.opus (11MB)</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-guile--beguiling-emacs-guileemacs-relaunched--robin-templeton--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-guile--beguiling-emacs-guileemacs-relaunched--robin-templeton--answers.webm">Download --answers.webm (48MB)</a></li></ul></div></div>
+"""]]<div>Listen to just the audio:<br /><audio controls preload="none" id="qanda-guile-audio" src="https://media.emacsconf.org/2024/emacsconf-2024-guile--beguiling-emacs-guileemacs-relaunched--robin-templeton--answers.opus"></audio></div><div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-guile--beguiling-emacs-guileemacs-relaunched--robin-templeton--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-guile--beguiling-emacs-guileemacs-relaunched--robin-templeton--answers.opus">Download --answers.opus (11MB)</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-guile--beguiling-emacs-guileemacs-relaunched--robin-templeton--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-guile--beguiling-emacs-guileemacs-relaunched--robin-templeton--answers.webm">Download --answers.webm (48MB)</a></li><li><a href="https://toobnix.org/w/9o8V4CJ29rK3Fk4CznSPQ4">View on Toobnix</a></li><li><a href="https://www.youtube.com/watch?v=c2RAWGTF0V0">View on Youtube</a></li></ul></div></div>
# Description
<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2024/info/gypsum-after.md b/2024/info/gypsum-after.md
index 68f4baf9..2cb0cbd8 100644
--- a/2024/info/gypsum-after.md
+++ b/2024/info/gypsum-after.md
@@ -379,250 +379,250 @@ Captioner: ramin
<div class="transcript transcript-qanda"><a name="gypsum-qanda-transcript"></a><h1>Q&A transcript (unedited)</h1>
-[[!template text="""Troy Hinckley's project that I'm talking about. I was going""" start="00:00:00.069" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""to mention this in my presentation, but it's possible,""" start="00:00:02.350" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""theoretically, that Troy Hinckley, his project could be""" start="00:00:02.350" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""used as a scheme of limitation that actually runs my own""" start="00:00:02.350" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""version of Emacs. And although, you know, This is""" start="00:00:02.350" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""completely theoretical, and I don't know how difficult""" start="00:00:25.478" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""that would be. But if Troy Hinckley implemented enough of""" start="00:00:25.478" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""the R7-RS standard in Rust, it would theoretically be""" start="00:00:30.781" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""possible to run the Gypsum editor in Troy Hinckley's own""" start="00:00:30.781" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""editor. I thought that was kind of interesting, and I""" start="00:00:30.781" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""thought it was worth mentioning, at least in the questions""" start="00:00:48.270" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""and answers.""" start="00:00:48.270" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""I also mentioned this in the presentation. I wanted to see""" start="00:01:12.179" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""Robin Templeton's project presentation, but""" start="00:01:14.940" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""unfortunately it's going to be at like four in the morning""" start="00:01:14.940" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""for me. So I'm going to try and watch that tomorrow, but""" start="00:01:14.940" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""that's also going to be a very interesting project to keep an""" start="00:01:22.984" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""eye on if you're interested in Scheme. That's the project""" start="00:01:22.984" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""where you've got the Guylain interpreter running inside of""" start="00:01:33.149" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""the Emacs process. It's dynamically linked as a library.""" start="00:01:33.149" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""I'm ready for questions from anybody. You can ask or you can""" start="00:02:04.699" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""type. It's up to you.""" start="00:02:07.431" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""Okay, let me check the etherpad.""" start="00:02:32.319" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""Let's see here.""" start="00:02:37.304" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""I'm not sure if I'm doing that right.""" start="00:02:41.208" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""Let me check one more time. Oh, there it goes.""" start="00:02:46.373" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""Let's see, so this is...""" start="00:02:54.221" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""I didn't know about that first bit of history. Oh, I've heard""" start="00:03:00.151" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""RMS say that Scheme Guile is just a nicer Lisp, but I didn't""" start="00:03:02.332" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""know there were concrete talks attempts to use Guile for""" start="00:03:02.332" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""Emacs that early. Let's see, that was from janneke.""" start="00:03:02.332" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""...Troy Hinckley's project that I'm talking about. I was going""" start="00:00:00.000" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""to mention this in my presentation, but it's possible,""" start="00:00:03.000" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""theoretically, that Troy Hinckley, his project could be""" start="00:00:08.800" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""used as a scheme of limitation that actually runs my own""" start="00:00:16.360" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""version of Emacs. And although, you know, This is""" start="00:00:18.560" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""completely theoretical, and I don't know how difficult""" start="00:00:23.760" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""that would be. But if Troy Hinckley implemented enough of""" start="00:00:30.720" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""the R7-RS standard in Rust, it would theoretically be""" start="00:00:34.080" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""possible to run the Gypsum editor in Troy Hinckley's own""" start="00:00:39.880" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""editor. I thought that was kind of interesting, and I""" start="00:00:46.720" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""thought it was worth mentioning, at least in the questions""" start="00:00:50.240" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""and answers.""" start="00:00:59.120" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""I also mentioned this in the presentation. I wanted to see""" start="00:01:12.160" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""Robin Templeton's project presentation, but""" start="00:01:16.200" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""unfortunately it's going to be at like four in the morning""" start="00:01:20.120" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""for me. So I'm going to try and watch that tomorrow, but""" start="00:01:22.400" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""that's also going to be a very interesting project to keep an""" start="00:01:26.240" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""eye on if you're interested in Scheme. That's the project""" start="00:01:29.560" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""where you've got the Guylain interpreter running inside of""" start="00:01:34.040" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""the Emacs process. It's dynamically linked as a library.""" start="00:01:37.520" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""I'm ready for questions from anybody. You can ask or you can""" start="00:02:04.680" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""type. It's up to you.""" start="00:02:08.760" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""Okay, let me check the etherpad.""" start="00:02:32.080" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""Let's see here.""" start="00:02:37.320" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""I'm not sure if I'm doing that right.""" start="00:02:41.160" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""Let me check one more time. Oh, there it goes.""" start="00:02:42.720" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""Let's see, so this is...""" start="00:02:54.200" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""I didn't know about that first bit of history. Oh, I've heard""" start="00:03:00.080" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""RMS say that Scheme Guile is just a nicer Lisp, but I didn't""" start="00:03:02.240" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""know there were concrete talks attempts to use Guile for""" start="00:03:06.120" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""Emacs that early. Let's see, that was from janneke.""" start="00:03:09.080" video="qanda-gypsum" id="subtitle"]]
-<div class="transcript-heading">[[!template new="1" text="""Q: I'm curious to know how the hell guile-emacs deals with all of the dynamically scoped modules out there. Is there any effort to automatically modularize and namespace stuff?""" start="00:03:09.370" video="qanda-gypsum" id="subtitle"]]</div>[[!template text="""I'm curious to know how the hell Guile Emacs deals with all the""" start="00:03:09.370" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""dynamically scoped modules out there. Is there any effort""" start="00:03:14.318" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""to automatically modularize and name? Let's see.""" start="00:03:20.181" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""That might be a better question for Robin Templeton. In my""" start="00:03:30.523" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""own project,""" start="00:03:36.727" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""there's no module system for Emacs Lisp. There is a module""" start="00:03:36.727" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""system for Scheme. And the Emacs Lisp interpreter runs in""" start="00:03:46.693" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""its own environment. the require system or whatever module""" start="00:03:49.695" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""system that Emacs has, once it's implemented, all of that""" start="00:03:57.068" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""would just happen inside of the Emacs Lisp environment,""" start="00:03:57.068" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""which is inside of the Scheme environment. And""" start="00:03:57.068" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""environments are objects in Scheme.""" start="00:04:12.437" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""I think a more difficult question is how to handle""" start="00:04:21.522" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""threading, and Scheme has very good threading built in, in""" start="00:04:26.420" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""Serphe-18[??].""" start="00:04:26.420" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""But I don't think it will be easy to write Emacs Lisp form""" start="00:04:34.283" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""bindings to the Scheme multi-threading implementation.""" start="00:04:34.283" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""Emacs Lisp was just not cut out for that kind of thing. So I""" start="00:04:48.548" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""think each Emacs Lisp, you could, I suppose, have multiple""" start="00:04:51.710" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""threads each running their own Emacs Lisp environment.""" start="00:04:51.710" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""Scheme would make that very simple to do.""" start="00:05:01.375" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""And then there'd just be a question of how you would get those""" start="00:05:06.018" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""different interpreters to communicate with each other,""" start="00:05:06.018" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""perhaps using the same protocol that's used by the Emacs""" start="00:05:06.018" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""server. But I haven't thought that far ahead yet.""" start="00:05:06.018" video="qanda-gypsum" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Q: I'm curious to know how the hell guile-emacs deals with all of the dynamically scoped modules out there. Is there any effort to automatically modularize and namespace stuff?""" start="00:03:14.320" video="qanda-gypsum" id="subtitle"]]</div>[[!template text="""I'm curious to know how the hell Guile Emacs deals with all the""" start="00:03:14.320" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""dynamically scoped modules out there. Is there any effort""" start="00:03:17.440" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""to automatically modularize and name? Let's see.""" start="00:03:21.360" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""That might be a better question for Robin Templeton. In my""" start="00:03:29.760" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""own project,""" start="00:03:40.920" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""there's no module system for Emacs Lisp. There is a module""" start="00:03:44.640" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""system for Scheme. And the Emacs Lisp interpreter runs in""" start="00:03:49.400" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""its own environment. the require system or whatever module""" start="00:03:55.560" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""system that Emacs has, once it's implemented, all of that""" start="00:04:01.600" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""would just happen inside of the Emacs Lisp environment,""" start="00:04:06.360" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""which is inside of the Scheme environment. And""" start="00:04:09.760" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""environments are objects in Scheme.""" start="00:04:12.400" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""I think a more difficult question is how to handle""" start="00:04:21.480" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""threading, and Scheme has very good threading built in, in""" start="00:04:26.400" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""Serphe-18[??].""" start="00:04:33.280" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""But I don't think it will be easy to write Emacs Lisp form""" start="00:04:34.840" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""bindings to the Scheme multi-threading implementation.""" start="00:04:43.400" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""Emacs Lisp was just not cut out for that kind of thing. So I""" start="00:04:48.480" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""think each Emacs Lisp, you could, I suppose, have multiple""" start="00:04:52.280" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""threads each running their own Emacs Lisp environment.""" start="00:04:56.560" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""Scheme would make that very simple to do.""" start="00:05:00.040" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""And then there'd just be a question of how you would get those""" start="00:05:05.000" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""different interpreters to communicate with each other,""" start="00:05:08.760" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""perhaps using the same protocol that's used by the Emacs""" start="00:05:11.680" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""server. But I haven't thought that far ahead yet.""" start="00:05:16.280" video="qanda-gypsum" id="subtitle"]]
-<div class="transcript-heading">[[!template new="1" text="""Q: Would it be possible to support a GUI toolkit other than GTK?""" start="00:05:23.646" video="qanda-gypsum" id="subtitle"]]</div>[[!template text="""Would it be possible to support a GUI toolkit other than the""" start="00:05:23.646" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""GTK? Like, how is it still supports Lucid? Yes, this is""" start="00:05:23.646" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""absolutely a goal of the project. I'm trying to keep the back""" start="00:05:31.291" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""end separate as possible. The scheme has what you call""" start="00:05:33.873" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""parameters. And these are like global variables that are""" start="00:05:39.817" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""still somewhat thread safe. And every call to the GUI goes""" start="00:05:43.199" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""through a parameter. So the Emacs, the interpreter and the""" start="00:05:47.484" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""editor logic is all in one module. And then that module calls""" start="00:05:52.125" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""out into a separate GUI module. And then you can implement""" start="00:05:59.987" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""different GUI modules. So you could have one for GTK3, one""" start="00:06:04.989" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""for GTK4, if you want to write the extern C bindings around Qt""" start="00:06:08.430" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""or full tick, that would certainly be possible as well. It""" start="00:06:13.843" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""would be nice maybe to have an SDL implementation based""" start="00:06:21.185" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""maybe on Chikiti or some kind of immediate mode GUI,""" start="00:06:21.185" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""something like that. But definitely GTK3 through Guile GI""" start="00:06:21.185" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""is the reference implementation. Things start there. But""" start="00:06:33.808" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""I'm very interested in supporting other GUIs, yes. Let's""" start="00:06:41.298" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""see.""" start="00:06:45.199" video="qanda-gypsum" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Q: Would it be possible to support a GUI toolkit other than GTK?""" start="00:05:23.640" video="qanda-gypsum" id="subtitle"]]</div>[[!template text="""Would it be possible to support a GUI toolkit other than the""" start="00:05:23.640" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""GTK? Like, how is it still supports Lucid? Yes, this is""" start="00:05:26.840" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""absolutely a goal of the project. I'm trying to keep the back""" start="00:05:31.320" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""end separate as possible. The scheme has what you call""" start="00:05:37.000" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""parameters. And these are like global variables that are""" start="00:05:41.600" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""still somewhat thread safe. And every call to the GUI goes""" start="00:05:45.240" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""through a parameter. So the Emacs, the interpreter and the""" start="00:05:50.520" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""editor logic is all in one module. And then that module calls""" start="00:05:58.200" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""out into a separate GUI module. And then you can implement""" start="00:06:01.680" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""different GUI modules. So you could have one for GTK3, one""" start="00:06:06.320" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""for GTK4, if you want to write the extern C bindings around Qt""" start="00:06:11.600" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""or full tick, that would certainly be possible as well. It""" start="00:06:16.880" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""would be nice maybe to have an SDL implementation based""" start="00:06:21.200" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""maybe on Chikiti or some kind of immediate mode GUI,""" start="00:06:25.920" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""something like that. But definitely GTK3 through Guile GI""" start="00:06:31.000" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""is the reference implementation. Things start there. But""" start="00:06:37.400" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""I'm very interested in supporting other GUIs, yes. Let's""" start="00:06:41.320" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""see.""" start="00:06:44.000" video="qanda-gypsum" id="subtitle"]]
-<div class="transcript-heading">[[!template new="1" text="""Q: Do you plan to provide improvements to Elisp as a language, or is the focus on a compatibility layer to facilitate doing all new extensions, etc. in Scheme?""" start="00:06:45.257" video="qanda-gypsum" id="subtitle"]]</div>[[!template text="""Question, do you plan to provide improvements to ELisp""" start="00:06:45.257" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""as a language or focus on a compatibility layer to""" start="00:06:47.540" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""facilitate all new extensions in Scheme? Yeah, the second""" start="00:06:47.540" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""one. I want to move off to Scheme. I would like for this""" start="00:06:57.142" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""project to try and keep up to date with each new release of""" start="00:07:03.384" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""Emacs and Emacs Lisp. That's a difficult moving target to""" start="00:07:05.666" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""follow, I realize. But to the greatest extent possible, any""" start="00:07:11.850" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""new features to Emacs Lisp will be pulled in from GNU Emacs.""" start="00:07:15.152" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""If we happen to be able to implement something cool in""" start="00:07:25.419" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""Scheme, and be able to port it over to Emacs Lisp, then sure,""" start="00:07:25.419" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""it'd be nice to be able to upload or to submit that upstream to""" start="00:07:29.437" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""the GNU Emacs. But I think I would prefer to have new features""" start="00:07:29.437" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""written in Scheme. I would like this gypsum to be more of a""" start="00:07:38.584" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""Scheme app platform that just happens to be able to also run""" start="00:07:43.989" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""Emacs Lisp. That's how I see it. Of course, this will be a""" start="00:07:43.989" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""community project. I'm open to debate about that if anybody""" start="00:07:54.577" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""wants to convince me otherwise.""" start="00:07:58.809" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""Why is being able to interpret all of that EL a useful goal?""" start="00:08:08.439" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""Sure, there is a lot of code written in Elisp. Can we""" start="00:08:12.464" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""consider... Oh, it's still being written. Please go ahead""" start="00:08:15.206" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""and finish writing.""" start="00:08:18.390" video="qanda-gypsum" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Q: Do you plan to provide improvements to Elisp as a language, or is the focus on a compatibility layer to facilitate doing all new extensions, etc. in Scheme?""" start="00:06:46.040" video="qanda-gypsum" id="subtitle"]]</div>[[!template text="""Question, do you plan to provide improvements to ELisp""" start="00:06:46.040" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""as a language or focus on a compatibility layer to""" start="00:06:50.760" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""facilitate all new extensions in Scheme? Yeah, the second""" start="00:06:54.520" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""one. I want to move off to Scheme. I would like for this""" start="00:06:58.000" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""project to try and keep up to date with each new release of""" start="00:07:04.720" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""Emacs and Emacs Lisp. That's a difficult moving target to""" start="00:07:09.000" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""follow, I realize. But to the greatest extent possible, any""" start="00:07:13.800" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""new features to Emacs Lisp will be pulled in from GNU Emacs.""" start="00:07:18.640" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""If we happen to be able to implement something cool in""" start="00:07:25.240" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""Scheme, and be able to port it over to Emacs Lisp, then sure,""" start="00:07:28.600" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""it'd be nice to be able to upload or to submit that upstream to""" start="00:07:31.640" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""the GNU Emacs. But I think I would prefer to have new features""" start="00:07:35.800" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""written in Scheme. I would like this gypsum to be more of a""" start="00:07:43.080" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""Scheme app platform that just happens to be able to also run""" start="00:07:47.800" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""Emacs Lisp. That's how I see it. Of course, this will be a""" start="00:07:51.480" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""community project. I'm open to debate about that if anybody""" start="00:07:56.200" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""wants to convince me otherwise.""" start="00:08:00.800" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""Why is being able to interpret all of that EL a useful goal?""" start="00:08:02.080" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""Sure, there is a lot of code written in Elisp. Can we""" start="00:08:11.760" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""consider... Oh, it's still being written. Please go ahead""" start="00:08:15.520" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""and finish writing.""" start="00:08:18.960" video="qanda-gypsum" id="subtitle"]]
-<div class="transcript-heading">[[!template new="1" text="""Q: Can we consider a translator like utility to convert elisp to scheme, once guile-emacs becomes a reality?""" start="00:08:29.673" video="qanda-gypsum" id="subtitle"]]</div>[[!template text="""Can we consider a translator like utility to convert eLisp""" start="00:08:29.673" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""to Scheme once Guile-Emacs has become a reality?""" start="00:08:29.673" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""Certainly. For the time being, I just wanted to get the""" start="00:08:36.716" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""interpreter running. So the actual, the Guile-Emacs Lisp,""" start="00:08:38.717" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""the one that was written in 2011 that I didn't write, that""" start="00:08:44.520" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""actually does compile to, I think it's the tree""" start="00:08:44.520" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""intermediate representation It's one of the intermediate""" start="00:08:44.520" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""languages that Guile uses to compile Guile scheme itself.""" start="00:08:59.076" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""So the Emacs lisp that was written before actually does""" start="00:09:04.817" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""that. It actually compiles and makes use of the entire Guile""" start="00:09:04.817" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""compiler tool chain and actually produces like JIT""" start="00:09:09.339" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""compilable binaries, which is really cool. Like I said,""" start="00:09:09.339" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""that's the one that I had trouble getting to work properly.""" start="00:09:23.342" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""Maybe we can follow that architecture. I'm not sure how to do""" start="00:09:29.209" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""that, but I would like to be able to do some kind of""" start="00:09:33.052" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""translating, keeping in mind that we want to have this be""" start="00:09:33.052" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""portable, do various schemes. And so Guile makes this very""" start="00:09:33.052" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""easy, but other schemes don't. Gambit might do this pretty""" start="00:09:45.988" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""well as well. It compiles to C and then compiles C down to a""" start="00:09:51.549" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""dynamically linkable library. So yeah, I think probably""" start="00:09:53.950" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""the most portable, I'm just thinking out loud right now,""" start="00:10:03.372" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""most portable implementation will just be able to""" start="00:10:10.652" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""translate Emacs Lisp directly to Scheme, which is not what""" start="00:10:10.652" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""the old Guile Emacs Lisp implementation does. That goes to""" start="00:10:10.652" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""TreeIL, so it's very, very Guile-specific, can't be""" start="00:10:21.755" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""ported. But yeah, if we could somehow get Emacs Lisp""" start="00:10:21.755" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""translated to Scheme and then compiled, say, in Shea Scheme""" start="00:10:28.359" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""or Gambit or MIT Scheme or one of those other compilers, that""" start="00:10:28.359" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""would be very cool. And I would absolutely love to do that.""" start="00:10:28.359" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""And I would very quickly accept any code into the code base""" start="00:10:44.906" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""that would do that.""" start="00:10:44.906" video="qanda-gypsum" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Q: Can we consider a translator like utility to convert elisp to scheme, once guile-emacs becomes a reality?""" start="00:08:19.440" video="qanda-gypsum" id="subtitle"]]</div>[[!template text="""Can we consider a translator like utility to convert eLisp""" start="00:08:19.440" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""to Scheme once Guile-Emacs has become a reality?""" start="00:08:32.520" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""Certainly. For the time being, I just wanted to get the""" start="00:08:37.520" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""interpreter running. So the actual, the Guile-Emacs Lisp,""" start="00:08:42.120" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""the one that was written in 2011 that I didn't write, that""" start="00:08:47.560" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""actually does compile to, I think it's the tree""" start="00:08:51.920" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""intermediate representation It's one of the intermediate""" start="00:08:57.600" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""languages that Guile uses to compile Guile scheme itself.""" start="00:08:59.240" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""So the Emacs lisp that was written before actually does""" start="00:09:03.760" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""that. It actually compiles and makes use of the entire Guile""" start="00:09:09.080" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""compiler tool chain and actually produces like JIT""" start="00:09:13.120" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""compilable binaries, which is really cool. Like I said,""" start="00:09:17.480" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""that's the one that I had trouble getting to work properly.""" start="00:09:21.720" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""Maybe we can follow that architecture. I'm not sure how to do""" start="00:09:27.520" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""that, but I would like to be able to do some kind of""" start="00:09:34.400" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""translating, keeping in mind that we want to have this be""" start="00:09:37.920" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""portable, do various schemes. And so Guile makes this very""" start="00:09:42.000" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""easy, but other schemes don't. Gambit might do this pretty""" start="00:09:48.920" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""well as well. It compiles to C and then compiles C down to a""" start="00:09:52.720" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""dynamically linkable library. So yeah, I think probably""" start="00:09:57.920" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""the most portable, I'm just thinking out loud right now,""" start="00:10:06.160" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""most portable implementation will just be able to""" start="00:10:09.560" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""translate Emacs Lisp directly to Scheme, which is not what""" start="00:10:13.240" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""the old Guile Emacs Lisp implementation does. That goes to""" start="00:10:17.120" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""TreeIL, so it's very, very Guile-specific, can't be""" start="00:10:22.440" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""ported. But yeah, if we could somehow get Emacs Lisp""" start="00:10:26.440" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""translated to Scheme and then compiled, say, in Shea Scheme""" start="00:10:30.800" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""or Gambit or MIT Scheme or one of those other compilers, that""" start="00:10:37.000" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""would be very cool. And I would absolutely love to do that.""" start="00:10:40.880" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""And I would very quickly accept any code into the code base""" start="00:10:44.920" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""that would do that.""" start="00:10:49.280" video="qanda-gypsum" id="subtitle"]]
-<div class="transcript-heading">[[!template new="1" text="""Q: Why is being able to interpret all of \`init.el\` an useful goal?""" start="00:10:54.390" video="qanda-gypsum" id="subtitle"]]</div>[[!template text="""Oh, and to answer the question about init.el,""" start="00:10:54.390" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""It's just because people spend a lot of time on their configs""" start="00:10:59.207" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""and it would be nice if, you know, you're starting to use this""" start="00:10:59.207" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""new editor and want it to be similar to Emacs users, just the""" start="00:10:59.207" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""Emacs community in general and people who are familiar with""" start="00:10:59.207" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""using Emacs. It would be more useful to everybody in the""" start="00:10:59.207" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""Emacs community if this were more compatible with GNU""" start="00:11:17.715" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""Emacs. And so that's why that's, I think that's an important""" start="00:11:17.715" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""goal.""" start="00:11:25.679" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""Question is not yet. Great. Oh, here comes another""" start="00:11:34.465" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""question.""" start="00:11:38.471" video="qanda-gypsum" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Q: Why is being able to interpret all of \`init.el\` an useful goal?""" start="00:10:50.600" video="qanda-gypsum" id="subtitle"]]</div>[[!template text="""Oh, and to answer the question about init.el,""" start="00:10:50.600" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""It's just because people spend a lot of time on their configs""" start="00:10:59.120" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""and it would be nice if, you know, you're starting to use this""" start="00:11:02.840" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""new editor and want it to be similar to Emacs users, just the""" start="00:11:06.960" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""Emacs community in general and people who are familiar with""" start="00:11:14.080" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""using Emacs. It would be more useful to everybody in the""" start="00:11:16.520" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""Emacs community if this were more compatible with GNU""" start="00:11:20.880" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""Emacs. And so that's why that's, I think that's an important""" start="00:11:25.120" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""goal.""" start="00:11:36.000" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""Question is not yet. Great. Oh, here comes another""" start="00:11:38.560" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""question.""" start="00:12:01.840" video="qanda-gypsum" id="subtitle"]]
-<div class="transcript-heading">[[!template new="1" text="""Q: What is the plan to handle elisp packages that depend on 3rd party/external libraries? (libgit/magit or rg/ripgrep)?""" start="00:12:08.539" video="qanda-gypsum" id="subtitle"]]</div>[[!template text="""Okay, what is the plan to handle elisp packages that depend""" start="00:12:08.539" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""on third-party or external libraries like git or magit""" start="00:12:08.539" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""or ripgrep? So that's going to be tricky. It depends on how""" start="00:12:08.539" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""these external packages are linked into emacs. If it's""" start="00:12:21.523" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""going to be a dynamic library like Robin Templeton's""" start="00:12:26.844" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""project which you load the libgit library into the Emacs""" start="00:12:26.844" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""process, that is going to be extremely difficult. So if you""" start="00:12:35.289" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""have an external library like, I don't know, libgit or""" start="00:12:44.032" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""what's the GUI thing? Cabal. No, not Cabal. Cairo, libcairo""" start="00:12:44.032" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""to do SVG graphics and so on.""" start="00:12:57.736" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""You can do that very easily with Guile, but then on top of""" start="00:13:04.483" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""that, implementing Emacs list bindings to it, I mean,""" start="00:13:04.483" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""you've got two layers there, and that makes things pretty""" start="00:13:04.483" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""difficult. So it's possible. And to some degree, maybe""" start="00:13:04.483" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""necessary for example, Cairo, if we want to do SVG graphics""" start="00:13:21.935" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""the way that Emacs Lisp does, we're going to have to have""" start="00:13:21.935" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""that. So that would be necessary. We would have to have those""" start="00:13:21.935" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""two layers. Yes, let's do that. But if it's like for Magit,""" start="00:13:32.643" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""you can just call out to your git process, and then you're""" start="00:13:38.047" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""just using the regular process APIs that Emacs Lisp has. And""" start="00:13:38.047" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""that can be, already we, like Guile has some very good""" start="00:13:51.451" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""implementations for process management. And so it would""" start="00:13:51.451" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""just be a matter of wrapping up those in the Emacs lisp form""" start="00:13:59.055" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""bindings. So yeah, dynamic libraries, I wanna try to avoid.""" start="00:13:59.055" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""And I would prefer to do things more through, you know,""" start="00:14:12.222" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""launching a child process in the Emacs process. and then""" start="00:14:12.222" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""communicating over the standard in, standard out""" start="00:14:20.956" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""channels.""" start="00:14:20.956" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""That's the easier way to do things, I think, because then you""" start="00:14:29.460" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""can just use the process library that Emacs already has, and""" start="00:14:29.460" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""you can just reuse all of that code.""" start="00:14:29.460" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""I'm not sure how ripgrep works, unfortunately, but I""" start="00:14:43.969" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""believe that's also a process, a child process. So, we can""" start="00:14:43.969" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""just reuse all of the Emacs Lisp code that does that already.""" start="00:14:50.412" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""We just need to make sure that the process management""" start="00:14:54.014" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""implementation and scheme is properly bound to Emacs Lisp,""" start="00:14:54.014" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""and it works the same as GNU Emacs does. Once that's all set,""" start="00:14:54.014" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""then these porcelains, like around git, should fall into""" start="00:15:06.360" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""place. without too much difficulty, hopefully.""" start="00:15:06.360" video="qanda-gypsum" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Q: What is the plan to handle elisp packages that depend on 3rd party/external libraries? (libgit/magit or rg/ripgrep)?""" start="00:12:02.280" video="qanda-gypsum" id="subtitle"]]</div>[[!template text="""Okay, what is the plan to handle elisp packages that depend""" start="00:12:02.280" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""on third-party or external libraries like git or magit""" start="00:12:11.880" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""or ripgrep? So that's going to be tricky. It depends on how""" start="00:12:16.120" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""these external packages are linked into emacs. If it's""" start="00:12:22.720" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""going to be a dynamic library like Robin Templeton's""" start="00:12:27.080" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""project which you load the libgit library into the Emacs""" start="00:12:32.880" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""process, that is going to be extremely difficult. So if you""" start="00:12:38.040" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""have an external library like, I don't know, libgit or""" start="00:12:43.160" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""what's the GUI thing? Cabal. No, not Cabal. Cairo, libcairo""" start="00:12:49.360" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""to do SVG graphics and so on.""" start="00:12:59.280" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""You can do that very easily with Guile, but then on top of""" start="00:13:01.440" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""that, implementing Emacs list bindings to it, I mean,""" start="00:13:09.720" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""you've got two layers there, and that makes things pretty""" start="00:13:14.720" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""difficult. So it's possible. And to some degree, maybe""" start="00:13:17.200" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""necessary for example, Cairo, if we want to do SVG graphics""" start="00:13:23.120" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""the way that Emacs Lisp does, we're going to have to have""" start="00:13:27.800" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""that. So that would be necessary. We would have to have those""" start="00:13:30.600" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""two layers. Yes, let's do that. But if it's like for Magit,""" start="00:13:33.960" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""you can just call out to your git process, and then you're""" start="00:13:39.200" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""just using the regular process APIs that Emacs Lisp has. And""" start="00:13:45.480" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""that can be, already we, like Guile has some very good""" start="00:13:50.720" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""implementations for process management. And so it would""" start="00:13:57.120" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""just be a matter of wrapping up those in the Emacs lisp form""" start="00:14:08.080" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""bindings. So yeah, dynamic libraries, I wanna try to avoid.""" start="00:14:12.440" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""And I would prefer to do things more through, you know,""" start="00:14:24.920" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""launching a child process in the Emacs process. and then""" start="00:14:32.800" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""communicating over the standard in, standard out""" start="00:14:40.400" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""channels.""" start="00:14:47.240" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""That's the easier way to do things, I think, because then you""" start="00:14:47.960" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""can just use the process library that Emacs already has, and""" start="00:14:52.800" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""you can just reuse all of that code.""" start="00:14:58.520" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""I'm not sure how ripgrep works, unfortunately, but I""" start="00:15:03.240" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""believe that's also a process, a child process. So, we can""" start="00:15:09.080" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""just reuse all of the Emacs Lisp code that does that already.""" start="00:15:15.280" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""We just need to make sure that the process management""" start="00:15:23.480" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""implementation and scheme is properly bound to Emacs Lisp,""" start="00:15:30.400" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""and it works the same as GNU Emacs does. Once that's all set,""" start="00:15:35.120" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""then these porcelains, like around git, should fall into""" start="00:15:43.360" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""place. without too much difficulty, hopefully.""" start="00:15:48.400" video="qanda-gypsum" id="subtitle"]]
-<div class="transcript-heading">[[!template new="1" text="""Q: Not really a question, but how about Schemacs as a name?""" start="00:15:21.112" video="qanda-gypsum" id="subtitle"]]</div>[[!template text="""How about Schemax as a name? I like the name. I like that name.""" start="00:15:21.112" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""I haven't really looked into like, is that already used or is""" start="00:15:28.937" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""that going to be confusing? But certainly something we can""" start="00:15:28.937" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""discuss.""" start="00:15:33.380" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""Another thing I should mention,""" start="00:15:38.243" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""I should probably set up a server or something like Discord""" start="00:15:42.157" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""or something like that. Discourse, not Discord.""" start="00:15:42.157" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""Discourse, the open source one, where we could actually""" start="00:15:51.619" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""chat about this stuff. For the time being, ActivityPub,""" start="00:15:51.619" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""mostly Mastodon, is how I communicate with people in real""" start="00:15:56.540" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""time, that or email. So if you want to get a hold of me, check""" start="00:15:56.540" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""the notes for this presentation and just send me an email.""" start="00:16:09.809" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""Any question at all is fine. If you want to contribute code,""" start="00:16:16.752" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""if you want to just learn how to contribute code, send me any""" start="00:16:19.633" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""questions. It's fine. I'm happy to answer them. And we can""" start="00:16:19.633" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""talk about the name as well.""" start="00:16:30.256" video="qanda-gypsum" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Q: Not really a question, but how about Schemacs as a name?""" start="00:15:55.280" video="qanda-gypsum" id="subtitle"]]</div>[[!template text="""How about Schemax as a name? I like the name. I like that name.""" start="00:15:55.280" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""I haven't really looked into like, is that already used or is""" start="00:15:59.200" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""that going to be confusing? But certainly something we can""" start="00:16:03.120" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""discuss.""" start="00:16:09.760" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""Another thing I should mention,""" start="00:16:10.960" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""I should probably set up a server or something like Discord""" start="00:16:13.040" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""or something like that. Discourse, not Discord.""" start="00:16:18.760" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""Discourse, the open source one, where we could actually""" start="00:16:25.360" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""chat about this stuff. For the time being, ActivityPub,""" start="00:16:31.600" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""mostly Mastodon, is how I communicate with people in real""" start="00:16:49.240" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""time, that or email. So if you want to get a hold of me, check""" start="00:16:52.400" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""the notes for this presentation and just send me an email.""" start="00:16:57.280" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""Any question at all is fine. If you want to contribute code,""" start="00:17:02.440" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""if you want to just learn how to contribute code, send me any""" start="00:17:09.040" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""questions. It's fine. I'm happy to answer them. And we can""" start="00:17:12.800" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""talk about the name as well.""" start="00:17:22.200" video="qanda-gypsum" id="subtitle"]]
-<div class="transcript-heading">[[!template new="1" text="""Q: Why is it not feasible for the Emacs layer that interprets Emacs Lisp (the core in C) ot have a Scheme interpreter, instead of using Guile?""" start="00:16:45.931" video="qanda-gypsum" id="subtitle"]]</div>[[!template text="""Okay, why is it not feasible for the Emacs layer that""" start="00:16:45.931" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""interprets Emacs Lisp, the core in C, have a Scheme""" start="00:16:45.931" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""interpreter instead of using Guile? Let's see, I have to,""" start="00:16:45.931" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""okay. Emacs layer interprets Emacs Lisp, the core in C, have""" start="00:16:55.496" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""a Scheme interpreter instead of using Guile. Okay, so that,""" start="00:16:57.737" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""the question xlarsx is asking, xlars, x, So Lars is asking,""" start="00:17:07.362" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""is it not feasible for there to be an""" start="00:17:14.744" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""Emacs layer that interprets Emacs Lisp have a scheme""" start="00:17:14.744" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""interpreter? This is Robin Templeton's project. And""" start="00:17:14.744" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""they're presenting later today. So check the roster and be""" start="00:17:30.815" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""sure to see that presentation because that's exactly what""" start="00:17:32.697" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""Robin Templeton is doing. That's not what I'm doing though.""" start="00:17:32.697" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""I'm trying to create something in Scheme. But yes, there is""" start="00:17:44.419" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""an attempt to get an Scheme interpreter to run inside of""" start="00:17:48.280" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""Emacs itself. And it has its own method of binding to Emacs""" start="00:17:48.280" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""Lisp functions and translating data like Lisp structures""" start="00:17:55.181" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""between Guile Scheme and Emacs Lisp. Robin will explain all""" start="00:17:55.181" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""of that in their presentation.""" start="00:18:05.943" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""OK, I think I've got through all the questions on Etherpad.""" start="00:18:28.519" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""But I'm going to hang out here for a bit longer. And yeah, feel""" start="00:18:33.620" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""free to do a video chat with me or send me more questions on""" start="00:18:37.621" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""Etherpad or here in the big blue button. And so I'm just going""" start="00:18:37.621" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""to hang out. And thanks for asking all your questions. And""" start="00:18:47.002" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""yeah, I look forward to working with all of you if you're""" start="00:18:51.663" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""interested. take it easy. Thanks so much for the talk and""" start="00:18:51.663" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""looking forward to seeing some of your progress as this""" start="00:18:59.935" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""moves forward, exciting space. We'll go ahead and leave the""" start="00:18:59.935" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""room open for you and thanks for offering to hang out and chat""" start="00:19:09.261" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""with other people that come by. Feel free to throw something""" start="00:19:09.261" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""in the chat if you want to remind people you're still here.""" start="00:19:15.025" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""Meanwhile, on the stream, we have moved along to our next""" start="00:19:19.557" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""talk on Rust, and that is just getting started. But again,""" start="00:19:19.557" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""we're continuing to record this, and I'll just keep an eye on""" start="00:19:25.283" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""it to stop the recording. Thank you. Thank you. It was""" start="00:19:25.283" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""awesome.""" start="00:19:33.352" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""So it seems like it's slowed down here for the Q&A. I don't see""" start="00:21:47.935" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""anybody else on BBB, so I'm going to go ahead and stop the""" start="00:21:50.638" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""recording. We can start it back up. I would say, yes, there's""" start="00:21:50.638" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""a lot of things you can do with this. You can handle""" start="00:21:55.282" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""processing. Yeah, I'm going to try and join over the chat for""" start="00:21:58.926" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""the next talk. I'm not sure if I can do both big blue buttons at""" start="00:22:02.029" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""the same time. You should be able to just watch your mute""" start="00:22:08.635" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""settings and mute tab settings and whatever all you have to""" start="00:22:13.206" video="qanda-gypsum" id="subtitle"]]
-[[!template text="""avoid bleed through. Okay.""" start="00:22:13.206" video="qanda-gypsum" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Q: Why is it not feasible for the Emacs layer that interprets Emacs Lisp (the core in C) ot have a Scheme interpreter, instead of using Guile?""" start="00:17:25.880" video="qanda-gypsum" id="subtitle"]]</div>[[!template text="""Okay, why is it not feasible for the Emacs layer that""" start="00:17:25.880" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""interprets Emacs Lisp, the core in C, have a Scheme""" start="00:17:30.240" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""interpreter instead of using Guile? Let's see, I have to,""" start="00:17:34.320" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""okay. Emacs layer interprets Emacs Lisp, the core in C, have""" start="00:17:39.800" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""a Scheme interpreter instead of using Guile. Okay, so that,""" start="00:17:48.800" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""the question xlarsx is asking, xlars, x, So Lars is asking,""" start="00:17:54.080" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""is it not feasible for there to be an""" start="00:17:59.960" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""Emacs layer that interprets Emacs Lisp have a scheme""" start="00:18:02.320" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""interpreter? This is Robin Templeton's project. And""" start="00:18:06.840" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""they're presenting later today. So check the roster and be""" start="00:18:33.080" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""sure to see that presentation because that's exactly what""" start="00:18:39.840" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""Robin Templeton is doing. That's not what I'm doing though.""" start="00:18:45.200" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""I'm trying to create something in Scheme. But yes, there is""" start="00:18:52.120" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""an attempt to get an Scheme interpreter to run inside of""" start="00:18:57.240" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""Emacs itself. And it has its own method of binding to Emacs""" start="00:19:02.960" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""Lisp functions and translating data like Lisp structures""" start="00:19:07.160" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""between Guile Scheme and Emacs Lisp. Robin will explain all""" start="00:19:11.200" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""of that in their presentation.""" start="00:19:14.440" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""OK, I think I've got through all the questions on Etherpad.""" start="00:19:15.800" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""But I'm going to hang out here for a bit longer. And yeah, feel""" start="00:19:18.920" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""free to do a video chat with me or send me more questions on""" start="00:19:23.880" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""Etherpad or here in the big blue button. And so I'm just going""" start="00:19:28.240" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""to hang out. And thanks for asking all your questions. And""" start="00:19:33.840" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""yeah, I look forward to working with all of you if you're""" start="00:21:49.120" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""interested. take it easy. Thanks so much for the talk and""" start="00:21:50.840" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""looking forward to seeing some of your progress as this""" start="00:21:51.800" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""moves forward, exciting space. We'll go ahead and leave the""" start="00:21:53.200" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""room open for you and thanks for offering to hang out and chat""" start="00:21:54.360" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""with other people that come by. Feel free to throw something""" start="00:21:54.880" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""in the chat if you want to remind people you're still here.""" start="00:21:55.640" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""Meanwhile, on the stream, we have moved along to our next""" start="00:21:56.720" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""talk on Rust, and that is just getting started. But again,""" start="00:21:57.920" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""we're continuing to record this, and I'll just keep an eye on""" start="00:21:59.600" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""it to stop the recording. Thank you. Thank you. It was""" start="00:22:00.480" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""awesome.""" start="00:22:01.240" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""So it seems like it's slowed down here for the Q&A. I don't see""" start="00:22:01.560" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""anybody else on BBB, so I'm going to go ahead and stop the""" start="00:22:03.960" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""recording. We can start it back up. I would say, yes, there's""" start="00:22:05.440" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""a lot of things you can do with this. You can handle""" start="00:22:08.480" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""processing. Yeah, I'm going to try and join over the chat for""" start="00:22:09.520" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""the next talk. I'm not sure if I can do both big blue buttons at""" start="00:22:11.240" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""the same time. You should be able to just watch your mute""" start="00:22:14.680" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""settings and mute tab settings and whatever all you have to""" start="00:22:15.760" video="qanda-gypsum" id="subtitle"]]
+[[!template text="""avoid bleed through. Okay.""" start="00:22:19.160" video="qanda-gypsum" id="subtitle"]]
</div>Questions or comments? Please e-mail [ramin.honary@gmail.com](mailto:ramin.honary@gmail.com?subject=Comment%20for%20EmacsConf%202023%20gypsum%3A%20Gypsum%3A%20my%20clone%20of%20Emacs%20and%20ELisp%20written%20in%20Scheme)
diff --git a/2024/info/gypsum-before.md b/2024/info/gypsum-before.md
index d778a3ff..7f437b35 100644
--- a/2024/info/gypsum-before.md
+++ b/2024/info/gypsum-before.md
@@ -1,7 +1,6 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
[[!toc ]]
Format: 25-min talk ; Q&A: BigBlueButton conference room
-Etherpad: <https://pad.emacsconf.org/2024-gypsum>
Status: TO_CAPTION_QA
@@ -10,20 +9,20 @@ Status: TO_CAPTION_QA
# Talk
-<div class="vid"><video controls preload="none" id="gypsum-mainVideo"><source src="https://media.emacsconf.org/2024/emacsconf-2024-gypsum--gypsum-my-clone-of-emacs-and-elisp-written-in-scheme--ramin-honary--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-gypsum--gypsum-my-clone-of-emacs-and-elisp-written-in-scheme--ramin-honary--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 24:36 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2024-gypsum">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-gypsum--gypsum-my-clone-of-emacs-and-elisp-written-in-scheme--ramin-honary--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-gypsum--gypsum-my-clone-of-emacs-and-elisp-written-in-scheme--ramin-honary--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-gypsum--gypsum-my-clone-of-emacs-and-elisp-written-in-scheme--ramin-honary--main.webm">Download --main.webm (56MB)</a></li><li><a href="https://toobnix.org/w/8yqjkevWPH7RSRzPpHb5JB">View on Toobnix</a></li></ul></div></div>
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-gypsum"><source src="https://media.emacsconf.org/2024/emacsconf-2024-gypsum--gypsum-my-clone-of-emacs-and-elisp-written-in-scheme--ramin-honary--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-gypsum--gypsum-my-clone-of-emacs-and-elisp-written-in-scheme--ramin-honary--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 24:36 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-gypsum--gypsum-my-clone-of-emacs-and-elisp-written-in-scheme--ramin-honary--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-gypsum--gypsum-my-clone-of-emacs-and-elisp-written-in-scheme--ramin-honary--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-gypsum--gypsum-my-clone-of-emacs-and-elisp-written-in-scheme--ramin-honary--main.webm">Download --main.webm (56MB)</a></li><li><a href="https://toobnix.org/w/8yqjkevWPH7RSRzPpHb5JB">View on Toobnix</a></li><li><a href="https://youtu.be/gLEFuDolR6Y">View on Youtube</a></li></ul></div></div>
# Q&A
-<div class="vid"><video controls preload="none" id="gypsum-qanda"><source src="https://media.emacsconf.org/2024/emacsconf-2024-gypsum--gypsum-my-clone-of-emacs-and-elisp-written-in-scheme--ramin-honary--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-gypsum--gypsum-my-clone-of-emacs-and-elisp-written-in-scheme--ramin-honary--answers.vtt" default />"""<track kind="chapters" label="Chapters" src="/2024/captions/emacsconf-2024-gypsum--gypsum-my-clone-of-emacs-and-elisp-written-in-scheme--ramin-honary--answers--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="gypsum-qanda" data="""
-03:09.370 Q: I'm curious to know how the hell guile-emacs deals with all of the dynamically scoped modules out there. Is there any effort to automatically modularize and namespace stuff?
-05:23.646 Q: Would it be possible to support a GUI toolkit other than GTK?
-06:45.257 Q: Do you plan to provide improvements to Elisp as a language, or is the focus on a compatibility layer to facilitate doing all new extensions, etc. in Scheme?
-08:29.673 Q: Can we consider a translator like utility to convert elisp to scheme, once guile-emacs becomes a reality?
-10:54.390 Q: Why is being able to interpret all of \`init.el\` an useful goal?
-12:08.539 Q: What is the plan to handle elisp packages that depend on 3rd party/external libraries? (libgit/magit or rg/ripgrep)?
-15:21.112 Q: Not really a question, but how about Schemacs as a name?
-16:45.931 Q: Why is it not feasible for the Emacs layer that interprets Emacs Lisp (the core in C) ot have a Scheme interpreter, instead of using Guile?
-
-"""]]<div>Listen to just the audio:<br /><audio controls preload="none" id="gypsum-qanda-audio" src="https://media.emacsconf.org/2024/emacsconf-2024-gypsum--gypsum-my-clone-of-emacs-and-elisp-written-in-scheme--ramin-honary--answers.opus"></audio></div><div></div>Duration: 23:38 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2024-gypsum">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-gypsum--gypsum-my-clone-of-emacs-and-elisp-written-in-scheme--ramin-honary--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-gypsum--gypsum-my-clone-of-emacs-and-elisp-written-in-scheme--ramin-honary--answers.opus">Download --answers.opus (11MB)</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-gypsum--gypsum-my-clone-of-emacs-and-elisp-written-in-scheme--ramin-honary--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-gypsum--gypsum-my-clone-of-emacs-and-elisp-written-in-scheme--ramin-honary--answers.webm">Download --answers.webm (31MB)</a></li></ul></div></div>
+<div class="vid qanda"><video controls preload="none" id="qanda-gypsum"><source src="https://media.emacsconf.org/2024/emacsconf-2024-gypsum--gypsum-my-clone-of-emacs-and-elisp-written-in-scheme--ramin-honary--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-gypsum--gypsum-my-clone-of-emacs-and-elisp-written-in-scheme--ramin-honary--answers.vtt" default />"""<track kind="chapters" label="Chapters" src="/2024/captions/emacsconf-2024-gypsum--gypsum-my-clone-of-emacs-and-elisp-written-in-scheme--ramin-honary--answers--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="qanda-gypsum" data="""
+03:14.320 Q: I'm curious to know how the hell guile-emacs deals with all of the dynamically scoped modules out there. Is there any effort to automatically modularize and namespace stuff?
+05:23.640 Q: Would it be possible to support a GUI toolkit other than GTK?
+06:46.040 Q: Do you plan to provide improvements to Elisp as a language, or is the focus on a compatibility layer to facilitate doing all new extensions, etc. in Scheme?
+08:19.440 Q: Can we consider a translator like utility to convert elisp to scheme, once guile-emacs becomes a reality?
+10:50.600 Q: Why is being able to interpret all of \`init.el\` an useful goal?
+12:02.280 Q: What is the plan to handle elisp packages that depend on 3rd party/external libraries? (libgit/magit or rg/ripgrep)?
+15:55.280 Q: Not really a question, but how about Schemacs as a name?
+17:25.880 Q: Why is it not feasible for the Emacs layer that interprets Emacs Lisp (the core in C) ot have a Scheme interpreter, instead of using Guile?
+
+"""]]<div>Listen to just the audio:<br /><audio controls preload="none" id="qanda-gypsum-audio" src="https://media.emacsconf.org/2024/emacsconf-2024-gypsum--gypsum-my-clone-of-emacs-and-elisp-written-in-scheme--ramin-honary--answers.opus"></audio></div><div></div>Duration: 23:38 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-gypsum--gypsum-my-clone-of-emacs-and-elisp-written-in-scheme--ramin-honary--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-gypsum--gypsum-my-clone-of-emacs-and-elisp-written-in-scheme--ramin-honary--answers.opus">Download --answers.opus (11MB)</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-gypsum--gypsum-my-clone-of-emacs-and-elisp-written-in-scheme--ramin-honary--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-gypsum--gypsum-my-clone-of-emacs-and-elisp-written-in-scheme--ramin-honary--answers.webm">Download --answers.webm (31MB)</a></li><li><a href="https://toobnix.org/w/2c8K6cXhofT9dRgwcSrugm">View on Toobnix</a></li><li><a href="https://www.youtube.com/watch?v=sLw3IdJMabU">View on Youtube</a></li></ul></div></div>
# Description
<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2024/info/hyperbole-before.md b/2024/info/hyperbole-before.md
index 08e278fd..4f40ce4a 100644
--- a/2024/info/hyperbole-before.md
+++ b/2024/info/hyperbole-before.md
@@ -3,7 +3,6 @@ May take questions after the event depending on how his move goes
[[!toc ]]
Format: 15-min talk ; Q&A: BigBlueButton conference room
-Etherpad: <https://pad.emacsconf.org/2024-hyperbole>
Status: TO_CAPTION_QA
@@ -12,7 +11,7 @@ Status: TO_CAPTION_QA
# Talk
-<div class="vid"><video controls preload="none" id="hyperbole-mainVideo"><source src="https://media.emacsconf.org/2024/emacsconf-2024-hyperbole--fun-things-with-gnu-hyperbole--mats-lidell--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-hyperbole--fun-things-with-gnu-hyperbole--mats-lidell--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2024/captions/emacsconf-2024-hyperbole--fun-things-with-gnu-hyperbole--mats-lidell--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="hyperbole-mainVideo" data="""
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-hyperbole"><source src="https://media.emacsconf.org/2024/emacsconf-2024-hyperbole--fun-things-with-gnu-hyperbole--mats-lidell--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-hyperbole--fun-things-with-gnu-hyperbole--mats-lidell--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2024/captions/emacsconf-2024-hyperbole--fun-things-with-gnu-hyperbole--mats-lidell--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="mainVideo-hyperbole" data="""
00:00.000 Introduction
00:41.299 The action key and the assist key
02:22.840 Composing an e-mail
@@ -21,16 +20,16 @@ Status: TO_CAPTION_QA
11:19.720 Select a thing
12:33.818 Web search
-"""]]<div></div>Duration: 14:10 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2024-hyperbole">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-hyperbole--fun-things-with-gnu-hyperbole--mats-lidell--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-hyperbole--fun-things-with-gnu-hyperbole--mats-lidell--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-hyperbole--fun-things-with-gnu-hyperbole--mats-lidell--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-hyperbole--fun-things-with-gnu-hyperbole--mats-lidell--main.webm">Download --main.webm (47MB)</a></li><li><a href="https://toobnix.org/w/jrZezGxN7xhH9gjfEC3Ux6">View on Toobnix</a></li></ul></div></div>
+"""]]<div></div>Duration: 14:10 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-hyperbole--fun-things-with-gnu-hyperbole--mats-lidell--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-hyperbole--fun-things-with-gnu-hyperbole--mats-lidell--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-hyperbole--fun-things-with-gnu-hyperbole--mats-lidell--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-hyperbole--fun-things-with-gnu-hyperbole--mats-lidell--main.webm">Download --main.webm (47MB)</a></li><li><a href="https://toobnix.org/w/jrZezGxN7xhH9gjfEC3Ux6">View on Toobnix</a></li><li><a href="https://youtu.be/cFdgpb0TeQo">View on Youtube</a></li></ul></div></div>
# Q&A
-<div class="vid"><video controls preload="none" id="hyperbole-qanda"><source src="https://media.emacsconf.org/2024/emacsconf-2024-hyperbole--fun-things-with-gnu-hyperbole--mats-lidell--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-hyperbole--fun-things-with-gnu-hyperbole--mats-lidell--answers.vtt" default />"""<track kind="chapters" label="Chapters" src="/2024/captions/emacsconf-2024-hyperbole--fun-things-with-gnu-hyperbole--mats-lidell--answers--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="hyperbole-qanda" data="""
+<div class="vid qanda"><video controls preload="none" id="qanda-hyperbole"><source src="https://media.emacsconf.org/2024/emacsconf-2024-hyperbole--fun-things-with-gnu-hyperbole--mats-lidell--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-hyperbole--fun-things-with-gnu-hyperbole--mats-lidell--answers.vtt" default />"""<track kind="chapters" label="Chapters" src="/2024/captions/emacsconf-2024-hyperbole--fun-things-with-gnu-hyperbole--mats-lidell--answers--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="qanda-hyperbole" data="""
04:51.194 Q: How is the log buffer generated?
05:21.051 Q: So, the "select a thing" C-c RET is similar to expand-region? How does it behave in codes (functions, class, ...)
07:09.972 Q: What is a recent tool that you find exciting to think about using in combination with Hyperbole, or would like to suggest using in combination with it?
10:00.255 On Ihor as the new maintainer for Org Mode
-"""]]<div>Listen to just the audio:<br /><audio controls preload="none" id="hyperbole-qanda-audio" src="https://media.emacsconf.org/2024/emacsconf-2024-hyperbole--fun-things-with-gnu-hyperbole--mats-lidell--answers.opus"></audio></div><div></div>Duration: 21:56 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2024-hyperbole">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-hyperbole--fun-things-with-gnu-hyperbole--mats-lidell--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-hyperbole--fun-things-with-gnu-hyperbole--mats-lidell--answers.opus">Download --answers.opus (8.1MB)</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-hyperbole--fun-things-with-gnu-hyperbole--mats-lidell--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-hyperbole--fun-things-with-gnu-hyperbole--mats-lidell--answers.webm">Download --answers.webm (30MB)</a></li></ul></div></div>
+"""]]<div>Listen to just the audio:<br /><audio controls preload="none" id="qanda-hyperbole-audio" src="https://media.emacsconf.org/2024/emacsconf-2024-hyperbole--fun-things-with-gnu-hyperbole--mats-lidell--answers.opus"></audio></div><div></div>Duration: 21:56 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-hyperbole--fun-things-with-gnu-hyperbole--mats-lidell--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-hyperbole--fun-things-with-gnu-hyperbole--mats-lidell--answers.opus">Download --answers.opus (8.1MB)</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-hyperbole--fun-things-with-gnu-hyperbole--mats-lidell--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-hyperbole--fun-things-with-gnu-hyperbole--mats-lidell--answers.webm">Download --answers.webm (30MB)</a></li><li><a href="https://www.youtube.com/watch?v=95rtYf2DISo">View on Youtube</a></li></ul></div></div>
# Description
<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2024/info/hyperdrive-before.md b/2024/info/hyperdrive-before.md
index 92d1ea38..1f1493d8 100644
--- a/2024/info/hyperdrive-before.md
+++ b/2024/info/hyperdrive-before.md
@@ -1,7 +1,6 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
[[!toc ]]
Format: 21-min talk ; Q&A: BigBlueButton conference room
-Etherpad: <https://pad.emacsconf.org/2024-hyperdrive>
Status: TO_CAPTION_QA
@@ -10,16 +9,16 @@ Status: TO_CAPTION_QA
# Talk
-<div class="vid"><video controls preload="none" id="hyperdrive-mainVideo"><source src="https://media.emacsconf.org/2024/emacsconf-2024-hyperdrive--new-in-hyperdriveel-quick-install-peer-graph-transclusion--joseph-turner--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-hyperdrive--new-in-hyperdriveel-quick-install-peer-graph-transclusion--joseph-turner--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 20:25 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2024-hyperdrive">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-hyperdrive--new-in-hyperdriveel-quick-install-peer-graph-transclusion--joseph-turner--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-hyperdrive--new-in-hyperdriveel-quick-install-peer-graph-transclusion--joseph-turner--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-hyperdrive--new-in-hyperdriveel-quick-install-peer-graph-transclusion--joseph-turner--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-hyperdrive--new-in-hyperdriveel-quick-install-peer-graph-transclusion--joseph-turner--main.webm">Download --main.webm (74MB)</a></li><li><a href="https://toobnix.org/w/pea2Nfx82eZhBAN2zatdix">View on Toobnix</a></li></ul></div></div>
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-hyperdrive"><source src="https://media.emacsconf.org/2024/emacsconf-2024-hyperdrive--new-in-hyperdriveel-quick-install-peer-graph-transclusion--joseph-turner--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-hyperdrive--new-in-hyperdriveel-quick-install-peer-graph-transclusion--joseph-turner--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 20:25 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-hyperdrive--new-in-hyperdriveel-quick-install-peer-graph-transclusion--joseph-turner--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-hyperdrive--new-in-hyperdriveel-quick-install-peer-graph-transclusion--joseph-turner--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-hyperdrive--new-in-hyperdriveel-quick-install-peer-graph-transclusion--joseph-turner--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-hyperdrive--new-in-hyperdriveel-quick-install-peer-graph-transclusion--joseph-turner--main.webm">Download --main.webm (74MB)</a></li><li><a href="https://toobnix.org/w/pea2Nfx82eZhBAN2zatdix">View on Toobnix</a></li><li><a href="https://youtu.be/zG9qFogCY2A">View on Youtube</a></li></ul></div></div>
# Q&A
-<div class="vid"><video controls preload="none" id="hyperdrive-qanda"><source src="https://media.emacsconf.org/2024/emacsconf-2024-hyperdrive--new-in-hyperdriveel-quick-install-peer-graph-transclusion--joseph-turner--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-hyperdrive--new-in-hyperdriveel-quick-install-peer-graph-transclusion--joseph-turner--answers.vtt" default />"""<track kind="chapters" label="Chapters" src="/2024/captions/emacsconf-2024-hyperdrive--new-in-hyperdriveel-quick-install-peer-graph-transclusion--joseph-turner--answers--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="hyperdrive-qanda" data="""
+<div class="vid qanda"><video controls preload="none" id="qanda-hyperdrive"><source src="https://media.emacsconf.org/2024/emacsconf-2024-hyperdrive--new-in-hyperdriveel-quick-install-peer-graph-transclusion--joseph-turner--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-hyperdrive--new-in-hyperdriveel-quick-install-peer-graph-transclusion--joseph-turner--answers.vtt" default />"""<track kind="chapters" label="Chapters" src="/2024/captions/emacsconf-2024-hyperdrive--new-in-hyperdriveel-quick-install-peer-graph-transclusion--joseph-turner--answers--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="qanda-hyperdrive" data="""
00:00.000 New version of hyperdrive.el
01:06.687 Q: Network effects are tricky - do you know of any public shares people can join to try this tool out properly?
07:31.064 Q: blocklist or whitelist so I can make them containing useful information for only me while also being useful with in a public sense
11:41.024 Q: Could you comment on the "visualization" thing, (org visualization), and your experience with this type of content in buffers and the various possibilities (svg, etc.)?
-"""]]<div>Listen to just the audio:<br /><audio controls preload="none" id="hyperdrive-qanda-audio" src="https://media.emacsconf.org/2024/emacsconf-2024-hyperdrive--new-in-hyperdriveel-quick-install-peer-graph-transclusion--joseph-turner--answers.opus"></audio></div><div></div>Duration: 22:34 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2024-hyperdrive">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-hyperdrive--new-in-hyperdriveel-quick-install-peer-graph-transclusion--joseph-turner--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-hyperdrive--new-in-hyperdriveel-quick-install-peer-graph-transclusion--joseph-turner--answers.opus">Download --answers.opus (10MB)</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-hyperdrive--new-in-hyperdriveel-quick-install-peer-graph-transclusion--joseph-turner--answers.vtt">Download --answers.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-hyperdrive--new-in-hyperdriveel-quick-install-peer-graph-transclusion--joseph-turner--answers.webm">Download --answers.webm (25MB)</a></li></ul></div></div>
+"""]]<div>Listen to just the audio:<br /><audio controls preload="none" id="qanda-hyperdrive-audio" src="https://media.emacsconf.org/2024/emacsconf-2024-hyperdrive--new-in-hyperdriveel-quick-install-peer-graph-transclusion--joseph-turner--answers.opus"></audio></div><div></div>Duration: 22:34 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-hyperdrive--new-in-hyperdriveel-quick-install-peer-graph-transclusion--joseph-turner--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-hyperdrive--new-in-hyperdriveel-quick-install-peer-graph-transclusion--joseph-turner--answers.opus">Download --answers.opus (7.7MB)</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-hyperdrive--new-in-hyperdriveel-quick-install-peer-graph-transclusion--joseph-turner--answers.vtt">Download --answers.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-hyperdrive--new-in-hyperdriveel-quick-install-peer-graph-transclusion--joseph-turner--answers.webm">Download --answers.webm (25MB)</a></li><li><a href="https://toobnix.org/w/m5WTxCLDF37J2qgdge8gua">View on Toobnix</a></li><li><a href="https://www.youtube.com/watch?v=Cibcdy1AceM">View on Youtube</a></li></ul></div></div>
# Description
<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2024/info/julia-after.md b/2024/info/julia-after.md
index 9a2d879c..9a498298 100644
--- a/2024/info/julia-after.md
+++ b/2024/info/julia-after.md
@@ -212,122 +212,122 @@
</div><div class="transcript transcript-qanda"><a name="julia-qanda-transcript"></a><h1>Q&A transcript (unedited)</h1>
-<div class="transcript-heading">[[!template new="1" text="""Q: Do you have any suggestions for interactive debugging of Julia code in Emacs?""" start="00:00:00.089" video="qanda-julia" id="subtitle"]]</div>[[!template text="""... answer to that. I, I think the infrastructure for an""" start="00:00:00.089" video="qanda-julia" id="subtitle"]]
-[[!template text="""ecosystem in Julia in general is as mature as other""" start="00:00:01.509" video="qanda-julia" id="subtitle"]]
-[[!template text="""languages, and even debugger infiltrator themselves are""" start="00:00:01.509" video="qanda-julia" id="subtitle"]]
-[[!template text="""not particularly well developed. And so I don't think""" start="00:00:01.509" video="qanda-julia" id="subtitle"]]
-[[!template text="""there's much we can do about that right now. I think that it's""" start="00:00:15.853" video="qanda-julia" id="subtitle"]]
-[[!template text="""unfortunate that most of the development for these type of""" start="00:00:21.570" video="qanda-julia" id="subtitle"]]
-[[!template text="""tools is tightly linked to VS code. But even there, I don't""" start="00:00:21.570" video="qanda-julia" id="subtitle"]]
-[[!template text="""think that there's much done in terms of interactive""" start="00:00:29.218" video="qanda-julia" id="subtitle"]]
-[[!template text="""debugging. So I, yeah, I think this has to be worked on mostly""" start="00:00:29.218" video="qanda-julia" id="subtitle"]]
-[[!template text="""on the Julia side first. And then probably Emacs can get""" start="00:00:36.866" video="qanda-julia" id="subtitle"]]
-[[!template text="""something out of that. I know that there's development in""" start="00:00:43.820" video="qanda-julia" id="subtitle"]]
-[[!template text="""debugger.jl itself for future releases to make it at least""" start="00:00:49.183" video="qanda-julia" id="subtitle"]]
-[[!template text="""faster and more stable. But yeah, I think we're not there as""" start="00:00:49.183" video="qanda-julia" id="subtitle"]]
-[[!template text="""Julia community itself. So let alone Emacs, integration""" start="00:00:58.809" video="qanda-julia" id="subtitle"]]
-[[!template text="""with Emacs. The way I personally debug is mostly using,""" start="00:01:04.192" video="qanda-julia" id="subtitle"]]
-[[!template text="""well, debugger and infiltrator with Julia REPL mode in""" start="00:01:08.286" video="qanda-julia" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Q: Do you have any suggestions for interactive debugging of Julia code in Emacs?""" start="00:00:00.000" video="qanda-julia" id="subtitle"]]</div>[[!template text="""... answer to that. I, I think the infrastructure for an""" start="00:00:00.000" video="qanda-julia" id="subtitle"]]
+[[!template text="""ecosystem in Julia in general is as mature as other""" start="00:00:05.320" video="qanda-julia" id="subtitle"]]
+[[!template text="""languages, and even debugger infiltrator themselves are""" start="00:00:08.600" video="qanda-julia" id="subtitle"]]
+[[!template text="""not particularly well developed. And so I don't think""" start="00:00:12.560" video="qanda-julia" id="subtitle"]]
+[[!template text="""there's much we can do about that right now. I think that it's""" start="00:00:17.520" video="qanda-julia" id="subtitle"]]
+[[!template text="""unfortunate that most of the development for these type of""" start="00:00:21.520" video="qanda-julia" id="subtitle"]]
+[[!template text="""tools is tightly linked to VS code. But even there, I don't""" start="00:00:26.000" video="qanda-julia" id="subtitle"]]
+[[!template text="""think that there's much done in terms of interactive""" start="00:00:31.760" video="qanda-julia" id="subtitle"]]
+[[!template text="""debugging. So I, yeah, I think this has to be worked on mostly""" start="00:00:35.720" video="qanda-julia" id="subtitle"]]
+[[!template text="""on the Julia side first. And then probably Emacs can get""" start="00:00:42.360" video="qanda-julia" id="subtitle"]]
+[[!template text="""something out of that. I know that there's development in""" start="00:00:47.520" video="qanda-julia" id="subtitle"]]
+[[!template text="""debugger.jl itself for future releases to make it at least""" start="00:00:51.240" video="qanda-julia" id="subtitle"]]
+[[!template text="""faster and more stable. But yeah, I think we're not there as""" start="00:00:55.560" video="qanda-julia" id="subtitle"]]
+[[!template text="""Julia community itself. So let alone Emacs, integration""" start="00:01:01.840" video="qanda-julia" id="subtitle"]]
+[[!template text="""with Emacs. The way I personally debug is mostly using,""" start="00:01:06.880" video="qanda-julia" id="subtitle"]]
+[[!template text="""well, debugger and infiltrator with Julia REPL mode in""" start="00:01:11.240" video="qanda-julia" id="subtitle"]]
-<div class="transcript-heading">[[!template new="1" text="""Q: Can you call out something that Julia has that Emacs does not, and which could benefit Emacs?""" start="00:01:08.286" video="qanda-julia" id="subtitle"]]</div>[[!template text="""Emacs. The second question, can you call out something that""" start="00:01:08.286" video="qanda-julia" id="subtitle"]]
-[[!template text="""Julia has that Emacs does not and which could benefit Emacs?""" start="00:01:18.009" video="qanda-julia" id="subtitle"]]
-[[!template text="""Nothing stands out to me except the usual multi-threading""" start="00:01:26.852" video="qanda-julia" id="subtitle"]]
-[[!template text="""and things like this. I don't necessarily see something""" start="00:01:28.848" video="qanda-julia" id="subtitle"]]
-[[!template text="""that Julia has going on that DMX doesn't have, but I see some""" start="00:01:33.432" video="qanda-julia" id="subtitle"]]
-[[!template text="""differences and approaches that I think are important,""" start="00:01:33.432" video="qanda-julia" id="subtitle"]]
-[[!template text="""like the community. I think Julia is a very active and tight""" start="00:01:33.432" video="qanda-julia" id="subtitle"]]
-[[!template text="""community. Julia uses Slack and is very, very active. I""" start="00:01:47.384" video="qanda-julia" id="subtitle"]]
-[[!template text="""think he might say something like that, but it's maybe more""" start="00:01:54.093" video="qanda-julia" id="subtitle"]]
-[[!template text="""on Reddit, IRC. JuliaCon is big and brings together lots and""" start="00:01:54.093" video="qanda-julia" id="subtitle"]]
-[[!template text="""lots of people. And I think the sense of community is really""" start="00:01:59.078" video="qanda-julia" id="subtitle"]]
-[[!template text="""powerful. It's very easy to essentially meet people that""" start="00:02:03.221" video="qanda-julia" id="subtitle"]]
-[[!template text="""are interested in what we're building and interested in""" start="00:02:06.364" video="qanda-julia" id="subtitle"]]
-[[!template text="""what we're doing and interested in Julian, our, you know,""" start="00:02:06.364" video="qanda-julia" id="subtitle"]]
-[[!template text="""hacker spirit. I think Emacs is a very strong community.""" start="00:02:06.364" video="qanda-julia" id="subtitle"]]
-[[!template text="""We're here on a Saturday talking about Emacs, which again""" start="00:02:21.228" video="qanda-julia" id="subtitle"]]
-[[!template text="""proves that we are doing this. But I'd like to emphasize that""" start="00:02:21.228" video="qanda-julia" id="subtitle"]]
-[[!template text="""the community is a really important aspect in Julia that I""" start="00:02:27.192" video="qanda-julia" id="subtitle"]]
-[[!template text="""think we should double down on our side. The next question is""" start="00:02:27.192" video="qanda-julia" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Q: Can you call out something that Julia has that Emacs does not, and which could benefit Emacs?""" start="00:01:15.200" video="qanda-julia" id="subtitle"]]</div>[[!template text="""Emacs. The second question, can you call out something that""" start="00:01:15.200" video="qanda-julia" id="subtitle"]]
+[[!template text="""Julia has that Emacs does not and which could benefit Emacs?""" start="00:01:21.680" video="qanda-julia" id="subtitle"]]
+[[!template text="""Nothing stands out to me except the usual multi-threading""" start="00:01:26.840" video="qanda-julia" id="subtitle"]]
+[[!template text="""and things like this. I don't necessarily see something""" start="00:01:31.880" video="qanda-julia" id="subtitle"]]
+[[!template text="""that Julia has going on that DMX doesn't have, but I see some""" start="00:01:36.120" video="qanda-julia" id="subtitle"]]
+[[!template text="""differences and approaches that I think are important,""" start="00:01:42.480" video="qanda-julia" id="subtitle"]]
+[[!template text="""like the community. I think Julia is a very active and tight""" start="00:01:45.840" video="qanda-julia" id="subtitle"]]
+[[!template text="""community. Julia uses Slack and is very, very active. I""" start="00:01:49.760" video="qanda-julia" id="subtitle"]]
+[[!template text="""think he might say something like that, but it's maybe more""" start="00:01:54.160" video="qanda-julia" id="subtitle"]]
+[[!template text="""on Reddit, IRC. JuliaCon is big and brings together lots and""" start="00:01:56.560" video="qanda-julia" id="subtitle"]]
+[[!template text="""lots of people. And I think the sense of community is really""" start="00:02:01.800" video="qanda-julia" id="subtitle"]]
+[[!template text="""powerful. It's very easy to essentially meet people that""" start="00:02:05.160" video="qanda-julia" id="subtitle"]]
+[[!template text="""are interested in what we're building and interested in""" start="00:02:10.480" video="qanda-julia" id="subtitle"]]
+[[!template text="""what we're doing and interested in Julian, our, you know,""" start="00:02:12.920" video="qanda-julia" id="subtitle"]]
+[[!template text="""hacker spirit. I think Emacs is a very strong community.""" start="00:02:16.000" video="qanda-julia" id="subtitle"]]
+[[!template text="""We're here on a Saturday talking about Emacs, which again""" start="00:02:21.240" video="qanda-julia" id="subtitle"]]
+[[!template text="""proves that we are doing this. But I'd like to emphasize that""" start="00:02:24.280" video="qanda-julia" id="subtitle"]]
+[[!template text="""the community is a really important aspect in Julia that I""" start="00:02:29.680" video="qanda-julia" id="subtitle"]]
+[[!template text="""think we should double down on our side. The next question is""" start="00:02:33.640" video="qanda-julia" id="subtitle"]]
-<div class="transcript-heading">[[!template new="1" text="""Q: Is there a way to use lisp syntax with Julia, like hy for python or lisp flavoured erlang?""" start="00:02:36.797" video="qanda-julia" id="subtitle"]]</div>[[!template text="""about Lisp syntax with Julia, like what we can do in Python.""" start="00:02:36.797" video="qanda-julia" id="subtitle"]]
-[[!template text="""I don't think that's, I don't, I am not aware of any package""" start="00:02:48.038" video="qanda-julia" id="subtitle"]]
-[[!template text="""that does that. I would bet that there's something there. I""" start="00:02:48.038" video="qanda-julia" id="subtitle"]]
-[[!template text="""think that that's possible. Indeed, there used to be a Lisp""" start="00:02:56.722" video="qanda-julia" id="subtitle"]]
-[[!template text="""interpreter in Julia itself until the latest release. The""" start="00:02:59.243" video="qanda-julia" id="subtitle"]]
-[[!template text="""syntax parsing was done with a Lisp, it was called TemtoList""" start="00:03:07.647" video="qanda-julia" id="subtitle"]]
-[[!template text="""indeed. I think this got rid, get rid of this for our more""" start="00:03:07.647" video="qanda-julia" id="subtitle"]]
-[[!template text="""Julia-based solution that is faster and with better code""" start="00:03:16.124" video="qanda-julia" id="subtitle"]]
-[[!template text="""provenance. I think that it should be possible to use the""" start="00:03:16.124" video="qanda-julia" id="subtitle"]]
-[[!template text="""metaprogramming features in Julia to change the structure""" start="00:03:25.430" video="qanda-julia" id="subtitle"]]
-[[!template text="""of your syntax to be a Lispy syntax. I do want to emphasize""" start="00:03:25.430" video="qanda-julia" id="subtitle"]]
-[[!template text="""that Julia is heavily inspired by Lisp, so I wouldn't be""" start="00:03:36.238" video="qanda-julia" id="subtitle"]]
-[[!template text="""surprised if if something like this were possible.""" start="00:03:36.238" video="qanda-julia" id="subtitle"]]
-[[!template text="""I have tried Julia Snail.""" start="00:03:49.309" video="qanda-julia" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Q: Is there a way to use lisp syntax with Julia, like hy for python or lisp flavoured erlang?""" start="00:02:38.160" video="qanda-julia" id="subtitle"]]</div>[[!template text="""about Lisp syntax with Julia, like what we can do in Python.""" start="00:02:38.160" video="qanda-julia" id="subtitle"]]
+[[!template text="""I don't think that's, I don't, I am not aware of any package""" start="00:02:46.520" video="qanda-julia" id="subtitle"]]
+[[!template text="""that does that. I would bet that there's something there. I""" start="00:02:52.360" video="qanda-julia" id="subtitle"]]
+[[!template text="""think that that's possible. Indeed, there used to be a Lisp""" start="00:02:56.880" video="qanda-julia" id="subtitle"]]
+[[!template text="""interpreter in Julia itself until the latest release. The""" start="00:03:01.520" video="qanda-julia" id="subtitle"]]
+[[!template text="""syntax parsing was done with a Lisp, it was called TemtoList""" start="00:03:08.080" video="qanda-julia" id="subtitle"]]
+[[!template text="""indeed. I think this got rid, get rid of this for our more""" start="00:03:12.040" video="qanda-julia" id="subtitle"]]
+[[!template text="""Julia-based solution that is faster and with better code""" start="00:03:18.680" video="qanda-julia" id="subtitle"]]
+[[!template text="""provenance. I think that it should be possible to use the""" start="00:03:23.040" video="qanda-julia" id="subtitle"]]
+[[!template text="""metaprogramming features in Julia to change the structure""" start="00:03:28.600" video="qanda-julia" id="subtitle"]]
+[[!template text="""of your syntax to be a Lispy syntax. I do want to emphasize""" start="00:03:33.320" video="qanda-julia" id="subtitle"]]
+[[!template text="""that Julia is heavily inspired by Lisp, so I wouldn't be""" start="00:03:38.160" video="qanda-julia" id="subtitle"]]
+[[!template text="""surprised if if something like this were possible.""" start="00:03:43.880" video="qanda-julia" id="subtitle"]]
+[[!template text="""I have tried Julia Snail.""" start="00:03:49.240" video="qanda-julia" id="subtitle"]]
-<div class="transcript-heading">[[!template new="1" text="""Q: Have you tried the Julia Snail package for Emacs? It tries to be like SLY/SLIME for Common Lisp.""" start="00:03:51.168" video="qanda-julia" id="subtitle"]]</div>[[!template text="""So the next question is about Julia""" start="00:03:51.168" video="qanda-julia" id="subtitle"]]
-[[!template text="""Snail. I found Julia REPL to be a little bit easier to set up""" start="00:03:51.270" video="qanda-julia" id="subtitle"]]
-[[!template text="""and use. So I just settled on that. I should maybe revisit""" start="00:03:53.312" video="qanda-julia" id="subtitle"]]
-[[!template text="""that. In particular, I use the Julia REPL with the vterm""" start="00:04:00.918" video="qanda-julia" id="subtitle"]]
-[[!template text="""backend, which essentially makes a companion REPL to my""" start="00:04:03.720" video="qanda-julia" id="subtitle"]]
-[[!template text="""scripts. And that works for me. I do think that the tooling""" start="00:04:03.720" video="qanda-julia" id="subtitle"]]
-[[!template text="""uh, could be improved. I think there is definitely much room""" start="00:04:15.638" video="qanda-julia" id="subtitle"]]
-[[!template text="""and I would like to see improvement in that area. Um, and, uh,""" start="00:04:17.399" video="qanda-julia" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Q: Have you tried the Julia Snail package for Emacs? It tries to be like SLY/SLIME for Common Lisp.""" start="00:03:51.240" video="qanda-julia" id="subtitle"]]</div>[[!template text="""So the next question is about Julia""" start="00:03:51.240" video="qanda-julia" id="subtitle"]]
+[[!template text="""Snail. I found Julia REPL to be a little bit easier to set up""" start="00:03:54.400" video="qanda-julia" id="subtitle"]]
+[[!template text="""and use. So I just settled on that. I should maybe revisit""" start="00:03:58.200" video="qanda-julia" id="subtitle"]]
+[[!template text="""that. In particular, I use the Julia REPL with the vterm""" start="00:04:02.840" video="qanda-julia" id="subtitle"]]
+[[!template text="""backend, which essentially makes a companion REPL to my""" start="00:04:06.000" video="qanda-julia" id="subtitle"]]
+[[!template text="""scripts. And that works for me. I do think that the tooling""" start="00:04:10.960" video="qanda-julia" id="subtitle"]]
+[[!template text="""uh, could be improved. I think there is definitely much room""" start="00:04:15.440" video="qanda-julia" id="subtitle"]]
+[[!template text="""and I would like to see improvement in that area. Um, and, uh,""" start="00:04:19.240" video="qanda-julia" id="subtitle"]]
-<div class="transcript-heading">[[!template new="1" text="""Q: Is there a data inspector for a Julia REPL available that you can use in Emacs?""" start="00:04:22.940" video="qanda-julia" id="subtitle"]]</div>[[!template text="""so we have data inspector for Julia REPL.""" start="00:04:22.940" video="qanda-julia" id="subtitle"]]
-[[!template text="""I don't think so. I don't, is there any data inspector""" start="00:04:32.043" video="qanda-julia" id="subtitle"]]
-[[!template text="""in for, for the Julia REPL that we can use in Emacs?""" start="00:04:34.804" video="qanda-julia" id="subtitle"]]
-[[!template text="""I'm not sure. I don't think so.""" start="00:04:43.223" video="qanda-julia" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Q: Is there a data inspector for a Julia REPL available that you can use in Emacs?""" start="00:04:26.080" video="qanda-julia" id="subtitle"]]</div>[[!template text="""so we have data inspector for Julia REPL.""" start="00:04:26.080" video="qanda-julia" id="subtitle"]]
+[[!template text="""I don't think so. I don't, is there any data inspector""" start="00:04:31.640" video="qanda-julia" id="subtitle"]]
+[[!template text="""in for, for the Julia REPL that we can use in Emacs?""" start="00:04:37.280" video="qanda-julia" id="subtitle"]]
+[[!template text="""I'm not sure. I don't think so.""" start="00:04:40.440" video="qanda-julia" id="subtitle"]]
[[!template text="""I think the way I look at data is""" start="00:04:44.840" video="qanda-julia" id="subtitle"]]
-[[!template text="""essentially ignoring Emacs when encoded. It's just using the""" start="00:04:47.840" video="qanda-julia" id="subtitle"]]
+[[!template text="""essentially ignoring Emacs when encoded. It's just using the""" start="00:04:47.800" video="qanda-julia" id="subtitle"]]
[[!template text="""REPL. And again, with Julia REPL. So I'm not aware of any""" start="00:04:50.520" video="qanda-julia" id="subtitle"]]
-[[!template text="""specialized tool And again, maybe this is, again, a good""" start="00:04:54.760" video="qanda-julia" id="subtitle"]]
-[[!template text="""moment to emphasize that tooling, the Julia community""" start="00:04:58.652" video="qanda-julia" id="subtitle"]]
-[[!template text="""clusters around VS Code. And there is tools like the, pretty""" start="00:04:58.652" video="qanda-julia" id="subtitle"]]
-[[!template text="""much all the work with VS Code, unfortunately. And while""" start="00:05:06.315" video="qanda-julia" id="subtitle"]]
-[[!template text="""there's a very, very decent Julia mode and Julia repo mode""" start="00:05:12.578" video="qanda-julia" id="subtitle"]]
-[[!template text="""and Julia snail, there's definitely, definitely room for""" start="00:05:12.578" video="qanda-julia" id="subtitle"]]
-[[!template text="""improvement.""" start="00:05:12.578" video="qanda-julia" id="subtitle"]]
+[[!template text="""specialized tool And again, maybe this is, again, a good""" start="00:04:56.840" video="qanda-julia" id="subtitle"]]
+[[!template text="""moment to emphasize that tooling, the Julia community""" start="00:05:00.480" video="qanda-julia" id="subtitle"]]
+[[!template text="""clusters around VS Code. And there is tools like the, pretty""" start="00:05:04.280" video="qanda-julia" id="subtitle"]]
+[[!template text="""much all the work with VS Code, unfortunately. And while""" start="00:05:09.080" video="qanda-julia" id="subtitle"]]
+[[!template text="""there's a very, very decent Julia mode and Julia repo mode""" start="00:05:14.200" video="qanda-julia" id="subtitle"]]
+[[!template text="""and Julia snail, there's definitely, definitely room for""" start="00:05:17.760" video="qanda-julia" id="subtitle"]]
+[[!template text="""improvement.""" start="00:05:21.440" video="qanda-julia" id="subtitle"]]
-<div class="transcript-heading">[[!template new="1" text="""Q: Have you tried literate programming Julia (using Org babel or some other means) in Emacs?""" start="00:05:24.443" video="qanda-julia" id="subtitle"]]</div>[[!template text="""Next, we have a question about literate programming in""" start="00:05:24.443" video="qanda-julia" id="subtitle"]]
-[[!template text="""Julia. I haven't done much of it with Org Babel or""" start="00:05:24.443" video="qanda-julia" id="subtitle"]]
-[[!template text="""anything else. I haven't done much of it. I can say that Julia""" start="00:05:29.505" video="qanda-julia" id="subtitle"]]
-[[!template text="""has developed a new iteration of notebooks called Pluto.""" start="00:05:35.827" video="qanda-julia" id="subtitle"]]
-[[!template text="""Here I'm thinking about Jupyter notebooks. The Pluto""" start="00:05:46.090" video="qanda-julia" id="subtitle"]]
-[[!template text="""notebooks for Julia try to remove a bunch of the pain points""" start="00:05:51.021" video="qanda-julia" id="subtitle"]]
-[[!template text="""that Jupyter notebooks have, meaning you cannot easily""" start="00:05:51.021" video="qanda-julia" id="subtitle"]]
-[[!template text="""commit them to Git or things like this.""" start="00:05:51.021" video="qanda-julia" id="subtitle"]]
-[[!template text="""I haven't used them, but I know some people are very fond of""" start="00:06:06.450" video="qanda-julia" id="subtitle"]]
-[[!template text="""them. And so I think that that's what some of the Julia""" start="00:06:06.450" video="qanda-julia" id="subtitle"]]
-[[!template text="""community would use for notebooks. And I think they can""" start="00:06:09.872" video="qanda-julia" id="subtitle"]]
-[[!template text="""interact with Emacs with no problem. And that would be a form""" start="00:06:15.315" video="qanda-julia" id="subtitle"]]
-[[!template text="""of later programming. But if you can do it in Python, you can""" start="00:06:20.974" video="qanda-julia" id="subtitle"]]
-[[!template text="""do it in Julia. I think there is no reason. And actually, you""" start="00:06:24.015" video="qanda-julia" id="subtitle"]]
-[[!template text="""can take advantage of all this just-in-time or""" start="00:06:30.617" video="qanda-julia" id="subtitle"]]
-[[!template text="""just-out-of-time compilation by keeping the same""" start="00:06:30.617" video="qanda-julia" id="subtitle"]]
-[[!template text="""session. So I think it will be definitely a nice use case. So""" start="00:06:30.617" video="qanda-julia" id="subtitle"]]
-[[!template text="""these are the questions that I see here. I'm going to scroll""" start="00:06:44.681" video="qanda-julia" id="subtitle"]]
-[[!template text="""through the comments and see if there's something that I""" start="00:06:48.561" video="qanda-julia" id="subtitle"]]
-[[!template text="""should say about comments. I'm excited people want to learn""" start="00:06:48.561" video="qanda-julia" id="subtitle"]]
-[[!template text="""Julia. I have to say that if I want to do GPU computing""" start="00:06:56.228" video="qanda-julia" id="subtitle"]]
-[[!template text="""nowadays, I find it much easier to do it with Julia than with""" start="00:06:58.990" video="qanda-julia" id="subtitle"]]
-[[!template text="""CUDA. So I encourage people to look into that. And I do,""" start="00:06:58.990" video="qanda-julia" id="subtitle"]]
-[[!template text="""again, I would like to share what makes me excited about""" start="00:07:11.758" video="qanda-julia" id="subtitle"]]
-[[!template text="""Emacs, about this being open, being collaborative, being""" start="00:07:11.758" video="qanda-julia" id="subtitle"]]
-[[!template text="""respectable with documentation is something that I find in""" start="00:07:11.758" video="qanda-julia" id="subtitle"]]
-[[!template text="""Julia. So I think people that are excited about the same""" start="00:07:11.758" video="qanda-julia" id="subtitle"]]
-[[!template text="""features will find a little bit of joy in working with Julia.""" start="00:07:27.367" video="qanda-julia" id="subtitle"]]
-[[!template text="""I think I addressed what I have here. I don't know if there's""" start="00:07:38.214" video="qanda-julia" id="subtitle"]]
-[[!template text="""anything else that I should add.""" start="00:07:40.189" video="qanda-julia" id="subtitle"]]
-[[!template text="""It took me a minute to unmute there.""" start="00:07:51.718" video="qanda-julia" id="subtitle"]]
-[[!template text="""No, I think that was awesome. And thank you so much.""" start="00:07:54.040" video="qanda-julia" id="subtitle"]]
-[[!template text="""I guess I thought it would""" start="00:07:58.400" video="qanda-julia" id="subtitle"]]
-[[!template text="""collapse that shared area on BBB, my mistake, on the stream,""" start="00:08:00.400" video="qanda-julia" id="subtitle"]]
-[[!template text="""or I would have left it open. But in any case, no, I thought""" start="00:08:06.560" video="qanda-julia" id="subtitle"]]
-[[!template text="""that was great. You did a great job of responding to all the""" start="00:08:12.400" video="qanda-julia" id="subtitle"]]
+<div class="transcript-heading">[[!template new="1" text="""Q: Have you tried literate programming Julia (using Org babel or some other means) in Emacs?""" start="00:05:24.360" video="qanda-julia" id="subtitle"]]</div>[[!template text="""Next, we have a question about literate programming in""" start="00:05:24.360" video="qanda-julia" id="subtitle"]]
+[[!template text="""Julia. I haven't done much of it with Org Babel or""" start="00:05:27.760" video="qanda-julia" id="subtitle"]]
+[[!template text="""anything else. I haven't done much of it. I can say that Julia""" start="00:05:32.440" video="qanda-julia" id="subtitle"]]
+[[!template text="""has developed a new iteration of notebooks called Pluto.""" start="00:05:37.080" video="qanda-julia" id="subtitle"]]
+[[!template text="""Here I'm thinking about Jupyter notebooks. The Pluto""" start="00:05:40.720" video="qanda-julia" id="subtitle"]]
+[[!template text="""notebooks for Julia try to remove a bunch of the pain points""" start="00:05:47.120" video="qanda-julia" id="subtitle"]]
+[[!template text="""that Jupyter notebooks have, meaning you cannot easily""" start="00:05:55.360" video="qanda-julia" id="subtitle"]]
+[[!template text="""commit them to Git or things like this.""" start="00:06:00.440" video="qanda-julia" id="subtitle"]]
+[[!template text="""I haven't used them, but I know some people are very fond of""" start="00:06:03.640" video="qanda-julia" id="subtitle"]]
+[[!template text="""them. And so I think that that's what some of the Julia""" start="00:06:09.280" video="qanda-julia" id="subtitle"]]
+[[!template text="""community would use for notebooks. And I think they can""" start="00:06:13.560" video="qanda-julia" id="subtitle"]]
+[[!template text="""interact with Emacs with no problem. And that would be a form""" start="00:06:16.880" video="qanda-julia" id="subtitle"]]
+[[!template text="""of later programming. But if you can do it in Python, you can""" start="00:06:22.240" video="qanda-julia" id="subtitle"]]
+[[!template text="""do it in Julia. I think there is no reason. And actually, you""" start="00:06:26.880" video="qanda-julia" id="subtitle"]]
+[[!template text="""can take advantage of all this just-in-time or""" start="00:06:32.120" video="qanda-julia" id="subtitle"]]
+[[!template text="""just-out-of-time compilation by keeping the same""" start="00:06:35.840" video="qanda-julia" id="subtitle"]]
+[[!template text="""session. So I think it will be definitely a nice use case. So""" start="00:06:38.240" video="qanda-julia" id="subtitle"]]
+[[!template text="""these are the questions that I see here. I'm going to scroll""" start="00:06:45.200" video="qanda-julia" id="subtitle"]]
+[[!template text="""through the comments and see if there's something that I""" start="00:06:49.200" video="qanda-julia" id="subtitle"]]
+[[!template text="""should say about comments. I'm excited people want to learn""" start="00:06:52.760" video="qanda-julia" id="subtitle"]]
+[[!template text="""Julia. I have to say that if I want to do GPU computing""" start="00:06:57.320" video="qanda-julia" id="subtitle"]]
+[[!template text="""nowadays, I find it much easier to do it with Julia than with""" start="00:07:02.520" video="qanda-julia" id="subtitle"]]
+[[!template text="""CUDA. So I encourage people to look into that. And I do,""" start="00:07:06.400" video="qanda-julia" id="subtitle"]]
+[[!template text="""again, I would like to share what makes me excited about""" start="00:07:11.760" video="qanda-julia" id="subtitle"]]
+[[!template text="""Emacs, about this being open, being collaborative, being""" start="00:07:19.360" video="qanda-julia" id="subtitle"]]
+[[!template text="""respectable with documentation is something that I find in""" start="00:07:23.800" video="qanda-julia" id="subtitle"]]
+[[!template text="""Julia. So I think people that are excited about the same""" start="00:07:26.400" video="qanda-julia" id="subtitle"]]
+[[!template text="""features will find a little bit of joy in working with Julia.""" start="00:07:31.000" video="qanda-julia" id="subtitle"]]
+[[!template text="""I think I addressed what I have here. I don't know if there's""" start="00:07:35.280" video="qanda-julia" id="subtitle"]]
+[[!template text="""anything else that I should add.""" start="00:07:42.000" video="qanda-julia" id="subtitle"]]
+[[!template text="""It took me a minute to unmute there.""" start="00:07:43.560" video="qanda-julia" id="subtitle"]]
+[[!template text="""No, I think that was awesome. And thank you so much.""" start="00:07:52.880" video="qanda-julia" id="subtitle"]]
+[[!template text="""I guess I thought it would""" start="00:07:57.520" video="qanda-julia" id="subtitle"]]
+[[!template text="""collapse that shared area on BBB, my mistake, on the stream,""" start="00:08:00.120" video="qanda-julia" id="subtitle"]]
+[[!template text="""or I would have left it open. But in any case, no, I thought""" start="00:08:06.280" video="qanda-julia" id="subtitle"]]
+[[!template text="""that was great. You did a great job of responding to all the""" start="00:08:12.360" video="qanda-julia" id="subtitle"]]
[[!template text="""questions and comments. And thank you again so much for your""" start="00:08:15.080" video="qanda-julia" id="subtitle"]]
-[[!template text="""talk and getting us all excited to learn Julia. Thank you.""" start="00:08:17.880" video="qanda-julia" id="subtitle"]]
-[[!template text="""Enjoy EmacsConf. And again, thanks so much for attending,""" start="00:08:24.094" video="qanda-julia" id="subtitle"]]
-[[!template text="""for being EmacsConf. Thank you.""" start="00:08:25.335" video="qanda-julia" id="subtitle"]]
+[[!template text="""talk and getting us all excited to learn Julia. Thank you.""" start="00:08:17.840" video="qanda-julia" id="subtitle"]]
+[[!template text="""Enjoy EmacsConf. And again, thanks so much for attending,""" start="00:08:23.200" video="qanda-julia" id="subtitle"]]
+[[!template text="""for being EmacsConf. Thank you.""" start="00:08:27.760" video="qanda-julia" 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%20julia%3A%20Exploring%20shared%20philosophies%20in%20Julia%20and%20Emacs)
diff --git a/2024/info/julia-before.md b/2024/info/julia-before.md
index 1da110dc..e9d43975 100644
--- a/2024/info/julia-before.md
+++ b/2024/info/julia-before.md
@@ -1,7 +1,6 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
[[!toc ]]
Format: 10-min talk ; Q&A: BigBlueButton conference room
-Etherpad: <https://pad.emacsconf.org/2024-julia>
Status: TO_CAPTION_QA
@@ -10,18 +9,18 @@ Status: TO_CAPTION_QA
# Talk
-<div class="vid"><video controls preload="none" id="julia-mainVideo"><source src="https://media.emacsconf.org/2024/emacsconf-2024-julia--exploring-shared-philosophies-in-julia-and-emacs--gabriele-bozzola--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-julia--exploring-shared-philosophies-in-julia-and-emacs--gabriele-bozzola--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 09:17 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2024-julia">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-julia--exploring-shared-philosophies-in-julia-and-emacs--gabriele-bozzola--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-julia--exploring-shared-philosophies-in-julia-and-emacs--gabriele-bozzola--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-julia--exploring-shared-philosophies-in-julia-and-emacs--gabriele-bozzola--main.webm">Download --main.webm (17MB)</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-julia--exploring-shared-philosophies-in-julia-and-emacs--gabriele-bozzola.mp4">Download .mp4 (24MB)</a></li><li><a href="https://toobnix.org/w/eftuibSfVSWF4okoG5ChfC">View on Toobnix</a></li></ul></div></div>
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-julia"><source src="https://media.emacsconf.org/2024/emacsconf-2024-julia--exploring-shared-philosophies-in-julia-and-emacs--gabriele-bozzola--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-julia--exploring-shared-philosophies-in-julia-and-emacs--gabriele-bozzola--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 09:17 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-julia--exploring-shared-philosophies-in-julia-and-emacs--gabriele-bozzola--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-julia--exploring-shared-philosophies-in-julia-and-emacs--gabriele-bozzola--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-julia--exploring-shared-philosophies-in-julia-and-emacs--gabriele-bozzola--main.webm">Download --main.webm (17MB)</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-julia--exploring-shared-philosophies-in-julia-and-emacs--gabriele-bozzola.mp4">Download .mp4 (24MB)</a></li><li><a href="https://toobnix.org/w/eftuibSfVSWF4okoG5ChfC">View on Toobnix</a></li><li><a href="https://youtu.be/RTVXaDR697k">View on Youtube</a></li></ul></div></div>
# Q&A
-<div class="vid"><video controls preload="none" id="julia-qanda"><source src="https://media.emacsconf.org/2024/emacsconf-2024-julia--exploring-shared-philosophies-in-julia-and-emacs--gabriele-bozzola--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-julia--exploring-shared-philosophies-in-julia-and-emacs--gabriele-bozzola--answers.vtt" default />"""<track kind="chapters" label="Chapters" src="/2024/captions/emacsconf-2024-julia--exploring-shared-philosophies-in-julia-and-emacs--gabriele-bozzola--answers--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="julia-qanda" data="""
-00:00.089 Q: Do you have any suggestions for interactive debugging of Julia code in Emacs?
-01:08.286 Q: Can you call out something that Julia has that Emacs does not, and which could benefit Emacs?
-02:36.797 Q: Is there a way to use lisp syntax with Julia, like hy for python or lisp flavoured erlang?
-03:51.168 Q: Have you tried the Julia Snail package for Emacs? It tries to be like SLY/SLIME for Common Lisp.
-04:22.940 Q: Is there a data inspector for a Julia REPL available that you can use in Emacs?
-05:24.443 Q: Have you tried literate programming Julia (using Org babel or some other means) in Emacs?
+<div class="vid qanda"><video controls preload="none" id="qanda-julia"><source src="https://media.emacsconf.org/2024/emacsconf-2024-julia--exploring-shared-philosophies-in-julia-and-emacs--gabriele-bozzola--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-julia--exploring-shared-philosophies-in-julia-and-emacs--gabriele-bozzola--answers.vtt" default />"""<track kind="chapters" label="Chapters" src="/2024/captions/emacsconf-2024-julia--exploring-shared-philosophies-in-julia-and-emacs--gabriele-bozzola--answers--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="qanda-julia" data="""
+00:00.000 Q: Do you have any suggestions for interactive debugging of Julia code in Emacs?
+01:15.200 Q: Can you call out something that Julia has that Emacs does not, and which could benefit Emacs?
+02:38.160 Q: Is there a way to use lisp syntax with Julia, like hy for python or lisp flavoured erlang?
+03:51.240 Q: Have you tried the Julia Snail package for Emacs? It tries to be like SLY/SLIME for Common Lisp.
+04:26.080 Q: Is there a data inspector for a Julia REPL available that you can use in Emacs?
+05:24.360 Q: Have you tried literate programming Julia (using Org babel or some other means) in Emacs?
-"""]]<div>Listen to just the audio:<br /><audio controls preload="none" id="julia-qanda-audio" src="https://media.emacsconf.org/2024/emacsconf-2024-julia--exploring-shared-philosophies-in-julia-and-emacs--gabriele-bozzola--answers.opus"></audio></div><div></div><div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2024-julia">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-julia--exploring-shared-philosophies-in-julia-and-emacs--gabriele-bozzola--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-julia--exploring-shared-philosophies-in-julia-and-emacs--gabriele-bozzola--answers.opus">Download --answers.opus (4.3MB)</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-julia--exploring-shared-philosophies-in-julia-and-emacs--gabriele-bozzola--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-julia--exploring-shared-philosophies-in-julia-and-emacs--gabriele-bozzola--answers.webm">Download --answers.webm (21MB)</a></li></ul></div></div>
+"""]]<div>Listen to just the audio:<br /><audio controls preload="none" id="qanda-julia-audio" src="https://media.emacsconf.org/2024/emacsconf-2024-julia--exploring-shared-philosophies-in-julia-and-emacs--gabriele-bozzola--answers.opus"></audio></div><div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-julia--exploring-shared-philosophies-in-julia-and-emacs--gabriele-bozzola--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-julia--exploring-shared-philosophies-in-julia-and-emacs--gabriele-bozzola--answers.opus">Download --answers.opus (4.3MB)</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-julia--exploring-shared-philosophies-in-julia-and-emacs--gabriele-bozzola--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-julia--exploring-shared-philosophies-in-julia-and-emacs--gabriele-bozzola--answers.webm">Download --answers.webm (21MB)</a></li><li><a href="https://toobnix.org/w/8j563gDQLnQ624TLeF1PYA">View on Toobnix</a></li><li><a href="https://www.youtube.com/watch?v=CkpadkAZOxs">View on Youtube</a></li></ul></div></div>
# Description
<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2024/info/learning-before.md b/2024/info/learning-before.md
index e54e30a7..432d6c2d 100644
--- a/2024/info/learning-before.md
+++ b/2024/info/learning-before.md
@@ -1,7 +1,6 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
[[!toc ]]
Format: 20-min talk ; Q&A: BigBlueButton conference room
-Etherpad: <https://pad.emacsconf.org/2024-learning>
Status: TO_CAPTION_QA
@@ -10,7 +9,7 @@ Status: TO_CAPTION_QA
# Talk
-<div class="vid"><video controls preload="none" id="learning-mainVideo"><source src="https://media.emacsconf.org/2024/emacsconf-2024-learning--survival-of-the-skillest-thriving-in-the-learning-jungle--bala-ramadurai--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-learning--survival-of-the-skillest-thriving-in-the-learning-jungle--bala-ramadurai--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2024/captions/emacsconf-2024-learning--survival-of-the-skillest-thriving-in-the-learning-jungle--bala-ramadurai--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="learning-mainVideo" data="""
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-learning"><source src="https://media.emacsconf.org/2024/emacsconf-2024-learning--survival-of-the-skillest-thriving-in-the-learning-jungle--bala-ramadurai--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-learning--survival-of-the-skillest-thriving-in-the-learning-jungle--bala-ramadurai--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2024/captions/emacsconf-2024-learning--survival-of-the-skillest-thriving-in-the-learning-jungle--bala-ramadurai--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="mainVideo-learning" data="""
00:00.300 Introduction
01:35.350 What is a skill?
01:47.424 Why should you learn a new skill?
@@ -29,13 +28,13 @@ Status: TO_CAPTION_QA
18:36.957 Summary
19:03.210 References
-"""]]<div></div>Duration: 19:39 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2024-learning">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-learning--survival-of-the-skillest-thriving-in-the-learning-jungle--bala-ramadurai--edited.webm">Download --edited.webm (57MB)</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-learning--survival-of-the-skillest-thriving-in-the-learning-jungle--bala-ramadurai--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-learning--survival-of-the-skillest-thriving-in-the-learning-jungle--bala-ramadurai--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-learning--survival-of-the-skillest-thriving-in-the-learning-jungle--bala-ramadurai--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-learning--survival-of-the-skillest-thriving-in-the-learning-jungle--bala-ramadurai--main.webm">Download --main.webm (137MB)</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-learning--survival-of-the-skillest-thriving-in-the-learning-jungle--bala-ramadurai--slides.pdf">Download --slides.pdf (9.5MB)</a></li><li><a href="https://toobnix.org/w/2FSZbvb7v5eZMRFL1f2DXP">View on Toobnix</a></li></ul></div></div>
+"""]]<div></div>Duration: 19:39 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-learning--survival-of-the-skillest-thriving-in-the-learning-jungle--bala-ramadurai--edited.webm">Download --edited.webm (57MB)</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-learning--survival-of-the-skillest-thriving-in-the-learning-jungle--bala-ramadurai--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-learning--survival-of-the-skillest-thriving-in-the-learning-jungle--bala-ramadurai--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-learning--survival-of-the-skillest-thriving-in-the-learning-jungle--bala-ramadurai--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-learning--survival-of-the-skillest-thriving-in-the-learning-jungle--bala-ramadurai--main.webm">Download --main.webm (137MB)</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-learning--survival-of-the-skillest-thriving-in-the-learning-jungle--bala-ramadurai--slides.pdf">Download --slides.pdf (9.5MB)</a></li><li><a href="https://toobnix.org/w/2FSZbvb7v5eZMRFL1f2DXP">View on Toobnix</a></li><li><a href="https://youtu.be/VcHy8XnPia8">View on Youtube</a></li></ul></div></div>
# Q&A
-<div class="vid"><video controls preload="none" id="learning-qanda"><source src="https://media.emacsconf.org/2024/emacsconf-2024-learning--survival-of-the-skillest-thriving-in-the-learning-jungle--bala-ramadurai--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-learning--survival-of-the-skillest-thriving-in-the-learning-jungle--bala-ramadurai--answers.vtt" default />"""<track kind="chapters" label="Chapters" src="/2024/captions/emacsconf-2024-learning--survival-of-the-skillest-thriving-in-the-learning-jungle--bala-ramadurai--answers--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="learning-qanda" data="""
+<div class="vid qanda"><video controls preload="none" id="qanda-learning"><source src="https://media.emacsconf.org/2024/emacsconf-2024-learning--survival-of-the-skillest-thriving-in-the-learning-jungle--bala-ramadurai--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-learning--survival-of-the-skillest-thriving-in-the-learning-jungle--bala-ramadurai--answers.vtt" default />"""<track kind="chapters" label="Chapters" src="/2024/captions/emacsconf-2024-learning--survival-of-the-skillest-thriving-in-the-learning-jungle--bala-ramadurai--answers--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="qanda-learning" data="""
00:00.000
-"""]]<div>Listen to just the audio:<br /><audio controls preload="none" id="learning-qanda-audio" src="https://media.emacsconf.org/2024/emacsconf-2024-learning--survival-of-the-skillest-thriving-in-the-learning-jungle--bala-ramadurai--answers.opus"></audio></div><div></div>Duration: 24:41 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2024-learning">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-learning--survival-of-the-skillest-thriving-in-the-learning-jungle--bala-ramadurai--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-learning--survival-of-the-skillest-thriving-in-the-learning-jungle--bala-ramadurai--answers--edited.opus">Download --answers--edited.opus (20MB)</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-learning--survival-of-the-skillest-thriving-in-the-learning-jungle--bala-ramadurai--answers.opus">Download --answers.opus (11MB)</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-learning--survival-of-the-skillest-thriving-in-the-learning-jungle--bala-ramadurai--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-learning--survival-of-the-skillest-thriving-in-the-learning-jungle--bala-ramadurai--answers.webm">Download --answers.webm (57MB)</a></li></ul></div></div>
+"""]]<div>Listen to just the audio:<br /><audio controls preload="none" id="qanda-learning-audio" src="https://media.emacsconf.org/2024/emacsconf-2024-learning--survival-of-the-skillest-thriving-in-the-learning-jungle--bala-ramadurai--answers.opus"></audio></div><div></div>Duration: 24:41 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-learning--survival-of-the-skillest-thriving-in-the-learning-jungle--bala-ramadurai--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-learning--survival-of-the-skillest-thriving-in-the-learning-jungle--bala-ramadurai--answers--edited.opus">Download --answers--edited.opus (20MB)</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-learning--survival-of-the-skillest-thriving-in-the-learning-jungle--bala-ramadurai--answers.opus">Download --answers.opus (11MB)</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-learning--survival-of-the-skillest-thriving-in-the-learning-jungle--bala-ramadurai--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-learning--survival-of-the-skillest-thriving-in-the-learning-jungle--bala-ramadurai--answers.webm">Download --answers.webm (57MB)</a></li><li><a href="https://toobnix.org/w/rnG2fEoHDDeNRSQYRRTrwR">View on Toobnix</a></li><li><a href="https://www.youtube.com/watch?v=IbI37PTJWQw">View on Youtube</a></li></ul></div></div>
# Description
<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2024/info/links-before.md b/2024/info/links-before.md
index ee97d910..fadd060a 100644
--- a/2024/info/links-before.md
+++ b/2024/info/links-before.md
@@ -1,14 +1,13 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
[[!toc ]]
Format: 12-min talk ; Q&A: Etherpad
-Etherpad: <https://pad.emacsconf.org/2024-links>
Status: TO_FOLLOW_UP
-<div class="vid"><video controls preload="none" id="links-mainVideo"><source src="https://media.emacsconf.org/2024/emacsconf-2024-links--unlocking-linked-data-replacing-specialized-apps-with-an-orgbased-semantic-wiki--abhinav-tushar--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-links--unlocking-linked-data-replacing-specialized-apps-with-an-orgbased-semantic-wiki--abhinav-tushar--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2024/captions/emacsconf-2024-links--unlocking-linked-data-replacing-specialized-apps-with-an-orgbased-semantic-wiki--abhinav-tushar--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="links-mainVideo" data="""
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-links"><source src="https://media.emacsconf.org/2024/emacsconf-2024-links--unlocking-linked-data-replacing-specialized-apps-with-an-orgbased-semantic-wiki--abhinav-tushar--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-links--unlocking-linked-data-replacing-specialized-apps-with-an-orgbased-semantic-wiki--abhinav-tushar--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2024/captions/emacsconf-2024-links--unlocking-linked-data-replacing-specialized-apps-with-an-orgbased-semantic-wiki--abhinav-tushar--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="mainVideo-links" data="""
00:00.000 Specialized Apps and Linked Data
01:30.000 Discovering Org Roam and Linked Notes
02:53.000 Enhanced Org Roam Buffer: Rich Links and Similar Nodes
@@ -16,6 +15,6 @@ Status: TO_FOLLOW_UP
08:26.000 Exposing notes outside Emacs
10:38.000 Future Directions and Potential Improvements
-"""]]<div></div>Duration: 11:21 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2024-links">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-links--unlocking-linked-data-replacing-specialized-apps-with-an-orgbased-semantic-wiki--abhinav-tushar--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-links--unlocking-linked-data-replacing-specialized-apps-with-an-orgbased-semantic-wiki--abhinav-tushar--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-links--unlocking-linked-data-replacing-specialized-apps-with-an-orgbased-semantic-wiki--abhinav-tushar--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-links--unlocking-linked-data-replacing-specialized-apps-with-an-orgbased-semantic-wiki--abhinav-tushar--main.webm">Download --main.webm (21MB)</a></li><li><a href="https://toobnix.org/w/qUW7dHGcHqXW5ZVKtwXspy">View on Toobnix</a></li></ul></div></div>
+"""]]<div></div>Duration: 11:21 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-links--unlocking-linked-data-replacing-specialized-apps-with-an-orgbased-semantic-wiki--abhinav-tushar--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-links--unlocking-linked-data-replacing-specialized-apps-with-an-orgbased-semantic-wiki--abhinav-tushar--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-links--unlocking-linked-data-replacing-specialized-apps-with-an-orgbased-semantic-wiki--abhinav-tushar--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-links--unlocking-linked-data-replacing-specialized-apps-with-an-orgbased-semantic-wiki--abhinav-tushar--main.webm">Download --main.webm (21MB)</a></li><li><a href="https://toobnix.org/w/qUW7dHGcHqXW5ZVKtwXspy">View on Toobnix</a></li><li><a href="https://youtu.be/yp01TbmeWpc">View on Youtube</a></li></ul></div></div>
# Description
<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2024/info/literate-before.md b/2024/info/literate-before.md
index 12fd0adc..78a10476 100644
--- a/2024/info/literate-before.md
+++ b/2024/info/literate-before.md
@@ -1,7 +1,6 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
[[!toc ]]
Format: 16-min talk ; Q&A: BigBlueButton conference room
-Etherpad: <https://pad.emacsconf.org/2024-literate>
Status: TO_CAPTION_QA
@@ -10,7 +9,7 @@ Status: TO_CAPTION_QA
# Talk
-<div class="vid"><video controls preload="none" id="literate-mainVideo"><source src="https://media.emacsconf.org/2024/emacsconf-2024-literate--literate-programming-for-the-21st-century--howard-abrams--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-literate--literate-programming-for-the-21st-century--howard-abrams--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2024/captions/emacsconf-2024-literate--literate-programming-for-the-21st-century--howard-abrams--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="literate-mainVideo" data="""
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-literate"><source src="https://media.emacsconf.org/2024/emacsconf-2024-literate--literate-programming-for-the-21st-century--howard-abrams--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-literate--literate-programming-for-the-21st-century--howard-abrams--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2024/captions/emacsconf-2024-literate--literate-programming-for-the-21st-century--howard-abrams--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="mainVideo-literate" data="""
00:00.000 Introduction
01:35.253 Do I still literate?
03:06.332 Advantages
@@ -27,11 +26,11 @@ Status: TO_CAPTION_QA
14:23.166 LP prose isn't comments
14:55.800 Summary
-"""]]<div></div>Duration: 15:51 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2024-literate">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-literate--literate-programming-for-the-21st-century--howard-abrams--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-literate--literate-programming-for-the-21st-century--howard-abrams--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-literate--literate-programming-for-the-21st-century--howard-abrams--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-literate--literate-programming-for-the-21st-century--howard-abrams--main.webm">Download --main.webm (42MB)</a></li><li><a href="https://toobnix.org/w/mNDvUTsr99KV59dkTsZEbb">View on Toobnix</a></li></ul></div></div>
+"""]]<div></div>Duration: 15:51 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-literate--literate-programming-for-the-21st-century--howard-abrams--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-literate--literate-programming-for-the-21st-century--howard-abrams--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-literate--literate-programming-for-the-21st-century--howard-abrams--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-literate--literate-programming-for-the-21st-century--howard-abrams--main.webm">Download --main.webm (42MB)</a></li><li><a href="https://toobnix.org/w/mNDvUTsr99KV59dkTsZEbb">View on Toobnix</a></li><li><a href="https://youtu.be/9eEtPnTknhQ">View on Youtube</a></li></ul></div></div>
# Q&A
-<div class="vid"><video controls preload="none" id="literate-qanda"><source src="https://media.emacsconf.org/2024/emacsconf-2024-literate--literate-programming-for-the-21st-century--howard-abrams--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-literate--literate-programming-for-the-21st-century--howard-abrams--answers.vtt" default />"""<track kind="chapters" label="Chapters" src="/2024/captions/emacsconf-2024-literate--literate-programming-for-the-21st-century--howard-abrams--answers--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="literate-qanda" data="""
+<div class="vid qanda"><video controls preload="none" id="qanda-literate"><source src="https://media.emacsconf.org/2024/emacsconf-2024-literate--literate-programming-for-the-21st-century--howard-abrams--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-literate--literate-programming-for-the-21st-century--howard-abrams--answers.vtt" default />"""<track kind="chapters" label="Chapters" src="/2024/captions/emacsconf-2024-literate--literate-programming-for-the-21st-century--howard-abrams--answers--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="qanda-literate" data="""
02:07.400 Q: What's the largest code base you've ever tackled with the literate approach (esp. Emacs + Org-mode)?
03:58.080 Q: Have you ever used org-transclusion?
04:08.440 Q: What is your usage of dynamic blocks in such workflows?
@@ -49,6 +48,6 @@ Status: TO_CAPTION_QA
18:38.936 Q: Have you used Cucumber/Gherkin/BDD and do you think it has a strong overlap to what you talked about here?
19:54.600 Q: What granularity are you looking for re your org files and contents, with respect to a codebase that it tangles to, or in non-coding contexts?
-"""]]<div>Listen to just the audio:<br /><audio controls preload="none" id="literate-qanda-audio" src="https://media.emacsconf.org/2024/emacsconf-2024-literate--literate-programming-for-the-21st-century--howard-abrams--answers.opus"></audio></div><div></div>Duration: 22:48 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2024-literate">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-literate--literate-programming-for-the-21st-century--howard-abrams--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-literate--literate-programming-for-the-21st-century--howard-abrams--answers.opus">Download --answers.opus (12MB)</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-literate--literate-programming-for-the-21st-century--howard-abrams--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-literate--literate-programming-for-the-21st-century--howard-abrams--answers.webm">Download --answers.webm (56MB)</a></li></ul></div></div>
+"""]]<div>Listen to just the audio:<br /><audio controls preload="none" id="qanda-literate-audio" src="https://media.emacsconf.org/2024/emacsconf-2024-literate--literate-programming-for-the-21st-century--howard-abrams--answers.opus"></audio></div><div></div>Duration: 22:48 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-literate--literate-programming-for-the-21st-century--howard-abrams--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-literate--literate-programming-for-the-21st-century--howard-abrams--answers.opus">Download --answers.opus (12MB)</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-literate--literate-programming-for-the-21st-century--howard-abrams--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-literate--literate-programming-for-the-21st-century--howard-abrams--answers.webm">Download --answers.webm (56MB)</a></li><li><a href="https://toobnix.org/w/24cX5V5z399Ym6QJua8Xbn">View on Toobnix</a></li><li><a href="https://www.youtube.com/watch?v=18POj8u06xc">View on Youtube</a></li></ul></div></div>
# Description
<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2024/info/maxima-before.md b/2024/info/maxima-before.md
index 0cdcd67d..84d8dad2 100644
--- a/2024/info/maxima-before.md
+++ b/2024/info/maxima-before.md
@@ -1,7 +1,6 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
[[!toc ]]
Format: 31-min talk ; Q&A: Etherpad
-Etherpad: <https://pad.emacsconf.org/2024-maxima>
Status: TO_FOLLOW_UP
@@ -10,10 +9,10 @@ Status: TO_FOLLOW_UP
# Talk
-<div class="vid"><video controls preload="none" id="maxima-mainVideo"><source src="https://media.emacsconf.org/2024/emacsconf-2024-maxima--emacs-eev-and-maxima-now--eduardo-ochs--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-maxima--emacs-eev-and-maxima-now--eduardo-ochs--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 30:34 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2024-maxima">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-maxima--emacs-eev-and-maxima-now--eduardo-ochs--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-maxima--emacs-eev-and-maxima-now--eduardo-ochs--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-maxima--emacs-eev-and-maxima-now--eduardo-ochs--main.webm">Download --main.webm (50MB)</a></li><li><a href="https://toobnix.org/w/6odX1p46GQ3XnnRPedgWRr">View on Toobnix</a></li></ul></div></div>
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-maxima"><source src="https://media.emacsconf.org/2024/emacsconf-2024-maxima--emacs-eev-and-maxima-now--eduardo-ochs--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-maxima--emacs-eev-and-maxima-now--eduardo-ochs--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 30:34 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-maxima--emacs-eev-and-maxima-now--eduardo-ochs--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-maxima--emacs-eev-and-maxima-now--eduardo-ochs--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-maxima--emacs-eev-and-maxima-now--eduardo-ochs--main.webm">Download --main.webm (50MB)</a></li><li><a href="https://toobnix.org/w/6odX1p46GQ3XnnRPedgWRr">View on Toobnix</a></li><li><a href="https://www.youtube.com/watch?v=vIGreLNBqSg">View on Youtube</a></li></ul></div></div>
# Q&A
-<div class="vid"><div></div><div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2024-maxima">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-maxima--emacs-eev-and-maxima-now--eduardo-ochs--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-maxima--emacs-eev-and-maxima-now--eduardo-ochs--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-maxima--emacs-eev-and-maxima-now--eduardo-ochs--main.webm">Download --main.webm (50MB)</a></li></ul></div></div>
+<div class="vid qanda"><div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-maxima--emacs-eev-and-maxima-now--eduardo-ochs--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-maxima--emacs-eev-and-maxima-now--eduardo-ochs--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-maxima--emacs-eev-and-maxima-now--eduardo-ochs--main.webm">Download --main.webm (50MB)</a></li></ul></div></div>
# Description
<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2024/info/mcclim-before.md b/2024/info/mcclim-before.md
index 4cb477c4..70b4798e 100644
--- a/2024/info/mcclim-before.md
+++ b/2024/info/mcclim-before.md
@@ -1,7 +1,6 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
[[!toc ]]
Format: 35-min talk ; Q&A: BigBlueButton conference room
-Etherpad: <https://pad.emacsconf.org/2024-mcclim>
Status: TO_CAPTION_QA
@@ -10,17 +9,17 @@ Status: TO_CAPTION_QA
# Talk
-<div class="vid"><video controls preload="none" id="mcclim-mainVideo"><source src="https://media.emacsconf.org/2024/emacsconf-2024-mcclim--elisp-and-mcclim--screwlisp--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-mcclim--elisp-and-mcclim--screwlisp--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2024/captions/emacsconf-2024-mcclim--elisp-and-mcclim--screwlisp--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="mcclim-mainVideo" data="""
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-mcclim"><source src="https://media.emacsconf.org/2024/emacsconf-2024-mcclim--elisp-and-mcclim--screwlisp--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-mcclim--elisp-and-mcclim--screwlisp--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2024/captions/emacsconf-2024-mcclim--elisp-and-mcclim--screwlisp--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="mainVideo-mcclim" data="""
00:01.750 Introduction
03:21.702 Calendar
19:12.802 Inferior Lisp and McCLIM
29:10.964 Putting things together
-"""]]<div></div>Duration: 34:29 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2024-mcclim">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-mcclim--elisp-and-mcclim--screwlisp--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-mcclim--elisp-and-mcclim--screwlisp--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-mcclim--elisp-and-mcclim--screwlisp--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-mcclim--elisp-and-mcclim--screwlisp--main.webm">Download --main.webm (110MB)</a></li><li><a href="https://toobnix.org/w/pfYUAuMPmkTRfBZSgXFtbT">View on Toobnix</a></li></ul></div></div>
+"""]]<div></div>Duration: 34:29 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-mcclim--elisp-and-mcclim--screwlisp--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-mcclim--elisp-and-mcclim--screwlisp--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-mcclim--elisp-and-mcclim--screwlisp--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-mcclim--elisp-and-mcclim--screwlisp--main.webm">Download --main.webm (110MB)</a></li><li><a href="https://toobnix.org/w/pfYUAuMPmkTRfBZSgXFtbT">View on Toobnix</a></li><li><a href="https://youtu.be/cuJ3qih7408">View on Youtube</a></li></ul></div></div>
# Q&A
-<div class="vid"><video controls preload="none" id="mcclim-qanda"><source src="https://media.emacsconf.org/2024/emacsconf-2024-mcclim--elisp-and-mcclim--screwlisp--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-mcclim--elisp-and-mcclim--screwlisp--answers.vtt" default />"""<track kind="chapters" label="Chapters" src="/2024/captions/emacsconf-2024-mcclim--elisp-and-mcclim--screwlisp--answers--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="mcclim-qanda" data="""
+<div class="vid qanda"><video controls preload="none" id="qanda-mcclim"><source src="https://media.emacsconf.org/2024/emacsconf-2024-mcclim--elisp-and-mcclim--screwlisp--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-mcclim--elisp-and-mcclim--screwlisp--answers.vtt" default />"""<track kind="chapters" label="Chapters" src="/2024/captions/emacsconf-2024-mcclim--elisp-and-mcclim--screwlisp--answers--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="qanda-mcclim" data="""
00:00.000 I would love to see the GUI interacting with the scheduling stuff
00:57.560 Q: Or any other GUI stuff you've worked on in the past that you'd be comfortable showing?
03:07.400 Lispy Gopher Show
@@ -28,6 +27,6 @@ Status: TO_CAPTION_QA
10:43.600 IELM
12:32.880 Q: Are we going to get a McCLIM LambdaMOO client?
-"""]]<div>Listen to just the audio:<br /><audio controls preload="none" id="mcclim-qanda-audio" src="https://media.emacsconf.org/2024/emacsconf-2024-mcclim--elisp-and-mcclim--screwlisp--answers.opus"></audio></div><div></div><div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2024-mcclim">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-mcclim--elisp-and-mcclim--screwlisp--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-mcclim--elisp-and-mcclim--screwlisp--answers.opus">Download --answers.opus (6.9MB)</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-mcclim--elisp-and-mcclim--screwlisp--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-mcclim--elisp-and-mcclim--screwlisp--answers.webm">Download --answers.webm (33MB)</a></li></ul></div></div>
+"""]]<div>Listen to just the audio:<br /><audio controls preload="none" id="qanda-mcclim-audio" src="https://media.emacsconf.org/2024/emacsconf-2024-mcclim--elisp-and-mcclim--screwlisp--answers.opus"></audio></div><div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-mcclim--elisp-and-mcclim--screwlisp--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-mcclim--elisp-and-mcclim--screwlisp--answers.opus">Download --answers.opus (6.9MB)</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-mcclim--elisp-and-mcclim--screwlisp--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-mcclim--elisp-and-mcclim--screwlisp--answers.webm">Download --answers.webm (33MB)</a></li><li><a href="https://www.youtube.com/watch?v=ot57sGD0XTg">View on Youtube</a></li></ul></div></div>
# Description
<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2024/info/open-mic-before.md b/2024/info/open-mic-before.md
index a1a591b4..3c50e1fa 100644
--- a/2024/info/open-mic-before.md
+++ b/2024/info/open-mic-before.md
@@ -1,14 +1,13 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
[[!toc ]]
Format: 41-min talk ; Q&A: BigBlueButton conference room
-Etherpad: <https://pad.emacsconf.org/2024-open-mic>
Status: TO_CAPTION_QA
-<div class="vid"><video controls preload="none" id="open-mic-mainVideo"><source src="https://media.emacsconf.org/2024/emacsconf-2024-open-mic--open-micpad-for-quick-updates-etc--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-open-mic--open-micpad-for-quick-updates-etc--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2024/captions/emacsconf-2024-open-mic--open-micpad-for-quick-updates-etc--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="open-mic-mainVideo" data="""
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-open-mic"><source src="https://media.emacsconf.org/2024/emacsconf-2024-open-mic--open-micpad-for-quick-updates-etc--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-open-mic--open-micpad-for-quick-updates-etc--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2024/captions/emacsconf-2024-open-mic--open-micpad-for-quick-updates-etc--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="mainVideo-open-mic" data="""
03:08.240 Vertico
05:58.720 which-key
06:46.080 eldoc
@@ -18,6 +17,6 @@ Status: TO_CAPTION_QA
19:00.280 org-web-tools
20:28.240 qutebrowser
-"""]]<div></div>Duration: 40:13 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2024-open-mic">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-open-mic--open-micpad-for-quick-updates-etc--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-open-mic--open-micpad-for-quick-updates-etc--main.vtt">Download --main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-open-mic--open-micpad-for-quick-updates-etc--main.webm">Download --main.webm (126MB)</a></li></ul></div></div>
+"""]]<div></div>Duration: 40:13 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-open-mic--open-micpad-for-quick-updates-etc--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-open-mic--open-micpad-for-quick-updates-etc--main.vtt">Download --main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-open-mic--open-micpad-for-quick-updates-etc--main.webm">Download --main.webm (126MB)</a></li></ul></div></div>
# Description
<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2024/info/org-update-after.md b/2024/info/org-update-after.md
index 65b01be7..9bfe0ff2 100644
--- a/2024/info/org-update-after.md
+++ b/2024/info/org-update-after.md
@@ -614,7 +614,7 @@
[[!template text="""If you don't like emails at all, you don't want to""" start="00:35:05.120" video="mainVideo-org-update" id="subtitle"]]
[[!template text="""participate in the mailing list, it's not ideal, but I can""" start="00:35:07.280" video="mainVideo-org-update" id="subtitle"]]
[[!template text="""still work with this. I am on IRC, I am on Matrix,""" start="00:35:11.880" video="mainVideo-org-update" id="subtitle"]]
-[[!template text="""you can ping me, it's yantar2.""" start="00:35:16.006" video="mainVideo-org-update" id="subtitle"]]
+[[!template text="""you can ping me, it's yantar92.""" start="00:35:16.006" video="mainVideo-org-update" id="subtitle"]]
[[!template text="""We also have monthly meetup,""" start="00:35:19.800" video="mainVideo-org-update" id="subtitle"]]
[[!template text="""so you can go and ask by voice,""" start="00:35:22.348" video="mainVideo-org-update" id="subtitle"]]
[[!template text="""we can just talk in person, discuss your ideas,""" start="00:35:23.988" video="mainVideo-org-update" id="subtitle"]]
diff --git a/2024/info/org-update-before.md b/2024/info/org-update-before.md
index 0bfb03fd..886b43b2 100644
--- a/2024/info/org-update-before.md
+++ b/2024/info/org-update-before.md
@@ -1,7 +1,6 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
[[!toc ]]
Format: 40-min talk ; Q&A: BigBlueButton conference room
-Etherpad: <https://pad.emacsconf.org/2024-org-update>
Status: TO_CAPTION_QA
@@ -10,7 +9,7 @@ Status: TO_CAPTION_QA
# Talk
-<div class="vid"><video controls preload="none" id="org-update-mainVideo"><source src="https://media.emacsconf.org/2024/emacsconf-2024-org-update--the-future-of-org--ihor-radchenko--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-org-update--the-future-of-org--ihor-radchenko--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2024/captions/emacsconf-2024-org-update--the-future-of-org--ihor-radchenko--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="org-update-mainVideo" data="""
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-org-update"><source src="https://media.emacsconf.org/2024/emacsconf-2024-org-update--the-future-of-org--ihor-radchenko--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-org-update--the-future-of-org--ihor-radchenko--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2024/captions/emacsconf-2024-org-update--the-future-of-org--ihor-radchenko--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="mainVideo-org-update" data="""
00:00.000 Introduction
01:14.280 Message from Bastien Guerry
03:15.920 My step-by-step journey to Org maintenance
@@ -40,11 +39,11 @@ Status: TO_CAPTION_QA
38:30.440 Got no free time, but still want to help?
39:12.997 Thank you
-"""]]<div></div>Duration: 39:35 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2024-org-update">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-org-update--the-future-of-org--ihor-radchenko--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-org-update--the-future-of-org--ihor-radchenko--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-org-update--the-future-of-org--ihor-radchenko--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-org-update--the-future-of-org--ihor-radchenko--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-org-update--the-future-of-org--ihor-radchenko--main.webm">Download --main.webm (88MB)</a></li><li><a href="https://toobnix.org/w/2DAHY6wCAXnpeSqwUHaidv">View on Toobnix</a></li></ul></div></div>
+"""]]<div></div>Duration: 39:35 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2024-org-update">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-org-update--the-future-of-org--ihor-radchenko--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-org-update--the-future-of-org--ihor-radchenko--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-org-update--the-future-of-org--ihor-radchenko--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-org-update--the-future-of-org--ihor-radchenko--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-org-update--the-future-of-org--ihor-radchenko--main.webm">Download --main.webm (88MB)</a></li><li><a href="https://toobnix.org/w/2DAHY6wCAXnpeSqwUHaidv">View on Toobnix</a></li><li><a href="https://youtu.be/2RJYcqJsldY">View on Youtube</a></li></ul></div></div>
# Q&A
-<div class="vid"><video controls preload="none" id="org-update-qanda"><source src="https://media.emacsconf.org/2024/emacsconf-2024-org-update--the-future-of-org--ihor-radchenko--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-org-update--the-future-of-org--ihor-radchenko--answers.vtt" default />"""<track kind="chapters" label="Chapters" src="/2024/captions/emacsconf-2024-org-update--the-future-of-org--ihor-radchenko--answers--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="org-update-qanda" data="""
+<div class="vid qanda"><video controls preload="none" id="qanda-org-update"><source src="https://media.emacsconf.org/2024/emacsconf-2024-org-update--the-future-of-org--ihor-radchenko--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-org-update--the-future-of-org--ihor-radchenko--answers.vtt" default />"""<track kind="chapters" label="Chapters" src="/2024/captions/emacsconf-2024-org-update--the-future-of-org--ihor-radchenko--answers--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="qanda-org-update" data="""
01:42.686 Q: Is the track-changes item about the org-element parser?
02:52.665 Q: Could you please keep IRC alive? I prefer it to Matrix
04:07.988 Q: Is there any plan for adding support for other modalities of notes like handwritten,  audio, etc.?
@@ -55,6 +54,6 @@ Status: TO_CAPTION_QA
26:08.840 microemacs
29:31.920 Q: Is there/could there be a resource with which to recommend particularly well written codebases for review by others?
-"""]]<div>Listen to just the audio:<br /><audio controls preload="none" id="org-update-qanda-audio" src="https://media.emacsconf.org/2024/emacsconf-2024-org-update--the-future-of-org--ihor-radchenko--answers.opus"></audio></div><div></div>Duration: 30:39 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2024-org-update">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-org-update--the-future-of-org--ihor-radchenko--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-org-update--the-future-of-org--ihor-radchenko--answers.opus">Download --answers.opus (16MB)</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-org-update--the-future-of-org--ihor-radchenko--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-org-update--the-future-of-org--ihor-radchenko--answers.webm">Download --answers.webm (68MB)</a></li></ul></div></div>
+"""]]<div>Listen to just the audio:<br /><audio controls preload="none" id="qanda-org-update-audio" src="https://media.emacsconf.org/2024/emacsconf-2024-org-update--the-future-of-org--ihor-radchenko--answers.opus"></audio></div><div></div>Duration: 30:39 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2024-org-update">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-org-update--the-future-of-org--ihor-radchenko--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-org-update--the-future-of-org--ihor-radchenko--answers.opus">Download --answers.opus (16MB)</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-org-update--the-future-of-org--ihor-radchenko--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-org-update--the-future-of-org--ihor-radchenko--answers.webm">Download --answers.webm (68MB)</a></li><li><a href="https://toobnix.org/w/jXXgJdCBjM6C1MFqrmqFtQ">View on Toobnix</a></li><li><a href="https://www.youtube.com/watch?v=lqeOvzeYrd0">View on Youtube</a></li></ul></div></div>
# Description
<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2024/info/p-search-before.md b/2024/info/p-search-before.md
index a09c23c8..fc7c8c39 100644
--- a/2024/info/p-search-before.md
+++ b/2024/info/p-search-before.md
@@ -1,7 +1,6 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
[[!toc ]]
Format: 23-min talk ; Q&A: BigBlueButton conference room
-Etherpad: <https://pad.emacsconf.org/2024-p-search>
Status: TO_CAPTION_QA
@@ -10,7 +9,7 @@ Status: TO_CAPTION_QA
# Talk
-<div class="vid"><video controls preload="none" id="p-search-mainVideo"><source src="https://media.emacsconf.org/2024/emacsconf-2024-p-search--psearch-a-local-search-engine-in-emacs--zac-romero--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-p-search--psearch-a-local-search-engine-in-emacs--zac-romero--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2024/captions/emacsconf-2024-p-search--psearch-a-local-search-engine-in-emacs--zac-romero--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="p-search-mainVideo" data="""
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-p-search"><source src="https://media.emacsconf.org/2024/emacsconf-2024-p-search--psearch-a-local-search-engine-in-emacs--zac-romero--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-p-search--psearch-a-local-search-engine-in-emacs--zac-romero--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2024/captions/emacsconf-2024-p-search--psearch-a-local-search-engine-in-emacs--zac-romero--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="mainVideo-p-search" data="""
00:00.000 Search in daily workflows
01:24.200 Problems with editor search tools
03:58.233 Information retrieval
@@ -24,11 +23,11 @@ Status: TO_CAPTION_QA
20:40.405 Importance
21:38.560 Complement or inverse
-"""]]<div></div>Duration: 22:42 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2024-p-search">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-p-search--psearch-a-local-search-engine-in-emacs--zac-romero--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-p-search--psearch-a-local-search-engine-in-emacs--zac-romero--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-p-search--psearch-a-local-search-engine-in-emacs--zac-romero--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-p-search--psearch-a-local-search-engine-in-emacs--zac-romero--main.webm">Download --main.webm (63MB)</a></li><li><a href="https://toobnix.org/w/5dxttHedexYoCLxpT4VyMT">View on Toobnix</a></li></ul></div></div>
+"""]]<div></div>Duration: 22:42 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-p-search--psearch-a-local-search-engine-in-emacs--zac-romero--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-p-search--psearch-a-local-search-engine-in-emacs--zac-romero--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-p-search--psearch-a-local-search-engine-in-emacs--zac-romero--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-p-search--psearch-a-local-search-engine-in-emacs--zac-romero--main.webm">Download --main.webm (63MB)</a></li><li><a href="https://toobnix.org/w/5dxttHedexYoCLxpT4VyMT">View on Toobnix</a></li><li><a href="https://youtu.be/WwgqbT2rnHI">View on Youtube</a></li></ul></div></div>
# Q&A
-<div class="vid"><video controls preload="none" id="p-search-qanda"><source src="https://media.emacsconf.org/2024/emacsconf-2024-p-search--psearch-a-local-search-engine-in-emacs--zac-romero--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-p-search--psearch-a-local-search-engine-in-emacs--zac-romero--answers.vtt" default />"""<track kind="chapters" label="Chapters" src="/2024/captions/emacsconf-2024-p-search--psearch-a-local-search-engine-in-emacs--zac-romero--answers--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="p-search-qanda" data="""
+<div class="vid qanda"><video controls preload="none" id="qanda-p-search"><source src="https://media.emacsconf.org/2024/emacsconf-2024-p-search--psearch-a-local-search-engine-in-emacs--zac-romero--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-p-search--psearch-a-local-search-engine-in-emacs--zac-romero--answers.vtt" default />"""<track kind="chapters" label="Chapters" src="/2024/captions/emacsconf-2024-p-search--psearch-a-local-search-engine-in-emacs--zac-romero--answers--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="qanda-p-search" data="""
00:22.970 Q: Do you think a reduced version of this functionality could be integrated into isearch?
02:45.360 Q: Any idea how this would work with personal information like Zettlekastens?
04:22.041 Q: How good does the search work for synonyms especially if you use different languages?
@@ -54,6 +53,6 @@ Status: TO_CAPTION_QA
40:04.120 Q: Do you think the Emacs being kinda slow will get in the way of being able to run a lot of scoring algorithms?
43:08.640 Boundary conditions
-"""]]<div>Listen to just the audio:<br /><audio controls preload="none" id="p-search-qanda-audio" src="https://media.emacsconf.org/2024/emacsconf-2024-p-search--psearch-a-local-search-engine-in-emacs--zac-romero--answers.opus"></audio></div><div></div><div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2024-p-search">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-p-search--psearch-a-local-search-engine-in-emacs--zac-romero--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-p-search--psearch-a-local-search-engine-in-emacs--zac-romero--answers.opus">Download --answers.opus (25MB)</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-p-search--psearch-a-local-search-engine-in-emacs--zac-romero--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-p-search--psearch-a-local-search-engine-in-emacs--zac-romero--answers.webm">Download --answers.webm (87MB)</a></li></ul></div></div>
+"""]]<div>Listen to just the audio:<br /><audio controls preload="none" id="qanda-p-search-audio" src="https://media.emacsconf.org/2024/emacsconf-2024-p-search--psearch-a-local-search-engine-in-emacs--zac-romero--answers.opus"></audio></div><div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-p-search--psearch-a-local-search-engine-in-emacs--zac-romero--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-p-search--psearch-a-local-search-engine-in-emacs--zac-romero--answers.opus">Download --answers.opus (25MB)</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-p-search--psearch-a-local-search-engine-in-emacs--zac-romero--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-p-search--psearch-a-local-search-engine-in-emacs--zac-romero--answers.webm">Download --answers.webm (87MB)</a></li><li><a href="https://toobnix.org/w/sh5Qns9GeqHwFwbTEMhckh">View on Toobnix</a></li><li><a href="https://www.youtube.com/watch?v=BrT0tlyUgMk">View on Youtube</a></li></ul></div></div>
# Description
<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2024/info/papers-after.md b/2024/info/papers-after.md
index fa3043b2..667c8553 100644
--- a/2024/info/papers-after.md
+++ b/2024/info/papers-after.md
@@ -177,22 +177,25 @@ Captioner: sachac
<div class="transcript transcript-qanda"><a name="papers-qanda-transcript"></a><h1>Q&A transcript (unedited)</h1>
-[[!template text="""mentally over the next couple of days, but I can assure you""" start="00:00:00.000" video="qanda-papers" id="subtitle"]]
-[[!template text="""that it will be many organizers in the background also""" start="00:00:04.640" video="qanda-papers" id="subtitle"]]
+[[!template text="""... mentally over the next couple of days, but I can assure you""" start="00:00:00.000" video="qanda-papers" id="subtitle"]]
+[[!template text="""that it will be many organizers in the background also""" start="00:00:03.668" video="qanda-papers" id="subtitle"]]
[[!template text="""working. You'll probably get to see us later on. But for now,""" start="00:00:06.760" video="qanda-papers" id="subtitle"]]
-[[!template text="""without further ado, I want to say hi to Vincent. Hi,""" start="00:00:10.200" video="qanda-papers" id="subtitle"]]
-[[!template text="""Vincent. Hi, thanks for having me. Yeah, and thanks for""" start="00:00:13.640" video="qanda-papers" id="subtitle"]]
-[[!template text="""coming and thanks for presenting. I mean, you didn't decide""" start="00:00:19.040" video="qanda-papers" id="subtitle"]]
-[[!template text="""to go first. It's mostly the time zone for you which decided""" start="00:00:22.920" video="qanda-papers" id="subtitle"]]
-[[!template text="""for you because I believe you are in Japan, correctly. Yeah,""" start="00:00:25.640" video="qanda-papers" id="subtitle"]]
+[[!template text="""without further ado, I want to say hi to Vincent.""" start="00:00:10.200" video="qanda-papers" id="subtitle"]]
+[[!template text="""Hi, Vincent.""" start="00:00:12.776" video="qanda-papers" id="subtitle"]]
+[[!template text="""Hi, thanks for having me.""" start="00:00:15.418" video="qanda-papers" id="subtitle"]]
+[[!template text="""Yeah, and thanks for""" start="00:00:17.459" video="qanda-papers" id="subtitle"]]
+[[!template text="""coming and thanks for presenting. I mean, you didn't decide""" start="00:00:18.140" video="qanda-papers" id="subtitle"]]
+[[!template text="""to go first. It's mostly the time zone for you which decided""" start="00:00:22.942" video="qanda-papers" id="subtitle"]]
+[[!template text="""for you because I believe you are in Japan, correctly. Yeah,""" start="00:00:25.724" video="qanda-papers" id="subtitle"]]
[[!template text="""exactly. So I'm living there now and it's very late. It's""" start="00:00:28.920" video="qanda-papers" id="subtitle"]]
[[!template text="""really funny to see everyone saying good morning in the""" start="00:00:33.040" video="qanda-papers" id="subtitle"]]
[[!template text="""chat. It's always the same for me. So personally, I'm in""" start="00:00:37.320" video="qanda-papers" id="subtitle"]]
[[!template text="""France. So for me, it's only 3 p.m. For you, it's probably 9 or""" start="00:00:39.960" video="qanda-papers" id="subtitle"]]
[[!template text="""10 p.m. if I'm correct. Already 11 here, yeah. It's already""" start="00:00:43.960" video="qanda-papers" id="subtitle"]]
-[[!template text="""11, so thank you for staying up so late for us. And how about we""" start="00:00:47.960" video="qanda-papers" id="subtitle"]]
-[[!template text="""just get started with the questions because you've just""" start="00:00:53.520" video="qanda-papers" id="subtitle"]]
-[[!template text="""presented something that is very dear to my heart, which is""" start="00:00:55.640" video="qanda-papers" id="subtitle"]]
+[[!template text="""11, so thank you for staying up so late for us.""" start="00:00:47.960" video="qanda-papers" id="subtitle"]]
+[[!template text="""And how about we just get started with the questions""" start="00:00:51.679" video="qanda-papers" id="subtitle"]]
+[[!template text="""because you've just presented something""" start="00:00:55.182" video="qanda-papers" id="subtitle"]]
+[[!template text="""that is very dear to my heart, which is""" start="00:00:56.522" video="qanda-papers" id="subtitle"]]
[[!template text="""writing academic paper with Org Mode, which is, for the""" start="00:00:59.240" video="qanda-papers" id="subtitle"]]
[[!template text="""record, how I got started with Org Roam and stuff like this.""" start="00:01:01.960" video="qanda-papers" id="subtitle"]]
[[!template text="""So, unless you've got anything else to add on top of your""" start="00:01:05.280" video="qanda-papers" id="subtitle"]]
@@ -243,9 +246,9 @@ Captioner: sachac
[[!template text="""hand in Emacs.""" start="00:04:10.160" video="qanda-papers" id="subtitle"]]
[[!template text="""I was just going to add something because you know""" start="00:04:12.960" video="qanda-papers" id="subtitle"]]
[[!template text="""org-roam-bibtex is actually one of the packages that I""" start="00:04:16.160" video="qanda-papers" id="subtitle"]]
-[[!template text="""developed and I got it working with Zotero because for me it""" start="00:04:20.920" video="qanda-papers" id="subtitle"]]
-[[!template text="""was convenient. I was studying humanities and for me it was""" start="00:04:25.280" video="qanda-papers" id="subtitle"]]
-[[!template text="""very easy to connect reference taken in my browser with""" start="00:04:28.840" video="qanda-papers" id="subtitle"]]
+[[!template text="""developed and I got it working with Zotero because for me it""" start="00:04:19.025" video="qanda-papers" id="subtitle"]]
+[[!template text="""was convenient. I was studying humanities and for me it was""" start="00:04:25.400" video="qanda-papers" id="subtitle"]]
+[[!template text="""very easy to connect reference taken in my browser with""" start="00:04:28.525" video="qanda-papers" id="subtitle"]]
[[!template text="""Zotero and just post-processing them a little bit but it is""" start="00:04:32.600" video="qanda-papers" id="subtitle"]]
[[!template text="""possible to make org-roam, org-roam-bibtex and Zotero""" start="00:04:36.800" video="qanda-papers" id="subtitle"]]
[[!template text="""work together. But it's a little bit of an involved process to""" start="00:04:40.280" video="qanda-papers" id="subtitle"]]
@@ -327,21 +330,21 @@ Captioner: sachac
[[!template text="""answer is no. That's mostly what I was presenting in the""" start="00:09:38.200" video="qanda-papers" id="subtitle"]]
[[!template text="""slide.""" start="00:09:43.240" video="qanda-papers" id="subtitle"]]
[[!template text="""Actually, that's also why I made the presentation, because""" start="00:09:44.280" video="qanda-papers" id="subtitle"]]
-[[!template text="""if someone has a solution, I would gladly take it. No, the way""" start="00:09:50.840" video="qanda-papers" id="subtitle"]]
-[[!template text="""I do it is that I have to add a I don't have that on top of my head.""" start="00:09:59.760" video="qanda-papers" id="subtitle"]]
-[[!template text="""plus. Yeah, exactly. So I just make a custom class with the""" start="00:10:05.080" video="qanda-papers" id="subtitle"]]
-[[!template text="""name of the latex template. In general, I think people use""" start="00:10:10.600" video="qanda-papers" id="subtitle"]]
+[[!template text="""if someone has a solution, I would gladly take it. No, the way""" start="00:09:48.001" video="qanda-papers" id="subtitle"]]
+[[!template text="""I do it is that I have to add a... I don't have that on top of my head.""" start="00:09:51.941" video="qanda-papers" id="subtitle"]]
+[[!template text="""plus. Yeah, exactly. So I just make a custom org-latex class with the""" start="00:09:57.501" video="qanda-papers" id="subtitle"]]
+[[!template text="""name of the latex template. In general, I think people use""" start="00:10:09.583" video="qanda-papers" id="subtitle"]]
[[!template text="""that to redefine like stuff like section and subsection,""" start="00:10:16.160" video="qanda-papers" id="subtitle"]]
[[!template text="""but for me, I just, it shows in the slide where I just map the""" start="00:10:19.360" video="qanda-papers" id="subtitle"]]
[[!template text="""section to the same section. I just changed the name of the""" start="00:10:24.280" video="qanda-papers" id="subtitle"]]
[[!template text="""class. And this way it allows to import the, the CLS and then""" start="00:10:27.240" video="qanda-papers" id="subtitle"]]
-[[!template text="""the rest is just like putting the tech template that is""" start="00:10:33.720" video="qanda-papers" id="subtitle"]]
+[[!template text="""the rest is just like putting the TeX template that is""" start="00:10:33.720" video="qanda-papers" id="subtitle"]]
[[!template text="""provided either in headers, in LaTeX headers at the top or""" start="00:10:39.080" video="qanda-papers" id="subtitle"]]
[[!template text="""Yeah, or just on a LaTeX block in the body of the document if""" start="00:10:48.520" video="qanda-papers" id="subtitle"]]
[[!template text="""that's needed, for example, for the acknowledgement.""" start="00:10:56.080" video="qanda-papers" id="subtitle"]]
[[!template text="""Sometimes they need some different formatting, but no,""" start="00:11:02.040" video="qanda-papers" id="subtitle"]]
[[!template text="""it's not really easy because it needs to modify some""" start="00:11:05.760" video="qanda-papers" id="subtitle"]]
-[[!template text="""configuration in Unix to do that. Then after that, a little""" start="00:11:09.080" video="qanda-papers" id="subtitle"]]
+[[!template text="""configuration in Emacs to do that. Then after that, a little""" start="00:11:09.080" video="qanda-papers" id="subtitle"]]
[[!template text="""bit like manually adapt the templates into your org notes.""" start="00:11:12.360" video="qanda-papers" id="subtitle"]]
[[!template text="""So that's a little bit some upfront work to do. But once it's""" start="00:11:15.720" video="qanda-papers" id="subtitle"]]
[[!template text="""done, your notes are going to be exported exactly like the""" start="00:11:18.800" video="qanda-papers" id="subtitle"]]
diff --git a/2024/info/papers-before.md b/2024/info/papers-before.md
index 4c3292b8..46876d15 100644
--- a/2024/info/papers-before.md
+++ b/2024/info/papers-before.md
@@ -1,7 +1,6 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
[[!toc ]]
Format: 11-min talk ; Q&A: BigBlueButton conference room
-Etherpad: <https://pad.emacsconf.org/2024-papers>
Status: TO_CAPTION_QA
@@ -10,7 +9,7 @@ Status: TO_CAPTION_QA
# Talk
-<div class="vid"><video controls preload="none" id="papers-mainVideo"><source src="https://media.emacsconf.org/2024/emacsconf-2024-papers--writing-academic-papers-in-orgroam--vincent-conus--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-papers--writing-academic-papers-in-orgroam--vincent-conus--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2024/captions/emacsconf-2024-papers--writing-academic-papers-in-orgroam--vincent-conus--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="papers-mainVideo" data="""
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-papers"><source src="https://media.emacsconf.org/2024/emacsconf-2024-papers--writing-academic-papers-in-orgroam--vincent-conus--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-papers--writing-academic-papers-in-orgroam--vincent-conus--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2024/captions/emacsconf-2024-papers--writing-academic-papers-in-orgroam--vincent-conus--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="mainVideo-papers" data="""
00:00.000 Introduction
00:20.130 What?
01:21.377 Why?
@@ -24,11 +23,11 @@ Status: TO_CAPTION_QA
07:09.720 Examples
07:41.240 Tags
-"""]]<div></div>Duration: 10:07 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2024-papers">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-papers--writing-academic-papers-in-orgroam--vincent-conus--images.zip">Download --images.zip</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-papers--writing-academic-papers-in-orgroam--vincent-conus--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-papers--writing-academic-papers-in-orgroam--vincent-conus--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-papers--writing-academic-papers-in-orgroam--vincent-conus--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-papers--writing-academic-papers-in-orgroam--vincent-conus--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-papers--writing-academic-papers-in-orgroam--vincent-conus--main.webm">Download --main.webm (35MB)</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-papers--writing-academic-papers-in-orgroam--vincent-conus--slides.org">Download --slides.org</a></li><li><a href="https://toobnix.org/w/9LYtH8MWCMZ7N4DNteys17">View on Toobnix</a></li></ul></div></div>
+"""]]<div></div>Duration: 10:07 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-papers--writing-academic-papers-in-orgroam--vincent-conus--images.zip">Download --images.zip</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-papers--writing-academic-papers-in-orgroam--vincent-conus--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-papers--writing-academic-papers-in-orgroam--vincent-conus--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-papers--writing-academic-papers-in-orgroam--vincent-conus--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-papers--writing-academic-papers-in-orgroam--vincent-conus--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-papers--writing-academic-papers-in-orgroam--vincent-conus--main.webm">Download --main.webm (35MB)</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-papers--writing-academic-papers-in-orgroam--vincent-conus--slides.org">Download --slides.org</a></li><li><a href="https://toobnix.org/w/9LYtH8MWCMZ7N4DNteys17">View on Toobnix</a></li><li><a href="https://youtu.be/BKQcgpZS2GM">View on Youtube</a></li></ul></div></div>
# Q&A
-<div class="vid"><video controls preload="none" id="papers-qanda"><source src="https://media.emacsconf.org/2024/emacsconf-2024-papers--writing-academic-papers-in-orgroam--vincent-conus--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-papers--writing-academic-papers-in-orgroam--vincent-conus--answers.vtt" default />"""<track kind="chapters" label="Chapters" src="/2024/captions/emacsconf-2024-papers--writing-academic-papers-in-orgroam--vincent-conus--answers--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="papers-qanda" data="""
+<div class="vid qanda"><video controls preload="none" id="qanda-papers"><source src="https://media.emacsconf.org/2024/emacsconf-2024-papers--writing-academic-papers-in-orgroam--vincent-conus--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-papers--writing-academic-papers-in-orgroam--vincent-conus--answers.vtt" default />"""<track kind="chapters" label="Chapters" src="/2024/captions/emacsconf-2024-papers--writing-academic-papers-in-orgroam--vincent-conus--answers--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="qanda-papers" data="""
01:23.160 Q: I'd be interested how to start this journey of writing academic papers in Org-Roam when not having used Emacs Org-Mode yet? Thanks!
02:35.840 Q: How about connecting Emacs Org-Roam to Zotero? Is that something you have experience with?
02:55.600 Q: Out of curiosity, how do you manage your bibliography? Do you do it from inside Emacs, or using a separate program like Zotero?
@@ -38,6 +37,6 @@ Status: TO_CAPTION_QA
14:21.160 Q: Are you using zotra or org-ref?
14:45.120 Q: How much of this is tied to org-roam specifically?
-"""]]<div>Listen to just the audio:<br /><audio controls preload="none" id="papers-qanda-audio" src="https://media.emacsconf.org/2024/emacsconf-2024-papers--writing-academic-papers-in-orgroam--vincent-conus--answers.opus"></audio></div><div></div>Duration: 19:01 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2024-papers">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-papers--writing-academic-papers-in-orgroam--vincent-conus--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-papers--writing-academic-papers-in-orgroam--vincent-conus--answers.opus">Download --answers.opus (9.9MB)</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-papers--writing-academic-papers-in-orgroam--vincent-conus--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-papers--writing-academic-papers-in-orgroam--vincent-conus--answers.webm">Download --answers.webm (34MB)</a></li></ul></div></div>
+"""]]<div>Listen to just the audio:<br /><audio controls preload="none" id="qanda-papers-audio" src="https://media.emacsconf.org/2024/emacsconf-2024-papers--writing-academic-papers-in-orgroam--vincent-conus--answers.opus"></audio></div><div></div>Duration: 19:01 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-papers--writing-academic-papers-in-orgroam--vincent-conus--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-papers--writing-academic-papers-in-orgroam--vincent-conus--answers.opus">Download --answers.opus (9.9MB)</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-papers--writing-academic-papers-in-orgroam--vincent-conus--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-papers--writing-academic-papers-in-orgroam--vincent-conus--answers.webm">Download --answers.webm (34MB)</a></li><li><a href="https://toobnix.org/w/tC5hnamhUC8PJrrMdXsLXJ">View on Toobnix</a></li><li><a href="https://youtu.be/ujUX4vC5TKg">View on Youtube</a></li></ul></div></div>
# Description
<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2024/info/pgmacs-before.md b/2024/info/pgmacs-before.md
index d6373c55..1770f8ee 100644
--- a/2024/info/pgmacs-before.md
+++ b/2024/info/pgmacs-before.md
@@ -1,7 +1,6 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
[[!toc ]]
Format: 14-min talk ; Q&A: BigBlueButton conference room
-Etherpad: <https://pad.emacsconf.org/2024-pgmacs>
Status: TO_CAPTION_QA
@@ -10,7 +9,7 @@ Status: TO_CAPTION_QA
# Talk
-<div class="vid"><video controls preload="none" id="pgmacs-mainVideo"><source src="https://media.emacsconf.org/2024/emacsconf-2024-pgmacs--pgmacs-browsing-and-editing-postgresql-databases-from-emacs--eric-marsden--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-pgmacs--pgmacs-browsing-and-editing-postgresql-databases-from-emacs--eric-marsden--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2024/captions/emacsconf-2024-pgmacs--pgmacs-browsing-and-editing-postgresql-databases-from-emacs--eric-marsden--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="pgmacs-mainVideo" data="""
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-pgmacs"><source src="https://media.emacsconf.org/2024/emacsconf-2024-pgmacs--pgmacs-browsing-and-editing-postgresql-databases-from-emacs--eric-marsden--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-pgmacs--pgmacs-browsing-and-editing-postgresql-databases-from-emacs--eric-marsden--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2024/captions/emacsconf-2024-pgmacs--pgmacs-browsing-and-editing-postgresql-databases-from-emacs--eric-marsden--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="mainVideo-pgmacs" data="""
00:01.260 Introduction
01:26.710 Demo
03:53.960 Deletion
@@ -23,11 +22,11 @@ Status: TO_CAPTION_QA
09:36.250 Extending pgmacs
11:49.400 Conclusion
-"""]]<div></div>Duration: 13:17 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2024-pgmacs">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-pgmacs--pgmacs-browsing-and-editing-postgresql-databases-from-emacs--eric-marsden--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-pgmacs--pgmacs-browsing-and-editing-postgresql-databases-from-emacs--eric-marsden--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-pgmacs--pgmacs-browsing-and-editing-postgresql-databases-from-emacs--eric-marsden--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-pgmacs--pgmacs-browsing-and-editing-postgresql-databases-from-emacs--eric-marsden--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-pgmacs--pgmacs-browsing-and-editing-postgresql-databases-from-emacs--eric-marsden--main.webm">Download --main.webm (43MB)</a></li></ul></div></div>
+"""]]<div></div>Duration: 13:17 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-pgmacs--pgmacs-browsing-and-editing-postgresql-databases-from-emacs--eric-marsden--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-pgmacs--pgmacs-browsing-and-editing-postgresql-databases-from-emacs--eric-marsden--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-pgmacs--pgmacs-browsing-and-editing-postgresql-databases-from-emacs--eric-marsden--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-pgmacs--pgmacs-browsing-and-editing-postgresql-databases-from-emacs--eric-marsden--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-pgmacs--pgmacs-browsing-and-editing-postgresql-databases-from-emacs--eric-marsden--main.webm">Download --main.webm (43MB)</a></li><li><a href="https://youtu.be/BLs9gc_MLh0">View on Youtube</a></li></ul></div></div>
# Q&A
-<div class="vid"><video controls preload="none" id="pgmacs-qanda"><source src="https://media.emacsconf.org/2024/emacsconf-2024-pgmacs--pgmacs-browsing-and-editing-postgresql-databases-from-emacs--eric-marsden--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-pgmacs--pgmacs-browsing-and-editing-postgresql-databases-from-emacs--eric-marsden--answers.vtt" default />"""<track kind="chapters" label="Chapters" src="/2024/captions/emacsconf-2024-pgmacs--pgmacs-browsing-and-editing-postgresql-databases-from-emacs--eric-marsden--answers--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="pgmacs-qanda" data="""
+<div class="vid qanda"><video controls preload="none" id="qanda-pgmacs"><source src="https://media.emacsconf.org/2024/emacsconf-2024-pgmacs--pgmacs-browsing-and-editing-postgresql-databases-from-emacs--eric-marsden--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-pgmacs--pgmacs-browsing-and-editing-postgresql-databases-from-emacs--eric-marsden--answers.vtt" default />"""<track kind="chapters" label="Chapters" src="/2024/captions/emacsconf-2024-pgmacs--pgmacs-browsing-and-editing-postgresql-databases-from-emacs--eric-marsden--answers--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="qanda-pgmacs" data="""
02:37.440 Q: Do you know if PGmacs works with TRAMP?
04:38.240 Q: How did you come up with this brilliant idea?
09:26.920 TRAMP continued
@@ -36,6 +35,6 @@ Status: TO_CAPTION_QA
16:53.850 Q: What do you use for the in-buffer tables? Vtable?
18:16.640 Integrating with Emacs 30?
-"""]]<div>Listen to just the audio:<br /><audio controls preload="none" id="pgmacs-qanda-audio" src="https://media.emacsconf.org/2024/emacsconf-2024-pgmacs--pgmacs-browsing-and-editing-postgresql-databases-from-emacs--eric-marsden--answers.opus"></audio></div><div></div>Duration: 20:02 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2024-pgmacs">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-pgmacs--pgmacs-browsing-and-editing-postgresql-databases-from-emacs--eric-marsden--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-pgmacs--pgmacs-browsing-and-editing-postgresql-databases-from-emacs--eric-marsden--answers.opus">Download --answers.opus (12MB)</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-pgmacs--pgmacs-browsing-and-editing-postgresql-databases-from-emacs--eric-marsden--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-pgmacs--pgmacs-browsing-and-editing-postgresql-databases-from-emacs--eric-marsden--answers.webm">Download --answers.webm (38MB)</a></li></ul></div></div>
+"""]]<div>Listen to just the audio:<br /><audio controls preload="none" id="qanda-pgmacs-audio" src="https://media.emacsconf.org/2024/emacsconf-2024-pgmacs--pgmacs-browsing-and-editing-postgresql-databases-from-emacs--eric-marsden--answers.opus"></audio></div><div></div>Duration: 20:02 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-pgmacs--pgmacs-browsing-and-editing-postgresql-databases-from-emacs--eric-marsden--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-pgmacs--pgmacs-browsing-and-editing-postgresql-databases-from-emacs--eric-marsden--answers.opus">Download --answers.opus (12MB)</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-pgmacs--pgmacs-browsing-and-editing-postgresql-databases-from-emacs--eric-marsden--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-pgmacs--pgmacs-browsing-and-editing-postgresql-databases-from-emacs--eric-marsden--answers.webm">Download --answers.webm (38MB)</a></li><li><a href="https://toobnix.org/w/6nLCiZDJECF1uP9fc54gJQ">View on Toobnix</a></li><li><a href="https://www.youtube.com/watch?v=RBS-A-2EboQ">View on Youtube</a></li></ul></div></div>
# Description
<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2024/info/project-after.md b/2024/info/project-after.md
index fe5e7e55..14447599 100644
--- a/2024/info/project-after.md
+++ b/2024/info/project-after.md
@@ -430,7 +430,7 @@ Captioner: sachac
[[!template text="""I'll switch over to the writing log for the project B, and""" start="00:08:42.360" video="qanda-project" id="subtitle"]]
[[!template text="""I'll go to the diary section at the beginning. I'll make a""" start="00:08:48.000" video="qanda-project" id="subtitle"]]
[[!template text="""little to-do list and maybe look at the prior entry in the""" start="00:08:51.360" video="qanda-project" id="subtitle"]]
-[[!template text="""diary if I need to reboot my memory. And then I'll move on to""" start="00:08:57.280" video="qanda-project" id="subtitle"]]
+[[!template text="""diary if I need to reboot my memory. And then I'll move on to""" start="00:08:59.334" video="qanda-project" id="subtitle"]]
[[!template text="""the manuscript and go for 90 minutes or two hours.""" start="00:09:03.200" video="qanda-project" id="subtitle"]]
[[!template text="""Generally, you're only good for somewhere between four and""" start="00:09:07.920" video="qanda-project" id="subtitle"]]
[[!template text="""a half, five and a half hours. If you try to write in a""" start="00:09:12.480" video="qanda-project" id="subtitle"]]
@@ -445,7 +445,7 @@ Captioner: sachac
[[!template text="""also to on my work as a developer and it's funny how you refer""" start="00:09:48.920" video="qanda-project" id="subtitle"]]
[[!template text="""to your ability to think about something in very similar""" start="00:09:53.720" video="qanda-project" id="subtitle"]]
[[!template text="""terms to how a computer would think about something. You've""" start="00:09:57.000" video="qanda-project" id="subtitle"]]
-[[!template text="""mentioned in your presentation the cost of context""" start="00:09:59.400" video="qanda-project" id="subtitle"]]
+[[!template text="""mentioned in your presentation the cost of context""" start="00:09:59.833" video="qanda-project" id="subtitle"]]
[[!template text="""switching between different things but it's also""" start="00:10:02.400" video="qanda-project" id="subtitle"]]
[[!template text="""something that we use in computing when a processor needs to""" start="00:10:04.920" video="qanda-project" id="subtitle"]]
[[!template text="""be thinking about something else, well, it has a cost. And""" start="00:10:08.120" video="qanda-project" id="subtitle"]]
@@ -473,9 +473,9 @@ Captioner: sachac
[[!template text="""try to prime my mind about project B, or I might still have""" start="00:11:40.560" video="qanda-project" id="subtitle"]]
[[!template text="""ideas that are flowing about project A. And I'll record""" start="00:11:44.800" video="qanda-project" id="subtitle"]]
[[!template text="""those in the digital voice recorder. And then when I get to""" start="00:11:48.200" video="qanda-project" id="subtitle"]]
-[[!template text="""the lab, I'll transfer the audio file to my computer, and""" start="00:11:51.440" video="qanda-project" id="subtitle"]]
-[[!template text="""I'll transcribe it using a whisper. So I've set up some""" start="00:11:54.600" video="qanda-project" id="subtitle"]]
-[[!template text="""Python scripts and bash functions to go through and I""" start="00:12:00.160" video="qanda-project" id="subtitle"]]
+[[!template text="""the lab, I'll transfer the audio file to my computer, and""" start="00:11:50.983" video="qanda-project" id="subtitle"]]
+[[!template text="""I'll transcribe it using Whisper. So I've set up some""" start="00:11:54.442" video="qanda-project" id="subtitle"]]
+[[!template text="""Python scripts and bash functions to go through and I""" start="00:12:00.067" video="qanda-project" id="subtitle"]]
[[!template text="""convert all the sentences into one sentence per line""" start="00:12:03.760" video="qanda-project" id="subtitle"]]
[[!template text="""because that's the way I like to write and edit things. And so""" start="00:12:11.000" video="qanda-project" id="subtitle"]]
[[!template text="""it does all this pre-processing for me. And I have this""" start="00:12:16.360" video="qanda-project" id="subtitle"]]
@@ -487,9 +487,10 @@ Captioner: sachac
[[!template text="""when I'm teaching, when I'm in seminar, other committee""" start="00:12:47.960" video="qanda-project" id="subtitle"]]
[[!template text="""meetings, traveling, then I'll capture ideas on paper. I""" start="00:12:53.040" video="qanda-project" id="subtitle"]]
[[!template text="""don't have a cell phone. I'm trying to be the last human on""" start="00:12:58.360" video="qanda-project" id="subtitle"]]
-[[!template text="""earth without a cell phone. I think I would be so distracted""" start="00:13:02.400" video="qanda-project" id="subtitle"]]
-[[!template text="""by a cell phone. Worst person on the planet, I would be""" start="00:13:07.360" video="qanda-project" id="subtitle"]]
-[[!template text="""totally focused on my cell phone if I had one. So I'm like one""" start="00:13:12.720" video="qanda-project" id="subtitle"]]
+[[!template text="""earth without a cell phone. I think I would be so distracted""" start="00:13:01.650" video="qanda-project" id="subtitle"]]
+[[!template text="""by a cell phone. I would be the worst person on the planet,""" start="00:13:07.317" video="qanda-project" id="subtitle"]]
+[[!template text="""I would be totally focused on my cell phone""" start="00:13:12.443" video="qanda-project" id="subtitle"]]
+[[!template text="""if I had one. So I'm like one""" start="00:13:14.164" video="qanda-project" id="subtitle"]]
[[!template text="""of the few people left who can read a map. So I do run into some""" start="00:13:16.400" video="qanda-project" id="subtitle"]]
[[!template text="""difficulties hailing taxis and that sort of thing when I'm""" start="00:13:23.000" video="qanda-project" id="subtitle"]]
[[!template text="""traveling. So there are some downsides to not having a cell""" start="00:13:26.200" video="qanda-project" id="subtitle"]]
diff --git a/2024/info/project-before.md b/2024/info/project-before.md
index b8233e6f..dd34cb38 100644
--- a/2024/info/project-before.md
+++ b/2024/info/project-before.md
@@ -1,7 +1,6 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
[[!toc ]]
Format: 22-min talk ; Q&A: BigBlueButton conference room
-Etherpad: <https://pad.emacsconf.org/2024-project>
Status: TO_CAPTION_QA
@@ -10,7 +9,7 @@ Status: TO_CAPTION_QA
# Talk
-<div class="vid"><video controls preload="none" id="project-mainVideo"><source src="https://media.emacsconf.org/2024/emacsconf-2024-project--managing-writing-project-metadata-with-orgmode--blaine-mooers--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-project--managing-writing-project-metadata-with-orgmode--blaine-mooers--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2024/captions/emacsconf-2024-project--managing-writing-project-metadata-with-orgmode--blaine-mooers--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="project-mainVideo" data="""
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-project"><source src="https://media.emacsconf.org/2024/emacsconf-2024-project--managing-writing-project-metadata-with-orgmode--blaine-mooers--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-project--managing-writing-project-metadata-with-orgmode--blaine-mooers--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2024/captions/emacsconf-2024-project--managing-writing-project-metadata-with-orgmode--blaine-mooers--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="mainVideo-project" data="""
00:00.000 Introduction
02:20.080 Starting a new writing project
04:05.480 The writing log
@@ -31,11 +30,11 @@ Status: TO_CAPTION_QA
19:49.640 Conclusions
20:34.520 Acknowledgements
-"""]]<div></div>Duration: 21:38 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2024-project">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-project--managing-writing-project-metadata-with-orgmode--blaine-mooers--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-project--managing-writing-project-metadata-with-orgmode--blaine-mooers--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-project--managing-writing-project-metadata-with-orgmode--blaine-mooers--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-project--managing-writing-project-metadata-with-orgmode--blaine-mooers--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-project--managing-writing-project-metadata-with-orgmode--blaine-mooers--main.webm">Download --main.webm (50MB)</a></li><li><a href="https://toobnix.org/w/dEiXtAr3p16hD3atJk78Ex">View on Toobnix</a></li></ul></div></div>
+"""]]<div></div>Duration: 21:38 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-project--managing-writing-project-metadata-with-orgmode--blaine-mooers--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-project--managing-writing-project-metadata-with-orgmode--blaine-mooers--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-project--managing-writing-project-metadata-with-orgmode--blaine-mooers--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-project--managing-writing-project-metadata-with-orgmode--blaine-mooers--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-project--managing-writing-project-metadata-with-orgmode--blaine-mooers--main.webm">Download --main.webm (50MB)</a></li><li><a href="https://toobnix.org/w/dEiXtAr3p16hD3atJk78Ex">View on Toobnix</a></li><li><a href="https://youtu.be/Wn38JmqyTbk">View on Youtube</a></li></ul></div></div>
# Q&A
-<div class="vid"><video controls preload="none" id="project-qanda"><source src="https://media.emacsconf.org/2024/emacsconf-2024-project--managing-writing-project-metadata-with-orgmode--blaine-mooers--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-project--managing-writing-project-metadata-with-orgmode--blaine-mooers--answers.vtt" default />"""<track kind="chapters" label="Chapters" src="/2024/captions/emacsconf-2024-project--managing-writing-project-metadata-with-orgmode--blaine-mooers--answers--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="project-qanda" data="""
+<div class="vid qanda"><video controls preload="none" id="qanda-project"><source src="https://media.emacsconf.org/2024/emacsconf-2024-project--managing-writing-project-metadata-with-orgmode--blaine-mooers--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-project--managing-writing-project-metadata-with-orgmode--blaine-mooers--answers.vtt" default />"""<track kind="chapters" label="Chapters" src="/2024/captions/emacsconf-2024-project--managing-writing-project-metadata-with-orgmode--blaine-mooers--answers--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="qanda-project" data="""
01:38.600 Q: what does 0573 means in your init. file name?
03:09.520 Q: What does Zettelkasten mean?
05:41.760 Q: How many papers are you writing at the same time?
@@ -48,6 +47,6 @@ Status: TO_CAPTION_QA
52:48.680 Org Mode versus Markdown
56:28.560 Raku
-"""]]<div>Listen to just the audio:<br /><audio controls preload="none" id="project-qanda-audio" src="https://media.emacsconf.org/2024/emacsconf-2024-project--managing-writing-project-metadata-with-orgmode--blaine-mooers--answers.opus"></audio></div><div></div>Duration: 1:02:41 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2024-project">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-project--managing-writing-project-metadata-with-orgmode--blaine-mooers--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-project--managing-writing-project-metadata-with-orgmode--blaine-mooers--answers.opus">Download --answers.opus (33MB)</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-project--managing-writing-project-metadata-with-orgmode--blaine-mooers--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-project--managing-writing-project-metadata-with-orgmode--blaine-mooers--answers.webm">Download --answers.webm (94MB)</a></li></ul></div></div>
+"""]]<div>Listen to just the audio:<br /><audio controls preload="none" id="qanda-project-audio" src="https://media.emacsconf.org/2024/emacsconf-2024-project--managing-writing-project-metadata-with-orgmode--blaine-mooers--answers.opus"></audio></div><div></div>Duration: 1:02:41 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-project--managing-writing-project-metadata-with-orgmode--blaine-mooers--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-project--managing-writing-project-metadata-with-orgmode--blaine-mooers--answers.opus">Download --answers.opus (33MB)</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-project--managing-writing-project-metadata-with-orgmode--blaine-mooers--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-project--managing-writing-project-metadata-with-orgmode--blaine-mooers--answers.webm">Download --answers.webm (94MB)</a></li><li><a href="https://toobnix.org/w/oNdkFWvoxz8mXXtBTCiruv">View on Toobnix</a></li><li><a href="https://www.youtube.com/watch?v=ZJUao__OjBw">View on Youtube</a></li></ul></div></div>
# Description
<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2024/info/regex-before.md b/2024/info/regex-before.md
index 47f8f574..b8bf89db 100644
--- a/2024/info/regex-before.md
+++ b/2024/info/regex-before.md
@@ -1,13 +1,12 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
[[!toc ]]
Format: 25-min talk ; Q&A: IRC
-Etherpad: <https://pad.emacsconf.org/2024-regex>
Status: TO_FOLLOW_UP
-<div class="vid"><video controls preload="none" id="regex-mainVideo"><source src="https://media.emacsconf.org/2024/emacsconf-2024-regex--emacs-regex-compilation-and-future-directions-for-expressive-pattern-matching--danny-mcclanahan--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-regex--emacs-regex-compilation-and-future-directions-for-expressive-pattern-matching--danny-mcclanahan--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 24:56 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2024-regex">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-regex--emacs-regex-compilation-and-future-directions-for-expressive-pattern-matching--danny-mcclanahan--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-regex--emacs-regex-compilation-and-future-directions-for-expressive-pattern-matching--danny-mcclanahan--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-regex--emacs-regex-compilation-and-future-directions-for-expressive-pattern-matching--danny-mcclanahan--main.webm">Download --main.webm (199MB)</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-regex--emacs-regex-compilation-and-future-directions-for-expressive-pattern-matching--danny-mcclanahan--slides.pdf">Download --slides.pdf</a></li><li><a href="https://toobnix.org/w/q6Mhn7TPtDi7acd6y3KtRf">View on Toobnix</a></li></ul></div></div>
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-regex"><source src="https://media.emacsconf.org/2024/emacsconf-2024-regex--emacs-regex-compilation-and-future-directions-for-expressive-pattern-matching--danny-mcclanahan--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-regex--emacs-regex-compilation-and-future-directions-for-expressive-pattern-matching--danny-mcclanahan--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 24:56 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-regex--emacs-regex-compilation-and-future-directions-for-expressive-pattern-matching--danny-mcclanahan--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-regex--emacs-regex-compilation-and-future-directions-for-expressive-pattern-matching--danny-mcclanahan--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-regex--emacs-regex-compilation-and-future-directions-for-expressive-pattern-matching--danny-mcclanahan--main.webm">Download --main.webm (199MB)</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-regex--emacs-regex-compilation-and-future-directions-for-expressive-pattern-matching--danny-mcclanahan--slides.pdf">Download --slides.pdf</a></li><li><a href="https://toobnix.org/w/q6Mhn7TPtDi7acd6y3KtRf">View on Toobnix</a></li><li><a href="https://www.youtube.com/watch?v=v3Bl8VLaLqg">View on Youtube</a></li></ul></div></div>
# Description
<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2024/info/rust-before.md b/2024/info/rust-before.md
index 0e413d02..fcd31ab7 100644
--- a/2024/info/rust-before.md
+++ b/2024/info/rust-before.md
@@ -1,7 +1,6 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
[[!toc ]]
Format: 21-min talk ; Q&A: BigBlueButton conference room
-Etherpad: <https://pad.emacsconf.org/2024-rust>
Status: TO_CAPTION_QA
@@ -10,7 +9,7 @@ Status: TO_CAPTION_QA
# Talk
-<div class="vid"><video controls preload="none" id="rust-mainVideo"><source src="https://media.emacsconf.org/2024/emacsconf-2024-rust--an-experimental-emacs-core-in-rust--troy-hinckley--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-rust--an-experimental-emacs-core-in-rust--troy-hinckley--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2024/captions/emacsconf-2024-rust--an-experimental-emacs-core-in-rust--troy-hinckley--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="rust-mainVideo" data="""
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-rust"><source src="https://media.emacsconf.org/2024/emacsconf-2024-rust--an-experimental-emacs-core-in-rust--troy-hinckley--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-rust--an-experimental-emacs-core-in-rust--troy-hinckley--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2024/captions/emacsconf-2024-rust--an-experimental-emacs-core-in-rust--troy-hinckley--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="mainVideo-rust" data="""
00:00.000 Rune
00:17.082 The Emacs core
00:57.168 Why create this?
@@ -42,11 +41,11 @@ Status: TO_CAPTION_QA
19:07.247 Next directions
19:22.739 How to get involved
-"""]]<div></div>Duration: 20:06 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2024-rust">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-rust--an-experimental-emacs-core-in-rust--troy-hinckley--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-rust--an-experimental-emacs-core-in-rust--troy-hinckley--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-rust--an-experimental-emacs-core-in-rust--troy-hinckley--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-rust--an-experimental-emacs-core-in-rust--troy-hinckley--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-rust--an-experimental-emacs-core-in-rust--troy-hinckley--main.webm">Download --main.webm (46MB)</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-rust--an-experimental-emacs-core-in-rust--troy-hinckley--slides.org">Download --slides.org</a></li><li><a href="https://toobnix.org/w/wYBo5m5jsiu1JUfcHzdhhu">View on Toobnix</a></li></ul></div></div>
+"""]]<div></div>Duration: 20:06 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-rust--an-experimental-emacs-core-in-rust--troy-hinckley--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-rust--an-experimental-emacs-core-in-rust--troy-hinckley--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-rust--an-experimental-emacs-core-in-rust--troy-hinckley--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-rust--an-experimental-emacs-core-in-rust--troy-hinckley--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-rust--an-experimental-emacs-core-in-rust--troy-hinckley--main.webm">Download --main.webm (46MB)</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-rust--an-experimental-emacs-core-in-rust--troy-hinckley--slides.org">Download --slides.org</a></li><li><a href="https://toobnix.org/w/wYBo5m5jsiu1JUfcHzdhhu">View on Toobnix</a></li><li><a href="https://youtu.be/629ct-cBwSI">View on Youtube</a></li></ul></div></div>
# Q&A
-<div class="vid"><video controls preload="none" id="rust-qanda"><source src="https://media.emacsconf.org/2024/emacsconf-2024-rust--an-experimental-emacs-core-in-rust--troy-hinckley--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-rust--an-experimental-emacs-core-in-rust--troy-hinckley--answers.vtt" default />"""<track kind="chapters" label="Chapters" src="/2024/captions/emacsconf-2024-rust--an-experimental-emacs-core-in-rust--troy-hinckley--answers--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="rust-qanda" data="""
+<div class="vid qanda"><video controls preload="none" id="qanda-rust"><source src="https://media.emacsconf.org/2024/emacsconf-2024-rust--an-experimental-emacs-core-in-rust--troy-hinckley--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-rust--an-experimental-emacs-core-in-rust--troy-hinckley--answers.vtt" default />"""<track kind="chapters" label="Chapters" src="/2024/captions/emacsconf-2024-rust--an-experimental-emacs-core-in-rust--troy-hinckley--answers--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="qanda-rust" data="""
00:08.500 Q: Have you considered using CRDTs to share buffers between threads and merge any concurrent edits automatically?
01:05.874 Q: Why hosted on GitHub? GitHub is nonfree. Is it possible to report bugs/send patches without using GitHub?
01:22.960 Q: Do you think it's possible to achieve 100% compatibility with current Emacs code?
@@ -62,6 +61,6 @@ Status: TO_CAPTION_QA
14:20.100 Q: Is it possible to bootstrap with just the bytecode interpreter?
17:03.960 What would it take to bootstrap Guile in Rune?
-"""]]<div>Listen to just the audio:<br /><audio controls preload="none" id="rust-qanda-audio" src="https://media.emacsconf.org/2024/emacsconf-2024-rust--an-experimental-emacs-core-in-rust--troy-hinckley--answers.opus"></audio></div><div></div>Duration: 19:15 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2024-rust">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-rust--an-experimental-emacs-core-in-rust--troy-hinckley--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-rust--an-experimental-emacs-core-in-rust--troy-hinckley--answers.opus">Download --answers.opus (9.8MB)</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-rust--an-experimental-emacs-core-in-rust--troy-hinckley--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-rust--an-experimental-emacs-core-in-rust--troy-hinckley--answers.webm">Download --answers.webm (42MB)</a></li></ul></div></div>
+"""]]<div>Listen to just the audio:<br /><audio controls preload="none" id="qanda-rust-audio" src="https://media.emacsconf.org/2024/emacsconf-2024-rust--an-experimental-emacs-core-in-rust--troy-hinckley--answers.opus"></audio></div><div></div>Duration: 19:15 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-rust--an-experimental-emacs-core-in-rust--troy-hinckley--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-rust--an-experimental-emacs-core-in-rust--troy-hinckley--answers.opus">Download --answers.opus (9.8MB)</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-rust--an-experimental-emacs-core-in-rust--troy-hinckley--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-rust--an-experimental-emacs-core-in-rust--troy-hinckley--answers.webm">Download --answers.webm (42MB)</a></li><li><a href="https://toobnix.org/w/8n3SZoZGuon4C2tyHhAd2H">View on Toobnix</a></li><li><a href="https://www.youtube.com/watch?v=sBpTP0kJV-g">View on Youtube</a></li></ul></div></div>
# Description
<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2024/info/sat-close-before.md b/2024/info/sat-close-before.md
index 32339bf1..0f5a770f 100644
--- a/2024/info/sat-close-before.md
+++ b/2024/info/sat-close-before.md
@@ -1,13 +1,12 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
[[!toc ]]
Format: 6-min talk ; Q&A: Etherpad
-Etherpad: <https://pad.emacsconf.org/2024-sat-close>
Status: Ready to stream
-<div class="vid"><video controls preload="none" id="sat-close-mainVideo"><source src="emacsconf-2024-sat-close--saturday-closing-remarks--answers--original.webm" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 05:49 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2024-sat-close">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-sat-close--saturday-closing-remarks--intro.webm">Download --intro.webm</a></li></ul></div></div>
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-sat-close"><source src="emacsconf-2024-sat-close--saturday-closing-remarks--answers--original.webm" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 05:49 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-sat-close--saturday-closing-remarks--intro.webm">Download --intro.webm</a></li></ul></div></div>
# Description
<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2024/info/sat-open-before.md b/2024/info/sat-open-before.md
index 427c9f31..e0edf012 100644
--- a/2024/info/sat-open-before.md
+++ b/2024/info/sat-open-before.md
@@ -1,14 +1,13 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
[[!toc ]]
Format: 5-min talk ; Q&A: Etherpad
-Etherpad: <https://pad.emacsconf.org/2024-sat-open>
Status: TO_FOLLOW_UP
-<div class="vid"><video controls preload="none" id="sat-open-mainVideo"><source src="https://media.emacsconf.org/2024/emacsconf-2024-sat-open--saturday-opening-remarks--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-sat-open--saturday-opening-remarks--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2024/captions/emacsconf-2024-sat-open--saturday-opening-remarks--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="sat-open-mainVideo" data="""
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-sat-open"><source src="https://media.emacsconf.org/2024/emacsconf-2024-sat-open--saturday-opening-remarks--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-sat-open--saturday-opening-remarks--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2024/captions/emacsconf-2024-sat-open--saturday-opening-remarks--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="mainVideo-sat-open" data="""
00:00.007 General and Development tracks
00:06.126 Watching and participating
00:59.966 Questions and answers
@@ -21,6 +20,6 @@ Status: TO_FOLLOW_UP
04:37.333 emacsconf-discuss updates
04:42.249 Let's go!
-"""]]<div></div>Duration: 04:50 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2024-sat-open">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-sat-open--saturday-opening-remarks--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-sat-open--saturday-opening-remarks--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-sat-open--saturday-opening-remarks--main.vtt">Download --main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-sat-open--saturday-opening-remarks--main.webm">Download --main.webm (16MB)</a></li><li><a href="https://toobnix.org/w/19MY8JrR2x6uJRdWAMgASK">View on Toobnix</a></li></ul></div></div>
+"""]]<div></div>Duration: 04:50 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-sat-open--saturday-opening-remarks--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-sat-open--saturday-opening-remarks--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-sat-open--saturday-opening-remarks--main.vtt">Download --main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-sat-open--saturday-opening-remarks--main.webm">Download --main.webm (16MB)</a></li><li><a href="https://toobnix.org/w/19MY8JrR2x6uJRdWAMgASK">View on Toobnix</a></li><li><a href="https://youtu.be/YrlAfWfgvIQ">View on Youtube</a></li></ul></div></div>
# Description
<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2024/info/secrets-before.md b/2024/info/secrets-before.md
index 2e85871a..7fdb81a2 100644
--- a/2024/info/secrets-before.md
+++ b/2024/info/secrets-before.md
@@ -1,14 +1,13 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
[[!toc ]]
Format: 15-min talk ; Q&A: BigBlueButton conference room
-Etherpad: <https://pad.emacsconf.org/2024-secrets>
Status: TO_CAPTION_QA
-<div class="vid"><video controls preload="none" id="secrets-mainVideo"><source src="https://media.emacsconf.org/2024/emacsconf-2024-secrets--committing-secrets-with-git-using-sopsmode--jonathan-otsuka--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-secrets--committing-secrets-with-git-using-sopsmode--jonathan-otsuka--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2024/captions/emacsconf-2024-secrets--committing-secrets-with-git-using-sopsmode--jonathan-otsuka--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="secrets-mainVideo" data="""
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-secrets"><source src="https://media.emacsconf.org/2024/emacsconf-2024-secrets--committing-secrets-with-git-using-sopsmode--jonathan-otsuka--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-secrets--committing-secrets-with-git-using-sopsmode--jonathan-otsuka--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2024/captions/emacsconf-2024-secrets--committing-secrets-with-git-using-sopsmode--jonathan-otsuka--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="mainVideo-secrets" data="""
00:00.000 Introduction
03:23.310 Q&A technical issues
07:39.188 Q: Can you describe some potential interactive uses for this within Emacs?
@@ -18,6 +17,6 @@ Status: TO_CAPTION_QA
11:11.983 Q: Wacky question: what happens in sops-mode if you encrypt the already encrypted file as if it was plaintext?
11:49.439 Q: can you describe some potential interactive uses for this within Emacs
-"""]]<div></div>Duration: 14:57 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2024-secrets">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-secrets--committing-secrets-with-git-using-sopsmode--jonathan-otsuka--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-secrets--committing-secrets-with-git-using-sopsmode--jonathan-otsuka--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-secrets--committing-secrets-with-git-using-sopsmode--jonathan-otsuka--main.vtt">Download --main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-secrets--committing-secrets-with-git-using-sopsmode--jonathan-otsuka--main.webm">Download --main.webm (31MB)</a></li></ul></div></div>
+"""]]<div></div>Duration: 14:57 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-secrets--committing-secrets-with-git-using-sopsmode--jonathan-otsuka--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-secrets--committing-secrets-with-git-using-sopsmode--jonathan-otsuka--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-secrets--committing-secrets-with-git-using-sopsmode--jonathan-otsuka--main.vtt">Download --main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-secrets--committing-secrets-with-git-using-sopsmode--jonathan-otsuka--main.webm">Download --main.webm (31MB)</a></li></ul></div></div>
# Description
<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2024/info/sharing-before.md b/2024/info/sharing-before.md
index 9b5ecf61..e3154751 100644
--- a/2024/info/sharing-before.md
+++ b/2024/info/sharing-before.md
@@ -1,14 +1,13 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
[[!toc ]]
Format: 22-min talk ; Q&A: Etherpad
-Etherpad: <https://pad.emacsconf.org/2024-sharing>
Status: TO_FOLLOW_UP
-<div class="vid"><video controls preload="none" id="sharing-mainVideo"><source src="https://media.emacsconf.org/2024/emacsconf-2024-sharing--so-you-want-to-be-an-emacsfluencer--gopar--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-sharing--so-you-want-to-be-an-emacsfluencer--gopar--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2024/captions/emacsconf-2024-sharing--so-you-want-to-be-an-emacsfluencer--gopar--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="sharing-mainVideo" data="""
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-sharing"><source src="https://media.emacsconf.org/2024/emacsconf-2024-sharing--so-you-want-to-be-an-emacsfluencer--gopar--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-sharing--so-you-want-to-be-an-emacsfluencer--gopar--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2024/captions/emacsconf-2024-sharing--so-you-want-to-be-an-emacsfluencer--gopar--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="mainVideo-sharing" data="""
00:00.000 Introduction
00:12.466 Knowledge grows when it is shared
00:36.333 When's the last time you shared something?
@@ -29,6 +28,6 @@ Status: TO_FOLLOW_UP
18:06.166 Your secret sauce
19:04.933 Cons of YouTube
-"""]]<div></div>Duration: 21:40 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2024-sharing">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-sharing--so-you-want-to-be-an-emacsfluencer--gopar--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-sharing--so-you-want-to-be-an-emacsfluencer--gopar--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-sharing--so-you-want-to-be-an-emacsfluencer--gopar--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-sharing--so-you-want-to-be-an-emacsfluencer--gopar--main.webm">Download --main.webm (64MB)</a></li><li><a href="https://toobnix.org/w/a8CwD5Svj5AeX3rdzLxyP7">View on Toobnix</a></li></ul></div></div>
+"""]]<div></div>Duration: 21:40 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-sharing--so-you-want-to-be-an-emacsfluencer--gopar--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-sharing--so-you-want-to-be-an-emacsfluencer--gopar--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-sharing--so-you-want-to-be-an-emacsfluencer--gopar--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-sharing--so-you-want-to-be-an-emacsfluencer--gopar--main.webm">Download --main.webm (64MB)</a></li><li><a href="https://toobnix.org/w/a8CwD5Svj5AeX3rdzLxyP7">View on Toobnix</a></li><li><a href="https://youtu.be/0EF-jNk5kUY">View on Youtube</a></li></ul></div></div>
# Description
<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2024/info/shell-before.md b/2024/info/shell-before.md
index 36ec8218..6003d0e5 100644
--- a/2024/info/shell-before.md
+++ b/2024/info/shell-before.md
@@ -1,14 +1,13 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
[[!toc ]]
Format: 38-min talk ; Q&A: IRC
-Etherpad: <https://pad.emacsconf.org/2024-shell>
Status: TO_FOLLOW_UP
-<div class="vid"><video controls preload="none" id="shell-mainVideo"><source src="https://media.emacsconf.org/2024/emacsconf-2024-shell--emacs-as-a-shell--christopher-howard--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-shell--emacs-as-a-shell--christopher-howard--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2024/captions/emacsconf-2024-shell--emacs-as-a-shell--christopher-howard--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="shell-mainVideo" data="""
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-shell"><source src="https://media.emacsconf.org/2024/emacsconf-2024-shell--emacs-as-a-shell--christopher-howard--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-shell--emacs-as-a-shell--christopher-howard--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2024/captions/emacsconf-2024-shell--emacs-as-a-shell--christopher-howard--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="mainVideo-shell" data="""
00:02.940 Introduction
00:37.881 What do I mean by shell?
01:38.560 What I do not mean
@@ -24,6 +23,6 @@ Status: TO_FOLLOW_UP
34:21.128 Login shell
36:36.980 Resources
-"""]]<div></div>Duration: 37:13 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2024-shell">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-shell--emacs-as-a-shell--christopher-howard--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-shell--emacs-as-a-shell--christopher-howard--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-shell--emacs-as-a-shell--christopher-howard--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-shell--emacs-as-a-shell--christopher-howard--main.webm">Download --main.webm (87MB)</a></li><li><a href="https://toobnix.org/w/hJ11FBLcpEF4cMxMpJi3FE">View on Toobnix</a></li></ul></div></div>
+"""]]<div></div>Duration: 37:13 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-shell--emacs-as-a-shell--christopher-howard--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-shell--emacs-as-a-shell--christopher-howard--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-shell--emacs-as-a-shell--christopher-howard--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-shell--emacs-as-a-shell--christopher-howard--main.webm">Download --main.webm (87MB)</a></li><li><a href="https://toobnix.org/w/hJ11FBLcpEF4cMxMpJi3FE">View on Toobnix</a></li><li><a href="https://youtu.be/jhX8wz8LeXE">View on Youtube</a></li></ul></div></div>
# Description
<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2024/info/students-before.md b/2024/info/students-before.md
index e97aaaee..9358f56c 100644
--- a/2024/info/students-before.md
+++ b/2024/info/students-before.md
@@ -1,7 +1,6 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
[[!toc ]]
Format: 9-min talk ; Q&A: BigBlueButton conference room
-Etherpad: <https://pad.emacsconf.org/2024-students>
Status: TO_CAPTION_QA
@@ -10,11 +9,11 @@ Status: TO_CAPTION_QA
# Talk
-<div class="vid"><video controls preload="none" id="students-mainVideo"><source src="https://media.emacsconf.org/2024/emacsconf-2024-students--an-example-of-a-cohesive-student-workflow-in-emacs--daniel-pinkston--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-students--an-example-of-a-cohesive-student-workflow-in-emacs--daniel-pinkston--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 08:27 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2024-students">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-students--an-example-of-a-cohesive-student-workflow-in-emacs--daniel-pinkston--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-students--an-example-of-a-cohesive-student-workflow-in-emacs--daniel-pinkston--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-students--an-example-of-a-cohesive-student-workflow-in-emacs--daniel-pinkston--main.webm">Download --main.webm (15MB)</a></li><li><a href="https://toobnix.org/w/kBVhYEDpS6mvUPWLeQHGn1">View on Toobnix</a></li></ul></div></div>
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-students"><source src="https://media.emacsconf.org/2024/emacsconf-2024-students--an-example-of-a-cohesive-student-workflow-in-emacs--daniel-pinkston--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-students--an-example-of-a-cohesive-student-workflow-in-emacs--daniel-pinkston--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 08:27 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-students--an-example-of-a-cohesive-student-workflow-in-emacs--daniel-pinkston--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-students--an-example-of-a-cohesive-student-workflow-in-emacs--daniel-pinkston--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-students--an-example-of-a-cohesive-student-workflow-in-emacs--daniel-pinkston--main.webm">Download --main.webm (15MB)</a></li><li><a href="https://toobnix.org/w/kBVhYEDpS6mvUPWLeQHGn1">View on Toobnix</a></li><li><a href="https://www.youtube.com/watch?v=7WTIKv5g6mw">View on Youtube</a></li></ul></div></div>
# Q&A
-<div class="vid"><video controls preload="none" id="students-qanda"><source src="https://media.emacsconf.org/2024/emacsconf-2024-students--an-example-of-a-cohesive-student-workflow-in-emacs--daniel-pinkston--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-students--an-example-of-a-cohesive-student-workflow-in-emacs--daniel-pinkston--answers.vtt" default />"""<track kind="chapters" label="Chapters" src="/2024/captions/emacsconf-2024-students--an-example-of-a-cohesive-student-workflow-in-emacs--daniel-pinkston--answers--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="students-qanda" data="""
+<div class="vid qanda"><video controls preload="none" id="qanda-students"><source src="https://media.emacsconf.org/2024/emacsconf-2024-students--an-example-of-a-cohesive-student-workflow-in-emacs--daniel-pinkston--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-students--an-example-of-a-cohesive-student-workflow-in-emacs--daniel-pinkston--answers.vtt" default />"""<track kind="chapters" label="Chapters" src="/2024/captions/emacsconf-2024-students--an-example-of-a-cohesive-student-workflow-in-emacs--daniel-pinkston--answers--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="qanda-students" data="""
00:38.360 Q: Do you have any thoughts about the process of recording something for a conference?
02:23.792 Q: I use org-roam for notes and find it very useful - have you considered it?
03:40.880 Q: Do you use the Getting Things Done methodology as part of your Org workflow?
@@ -26,6 +25,6 @@ Status: TO_CAPTION_QA
15:21.920 Q: Has using emacs led to expanded interest in programming/computer science?
16:40.672 Q: How does interaction with others work in technical terms?
-"""]]<div>Listen to just the audio:<br /><audio controls preload="none" id="students-qanda-audio" src="https://media.emacsconf.org/2024/emacsconf-2024-students--an-example-of-a-cohesive-student-workflow-in-emacs--daniel-pinkston--answers.opus"></audio></div><div></div><div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2024-students">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-students--an-example-of-a-cohesive-student-workflow-in-emacs--daniel-pinkston--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-students--an-example-of-a-cohesive-student-workflow-in-emacs--daniel-pinkston--answers.json">Download --answers.json</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-students--an-example-of-a-cohesive-student-workflow-in-emacs--daniel-pinkston--answers.opus">Download --answers.opus (9.9MB)</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-students--an-example-of-a-cohesive-student-workflow-in-emacs--daniel-pinkston--answers.srt">Download --answers.srt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-students--an-example-of-a-cohesive-student-workflow-in-emacs--daniel-pinkston--answers.tsv">Download --answers.tsv</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-students--an-example-of-a-cohesive-student-workflow-in-emacs--daniel-pinkston--answers.txt">Download --answers.txt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-students--an-example-of-a-cohesive-student-workflow-in-emacs--daniel-pinkston--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-students--an-example-of-a-cohesive-student-workflow-in-emacs--daniel-pinkston--answers.webm">Download --answers.webm (47MB)</a></li></ul></div></div>
+"""]]<div>Listen to just the audio:<br /><audio controls preload="none" id="qanda-students-audio" src="https://media.emacsconf.org/2024/emacsconf-2024-students--an-example-of-a-cohesive-student-workflow-in-emacs--daniel-pinkston--answers.opus"></audio></div><div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-students--an-example-of-a-cohesive-student-workflow-in-emacs--daniel-pinkston--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-students--an-example-of-a-cohesive-student-workflow-in-emacs--daniel-pinkston--answers.json">Download --answers.json</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-students--an-example-of-a-cohesive-student-workflow-in-emacs--daniel-pinkston--answers.opus">Download --answers.opus (9.9MB)</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-students--an-example-of-a-cohesive-student-workflow-in-emacs--daniel-pinkston--answers.srt">Download --answers.srt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-students--an-example-of-a-cohesive-student-workflow-in-emacs--daniel-pinkston--answers.tsv">Download --answers.tsv</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-students--an-example-of-a-cohesive-student-workflow-in-emacs--daniel-pinkston--answers.txt">Download --answers.txt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-students--an-example-of-a-cohesive-student-workflow-in-emacs--daniel-pinkston--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-students--an-example-of-a-cohesive-student-workflow-in-emacs--daniel-pinkston--answers.webm">Download --answers.webm (47MB)</a></li><li><a href="https://toobnix.org/w/tL6A2r56AJ89K2yuxqQNXe">View on Toobnix</a></li><li><a href="https://www.youtube.com/watch?v=1enIJIW2P_w">View on Youtube</a></li></ul></div></div>
# Description
<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2024/info/sun-close-before.md b/2024/info/sun-close-before.md
index b77cd5b9..9fb22d5d 100644
--- a/2024/info/sun-close-before.md
+++ b/2024/info/sun-close-before.md
@@ -1,7 +1,6 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
[[!toc ]]
Format: 2-min talk ; Q&A: BigBlueButton conference room
-Etherpad: <https://pad.emacsconf.org/2024-sun-close>
Status: TO_CAPTION_QA
@@ -10,10 +9,10 @@ Status: TO_CAPTION_QA
# Talk
-<div class="vid"><video controls preload="none" id="sun-close-mainVideo"><source src="https://media.emacsconf.org/2024/emacsconf-2024-sun-close--sunday-closing-remarks--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-sun-close--sunday-closing-remarks--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 01:59 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2024-sun-close">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-sun-close--sunday-closing-remarks--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-sun-close--sunday-closing-remarks--main.vtt">Download --main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-sun-close--sunday-closing-remarks--main.webm">Download --main.webm (8MB)</a></li></ul></div></div>
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-sun-close"><source src="https://media.emacsconf.org/2024/emacsconf-2024-sun-close--sunday-closing-remarks--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-sun-close--sunday-closing-remarks--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 01:59 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-sun-close--sunday-closing-remarks--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-sun-close--sunday-closing-remarks--main.vtt">Download --main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-sun-close--sunday-closing-remarks--main.webm">Download --main.webm (8MB)</a></li></ul></div></div>
# Q&A
-<div class="vid"><div></div><div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2024-sun-close">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-sun-close--sunday-closing-remarks--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-sun-close--sunday-closing-remarks--main.vtt">Download --main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-sun-close--sunday-closing-remarks--main.webm">Download --main.webm (8MB)</a></li></ul></div></div>
+<div class="vid qanda"><div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-sun-close--sunday-closing-remarks--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-sun-close--sunday-closing-remarks--main.vtt">Download --main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-sun-close--sunday-closing-remarks--main.webm">Download --main.webm (8MB)</a></li></ul></div></div>
# Description
<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2024/info/sun-open-before.md b/2024/info/sun-open-before.md
index 6a0792b4..ed155b5e 100644
--- a/2024/info/sun-open-before.md
+++ b/2024/info/sun-open-before.md
@@ -1,13 +1,12 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
[[!toc ]]
Format: 5-min talk ; Q&A: Etherpad
-Etherpad: <https://pad.emacsconf.org/2024-sun-open>
Status: All done
-<div class="vid"><video controls preload="none" id="sun-open-mainVideo"><source src="https://media.emacsconf.org/2024/emacsconf-2024-sun-open--sunday-opening-remarks--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-sun-open--sunday-opening-remarks--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 04:37 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2024-sun-open">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-sun-open--sunday-opening-remarks--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-sun-open--sunday-opening-remarks--main.vtt">Download --main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-sun-open--sunday-opening-remarks--main.webm">Download --main.webm (18MB)</a></li></ul></div></div>
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-sun-open"><source src="https://media.emacsconf.org/2024/emacsconf-2024-sun-open--sunday-opening-remarks--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-sun-open--sunday-opening-remarks--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 04:37 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-sun-open--sunday-opening-remarks--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-sun-open--sunday-opening-remarks--main.vtt">Download --main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-sun-open--sunday-opening-remarks--main.webm">Download --main.webm (18MB)</a></li><li><a href="https://youtu.be/l8F4C77R4v8">View on Youtube</a></li></ul></div></div>
# Description
<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2024/info/theme-before.md b/2024/info/theme-before.md
index b95a67c4..8a945375 100644
--- a/2024/info/theme-before.md
+++ b/2024/info/theme-before.md
@@ -1,7 +1,6 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
[[!toc ]]
Format: 12-min talk ; Q&A: BigBlueButton conference room
-Etherpad: <https://pad.emacsconf.org/2024-theme>
Status: TO_CAPTION_QA
@@ -10,7 +9,7 @@ Status: TO_CAPTION_QA
# Talk
-<div class="vid"><video controls preload="none" id="theme-mainVideo"><source src="https://media.emacsconf.org/2024/emacsconf-2024-theme--my-journey-of-finding-and-creating-the-perfect-emacs-theme--metrowind--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-theme--my-journey-of-finding-and-creating-the-perfect-emacs-theme--metrowind--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2024/captions/emacsconf-2024-theme--my-journey-of-finding-and-creating-the-perfect-emacs-theme--metrowind--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="theme-mainVideo" data="""
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-theme"><source src="https://media.emacsconf.org/2024/emacsconf-2024-theme--my-journey-of-finding-and-creating-the-perfect-emacs-theme--metrowind--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-theme--my-journey-of-finding-and-creating-the-perfect-emacs-theme--metrowind--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2024/captions/emacsconf-2024-theme--my-journey-of-finding-and-creating-the-perfect-emacs-theme--metrowind--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="mainVideo-theme" data="""
00:02.140 Introduction
00:48.820 Deviant
01:15.640 FlucUI
@@ -21,16 +20,16 @@ Status: TO_CAPTION_QA
07:19.780 How to pick a random color palette
08:12.070 XYZ
-"""]]<div></div>Duration: 11:28 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2024-theme">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-theme--my-journey-of-finding-and-creating-the-perfect-emacs-theme--metrowind--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-theme--my-journey-of-finding-and-creating-the-perfect-emacs-theme--metrowind--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-theme--my-journey-of-finding-and-creating-the-perfect-emacs-theme--metrowind--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-theme--my-journey-of-finding-and-creating-the-perfect-emacs-theme--metrowind--main.webm">Download --main.webm (30MB)</a></li><li><a href="https://toobnix.org/w/i1zSnandCQWd8688pyxhKr">View on Toobnix</a></li></ul></div></div>
+"""]]<div></div>Duration: 11:28 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-theme--my-journey-of-finding-and-creating-the-perfect-emacs-theme--metrowind--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-theme--my-journey-of-finding-and-creating-the-perfect-emacs-theme--metrowind--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-theme--my-journey-of-finding-and-creating-the-perfect-emacs-theme--metrowind--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-theme--my-journey-of-finding-and-creating-the-perfect-emacs-theme--metrowind--main.webm">Download --main.webm (30MB)</a></li><li><a href="https://toobnix.org/w/i1zSnandCQWd8688pyxhKr">View on Toobnix</a></li><li><a href="https://youtu.be/GMzQs-pbueU">View on Youtube</a></li></ul></div></div>
# Q&A
-<div class="vid"><video controls preload="none" id="theme-qanda"><source src="https://media.emacsconf.org/2024/emacsconf-2024-theme--my-journey-of-finding-and-creating-the-perfect-emacs-theme--metrowind--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-theme--my-journey-of-finding-and-creating-the-perfect-emacs-theme--metrowind--answers.vtt" default />"""<track kind="chapters" label="Chapters" src="/2024/captions/emacsconf-2024-theme--my-journey-of-finding-and-creating-the-perfect-emacs-theme--metrowind--answers--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="theme-qanda" data="""
+<div class="vid qanda"><video controls preload="none" id="qanda-theme"><source src="https://media.emacsconf.org/2024/emacsconf-2024-theme--my-journey-of-finding-and-creating-the-perfect-emacs-theme--metrowind--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-theme--my-journey-of-finding-and-creating-the-perfect-emacs-theme--metrowind--answers.vtt" default />"""<track kind="chapters" label="Chapters" src="/2024/captions/emacsconf-2024-theme--my-journey-of-finding-and-creating-the-perfect-emacs-theme--metrowind--answers--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="qanda-theme" data="""
00:33.865 Q: When you choose colors based on the same lightness, does it not hurt readability since the eye sees lightness most?
01:52.280 Q: For monte-carlo, are all the "random" colors picked using a colorwheel/hue rotation?
02:43.720 Q: One area I see emacs able to do themes that is "underused?" is changing the font
08:53.461 Q: Have you ever kept any of the random themes that were thrown up?
-"""]]<div>Listen to just the audio:<br /><audio controls preload="none" id="theme-qanda-audio" src="https://media.emacsconf.org/2024/emacsconf-2024-theme--my-journey-of-finding-and-creating-the-perfect-emacs-theme--metrowind--answers.opus"></audio></div><div></div>Duration: 09:51 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2024-theme">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-theme--my-journey-of-finding-and-creating-the-perfect-emacs-theme--metrowind--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-theme--my-journey-of-finding-and-creating-the-perfect-emacs-theme--metrowind--answers--main--chapters.vtt">Download --answers--main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-theme--my-journey-of-finding-and-creating-the-perfect-emacs-theme--metrowind--answers--main.vtt">Download --answers--main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-theme--my-journey-of-finding-and-creating-the-perfect-emacs-theme--metrowind--answers.opus">Download --answers.opus (5.2MB)</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-theme--my-journey-of-finding-and-creating-the-perfect-emacs-theme--metrowind--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-theme--my-journey-of-finding-and-creating-the-perfect-emacs-theme--metrowind--answers.webm">Download --answers.webm (16MB)</a></li></ul></div></div>
+"""]]<div>Listen to just the audio:<br /><audio controls preload="none" id="qanda-theme-audio" src="https://media.emacsconf.org/2024/emacsconf-2024-theme--my-journey-of-finding-and-creating-the-perfect-emacs-theme--metrowind--answers.opus"></audio></div><div></div>Duration: 09:51 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-theme--my-journey-of-finding-and-creating-the-perfect-emacs-theme--metrowind--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-theme--my-journey-of-finding-and-creating-the-perfect-emacs-theme--metrowind--answers--main--chapters.vtt">Download --answers--main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-theme--my-journey-of-finding-and-creating-the-perfect-emacs-theme--metrowind--answers--main.vtt">Download --answers--main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-theme--my-journey-of-finding-and-creating-the-perfect-emacs-theme--metrowind--answers.opus">Download --answers.opus (5.2MB)</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-theme--my-journey-of-finding-and-creating-the-perfect-emacs-theme--metrowind--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-theme--my-journey-of-finding-and-creating-the-perfect-emacs-theme--metrowind--answers.webm">Download --answers.webm (16MB)</a></li><li><a href="https://toobnix.org/w/sqEJFjcC2KjnPZRmifpqLC">View on Toobnix</a></li><li><a href="https://www.youtube.com/watch?v=2xiyUItX5Gw">View on Youtube</a></li></ul></div></div>
# Description
<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2024/info/transducers-after.md b/2024/info/transducers-after.md
index 8dbe9101..3995e5c1 100644
--- a/2024/info/transducers-after.md
+++ b/2024/info/transducers-after.md
@@ -397,7 +397,7 @@ Captioner: sachac
[[!template text="""Hopefully the internet goes well. It's a nice Monday""" start="00:00:00.000" video="qanda-transducers" id="subtitle"]]
[[!template text="""morning here in Tokyo.""" start="00:00:07.560" video="qanda-transducers" id="subtitle"]]
[[!template text="""Are we connected all right?""" start="00:00:32.000" video="qanda-transducers" id="subtitle"]]
-[[!template text="""Okay, I seem to be struggling still with my audio. 1 2nd""" start="00:00:37.880" video="qanda-transducers" id="subtitle"]]
+[[!template text="""Okay, I seem to be struggling still with my audio. One second...""" start="00:00:37.880" video="qanda-transducers" id="subtitle"]]
[[!template text="""calling. Yeah, you were muted for a moment there. Okay,""" start="00:00:40.880" video="qanda-transducers" id="subtitle"]]
[[!template text="""there we are. Okay. All right. Sorry about that. I got a mute""" start="00:00:44.520" video="qanda-transducers" id="subtitle"]]
[[!template text="""out my, my back office chatter. That's kind of distracting""" start="00:00:49.960" video="qanda-transducers" id="subtitle"]]
diff --git a/2024/info/transducers-before.md b/2024/info/transducers-before.md
index 161e3d53..bd531257 100644
--- a/2024/info/transducers-before.md
+++ b/2024/info/transducers-before.md
@@ -1,7 +1,6 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
[[!toc ]]
Format: 27-min talk ; Q&A: BigBlueButton conference room
-Etherpad: <https://pad.emacsconf.org/2024-transducers>
Status: TO_CAPTION_QA
@@ -10,7 +9,7 @@ Status: TO_CAPTION_QA
# Talk
-<div class="vid"><video controls preload="none" id="transducers-mainVideo"><source src="https://media.emacsconf.org/2024/emacsconf-2024-transducers--transducers-finally-ergonomic-data-processing-for-emacs--colin-woodbury--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-transducers--transducers-finally-ergonomic-data-processing-for-emacs--colin-woodbury--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2024/captions/emacsconf-2024-transducers--transducers-finally-ergonomic-data-processing-for-emacs--colin-woodbury--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="transducers-mainVideo" data="""
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-transducers"><source src="https://media.emacsconf.org/2024/emacsconf-2024-transducers--transducers-finally-ergonomic-data-processing-for-emacs--colin-woodbury--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-transducers--transducers-finally-ergonomic-data-processing-for-emacs--colin-woodbury--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2024/captions/emacsconf-2024-transducers--transducers-finally-ergonomic-data-processing-for-emacs--colin-woodbury--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="mainVideo-transducers" data="""
00:00.000 Intro
00:41.520 What are transducers?
03:27.590 Common issues
@@ -24,15 +23,15 @@ Status: TO_CAPTION_QA
20:00.520 Transducers in the wild - CSV
26:03.240 Issues and next steps
-"""]]<div></div>Duration: 26:51 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2024-transducers">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-transducers--transducers-finally-ergonomic-data-processing-for-emacs--colin-woodbury--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-transducers--transducers-finally-ergonomic-data-processing-for-emacs--colin-woodbury--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-transducers--transducers-finally-ergonomic-data-processing-for-emacs--colin-woodbury--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-transducers--transducers-finally-ergonomic-data-processing-for-emacs--colin-woodbury--main.json">Download --main.json</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-transducers--transducers-finally-ergonomic-data-processing-for-emacs--colin-woodbury--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-transducers--transducers-finally-ergonomic-data-processing-for-emacs--colin-woodbury--main.webm">Download --main.webm (52MB)</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-transducers--transducers-finally-ergonomic-data-processing-for-emacs--colin-woodbury--silence.webm">Download --silence.webm</a></li></ul></div></div>
+"""]]<div></div>Duration: 26:51 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-transducers--transducers-finally-ergonomic-data-processing-for-emacs--colin-woodbury--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-transducers--transducers-finally-ergonomic-data-processing-for-emacs--colin-woodbury--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-transducers--transducers-finally-ergonomic-data-processing-for-emacs--colin-woodbury--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-transducers--transducers-finally-ergonomic-data-processing-for-emacs--colin-woodbury--main.json">Download --main.json</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-transducers--transducers-finally-ergonomic-data-processing-for-emacs--colin-woodbury--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-transducers--transducers-finally-ergonomic-data-processing-for-emacs--colin-woodbury--main.webm">Download --main.webm (52MB)</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-transducers--transducers-finally-ergonomic-data-processing-for-emacs--colin-woodbury--silence.webm">Download --silence.webm</a></li><li><a href="https://youtu.be/0FTBMyLkPFw">View on Youtube</a></li></ul></div></div>
# Q&A
-<div class="vid"><video controls preload="none" id="transducers-qanda"><source src="https://media.emacsconf.org/2024/emacsconf-2024-transducers--transducers-finally-ergonomic-data-processing-for-emacs--colin-woodbury--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-transducers--transducers-finally-ergonomic-data-processing-for-emacs--colin-woodbury--answers.vtt" default />"""<track kind="chapters" label="Chapters" src="/2024/captions/emacsconf-2024-transducers--transducers-finally-ergonomic-data-processing-for-emacs--colin-woodbury--answers--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="transducers-qanda" data="""
+<div class="vid qanda"><video controls preload="none" id="qanda-transducers"><source src="https://media.emacsconf.org/2024/emacsconf-2024-transducers--transducers-finally-ergonomic-data-processing-for-emacs--colin-woodbury--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-transducers--transducers-finally-ergonomic-data-processing-for-emacs--colin-woodbury--answers.vtt" default />"""<track kind="chapters" label="Chapters" src="/2024/captions/emacsconf-2024-transducers--transducers-finally-ergonomic-data-processing-for-emacs--colin-woodbury--answers--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="qanda-transducers" data="""
01:09.920 Q: When I tried comparing transducers.el to cl-lib and dash (benchmark-compiled), I got the following results
05:40.840 Q: Do you know of any theoretical texts on transducers?
07:04.720 Q: Did you think about [compiler features, macros] viz your cl, fennel, elisp, porting of your transducers?
-08:16.579 Q: Does t-buffer-read provide a lazy stream that\'s linewise, or charwise, or do something else entirely?
+08:16.579 Q: Does t-buffer-read provide a lazy stream that's linewise, or charwise, or do something else entirely?
09:09.424 Q: Can the Elisp library be combined with the stream.el API or seq in general?
11:47.543 Q: How does one debug a t-comp expression? Can you single step and see intermediate results of the different statements you declare?
14:42.495 Q: Is there a path for transducers to enable elisp processing of otherwise overly large datasets as if just normal Emacs \"buffers\" (i.e. just pulling one thing at a time so essentially stream-like under the hood but buffer-like in interface), with none of the usual perf issues with a traditional buffer structure?
@@ -40,7 +39,9 @@ Status: TO_CAPTION_QA
17:50.520 Q: Is the common lisp version ready for 'production' use? Is it complete enough and the API stable enough?
18:17.477 Q: Do we need a pre-written \"t-\" version for every already existing reducing function like + or is there a function to construct them from already defined reducer 2-arg functions?
20:26.320 Q: Is the compelling argument for transducers is that it's a better abstraction?
+22:31.960 Q: Question about how the transducers video was made? Did you use Reveal.js? Do you have a pointer to the html hosted presentation? How did you generate the content for Reveal?
+24:20.160 Q: From your investigations and tests so far, do you think there would be the necessity of transducers to eventually go down into the C level code for things like using them to solve "infinitely-big" buffer-like interfaces and such?
-"""]]<div>Listen to just the audio:<br /><audio controls preload="none" id="transducers-qanda-audio" src="https://media.emacsconf.org/2024/emacsconf-2024-transducers--transducers-finally-ergonomic-data-processing-for-emacs--colin-woodbury--answers.opus"></audio></div><div></div>Duration: 25:24 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2024-transducers">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-transducers--transducers-finally-ergonomic-data-processing-for-emacs--colin-woodbury--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-transducers--transducers-finally-ergonomic-data-processing-for-emacs--colin-woodbury--answers--main--chapters.vtt">Download --answers--main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-transducers--transducers-finally-ergonomic-data-processing-for-emacs--colin-woodbury--answers--main.vtt">Download --answers--main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-transducers--transducers-finally-ergonomic-data-processing-for-emacs--colin-woodbury--answers.opus">Download --answers.opus (13MB)</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-transducers--transducers-finally-ergonomic-data-processing-for-emacs--colin-woodbury--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-transducers--transducers-finally-ergonomic-data-processing-for-emacs--colin-woodbury--answers.webm">Download --answers.webm (57MB)</a></li></ul></div></div>
+"""]]<div>Listen to just the audio:<br /><audio controls preload="none" id="qanda-transducers-audio" src="https://media.emacsconf.org/2024/emacsconf-2024-transducers--transducers-finally-ergonomic-data-processing-for-emacs--colin-woodbury--answers.opus"></audio></div><div></div>Duration: 25:24 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-transducers--transducers-finally-ergonomic-data-processing-for-emacs--colin-woodbury--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-transducers--transducers-finally-ergonomic-data-processing-for-emacs--colin-woodbury--answers--main--chapters.vtt">Download --answers--main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-transducers--transducers-finally-ergonomic-data-processing-for-emacs--colin-woodbury--answers--main.vtt">Download --answers--main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-transducers--transducers-finally-ergonomic-data-processing-for-emacs--colin-woodbury--answers.opus">Download --answers.opus (13MB)</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-transducers--transducers-finally-ergonomic-data-processing-for-emacs--colin-woodbury--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-transducers--transducers-finally-ergonomic-data-processing-for-emacs--colin-woodbury--answers.webm">Download --answers.webm (57MB)</a></li><li><a href="https://toobnix.org/w/24KYPBvSmvYmsCUC9vAW7A">View on Toobnix</a></li><li><a href="https://www.youtube.com/watch?v=eiYXvm7pPuc">View on Youtube</a></li></ul></div></div>
# Description
<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2024/info/water-before.md b/2024/info/water-before.md
index 1f2801fc..cf11c56d 100644
--- a/2024/info/water-before.md
+++ b/2024/info/water-before.md
@@ -1,14 +1,13 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
[[!toc ]]
Format: 14-min talk ; Q&A: IRC
-Etherpad: <https://pad.emacsconf.org/2024-water>
Status: TO_FOLLOW_UP
-<div class="vid"><video controls preload="none" id="water-mainVideo"><source src="https://media.emacsconf.org/2024/emacsconf-2024-water--watering-my-digital-plant-with-emacs-timers--christopher-howard--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-water--watering-my-digital-plant-with-emacs-timers--christopher-howard--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2024/captions/emacsconf-2024-water--watering-my-digital-plant-with-emacs-timers--christopher-howard--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="water-mainVideo" data="""
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-water"><source src="https://media.emacsconf.org/2024/emacsconf-2024-water--watering-my-digital-plant-with-emacs-timers--christopher-howard--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-water--watering-my-digital-plant-with-emacs-timers--christopher-howard--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2024/captions/emacsconf-2024-water--watering-my-digital-plant-with-emacs-timers--christopher-howard--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="mainVideo-water" data="""
00:02.679 Introduction
00:28.823 What is Astrobotany?
00:48.914 What is Gemini?
@@ -18,6 +17,6 @@ Status: TO_FOLLOW_UP
09:05.724 Managing the plant
13:09.560 Conclusion
-"""]]<div></div>Duration: 13:50 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2024-water">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-water--watering-my-digital-plant-with-emacs-timers--christopher-howard--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-water--watering-my-digital-plant-with-emacs-timers--christopher-howard--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-water--watering-my-digital-plant-with-emacs-timers--christopher-howard--main.json">Download --main.json</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-water--watering-my-digital-plant-with-emacs-timers--christopher-howard--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-water--watering-my-digital-plant-with-emacs-timers--christopher-howard--main.webm">Download --main.webm (37MB)</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-water--watering-my-digital-plant-with-emacs-timers--christopher-howard.mp4">Download .mp4 (21MB)</a></li><li><a href="https://toobnix.org/w/kbwz39PxBuNKWcJfr5bGvW">View on Toobnix</a></li></ul></div></div>
+"""]]<div></div>Duration: 13:50 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-water--watering-my-digital-plant-with-emacs-timers--christopher-howard--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-water--watering-my-digital-plant-with-emacs-timers--christopher-howard--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-water--watering-my-digital-plant-with-emacs-timers--christopher-howard--main.json">Download --main.json</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-water--watering-my-digital-plant-with-emacs-timers--christopher-howard--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-water--watering-my-digital-plant-with-emacs-timers--christopher-howard--main.webm">Download --main.webm (37MB)</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-water--watering-my-digital-plant-with-emacs-timers--christopher-howard.mp4">Download .mp4 (21MB)</a></li><li><a href="https://toobnix.org/w/kbwz39PxBuNKWcJfr5bGvW">View on Toobnix</a></li><li><a href="https://youtu.be/dje40OyZuoo">View on Youtube</a></li></ul></div></div>
# Description
<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2024/info/writing-before.md b/2024/info/writing-before.md
index 830cf90c..62663ff7 100644
--- a/2024/info/writing-before.md
+++ b/2024/info/writing-before.md
@@ -1,14 +1,13 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
[[!toc ]]
Format: 14-min talk ; Q&A: BigBlueButton conference room
-Etherpad: <https://pad.emacsconf.org/2024-writing>
Status: TO_FOLLOW_UP
-<div class="vid"><video controls preload="none" id="writing-mainVideo"><source src="https://media.emacsconf.org/2024/emacsconf-2024-writing--emacs-writing-studio--peter-prevos--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-writing--emacs-writing-studio--peter-prevos--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2024/captions/emacsconf-2024-writing--emacs-writing-studio--peter-prevos--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="writing-mainVideo" data="""
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-writing"><source src="https://media.emacsconf.org/2024/emacsconf-2024-writing--emacs-writing-studio--peter-prevos--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-writing--emacs-writing-studio--peter-prevos--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2024/captions/emacsconf-2024-writing--emacs-writing-studio--peter-prevos--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="mainVideo-writing" data="""
00:00.000 Introduction
00:57.649 Why?
02:02.452 EWS configuration
@@ -21,6 +20,6 @@ Status: TO_FOLLOW_UP
10:05.920 The project file
12:18.720 Conclusions
-"""]]<div></div>Duration: 13:31 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2024-writing">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-writing--emacs-writing-studio--peter-prevos--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-writing--emacs-writing-studio--peter-prevos--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-writing--emacs-writing-studio--peter-prevos--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-writing--emacs-writing-studio--peter-prevos--main.webm">Download --main.webm (41MB)</a></li><li><a href="https://toobnix.org/w/5iSx9Hu5JvZE7j4UF82t4H">View on Toobnix</a></li></ul></div></div>
+"""]]<div></div>Duration: 13:31 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-writing--emacs-writing-studio--peter-prevos--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-writing--emacs-writing-studio--peter-prevos--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-writing--emacs-writing-studio--peter-prevos--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-writing--emacs-writing-studio--peter-prevos--main.webm">Download --main.webm (41MB)</a></li><li><a href="https://toobnix.org/w/5iSx9Hu5JvZE7j4UF82t4H">View on Toobnix</a></li><li><a href="https://youtu.be/sIoCeje53eU">View on Youtube</a></li></ul></div></div>
# Description
<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2024/organizers-notebook.md b/2024/organizers-notebook.md
index d1144735..82a4e95f 100644
--- a/2024/organizers-notebook.md
+++ b/2024/organizers-notebook.md
@@ -16,21 +16,21 @@ You might also like the [general organizers' notebook](/organizers-notebook) and
- [Draft CFP](#cfp)
- [Draft schedule](#draft-schedule)
- [Prepare shift calendar, ask people to sign up](#shifts)
- - [Rerecord intros](#intros)
-- [Check EmacsConf infrastructure](#orgc175c35):project:
- - [BigBlueButton](#org7ebee47)
- - [IRC web client](#orgebfb739)
- - [IRC announcements](#org60a98ed)
- - [Media](#org8c38fe6)
- - [Publishing resources to the wiki](#orgd0749f1)
- - [Publishing videos to the media server](#org11cdd06)
- - [Playing videos, switching to windows](#org4f36836)
- - [Etherpad](#orge8409fe)
- - [Do a dry run](#org7d9f280)
- - [Resizing](#org15ee37b)
-- [Processes and notes](#org6ac6986)
- - [Hosting](#org5e9b16c)
- - [ERC](#org3b05f2e)
+ - [Record intros and opening remarks](#intros)
+- [Check EmacsConf infrastructure](#check-emacsconf-infrastructure):project:
+ - [BigBlueButton](#check-emacsconf-infrastructure-bigbluebutton)
+ - [IRC web client](#check-emacsconf-infrastructure-irc-web-client)
+ - [IRC announcements](#check-emacsconf-infrastructure-irc-announcements)
+ - [Media](#check-emacsconf-infrastructure-media)
+ - [Publishing resources to the wiki](#check-emacsconf-infrastructure-publishing-resources-to-the-wiki)
+ - [Publishing videos to the media server](#check-emacsconf-infrastructure-publishing-videos-to-the-media-server)
+ - [Playing videos, switching to windows](#check-emacsconf-infrastructure-playing-videos-switching-to-windows)
+ - [Etherpad](#check-emacsconf-infrastructure-etherpad)
+ - [Do a dry run](#check-emacsconf-infrastructure-do-a-dry-run)
+ - [Resizing](#check-emacsconf-infrastructure-resizing)
+- [Processes and notes](#processes-and-notes)
+ - [Hosting](#processes-and-notes-hosting)
+ - [ERC](#processes-and-notes-erc)
- [Decisions](#decisions)
- [BigBlueButton replacement (BBB)](#bbb)
- [Support code](#support-code)
@@ -235,9 +235,9 @@ emacsconf-discuss, reddit.com/r/emacs, Emacs News, emacs-tangents, Mastodon, X
<a id="draft-schedule"></a>
-## DONE Draft schedule
+## TODO Draft schedule
-<svg width="800" height="300" 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="800" height="150" x="0" y="0" fill="white"></rect><text font-size="10" fill="black" y="12" x="3">Saturday</text><a href="https://emacsconf.org/2024/talks/sat-open" title="Saturday opening remarks" data-slug="sat-open"><title> 9:00- 9:10 Saturday opening remarks</title><rect x="0" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="gray"></rect><g transform="translate(13,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">sat-open</text></g></a><a href="https://emacsconf.org/2024/talks/papers" title="Writing academic papers in Org-Roam" data-slug="papers"><title> 9:10- 9:20 Writing academic papers in Org-Roam</title><rect x="15" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect><g transform="translate(28,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">papers</text></g></a><a href="https://emacsconf.org/2024/talks/project" title="Managing writing project metadata with org-mode" data-slug="project"><title> 9:40-10:00 Managing writing project metadata with org-mode</title><rect x="62" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="gray"></rect><g transform="translate(91,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">project</text></g></a><a href="https://emacsconf.org/2024/talks/org-update" title="The Future of Org" data-slug="org-update"><title>10:20-10:40 The Future of Org</title><rect x="125" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect><g transform="translate(154,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">org-update</text></g></a><a href="https://emacsconf.org/2024/talks/color" title="Colour your Emacs with ease" data-slug="color"><title>11:00-11:10 Colour your Emacs with ease</title><rect x="188" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect><g transform="translate(201,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">color</text></g></a><a href="https://emacsconf.org/2024/talks/maxima" title="Emacs, eev, and Maxima - now!" data-slug="maxima"><title>11:30-11:50 Emacs, eev, and Maxima - now!</title><rect x="235" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="gray"></rect><g transform="translate(264,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">maxima</text></g></a><a href="https://emacsconf.org/2024/talks/theme" title="My journey of finding and creating the “perfect” Emacs theme" data-slug="theme"><title> 1:00- 1:10 My journey of finding and creating the “perfect” Emacs theme</title><rect x="376" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(389,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">theme</text></g></a><a href="https://emacsconf.org/2024/talks/water" title="Watering my (digital) plant with Emacs timers" data-slug="water"><title> 1:30- 1:45 Watering my (digital) plant with Emacs timers</title><rect x="423" y="15" opacity="0.8" width="23" height="59" stroke="black" stroke-dasharray="5,5,5" fill="gray"></rect><g transform="translate(444,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">water</text></g></a><a href="https://emacsconf.org/2024/talks/shell" title="Emacs as a shell" data-slug="shell"><title> 1:55- 2:35 Emacs as a shell</title><rect x="462" y="15" opacity="0.8" width="62" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(522,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">shell</text></g></a><a href="https://emacsconf.org/2024/talks/casual" title="Re-imagining the Emacs user experience with Casual Suite" data-slug="casual"><title> 2:45- 3:05 Re-imagining the Emacs user experience with Casual Suite</title><rect x="541" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(570,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">casual</text></g></a><a href="https://emacsconf.org/2024/talks/hyperdrive" title="New in hyperdrive.el: org-transclusion, easy installation, and more!" data-slug="hyperdrive"><title> 3:25- 3:45 New in hyperdrive.el: org-transclusion, easy installation, and more!</title><rect x="603" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(632,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">hyperdrive</text></g></a><a href="https://emacsconf.org/2024/talks/writing" title="Emacs Writing Studio" data-slug="writing"><title> 4:05- 4:15 Emacs Writing Studio</title><rect x="666" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(679,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">writing</text></g></a><a href="https://emacsconf.org/2024/talks/emacs30" title="Emacs 30 Highlights" data-slug="emacs30"><title> 4:25- 4:50 Emacs 30 Highlights</title><rect x="698" y="15" opacity="0.8" width="39" height="59" stroke="black" stroke-dasharray="" fill="gray"></rect><g transform="translate(735,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">emacs30</text></g></a><a href="https://emacsconf.org/2024/talks/sat-close" title="Saturday closing remarks" data-slug="sat-close"><title> 5:00- 5:10 Saturday closing remarks</title><rect x="752" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="gray"></rect><g transform="translate(765,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">sat-close</text></g></a><a href="https://emacsconf.org/2024/talks/gypsum" title="Gypsum: my clone of Emacs and ELisp written in Scheme" data-slug="gypsum"><title>10:00-10:20 Gypsum: my clone of Emacs and ELisp written in Scheme</title><rect x="94" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect><g transform="translate(123,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">gypsum</text></g></a><a href="https://emacsconf.org/2024/talks/rust" title="An experimental Emacs core in Rust" data-slug="rust"><title>10:40-11:00 An experimental Emacs core in Rust</title><rect x="156" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="gray"></rect><g transform="translate(185,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">rust</text></g></a><a href="https://emacsconf.org/2024/talks/p-search" title="p-search: a local search engine in Emacs" data-slug="p-search"><title>11:20-11:45 p-search: a local search engine in Emacs</title><rect x="219" y="75" opacity="0.8" width="39" height="59" stroke="black" stroke-dasharray="" fill="gray"></rect><g transform="translate(256,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">p-search</text></g></a><a href="https://emacsconf.org/2024/talks/julia" title="Exploring shared philosophies in Julia and Emacs" data-slug="julia"><title> 1:00- 1:10 Exploring shared philosophies in Julia and Emacs</title><rect x="376" y="75" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(389,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">julia</text></g></a><a href="https://emacsconf.org/2024/talks/guile" title="Beguiling Emacs: Guile-Emacs relaunched!" data-slug="guile"><title> 1:25- 1:45 Beguiling Emacs: Guile-Emacs relaunched!</title><rect x="415" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(444,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">guile</text></g></a><a href="https://emacsconf.org/2024/talks/secrets" title="Committing secrets with git using sops-mode" data-slug="secrets"><title> 1:55- 2:05 Committing secrets with git using sops-mode</title><rect x="462" y="75" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(475,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">secrets</text></g></a><a href="https://emacsconf.org/2024/talks/mcclim" title="Elisp and McCLIM" data-slug="mcclim"><title> 2:25- 3:25 Elisp and McCLIM</title><rect x="509" y="75" opacity="0.8" width="94" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(601,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">mcclim</text></g></a><a href="https://emacsconf.org/2024/talks/repro" title="Reproducibly building Emacs: “Hey your checksum is the same as mine!”" data-slug="repro"><title> 3:45- 4:05 Reproducibly building Emacs: “Hey your checksum is the same as mine!”</title><rect x="635" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="gray"></rect><g transform="translate(664,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">repro</text></g></a><g transform="translate(0,15)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="133" font-size="10" text-anchor="left">9 AM</text></g><g transform="translate(94,15)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="133" font-size="10" text-anchor="left">10 AM</text></g><g transform="translate(188,15)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="133" font-size="10" text-anchor="left">11 AM</text></g><g transform="translate(282,15)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="133" font-size="10" text-anchor="left">12 PM</text></g><g transform="translate(376,15)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="133" font-size="10" text-anchor="left">1 PM</text></g><g transform="translate(470,15)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="133" font-size="10" text-anchor="left">2 PM</text></g><g transform="translate(564,15)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="133" font-size="10" text-anchor="left">3 PM</text></g><g transform="translate(658,15)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="133" font-size="10" text-anchor="left">4 PM</text></g><g transform="translate(752,15)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="133" font-size="10" text-anchor="left">5 PM</text></g></g><g transform="translate(0,150)"><title>Schedule for Sunday</title><rect width="800" height="150" x="0" y="0" fill="white"></rect><text font-size="10" fill="black" y="12" x="3">Sunday</text><a href="https://emacsconf.org/2024/talks/sun-open" title="Sunday opening remarks" data-slug="sun-open"><title> 9:00- 9:10 Sunday opening remarks</title><rect x="0" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="gray"></rect><g transform="translate(13,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">sun-open</text></g></a><a href="https://emacsconf.org/2024/talks/links" title="Unlocking linked data: replacing specialized apps with an Org-based semantic wiki" data-slug="links"><title> 9:10- 9:20 Unlocking linked data: replacing specialized apps with an Org-based semantic wiki</title><rect x="15" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="lightblue"></rect><g transform="translate(28,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">links</text></g></a><a href="https://emacsconf.org/2024/talks/regex" title="Emacs regex compilation and future directions for expressive pattern matching" data-slug="regex"><title> 9:30- 9:50 Emacs regex compilation and future directions for expressive pattern matching</title><rect x="47" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="lightblue"></rect><g transform="translate(76,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">regex</text></g></a><a href="https://emacsconf.org/2024/talks/learning" title="Survival of the skillest: Thriving in the learning jungle" data-slug="learning"><title>10:00-10:20 Survival of the skillest: Thriving in the learning jungle</title><rect x="94" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="lightblue"></rect><g transform="translate(123,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">learning</text></g></a><a href="https://emacsconf.org/2024/talks/blee" title="About Blee: enveloping our own autonomy directed digital ecosystem with Emacs" data-slug="blee"><title>10:30-11:15 About Blee: enveloping our own autonomy directed digital ecosystem with Emacs</title><rect x="141" y="15" opacity="0.8" width="70" height="59" stroke="black" stroke-dasharray="" fill="gray"></rect><g transform="translate(209,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">blee</text></g></a><a href="https://emacsconf.org/2024/talks/hyperbole" title="Fun things with GNU Hyperbole" data-slug="hyperbole"><title>11:30-11:45 Fun things with GNU Hyperbole</title><rect x="235" y="15" opacity="0.8" width="23" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect><g transform="translate(256,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">hyperbole</text></g></a><a href="https://emacsconf.org/2024/talks/hywiki" title="HyWiki: Fast, hyperlinked note-taking with no markup required" data-slug="hywiki"><title> 1:00- 1:20 HyWiki: Fast, hyperlinked note-taking with no markup required</title><rect x="376" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(405,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">hywiki</text></g></a><a href="https://emacsconf.org/2024/talks/pgmacs" title="PGmacs: browsing and editing PostgreSQL databases from Emacs" data-slug="pgmacs"><title> 1:40- 1:55 PGmacs: browsing and editing PostgreSQL databases from Emacs</title><rect x="439" y="15" opacity="0.8" width="23" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect><g transform="translate(460,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">pgmacs</text></g></a><a href="https://emacsconf.org/2024/talks/literate" title="Literate programming for the 21st Century" data-slug="literate"><title> 2:15- 2:35 Literate programming for the 21st Century</title><rect x="494" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(523,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">literate</text></g></a><a href="https://emacsconf.org/2024/talks/students" title="An example of a cohesive student workflow in Emacs" data-slug="students"><title> 2:55- 3:05 An example of a cohesive student workflow in Emacs</title><rect x="556" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(569,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">students</text></g></a><a href="https://emacsconf.org/2024/talks/sharing" title="So you want to be an Emacs-fluencer?" data-slug="sharing"><title> 3:15- 3:35 So you want to be an Emacs-fluencer?</title><rect x="588" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(617,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">sharing</text></g></a><a href="https://emacsconf.org/2024/talks/transducers" title="Transducers: finally, ergonomic data processing for Emacs!" data-slug="transducers"><title> 4:00- 4:30 Transducers: finally, ergonomic data processing for Emacs!</title><rect x="658" y="15" opacity="0.8" width="47" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(703,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">transducers</text></g></a><a href="https://emacsconf.org/2024/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"><title> 4:50- 5:00 Sunday closing remarks</title><rect x="737" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="gray"></rect><g transform="translate(750,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">sun-close</text></g></a><g transform="translate(0,15)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="133" font-size="10" text-anchor="left">9 AM</text></g><g transform="translate(94,15)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="133" font-size="10" text-anchor="left">10 AM</text></g><g transform="translate(188,15)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="133" font-size="10" text-anchor="left">11 AM</text></g><g transform="translate(282,15)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="133" font-size="10" text-anchor="left">12 PM</text></g><g transform="translate(376,15)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="133" font-size="10" text-anchor="left">1 PM</text></g><g transform="translate(470,15)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="133" font-size="10" text-anchor="left">2 PM</text></g><g transform="translate(564,15)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="133" font-size="10" text-anchor="left">3 PM</text></g><g transform="translate(658,15)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="133" font-size="10" text-anchor="left">4 PM</text></g><g transform="translate(752,15)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="133" font-size="10" text-anchor="left">5 PM</text></g></g></svg>
+<svg width="800" height="300" 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="800" height="150" x="0" y="0" fill="white"></rect><text font-size="10" fill="black" y="12" x="3">Saturday</text><a href="https://emacsconf.org/2024/talks/sat-open" title="Saturday opening remarks" data-slug="sat-open"><title> 9:00- 9:10 Saturday opening remarks</title><rect x="0" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="gray"></rect><g transform="translate(13,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">sat-open</text></g></a><a href="https://emacsconf.org/2024/talks/papers" title="Writing academic papers in Org-Roam" data-slug="papers"><title> 9:10- 9:20 Writing academic papers in Org-Roam</title><rect x="15" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect><g transform="translate(28,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">papers</text></g></a><a href="https://emacsconf.org/2024/talks/project" title="Managing writing project metadata with org-mode" data-slug="project"><title> 9:40-10:00 Managing writing project metadata with org-mode</title><rect x="62" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="gray"></rect><g transform="translate(91,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">project</text></g></a><a href="https://emacsconf.org/2024/talks/org-update" title="The Future of Org" data-slug="org-update"><title>10:20-11:00 The Future of Org</title><rect x="125" y="15" opacity="0.8" width="62" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect><g transform="translate(185,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">org-update</text></g></a><a href="https://emacsconf.org/2024/talks/color" title="Colour your Emacs with ease" data-slug="color"><title>11:20-11:30 Colour your Emacs with ease</title><rect x="219" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect><g transform="translate(232,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">color</text></g></a><a href="https://emacsconf.org/2024/talks/theme" title="My journey of finding and creating the “perfect” Emacs theme" data-slug="theme"><title> 1:00- 1:10 My journey of finding and creating the “perfect” Emacs theme</title><rect x="376" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(389,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">theme</text></g></a><a href="https://emacsconf.org/2024/talks/water" title="Watering my (digital) plant with Emacs timers" data-slug="water"><title> 1:30- 1:45 Watering my (digital) plant with Emacs timers</title><rect x="423" y="15" opacity="0.8" width="23" height="59" stroke="black" stroke-dasharray="5,5,5" fill="gray"></rect><g transform="translate(444,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">water</text></g></a><a href="https://emacsconf.org/2024/talks/shell" title="Emacs as a shell" data-slug="shell"><title> 1:55- 2:35 Emacs as a shell</title><rect x="462" y="15" opacity="0.8" width="62" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(522,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">shell</text></g></a><a href="https://emacsconf.org/2024/talks/casual" title="Re-imagining the Emacs user experience with Casual Suite" data-slug="casual"><title> 2:45- 3:05 Re-imagining the Emacs user experience with Casual Suite</title><rect x="541" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(570,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">casual</text></g></a><a href="https://emacsconf.org/2024/talks/hyperdrive" title="New in hyperdrive.el: quick install, peer graph, transclusion!" data-slug="hyperdrive"><title> 3:25- 3:45 New in hyperdrive.el: quick install, peer graph, transclusion!</title><rect x="603" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(632,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">hyperdrive</text></g></a><a href="https://emacsconf.org/2024/talks/writing" title="Emacs Writing Studio" data-slug="writing"><title> 4:05- 4:15 Emacs Writing Studio</title><rect x="666" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(679,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">writing</text></g></a><a href="https://emacsconf.org/2024/talks/emacs30" title="Emacs 30 Highlights" data-slug="emacs30"><title> 4:35- 5:00 Emacs 30 Highlights</title><rect x="713" y="15" opacity="0.8" width="39" height="59" stroke="black" stroke-dasharray="" fill="gray"></rect><g transform="translate(750,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">emacs30</text></g></a><a href="https://emacsconf.org/2024/talks/sat-close" title="Saturday closing remarks" data-slug="sat-close"><title> 5:00- 5:10 Saturday closing remarks</title><rect x="752" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="gray"></rect><g transform="translate(765,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">sat-close</text></g></a><a href="https://emacsconf.org/2024/talks/gypsum" title="Gypsum: my clone of Emacs and ELisp written in Scheme" data-slug="gypsum"><title>10:00-10:20 Gypsum: my clone of Emacs and ELisp written in Scheme</title><rect x="94" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect><g transform="translate(123,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">gypsum</text></g></a><a href="https://emacsconf.org/2024/talks/rust" title="An experimental Emacs core in Rust" data-slug="rust"><title>10:40-11:00 An experimental Emacs core in Rust</title><rect x="156" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="gray"></rect><g transform="translate(185,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">rust</text></g></a><a href="https://emacsconf.org/2024/talks/p-search" title="p-search: a local search engine in Emacs" data-slug="p-search"><title>11:20-11:45 p-search: a local search engine in Emacs</title><rect x="219" y="75" opacity="0.8" width="39" height="59" stroke="black" stroke-dasharray="" fill="gray"></rect><g transform="translate(256,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">p-search</text></g></a><a href="https://emacsconf.org/2024/talks/julia" title="Exploring shared philosophies in Julia and Emacs" data-slug="julia"><title> 1:00- 1:10 Exploring shared philosophies in Julia and Emacs</title><rect x="376" y="75" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(389,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">julia</text></g></a><a href="https://emacsconf.org/2024/talks/guile" title="Beguiling Emacs: Guile-Emacs relaunched!" data-slug="guile"><title> 1:25- 1:45 Beguiling Emacs: Guile-Emacs relaunched!</title><rect x="415" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(444,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">guile</text></g></a><a href="https://emacsconf.org/2024/talks/secrets" title="Committing secrets with git using sops-mode" data-slug="secrets"><title> 1:55- 2:05 Committing secrets with git using sops-mode</title><rect x="462" y="75" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(475,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">secrets</text></g></a><a href="https://emacsconf.org/2024/talks/mcclim" title="Elisp and McCLIM" data-slug="mcclim"><title> 2:25- 3:25 Elisp and McCLIM</title><rect x="509" y="75" opacity="0.8" width="94" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(601,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">mcclim</text></g></a><a href="https://emacsconf.org/2024/talks/maxima" title="Emacs, eev, and Maxima - now!" data-slug="maxima"><title> 3:45- 4:05 Emacs, eev, and Maxima - now!</title><rect x="635" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="gray"></rect><g transform="translate(664,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">maxima</text></g></a><g transform="translate(0,15)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="133" font-size="10" text-anchor="left">9 AM</text></g><g transform="translate(94,15)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="133" font-size="10" text-anchor="left">10 AM</text></g><g transform="translate(188,15)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="133" font-size="10" text-anchor="left">11 AM</text></g><g transform="translate(282,15)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="133" font-size="10" text-anchor="left">12 PM</text></g><g transform="translate(376,15)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="133" font-size="10" text-anchor="left">1 PM</text></g><g transform="translate(470,15)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="133" font-size="10" text-anchor="left">2 PM</text></g><g transform="translate(564,15)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="133" font-size="10" text-anchor="left">3 PM</text></g><g transform="translate(658,15)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="133" font-size="10" text-anchor="left">4 PM</text></g><g transform="translate(752,15)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="133" font-size="10" text-anchor="left">5 PM</text></g></g><g transform="translate(0,150)"><title>Schedule for Sunday</title><rect width="800" height="150" x="0" y="0" fill="white"></rect><text font-size="10" fill="black" y="12" x="3">Sunday</text><a href="https://emacsconf.org/2024/talks/sun-open" title="Sunday opening remarks" data-slug="sun-open"><title> 9:00- 9:10 Sunday opening remarks</title><rect x="0" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="gray"></rect><g transform="translate(13,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">sun-open</text></g></a><a href="https://emacsconf.org/2024/talks/links" title="Unlocking linked data: replacing specialized apps with an Org-based semantic wiki" data-slug="links"><title> 9:10- 9:20 Unlocking linked data: replacing specialized apps with an Org-based semantic wiki</title><rect x="15" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="lightblue"></rect><g transform="translate(28,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">links</text></g></a><a href="https://emacsconf.org/2024/talks/regex" title="Emacs regex compilation and future directions for expressive pattern matching" data-slug="regex"><title> 9:30- 9:50 Emacs regex compilation and future directions for expressive pattern matching</title><rect x="47" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="lightblue"></rect><g transform="translate(76,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">regex</text></g></a><a href="https://emacsconf.org/2024/talks/learning" title="Survival of the skillest: Thriving in the learning jungle" data-slug="learning"><title>10:00-10:20 Survival of the skillest: Thriving in the learning jungle</title><rect x="94" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="lightblue"></rect><g transform="translate(123,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">learning</text></g></a><a href="https://emacsconf.org/2024/talks/blee" title="About Blee: enveloping our own autonomy directed digital ecosystem with Emacs" data-slug="blee"><title>10:30-11:15 About Blee: enveloping our own autonomy directed digital ecosystem with Emacs</title><rect x="141" y="15" opacity="0.8" width="70" height="59" stroke="black" stroke-dasharray="" fill="gray"></rect><g transform="translate(209,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">blee</text></g></a><a href="https://emacsconf.org/2024/talks/hyperbole" title="Fun things with GNU Hyperbole" data-slug="hyperbole"><title>11:30-11:45 Fun things with GNU Hyperbole</title><rect x="235" y="15" opacity="0.8" width="23" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect><g transform="translate(256,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">hyperbole</text></g></a><a href="https://emacsconf.org/2024/talks/hywiki" title="HyWiki: Fast, hyperlinked note-taking with no markup required" data-slug="hywiki"><title> 1:00- 1:20 HyWiki: Fast, hyperlinked note-taking with no markup required</title><rect x="376" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(405,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">hywiki</text></g></a><a href="https://emacsconf.org/2024/talks/pgmacs" title="PGmacs: browsing and editing PostgreSQL databases from Emacs" data-slug="pgmacs"><title> 1:40- 1:55 PGmacs: browsing and editing PostgreSQL databases from Emacs</title><rect x="439" y="15" opacity="0.8" width="23" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect><g transform="translate(460,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">pgmacs</text></g></a><a href="https://emacsconf.org/2024/talks/literate" title="Literate programming for the 21st Century" data-slug="literate"><title> 2:15- 2:35 Literate programming for the 21st Century</title><rect x="494" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(523,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">literate</text></g></a><a href="https://emacsconf.org/2024/talks/students" title="An example of a cohesive student workflow in Emacs" data-slug="students"><title> 3:00- 3:10 An example of a cohesive student workflow in Emacs</title><rect x="564" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(577,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">students</text></g></a><a href="https://emacsconf.org/2024/talks/sharing" title="So you want to be an Emacs-fluencer?" data-slug="sharing"><title> 3:20- 3:40 So you want to be an Emacs-fluencer?</title><rect x="596" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(625,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">sharing</text></g></a><a href="https://emacsconf.org/2024/talks/transducers" title="Transducers: finally, ergonomic data processing for Emacs!" data-slug="transducers"><title> 4:00- 4:30 Transducers: finally, ergonomic data processing for Emacs!</title><rect x="658" y="15" opacity="0.8" width="47" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(703,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">transducers</text></g></a><a href="https://emacsconf.org/2024/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"><title> 4:50- 5:00 Sunday closing remarks</title><rect x="737" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="gray"></rect><g transform="translate(750,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">sun-close</text></g></a><g transform="translate(0,15)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="133" font-size="10" text-anchor="left">9 AM</text></g><g transform="translate(94,15)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="133" font-size="10" text-anchor="left">10 AM</text></g><g transform="translate(188,15)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="133" font-size="10" text-anchor="left">11 AM</text></g><g transform="translate(282,15)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="133" font-size="10" text-anchor="left">12 PM</text></g><g transform="translate(376,15)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="133" font-size="10" text-anchor="left">1 PM</text></g><g transform="translate(470,15)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="133" font-size="10" text-anchor="left">2 PM</text></g><g transform="translate(564,15)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="133" font-size="10" text-anchor="left">3 PM</text></g><g transform="translate(658,15)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="133" font-size="10" text-anchor="left">4 PM</text></g><g transform="translate(752,15)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="133" font-size="10" text-anchor="left">5 PM</text></g></g></svg>
Legend:
@@ -286,7 +286,7 @@ AM: 9-12 PM EST, PM: 1-5 PM EST (plus a little extra for setup/transition)
Saturday Dec 7 2024
-<table id="org7840df3">
+<table id="org66cc345">
<colgroup>
@@ -374,7 +374,7 @@ Saturday Dec 7 2024
Sunday Dec 8 2024
-<table id="orgde5d7a1">
+<table id="org6a12bbd">
<colgroup>
@@ -495,10 +495,10 @@ Interested in a shift? Please e-mail <mailto:emacsconf-org-private@gnu.org> and
<a id="intros"></a>
-## Rerecord intros
+## Record intros and opening remarks
-### TODO Redo pkal pronunciation :emacsconf:record:
+### WAITING Redo pkal pronunciation :emacsconf:record:
> kǎlud͡ʑert͡ʃit͡ɕ - zaeph&rsquo;s guess is kah-loo-dyer-tshitch
@@ -508,7 +508,12 @@ Interested in a shift? Please e-mail <mailto:emacsconf-org-private@gnu.org> and
or you can ask questions through Etherpad or IRC.
-### TODO Rerecord intro for Ihor Radchenko and Bastien Guerry
+### WAITING Rerecord intro for Ihor Radchenko and Bastien Guerry
+
+zaeph&rsquo;s tips: Ihor said his name in this presentation: <https://youtu.be/YA1RJxH4xfQ?t=1>
+You’re rolling your Rs for both “Ihor” and “Guerry”, but I think both
+are supposed to be smooth. For Bastien’s family name, it’s
+&ldquo;ghey-ree&rdquo;. <https://paste.xinu.at/A9DFSN/>
zaeph will probably pronounce this so much better than I can. =)
@@ -529,9 +534,11 @@ zaeph will probably pronounce this so much better than I can. =)
You can ask questions via Etherpad or IRC.
-### TODO Rerecord Vincent Conus using psitransfer version :record:emacsconf:
+### WAITING Rerecord Vincent Conus using psitransfer version :record:emacsconf:
+
+<file:///home/sacha/proj/emacsconf/2024/cache/emacsconf-2024-papers--writing-academic-papers-in-orgroam--vincent-conus--name.ogg>
-/ssh:orga@media.emacsconf.org:/srv/upload/emacsconf-papers/0b67be8b-10a1-48f8-9a7b-e73a4c46b9db
+cuhn-us
Next, we have "Writing academic papers in Org-Roam",
by Vincent Conus.
@@ -540,7 +547,7 @@ zaeph will probably pronounce this so much better than I can. =)
or ask questions through Etherpad or IRC.
-### TODO Rerecord Joseph Turner with new title :emacsconf:record:
+### WAITING Rerecord Joseph Turner with new title :emacsconf:record:
[2024-12-02 Emacs news](https://sachachua.com/blog/2024/12/2024-12-02-emacs-news/)
@@ -553,7 +560,261 @@ New in hyperdrive.el: quick install, peer graph, transclusion!
or you can ask questions through Etherpad or IRC.
-<a id="orgc175c35"></a>
+### STARTED Record sat-open remarks :emacsconf:record:
+
+Welcome to EmacsConf 2024, where we have fun
+exploring how much we can do with a text editor.
+It&rsquo;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&rsquo;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&rsquo;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&rsquo;s all you&rsquo;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&rsquo;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&rsquo;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&rsquo;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&rsquo;s your turn to talk.
+If you don&rsquo;t like Javascript,
+you can still ask questions via IRC
+and the hosts can read them out for you.
+We&rsquo;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&rsquo;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&rsquo;ll copy the notes to the talk pages afterwards.
+We have one pad for each talk,
+so you can follow the links to get to the next one
+or go back to the schedule and get the link from there.
+If you have general feedback about
+the conference itself, please put it in
+pad.emacsconf.org/2024 , which is linked on each pad.
+You can also use this as a general community message board
+for things like Help Wanted.
+Internet Relay Chat or IRC can be another great way
+to be part of lots of conversations.
+You can use chat.emacsconf.org to join the IRC channels
+through your web browser. The tabs on the left can help you
+switch between the different channels.
+There&rsquo;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&rsquo;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&rsquo;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&rsquo;ll see if we can make things happen.
+If something goes down, we&rsquo;ll update status.emacsconf.org.
+If it doesn&rsquo;t look like we&rsquo;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&rsquo;ll post the recordings of live talks
+and Q&A sessions within the next month or so.
+If you&rsquo;d like to get an update, you can subscribe to
+the emacsconf-discuss mailing list.
+All right, let&rsquo;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&rsquo;ll probably meet us in the closing remarks.
+That&rsquo;s also where we get to thank
+all the people and organizations
+who make EmacsConf possible.
+Thanks for coming to EmacsConf 2024.
+
+
+### TODO Record sun-open remarks
+
+Welcome to the second day of EmacsConf 2024.
+Today we have one track of talks,
+so you don&rsquo;t have to worry about
+missing out on anything.
+The best parts of EmacsConf are the conversations.
+The wiki has a page on how to watch and participate,
+and I&rsquo;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&rsquo;s all you&rsquo;ve got.
+As you&rsquo;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&rsquo;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&rsquo;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&rsquo;s your turn to talk.
+If you don&rsquo;t like Javascript,
+you can still ask questions via IRC
+and the hosts can read them out for you.
+
+We&rsquo;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&rsquo;ll e-mail the speakers afterwards
+and update the talk pages when they answer.
+
+We&rsquo;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&rsquo;ll copy the notes to the talk pages afterwards.
+We have one pad for each talk,
+so you can follow the links to get to the next one
+or go back to the schedule and get the link from there.
+If you have general feedback about
+the conference itself, please put it in
+pad.emacsconf.org/2024 , which is linked on each pad.
+You can also use this as a general community message board
+for things like Help Wanted.
+Internet Relay Chat or IRC can be another great way
+to be part of lots of conversations.
+You can use chat.emacsconf.org to join the IRC channels
+through your web browser. The tabs on the left can help you
+switch between the different channels.
+Most discussions will be in
+\#emacsconf-gen for the General track.
+If you need to reach us, you can join #emacsconf-org
+or e-mail emacsconf-org-private@gnu.org.
+You can use #emacsconf for hallway conversations.
+Of course, you can join any of these channels
+with your favourite IRC client.
+You can connect to irc.libera.chat
+port 6697 with TLS.
+Once again, we&rsquo;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&rsquo;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&rsquo;ll see if we can make things happen.
+If something goes down, we&rsquo;ll update status.emacsconf.org.
+If it doesn&rsquo;t look like we&rsquo;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&rsquo;ll post the recordings of live talks
+and Q&A sessions within the next month or so.
+If you&rsquo;d like to get an update, you can subscribe to
+the emacsconf-discuss mailing list.
+All right, let&rsquo;s get going.
+Leo Vivier is hosting the general track again today.
+The other volunteers and I will run around mostly backstage,
+and you&rsquo;ll probably meet us in the closing remarks.
+That&rsquo;s also where we get to thank
+all the people and organizations
+who make EmacsConf even possible.
+Thanks for coming to EmacsConf 2024.
+
+
+<a id="check-emacsconf-infrastructure"></a>
# TODO Check EmacsConf infrastructure :project:
@@ -567,9 +828,10 @@ New in hyperdrive.el: quick install, peer graph, transclusion!
- [ ] Streaming
- [ ] Toobnix
- [ ] YouTube
+- [X] Mumble: Can join from my phone, can speak on stream
-<a id="org7ebee47"></a>
+<a id="check-emacsconf-infrastructure-bigbluebutton"></a>
## TODO BigBlueButton
@@ -586,10 +848,11 @@ New in hyperdrive.el: quick install, peer graph, transclusion!
Prerequisites:
- BBB requires 4 CPU cores before it will install. bbb-conf.sh is fairly straightforward, so I guess we could spin down and then spin up again.
+ Image: Ubuntu 22.04
Steps:
-1. Run the BBB installer: ~./bbb-install.sh -v jammy-300 -s bbb.emacsverse.org -e emacsconf@sachachua.com -g ~
+1. Run the BBB installer: `./bbb-install.sh -v jammy-300 -s bbb.emacsverse.org -e emacsconf@sachachua.com -g`
2. `sudo apt install bbb-playback-video` and then follow the instructions at [Server Customization | BigBlueButton](https://docs.bigbluebutton.org/3.0/administration/customize/#install-additional-recording-processing-formats) .
3. <https://docs.bigbluebutton.org/3.0/administration/customize/#mute-all-users-on-startup>
@@ -766,11 +1029,6 @@ Print out the room IDs with
<https://github.com/bigbluebutton/greenlight/issues/1925>
-After about 6 seconds, the rails console quits.
-502 bad gateway
-
-aaaaaaaaaah
-
### DONE Check BBB audio from my phone
@@ -828,7 +1086,7 @@ yq e -i &ldquo;.public.app.clientTitle = \\&rdquo;EmacsConf\\&ldquo;&rdquo; $TAR
### TODO Explore meeting layout? Default to custom, hosts will need to drag people&rsquo;s webcam over if there&rsquo;s a share
-<a id="orgebfb739"></a>
+<a id="check-emacsconf-infrastructure-irc-web-client"></a>
## IRC web client
@@ -836,7 +1094,7 @@ yq e -i &ldquo;.public.app.clientTitle = \\&rdquo;EmacsConf\\&ldquo;&rdquo; $TAR
### DONE Ask libera.chat to increase connections allowed from chat.emacsconf.org on Dec 7 and 8
-<a id="org60a98ed"></a>
+<a id="check-emacsconf-infrastructure-irc-announcements"></a>
## IRC announcements
@@ -847,7 +1105,7 @@ yq e -i &ldquo;.public.app.clientTitle = \\&rdquo;EmacsConf\\&ldquo;&rdquo; $TAR
### TODO Confirm automated IRC announcements from res
-<a id="org8c38fe6"></a>
+<a id="check-emacsconf-infrastructure-media"></a>
## Media
@@ -861,19 +1119,19 @@ yq e -i &ldquo;.public.app.clientTitle = \\&rdquo;EmacsConf\\&ldquo;&rdquo; $TAR
You can generate the index with `emacsconf-publish-update-media`.
-<a id="orgd0749f1"></a>
+<a id="check-emacsconf-infrastructure-publishing-resources-to-the-wiki"></a>
## TODO Publishing resources to the wiki
ansible-playbook -i inventory.yml prod-playbook.yml &#x2013;tags publish
-<a id="org11cdd06"></a>
+<a id="check-emacsconf-infrastructure-publishing-videos-to-the-media-server"></a>
## TODO Publishing videos to the media server
-<a id="org4f36836"></a>
+<a id="check-emacsconf-infrastructure-playing-videos-switching-to-windows"></a>
## Playing videos, switching to windows
@@ -884,7 +1142,7 @@ ansible-playbook -i inventory.yml prod-playbook.yml &#x2013;tags publish
### TODO Document how to get that set up again
-<a id="orge8409fe"></a>
+<a id="check-emacsconf-infrastructure-etherpad"></a>
## Etherpad
@@ -895,7 +1153,7 @@ ansible-playbook -i inventory.yml prod-playbook.yml &#x2013;tags publish
### TODO Generate the main index
-<a id="org7d9f280"></a>
+<a id="check-emacsconf-infrastructure-do-a-dry-run"></a>
## TODO Do a dry run
@@ -906,7 +1164,7 @@ ansible-playbook -i inventory.yml prod-playbook.yml &#x2013;tags publish
### TODO Test connecting to VNC and streaming via OBS
-<a id="org15ee37b"></a>
+<a id="check-emacsconf-infrastructure-resizing"></a>
## Resizing
@@ -933,12 +1191,12 @@ front0: nanode
meet: nanode
-<a id="org6ac6986"></a>
+<a id="processes-and-notes"></a>
# Processes and notes
-<a id="org5e9b16c"></a>
+<a id="processes-and-notes-hosting"></a>
## Hosting
@@ -946,7 +1204,7 @@ meet: nanode
### TODO Finalize host for dev track
-<a id="org3b05f2e"></a>
+<a id="processes-and-notes-erc"></a>
## ERC
diff --git a/2024/organizers-notebook/index.org b/2024/organizers-notebook/index.org
index 7b32b803..673dbec1 100644
--- a/2024/organizers-notebook/index.org
+++ b/2024/organizers-notebook/index.org
@@ -55,6 +55,9 @@ You might also like the [general organizers' notebook](/organizers-notebook) and
#+TOC: headlines 2
* COMMENT Shortcuts
+:PROPERTIES:
+:CUSTOM_ID: shortcuts
+:END:
[[file:~/proj/emacsconf/wiki/organizers-notebook/index.org][Common notebook]]
@@ -137,6 +140,9 @@ CLOSED: [2024-09-17 Tue 16:45]
:END:
**** Draft linked pages
+:PROPERTIES:
+:CUSTOM_ID: phases-draft-cfp-draft-linked-pages
+:END:
- [X] cfp
- [X] submit page
@@ -146,9 +152,13 @@ CLOSED: [2024-09-17 Tue 16:45]
CLOSED: [2024-06-11 Tue 19:21] DEADLINE: <2024-06-14 Fri>
:PROPERTIES:
:CREATED: [024-06-03 Mon 10:1]
+:CUSTOM_ID: phases-draft-cfp-check-with-other-organizers
:END:
**** DONE Post CFP in the usual places
CLOSED: [2024-09-17 Tue 16:45]
+:PROPERTIES:
+:CUSTOM_ID: phases-draft-cfp-post-cfp-in-the-usual-places
+:END:
emacsconf-discuss, reddit.com/r/emacs, Emacs News, emacs-tangents, Mastodon, X
** TODO Draft schedule
:PROPERTIES:
@@ -238,6 +248,9 @@ emacsconf-discuss, reddit.com/r/emacs, Emacs News, emacs-tangents, Mastodon, X
#+RESULTS: schedule
:results:
+sunday closing remarks: Starts at 16:00 before 16:30
+Cancelled talks: writing
+Missing talks: private-ai, bookclub-tapas, zettelkasten, modern, schemacs, blee-lcnt, calc, authoring, hyperboleqa, org-babel, greader, gmail, gnus, languages, swanky, graphics, reader, gardening, llm, commonlisp, latex, reference, juicemacs, bibliography, python, completion
:end:
#+RESULTS:
@@ -371,6 +384,8 @@ Notes:
#+RESULTS:
:results:
+saturday closing remarks: Starts at 13:00 before 16:30
+Missing talks: private-ai, bookclub-tapas, zettelkasten, modern, schemacs, blee-lcnt, calc, authoring, hyperboleqa, org-babel, greader, gmail, gnus, languages, swanky, graphics, reader, gardening, llm, commonlisp, latex, reference, juicemacs, bibliography, python, completion
:end:
[[file:schedule-2-tracks.svg]]
@@ -482,6 +497,7 @@ Interested in a shift? Please e-mail [[mailto:emacsconf-org-private@gnu.org]] an
SCHEDULED: <2024-12-03 Tue>
:PROPERTIES:
:CREATED: [2024-12-02 Mon 16:48]
+:CUSTOM_ID: phases-record-intros-and-opening-remarks-redo-pkal-pronunciation
:END:
#+begin_quote
@@ -496,6 +512,9 @@ or you can ask questions through Etherpad or IRC.
#+end_example
*** WAITING Rerecord intro for Ihor Radchenko and Bastien Guerry
+:PROPERTIES:
+:CUSTOM_ID: phases-record-intros-and-opening-remarks-rerecord-intro-for-ihor-radchenko-and-bastien-guerry
+:END:
zaeph's tips: Ihor said his name in this presentation: https://youtu.be/YA1RJxH4xfQ?t=1
@@ -514,6 +533,9 @@ or ask questions through Etherpad or IRC.
#+end_example
*** TODO Rerecord Eev intro with MAC-SYM-A pronunciation :record:emacsconf:
+:PROPERTIES:
+:CUSTOM_ID: phases-record-intros-and-opening-remarks-rerecord-eev-intro-with-mac-sym-a-pronunciation
+:END:
#+begin_quote
My name in the intro is perfect, but Maxima comes from Macsyma, and it is
@@ -530,6 +552,7 @@ You can ask questions via Etherpad or IRC.
SCHEDULED: <2024-12-03 Tue>
:PROPERTIES:
:CREATED: [2024-12-02 Mon 19:48]
+:CUSTOM_ID: phases-record-intros-and-opening-remarks-rerecord-vincent-conus-using-psitransfer-version
:END:
[[file:~/proj/emacsconf/2024/cache/emacsconf-2024-papers--writing-academic-papers-in-orgroam--vincent-conus--name.ogg]]
@@ -548,6 +571,7 @@ or ask questions through Etherpad or IRC.
*** WAITING Rerecord Joseph Turner with new title :emacsconf:record:
:PROPERTIES:
:CREATED: [2024-12-02 Mon 13:51]
+:CUSTOM_ID: phases-record-intros-and-opening-remarks-rerecord-joseph-turner-with-new-title
:END:
[[https://sachachua.com/blog/2024/12/2024-12-02-emacs-news/][2024-12-02 Emacs news]]
@@ -564,6 +588,7 @@ or you can ask questions through Etherpad or IRC.
*** STARTED Record sat-open remarks :emacsconf:record:
:PROPERTIES:
:Effort: 0:30
+:CUSTOM_ID: phases-record-intros-and-opening-remarks-record-sat-open-remarks
:END:
:LOGBOOK:
CLOCK: [2024-12-03 Tue 13:38]--[2024-12-04 Wed 08:48] => 19:10
@@ -692,6 +717,9 @@ all the people and organizations
who make EmacsConf possible.
Thanks for coming to EmacsConf 2024.
*** TODO Record sun-open remarks
+:PROPERTIES:
+:CUSTOM_ID: phases-record-intros-and-opening-remarks-record-sun-open-remarks
+:END:
Welcome to the second day of EmacsConf 2024.
Today we have one track of talks,
@@ -819,6 +847,9 @@ who make EmacsConf even possible.
Thanks for coming to EmacsConf 2024.
* TODO [#A] Check EmacsConf infrastructure :project:
+:PROPERTIES:
+:CUSTOM_ID: check-emacsconf-infrastructure
+:END:
- [X] IRC
- [ ] Streaming assets
@@ -836,19 +867,27 @@ Thanks for coming to EmacsConf 2024.
DEADLINE: <2024-11-15 Fri>
:PROPERTIES:
:CREATED: [2024-11-02 Sat 11:38]
+:CUSTOM_ID: check-emacsconf-infrastructure-bigbluebutton
:END:
- Plan: spin up Linode temporarily: [[#bbb][BigBlueButton replacement]]
*** Notes
+:PROPERTIES:
+:CUSTOM_ID: check-emacsconf-infrastructure-bigbluebutton-notes
+:END:
**** install, sizes
+:PROPERTIES:
+:CUSTOM_ID: check-emacsconf-infrastructure-bigbluebutton-notes-install-sizes
+:END:
[2024-11-19 Tue]
Prerequisites:
- BBB requires 4 CPU cores before it will install. bbb-conf.sh is fairly straightforward, so I guess we could spin down and then spin up again.
+ Image: Ubuntu 22.04
Steps:
-1. Run the BBB installer: ~./bbb-install.sh -v jammy-300 -s bbb.emacsverse.org -e emacsconf@sachachua.com -g ~
+1. Run the BBB installer: ~./bbb-install.sh -v jammy-300 -s bbb.emacsverse.org -e emacsconf@sachachua.com -g~
2. ~sudo apt install bbb-playback-video~ and then follow the instructions at [[https://docs.bigbluebutton.org/3.0/administration/customize/#install-additional-recording-processing-formats][Server Customization | BigBlueButton]] .
3. https://docs.bigbluebutton.org/3.0/administration/customize/#mute-all-users-on-startup
@@ -868,7 +907,6 @@ linode-cli linodes resize 67329098 --type g6-nanode-1 --allow_auto_disk_resize t
#+begin_src
echo "notify-send 'Resizing BBB...'; linode-cli linodes resize 67329098 --type g6-nanode-1 --allow_auto_disk_resize true" | at 'now + 1 hour'
-
#+end_src
Resize disk
@@ -881,11 +919,15 @@ https://techdocs.akamai.com/linode-api/reference/post-resize-disk
https://www.linode.com/community/questions/21942/how-can-i-schedule-resizing-a-linode
**** backing up
+:PROPERTIES:
+:CUSTOM_ID: check-emacsconf-infrastructure-bigbluebutton-notes-backing-up
+:END:
[2024-11-20 Wed] ssh root@66.175.208.243 'tar zcvf - /var/bigbluebutton /etc/bigbluebutton /root/greenlight-v3 /usr/local/bigbluebutton /usr/share/bbb-web' > bbb-backup.tar.gz
**** DONE Set up bbb with new domain name
CLOSED: [2024-11-28 Thu 10:00]
:PROPERTIES:
:Effort: 1:00
+:CUSTOM_ID: check-emacsconf-infrastructure-bigbluebutton-notes-set-up-bbb-with-new-domain-name
:END:
:LOGBOOK:
CLOCK: [2024-11-28 Thu 09:06]--[2024-11-28 Thu 09:17] => 0:11
@@ -929,6 +971,7 @@ SCHEDULED: <2024-11-28 Thu>
:PROPERTIES:
:CREATED: [2024-11-28 Thu 11:12]
:Effort: 0:30
+:CUSTOM_ID: check-emacsconf-infrastructure-bigbluebutton-set-up-moderator-access-codes-for-all-the-meeting-rooms-and-make-it-so-people-can-start-the-meeting
:END:
:LOGBOOK:
CLOCK: [2024-11-28 Thu 12:13]--[2024-11-28 Thu 13:10] => 0:57
@@ -1009,6 +1052,7 @@ CLOSED: [2024-11-28 Thu 10:59] SCHEDULED: <2024-11-28 Thu>
:PROPERTIES:
:CREATED: [2024-11-28 Thu 10:12]
:Effort: 1:00
+:CUSTOM_ID: check-emacsconf-infrastructure-bigbluebutton-figure-out-what-s-going-on-with-bbb
:END:
:LOGBOOK:
CLOCK: [2024-11-28 Thu 10:47]--[2024-11-28 Thu 10:59] => 0:12
@@ -1093,13 +1137,18 @@ https://github.com/bigbluebutton/greenlight/issues/1925
CLOSED: [2024-11-28 Thu 13:03] SCHEDULED: <2024-11-21 Thu>
:PROPERTIES:
:CREATED: [2024-11-19 Tue 15:39]
+:CUSTOM_ID: check-emacsconf-infrastructure-bigbluebutton-check-bbb-audio-from-my-phone
:END:
*** DONE Create accounts for corwin
CLOSED: [2024-11-28 Thu 10:11]
+:PROPERTIES:
+:CUSTOM_ID: check-emacsconf-infrastructure-bigbluebutton-create-accounts-for-corwin
+:END:
*** CANCELLED [#C] Customize BBB to process at night
CLOSED: [2024-11-27 Wed 13:17]
:PROPERTIES:
:CREATED: [2024-11-20 Wed 12:11]
+:CUSTOM_ID: check-emacsconf-infrastructure-bigbluebutton-customize-bbb-to-process-at-night
:END:
https://docs.bigbluebutton.org/3.0/administration/customize/
@@ -1117,40 +1166,75 @@ and do systemctl daemon-reload. This file overrides the timing of when systemd r
- [[file:~/sync/orgzly/Inbox.org::*Set up rooms and assign as properties][Set up rooms and assign as properties]]
*** TODO [#C] Change background presentation
+:PROPERTIES:
+:CUSTOM_ID: check-emacsconf-infrastructure-bigbluebutton-change-background-presentation
+:END:
https://docs.bigbluebutton.org/3.0/administration/customize/#change-the-default-presentation
*** TODO [#C] Modify landing page
+:PROPERTIES:
+:CUSTOM_ID: check-emacsconf-infrastructure-bigbluebutton-modify-landing-page
+:END:
/var/www/bigbluebutton-default/assets/index.html
keep backup copy as it will be overwritten when bbb-conf is called
*** TODO [#C] Change default welcome message
:PROPERTIES:
:Effort: 0:30
+:CUSTOM_ID: check-emacsconf-infrastructure-bigbluebutton-change-default-welcome-message
:END:
:LOGBOOK:
CLOCK: [2024-11-20 Wed 12:21]--[2024-11-20 Wed 12:46] => 0:25
:END:
https://docs.bigbluebutton.org/3.0/administration/customize/#change-the-default-welcome-message
*** TODO [#C] Change html5 title
+:PROPERTIES:
+:CUSTOM_ID: check-emacsconf-infrastructure-bigbluebutton-change-html5-title
+:END:
/usr/share/bigbluebutton/html5-client/private/config/settings.yml
TARGET=/usr/share/bigbluebutton/html5-client/private/config/settings.yml
yq e -i ".public.app.clientTitle = \"EmacsConf\"" $TARGET
*** TODO [#C] Try live captions
+:PROPERTIES:
+:CUSTOM_ID: check-emacsconf-infrastructure-bigbluebutton-try-live-captions
+:END:
https://docs.bigbluebutton.org/3.0/administration/customize/#enable-live-captions
*** TODO Explore meeting layout? Default to custom, hosts will need to drag people's webcam over if there's a share
+:PROPERTIES:
+:CUSTOM_ID: check-emacsconf-infrastructure-bigbluebutton-explore-meeting-layout-default-to-custom-hosts-will-need-to-drag-people-s-webcam-over-if-there-s-a-share
+:END:
** IRC web client
+:PROPERTIES:
+:CUSTOM_ID: check-emacsconf-infrastructure-irc-web-client
+:END:
*** DONE Ask libera.chat to increase connections allowed from chat.emacsconf.org on Dec 7 and 8
CLOSED: [2024-11-27 Wed 13:18]
+:PROPERTIES:
+:CUSTOM_ID: check-emacsconf-infrastructure-irc-web-client-ask-libera-chat-to-increase-connections-allowed-from-chat-emacsconf-org-on-dec-7-and-8
+:END:
** IRC announcements
+:PROPERTIES:
+:CUSTOM_ID: check-emacsconf-infrastructure-irc-announcements
+:END:
*** DONE Confirm manual IRC announcements
CLOSED: [2024-11-02 Sat 12:05]
+:PROPERTIES:
+:CUSTOM_ID: check-emacsconf-infrastructure-irc-announcements-confirm-manual-irc-announcements
+:END:
*** TODO Confirm automated IRC announcements from res
+:PROPERTIES:
+:CUSTOM_ID: check-emacsconf-infrastructure-irc-announcements-confirm-automated-irc-announcements-from-res
+:END:
** Media
+:PROPERTIES:
+:CUSTOM_ID: check-emacsconf-infrastructure-media
+:END:
*** TODO Switch public media to unprotected root before the conference
SCHEDULED: <2024-11-29 Fri>
:PROPERTIES:
:CREATED: [2024-11-12 Tue 14:18]
+:CUSTOM_ID: check-emacsconf-infrastructure-media-switch-public-media-to-unprotected-root-before-the-conference
:END:
1. Clear public media directory.
@@ -1159,27 +1243,53 @@ SCHEDULED: <2024-11-29 Fri>
You can generate the index with =emacsconf-publish-update-media=.
** TODO Publishing resources to the wiki
+:PROPERTIES:
+:CUSTOM_ID: check-emacsconf-infrastructure-publishing-resources-to-the-wiki
+:END:
ansible-playbook -i inventory.yml prod-playbook.yml --tags publish
** TODO Publishing videos to the media server
+:PROPERTIES:
+:CUSTOM_ID: check-emacsconf-infrastructure-publishing-videos-to-the-media-server
+:END:
** Playing videos, switching to windows
+:PROPERTIES:
+:CUSTOM_ID: check-emacsconf-infrastructure-playing-videos-switching-to-windows
+:END:
*** TODO Generate test videos for everything
+:PROPERTIES:
+:CUSTOM_ID: check-emacsconf-infrastructure-playing-videos-switching-to-windows-generate-test-videos-for-everything
+:END:
*** TODO Document how to get that set up again
+:PROPERTIES:
+:CUSTOM_ID: check-emacsconf-infrastructure-playing-videos-switching-to-windows-document-how-to-get-that-set-up-again
+:END:
** Etherpad
+:PROPERTIES:
+:CUSTOM_ID: check-emacsconf-infrastructure-etherpad
+:END:
*** TODO Generate pads for all the talks
+:PROPERTIES:
+:CUSTOM_ID: check-emacsconf-infrastructure-etherpad-generate-pads-for-all-the-talks
+:END:
*** TODO Generate the main index
+:PROPERTIES:
+:CUSTOM_ID: check-emacsconf-infrastructure-etherpad-generate-the-main-index
+:END:
** TODO Do a dry run
SCHEDULED: <2024-11-22 Fri>
:PROPERTIES:
:CREATED: [2024-11-02 Sat 11:40]
+:CUSTOM_ID: check-emacsconf-infrastructure-do-a-dry-run
:END:
*** DONE Generate all the test assets
CLOSED: [2024-11-06 Wed 18:52]
:PROPERTIES:
:Effort: 0:15
+:CUSTOM_ID: check-emacsconf-infrastructure-do-a-dry-run-generate-all-the-test-assets
:END:
:LOGBOOK:
CLOCK: [2024-11-06 Wed 18:47]--[2024-11-06 Wed 18:52] => 0:05
@@ -1188,8 +1298,12 @@ CLOCK: [2024-11-06 Wed 18:47]--[2024-11-06 Wed 18:52] => 0:05
SCHEDULED: <2024-11-07 Thu>
:PROPERTIES:
:CREATED: [2024-11-06 Wed 18:52]
+:CUSTOM_ID: check-emacsconf-infrastructure-do-a-dry-run-test-connecting-to-vnc-and-streaming-via-obs
:END:
** Resizing
+:PROPERTIES:
+:CUSTOM_ID: check-emacsconf-infrastructure-resizing
+:END:
live0: 64GB
front0: 32GB
@@ -1199,6 +1313,7 @@ meet: 64GB
SCHEDULED: <2024-12-06 Fri>
:PROPERTIES:
:CREATED: [2024-11-22 Fri 13:46]
+:CUSTOM_ID: check-emacsconf-infrastructure-resizing-resize-nodes-before-production
:END:
live0: 64GB
@@ -1209,6 +1324,7 @@ meet: 64GB
SCHEDULED: <2024-12-08 Sun>
:PROPERTIES:
:CREATED: [2024-11-22 Fri 13:46]
+:CUSTOM_ID: check-emacsconf-infrastructure-resizing-resize-nodes-after-production
:END:
live0: nanode
@@ -1217,12 +1333,25 @@ front0: nanode
SCHEDULED: <2024-12-10 Tue>
:PROPERTIES:
:CREATED: [2024-11-22 Fri 13:47]
+:CUSTOM_ID: check-emacsconf-infrastructure-resizing-resize-meet-after-production
:END:
meet: nanode
* Processes and notes
+:PROPERTIES:
+:CUSTOM_ID: processes-and-notes
+:END:
** Hosting
+:PROPERTIES:
+:CUSTOM_ID: processes-and-notes-hosting
+:END:
*** TODO Finalize host for dev track
+:PROPERTIES:
+:CUSTOM_ID: processes-and-notes-hosting-finalize-host-for-dev-track
+:END:
** ERC
+:PROPERTIES:
+:CUSTOM_ID: processes-and-notes-erc
+:END:
Some convenient commands are defined in emacsconf-el:emacsconf-erc.el.
diff --git a/2024/prepare.md b/2024/prepare.md
index 97c4d608..8ae74e6f 100644
--- a/2024/prepare.md
+++ b/2024/prepare.md
@@ -247,7 +247,7 @@ time after the event.
## How do I show my keystrokes on screen?
In Emacs, you can use
-[interaction-log.el](https://github.com/michael-heerdegen/interaction-log.el)
+[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).
diff --git a/2024/report.md b/2024/report.md
new file mode 100644
index 00000000..3064515c
--- /dev/null
+++ b/2024/report.md
@@ -0,0 +1,199 @@
+<!-- report.md is exported report.org, please modify that instead. -->
+[[!sidebar content=""]]
+
+This file is automatically exported from [/2024/report.org](/2024/report.org). You might prefer to navigate this as an Org file instead. To do so, [clone the wiki repository](https://emacsconf.org/edit/).
+[[!meta title="EmacsConf 2024 Report"]]
+[[!date "2024-12-28"]]
+[[!meta copyright="Copyright &copy; 2024 Sacha Chua"]]
+
+
+# Table of Contents
+
+- [Overview](#overview)
+- [Technical details](#technical-details)
+- [Process improvements](#process-improvements)
+- [Finances](#finances)
+- [Acknowledgements](#acknowledgements)
+- [Updates](#updates)
+
+
+<a id="overview"></a>
+
+# Overview
+
+EmacsConf 2024 was held on December 7 and 8 as an online conference. We had 31 talks across two tracks (general and development), with a total of 11 hours of presentations, 8 hours of Q&A via web conference, and lots of lively discussion across IRC and Etherpad. Throughout the conference, there were up to 430 people watching via the livestream, and more than 80 people joined the live Q&A web conferences. There were also satellite events in Switzerland and Slovenia where people watched together.
+
+Thanks to volunteers who edited captions for pre-recorded videos, we were able to broadcast all the early submissions with open captions. This not only made talks more accessible while watching the livestreams, but it also made it easier to enjoy the talks in noisy environments or to catch up on talks. People said:
+
+We posted pre-recorded videos and transcripts on talk pages shortly after they started streaming, and the recordings of live talks and Q&A sessions are now also available. We've also archived questions and comments from IRC and Etherpad onto the talk pages. You can find the talk pages at <https://emacsconf.org/2024/talks> . The videos are also available on Toobnix (<https://toobnix.org/c/emacsconf/videos>) and YouTube (<https://www.youtube.com/@EmacsConf>).
+
+Overall, people said:
+
+- "It's the first time I've been able to attend the whole conference live, and it's been great fun, I've had a blast :)"
+- "Thanks again to the organizers, and presenters for many great talks, and participants for interesting exchanges, see you all next year (fingers crossed)"
+- "EmacsConf is one of the big highlights of my year every year."
+
+
+<a id="technical-details"></a>
+
+# Technical details
+
+EmacsConf is committed to software freedom. We used the following tools
+for this year's conference:
+
+- [Org Mode](https://orgmode.org/), [Emacs](https://www.gnu.org/software/emacs/): organization and collaboration
+- [MPV](https://mpv.io): video player
+- [BigBlueButton](https://bigbluebutton.org/): web conference
+- [OBS Studio](https://obsproject.com/): streaming
+- [TigerVNC](https://tigervnc.org/): controlling the remote server
+- [Icecast](https://icecast.org/): streaming WEBM
+- [Internet Relay Chat via Libera.chat](https://libera.chat/), [The Lounge](https://thelounge.chat/), and [ERC](https://www.gnu.org/software/emacs/erc.html): conversation
+- [Mumble](https://www.mumble.info/): audio conferencing for coordination
+- [Etherpad](https://etherpad.org/): questions and notes
+- [Ikiwiki](https://ikiwiki.info/): website
+- [PsiTransfer](https://github.com/psi-4ward/psitransfer): uploads
+- [FFmpeg](https://ffmpeg.org): video and audio processing
+- [Audacity](https://www.audacityteam.org/): audio editing
+- [WhisperX](https://github.com/m-bain/whisperX): captioning
+- [Aeneas](https://www.readbeyond.it/aeneas/): forced alignment to get timestamps
+- [subed-mode](https://codeberg.org/sachac/subed): captioning
+- [Git](https://git-scm.com/): version control
+- [Mailman](https://list.org/): mailing lists; service provided by the Free Software Foundation
+- [Nginx](https://www.nginx.com/): web server; server provided by the Free Software Foundation
+- [Ansible](https://www.ansible.com/): system configuration
+
+You can find out more about our infrastructure at
+<https://emacsconf.org/infra> .
+
+
+<a id="process-improvements"></a>
+
+# Process improvements
+
+This year we tried out the following experiments:
+
+- BigBlueButton 3.0: We set up our own server since the previous donated server was decommissioned.
+ Using BBB 3.0 let us customize the on-screen layout and export recorded videos easily.
+- We added an open mic session and moved some of our closing remarks earlier. This let people share last-minute updates and also allowed us to wrap up the conference more promptly.
+- We used WhisperX for the first draft of captions for improved performance.
+- Automatic normalization with ffmpeg-normalize didn't work out, so we manually normalized the video files.
+- We needed to upgrade MPV to v0.38 in order to deal with palette smearing.
+- In addition to livestreaming to live.emacsconf.org via Icecast, we also livestreamed via YouTube. We were unable to livestream via Toobnix due to technical difficulties.
+- We experimented with upgrading the streaming server to a 64GB 32core dedicated CPU server, but this additional capacity was not needed. We downgraded back to 64GB 16core shared.
+- We updated the wiki layout to include sticky videos on the talk pages.
+- We developed more tools for copying IRC messages to the clipboard, checking and adjusting subtitle timing, and cropping media files.
+- We offered stickers and pins as tokens of appreciation.
+
+For in-depth notes, see <https://sachachua.com/blog/2024/12/emacsconf-2024-notes/> .
+
+Next year we're looking forward to building on top of even more documentation and automation. Fun!
+
+
+<a id="finances"></a>
+
+# Finances
+
+Costs (USD, not including 13% tax):
+
+<table>
+
+
+<colgroup>
+<col class="org-right">
+
+<col class="org-left">
+</colgroup>
+<tbody>
+<tr>
+<td class="org-right">52.54</td>
+<td class="org-left">Extra costs for hosting in December</td>
+</tr>
+
+<tr>
+<td class="org-right">3.11</td>
+<td class="org-left">Extra costs for BBB testing in November</td>
+</tr>
+
+<tr>
+<td class="org-right">120</td>
+<td class="org-left">Hosting costs year-round (two Linode nanodes)</td>
+</tr>
+</tbody>
+</table>
+
+Total of USD 175.65 + tax, or USD 198.48 for 2024.
+
+Thanks to people who donated through the [Working
+Together](https://www.fsf.org/working-together/fund) program of the Free Software Foundation,
+we are well-equipped to cover those costs for this
+year.
+
+
+<a id="acknowledgements"></a>
+
+# Acknowledgements
+
+We would like to thank the following:
+
+- Thank you to all the speakers, volunteers, and participants, and to all those other people in our lives who make it possible through time and support.
+- Thanks to Leo Vivier and Corwin Brust for hosting the sessions, and to FlowyCoder for checking people in.
+- Thanks to our proposal review volunteers James Howell, JC Helary, and others for helping with the early acceptance process.
+- Thanks to our captioning volunteers: Mark Lewin, Rodrigo Morales, Anush, annona, and James Howell, and some speakers who captioned their own talks.
+- Thanks to Leo Vivier for fiddling with the audio to get things nicely synced.
+- Thanks to volunteers who kept the mailing lists free from spam.
+- Thanks to Bhavin Gandhi, Christopher Howard, Joseph Turner, and screwlisp for quality-checking.
+- Thanks to shoshin for the music.
+- Thanks to Amin Bandali for help with infrastructure and communication.
+- Thanks to Ry P for the server that we're using for OBS streaming and for processing videos.
+- Thanks to the Free Software Foundation for Emacs itself, the mailing lists, the media.emacsconf.org server, and handling donations on our behalf through the FSF Working Together program. <https://www.fsf.org/working-together/fund>
+- Thanks to the many users and contributers and project teams that create all the awesome free software we use, especially: BigBlueButton, Etherpad, Icecast, OBS, TheLounge, libera.chat, ffmpeg, OpenAI Whisper, WhisperX, the aeneas forced alignment tool, PsiTransfer, subed, and many, many other tools and services we used to prepare and host this years conference
+- Thanks to everyone!
+
+
+<a id="updates"></a>
+
+# Updates
+
+If you would like to get updates and announcements, you can sign up at
+<https://lists.gnu.org/mailman/listinfo/emacsconf-discuss> .
+
+Please keep an eye out for interesting things that
+might be fun to present at next year's EmacsConf.
+We'd love to get talks at all levels of experience
+and about lots of different kinds of interests.
+Previous speakers wrote:
+
+- "I always got the feeling of being heard and
+ welcome in spite of the vast distances and
+ cultures separating us. This community always
+ feels like it is open to new members any time.
+ With regards to the conference process also, it
+ was a microcosm of the bigger community and
+ hence I got the same feeling. You didn't have to
+ be an expert or a person who's been using emacs
+ for a long time to talk about something useful
+ for the community. Even the struggles of a noob
+ may be useful for someone else in the
+ community."
+- "I can honestly say though that I had a great
+ time putting my talk together. I hope people
+ will have a good time listening to it. Now that
+ the work is over, I can say it was worth it. so
+ I recommend it warmly"
+- "This has been an all-around fantastic
+ experience, both as a first-time attendee and
+ speaker. many thanks to the volunteers who make
+ emacsconf possible, and the other speakers for
+ their wonderful talks (many of which i'll be
+ reviewing now that i'm not so busy preparing)"
+
+If you'd like to volunteer for EmacsConf, check
+out <https://emacsconf.org/volunteer/> to see if
+anything resonates with you, and e-mail us at
+<mailto:emacsconf-org@gnu.org>. We'd love to have
+you on board.
+
+Hope to see you next year!
+
+- Sacha Chua
+
diff --git a/2024/report.org b/2024/report.org
new file mode 100644
index 00000000..2591a9d8
--- /dev/null
+++ b/2024/report.org
@@ -0,0 +1,237 @@
+# [[elisp:(org-md-export-to-markdown)][Export this file to Markdown]]
+
+#+begin_export md
+<!-- report.md is exported report.org, please modify that instead. -->
+[[!sidebar content=""]]
+
+This file is automatically exported from [/2024/report.org](/2024/report.org). You might prefer to navigate this as an Org file instead. To do so, [clone the wiki repository](https://emacsconf.org/edit/).
+[[!meta title="EmacsConf 2024 Report"]]
+[[!date "2024-12-28"]]
+[[!meta copyright="Copyright &copy; 2024 Sacha Chua"]]
+#+end_export
+
+#+TOC: headlines 1
+
+* COMMENT About this document
+:PROPERTIES:
+:CUSTOM_ID: comment-about-this-document
+:END:
+
+Goal for this document:
+
+- summarize results of EmacsConf into something that we can pull
+ relevant excerpts from depending on the audience
+ - fundraising, FSF
+
+Examples:
+
+- https://emacsconf.org/2023/report/
+- [[https://www.linkedin.com/pulse/pycon-namibia-2023-report-pycon-namibia]] - brief
+- [[https://pycon.blogspot.com/2023/06/pycon-us-2023-recap-and-recording.html]] - recap PDF with stats and quotes
+- [[https://media.debconf.org/dc14/report/DebConf14_final_report.en.pdf]] - PDF with lots of details
+- [[https://www.fsf.org/blogs/community/from-freedom-trail-to-free-boot-and-free-farms-charting-the-course-at-libreplanet-day-2]]
+
+* COMMENT Generating stats
+
+Other notes from
+https://sachachua.com/blog/2024/12/emacsconf-2024-notes/
+
+** Presentation and Q&A stats
+
+#+begin_src emacs-lisp :results table replace :exports results :eval never-export
+(let ((main
+ (seq-remove (lambda (o) (string-match "\\(sat\\|sun\\)-\\(open\\|close\\)" o))
+ (directory-files emacsconf-cache-dir t "--main.webm")))
+ (answers
+ (seq-remove (lambda (o) (string-match "\\(sat\\|sun\\)-\\(open\\|close\\)" o))
+ (directory-files emacsconf-cache-dir t "--answers.webm"))))
+ `(("Talks" ,(length main))
+ ("Hours" ,(format "%.1f" (/ (apply '+ (mapcar #'compile-media-get-file-duration-ms main)) (* 1000 60 60))))
+ ("Q&A web conferences" ,(length answers))
+ ("Hours" ,(format "%.1f" (/ (apply '+ (mapcar #'compile-media-get-file-duration-ms answers)) (* 1000 60 60))))))
+#+end_src
+
+#+RESULTS:
+:results:
+| Talks | 31 |
+| Hours | 10.7 |
+| Q&A web conferences | 21 |
+| Hours | 7.8 |
+:end:
+
+** BigBlueButton
+
+#+begin_src emacs-lisp :results table :eval never-export
+(emacsconf-extract-bbb-report
+ (directory-files-recursively
+ "~/proj/emacsconf/2024/backups/bigbluebutton/recording/raw"
+ "events.xml"))
+#+end_src
+
+#+RESULTS:
+:results:
+| 107 | Max number of simultaneous users |
+| 7 | Max number of simultaneous meetings |
+| 25 | Max number of people in one meeting |
+| 102 | Total unique users |
+| 40 | Total unique talking |
+:end:
+
+* Overview
+:PROPERTIES:
+:CUSTOM_ID: overview
+:END:
+
+EmacsConf 2024 was held on December 7 and 8 as an online conference. We had 31 talks across two tracks (general and development), with a total of 11 hours of presentations, 8 hours of Q&A via web conference, and lots of lively discussion across IRC and Etherpad. Throughout the conference, there were up to 430 people watching via the livestream, and more than 80 people joined the live Q&A web conferences. There were also satellite events in Switzerland and Slovenia where people watched together.
+
+Thanks to volunteers who edited captions for pre-recorded videos, we were able to broadcast all the early submissions with open captions. This not only made talks more accessible while watching the livestreams, but it also made it easier to enjoy the talks in noisy environments or to catch up on talks. People said:
+
+We posted pre-recorded videos and transcripts on talk pages shortly after they started streaming, and the recordings of live talks and Q&A sessions are now also available. We've also archived questions and comments from IRC and Etherpad onto the talk pages. You can find the talk pages at [[https://emacsconf.org/2024/talks]] . The videos are also available on Toobnix ([[https://toobnix.org/c/emacsconf/videos]]) and YouTube ([[https://www.youtube.com/@EmacsConf]]).
+
+Overall, people said:
+
+- "It's the first time I've been able to attend the whole conference live, and it's been great fun, I've had a blast :)"
+- "Thanks again to the organizers, and presenters for many great talks, and participants for interesting exchanges, see you all next year (fingers crossed)"
+- "EmacsConf is one of the big highlights of my year every year."
+
+* Technical details
+:PROPERTIES:
+:CUSTOM_ID: technical-details
+:END:
+
+EmacsConf is committed to software freedom. We used the following tools
+for this year's conference:
+
+- [[https://orgmode.org/][Org Mode]], [[https://www.gnu.org/software/emacs/][Emacs]]: organization and collaboration
+- [[https://mpv.io][MPV]]: video player
+- [[https://bigbluebutton.org/][BigBlueButton]]: web conference
+- [[https://obsproject.com/][OBS Studio]]: streaming
+- [[https://tigervnc.org/][TigerVNC]]: controlling the remote server
+- [[https://icecast.org/][Icecast]]: streaming WEBM
+- [[https://libera.chat/][Internet Relay Chat via Libera.chat]], [[https://thelounge.chat/][The Lounge]], and [[https://www.gnu.org/software/emacs/erc.html][ERC]]: conversation
+- [[https://www.mumble.info/][Mumble]]: audio conferencing for coordination
+- [[https://etherpad.org/][Etherpad]]: questions and notes
+- [[https://ikiwiki.info/][Ikiwiki]]: website
+- [[https://github.com/psi-4ward/psitransfer][PsiTransfer]]: uploads
+- [[https://ffmpeg.org][FFmpeg]]: video and audio processing
+- [[https://www.audacityteam.org/][Audacity]]: audio editing
+- [[https://github.com/m-bain/whisperX][WhisperX]]: captioning
+- [[https://www.readbeyond.it/aeneas/][Aeneas]]: forced alignment to get timestamps
+- [[https://codeberg.org/sachac/subed][subed-mode]]: captioning
+- [[https://git-scm.com/][Git]]: version control
+- [[https://list.org/][Mailman]]: mailing lists; service provided by the Free Software Foundation
+- [[https://www.nginx.com/][Nginx]]: web server; server provided by the Free Software Foundation
+- [[https://www.ansible.com/][Ansible]]: system configuration
+
+You can find out more about our infrastructure at
+[[https://emacsconf.org/infra]] .
+
+* Process improvements
+:PROPERTIES:
+:CUSTOM_ID: process-improvements
+:END:
+
+This year we tried out the following experiments:
+
+- BigBlueButton 3.0: We set up our own server since the previous donated server was decommissioned.
+ Using BBB 3.0 let us customize the on-screen layout and export recorded videos easily.
+- We added an open mic session and moved some of our closing remarks earlier. This let people share last-minute updates and also allowed us to wrap up the conference more promptly.
+- We used WhisperX for the first draft of captions for improved performance.
+- Automatic normalization with ffmpeg-normalize didn't work out, so we manually normalized the video files.
+- We needed to upgrade MPV to v0.38 in order to deal with palette smearing.
+- In addition to livestreaming to live.emacsconf.org via Icecast, we also livestreamed via YouTube. We were unable to livestream via Toobnix due to technical difficulties.
+- We experimented with upgrading the streaming server to a 64GB 32core dedicated CPU server, but this additional capacity was not needed. We downgraded back to 64GB 16core shared.
+- We updated the wiki layout to include sticky videos on the talk pages.
+- We developed more tools for copying IRC messages to the clipboard, checking and adjusting subtitle timing, and cropping media files.
+- We offered stickers and pins as tokens of appreciation.
+
+For in-depth notes, see https://sachachua.com/blog/2024/12/emacsconf-2024-notes/ .
+
+Next year we're looking forward to building on top of even more documentation and automation. Fun!
+
+* Finances
+:PROPERTIES:
+:CUSTOM_ID: finances
+:END:
+
+Costs (USD, not including 13% tax):
+
+| 52.54 | Extra costs for hosting in December |
+| 3.11 | Extra costs for BBB testing in November |
+| 120 | Hosting costs year-round (two Linode nanodes) |
+
+Total of USD 175.65 + tax, or USD 198.48 for 2024.
+
+Thanks to people who donated through the [[https://www.fsf.org/working-together/fund][Working
+Together]] program of the Free Software Foundation,
+we are well-equipped to cover those costs for this
+year.
+
+* Acknowledgements
+:PROPERTIES:
+:CUSTOM_ID: acknowledgements
+:END:
+
+We would like to thank the following:
+
+- Thank you to all the speakers, volunteers, and participants, and to all those other people in our lives who make it possible through time and support.
+- Thanks to Leo Vivier and Corwin Brust for hosting the sessions, and to FlowyCoder for checking people in.
+- Thanks to our proposal review volunteers James Howell, JC Helary, and others for helping with the early acceptance process.
+- Thanks to our captioning volunteers: Mark Lewin, Rodrigo Morales, Anush, annona, and James Howell, and some speakers who captioned their own talks.
+- Thanks to Leo Vivier for fiddling with the audio to get things nicely synced.
+- Thanks to volunteers who kept the mailing lists free from spam.
+- Thanks to Bhavin Gandhi, Christopher Howard, Joseph Turner, and screwlisp for quality-checking.
+- Thanks to shoshin for the music.
+- Thanks to Amin Bandali for help with infrastructure and communication.
+- Thanks to Ry P for the server that we're using for OBS streaming and for processing videos.
+- Thanks to the Free Software Foundation for Emacs itself, the mailing lists, the media.emacsconf.org server, and handling donations on our behalf through the FSF Working Together program. https://www.fsf.org/working-together/fund
+- Thanks to the many users and contributers and project teams that create all the awesome free software we use, especially: BigBlueButton, Etherpad, Icecast, OBS, TheLounge, libera.chat, ffmpeg, OpenAI Whisper, WhisperX, the aeneas forced alignment tool, PsiTransfer, subed, and many, many other tools and services we used to prepare and host this years conference
+- Thanks to everyone!
+
+* Updates
+:PROPERTIES:
+:CUSTOM_ID: updates
+:END:
+
+If you would like to get updates and announcements, you can sign up at
+[[https://lists.gnu.org/mailman/listinfo/emacsconf-discuss]] .
+
+Please keep an eye out for interesting things that
+might be fun to present at next year's EmacsConf.
+We'd love to get talks at all levels of experience
+and about lots of different kinds of interests.
+Previous speakers wrote:
+
+- "I always got the feeling of being heard and
+ welcome in spite of the vast distances and
+ cultures separating us. This community always
+ feels like it is open to new members any time.
+ With regards to the conference process also, it
+ was a microcosm of the bigger community and
+ hence I got the same feeling. You didn't have to
+ be an expert or a person who's been using emacs
+ for a long time to talk about something useful
+ for the community. Even the struggles of a noob
+ may be useful for someone else in the
+ community."
+- "I can honestly say though that I had a great
+ time putting my talk together. I hope people
+ will have a good time listening to it. Now that
+ the work is over, I can say it was worth it. so
+ I recommend it warmly"
+- "This has been an all-around fantastic
+ experience, both as a first-time attendee and
+ speaker. many thanks to the volunteers who make
+ emacsconf possible, and the other speakers for
+ their wonderful talks (many of which i'll be
+ reviewing now that i'm not so busy preparing)"
+
+If you'd like to volunteer for EmacsConf, check
+out https://emacsconf.org/volunteer/ to see if
+anything resonates with you, and e-mail us at
+mailto:emacsconf-org@gnu.org. We'd love to have
+you on board.
+
+Hope to see you next year!
+
+- Sacha Chua
diff --git a/2024/schedule-details.md b/2024/schedule-details.md
index 291fc5a4..a769e01b 100644
--- a/2024/schedule-details.md
+++ b/2024/schedule-details.md
@@ -9,13 +9,13 @@ Jump to: <a href="#dev">Development</a>
[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2024/emacsconf-2024-water--watering-my-digital-plant-with-emacs-timers--christopher-howard--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-water--watering-my-digital-plant-with-emacs-timers--christopher-howard--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-water--watering-my-digital-plant-with-emacs-timers--christopher-howard--main.json">Download --main.json</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-water--watering-my-digital-plant-with-emacs-timers--christopher-howard--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-water--watering-my-digital-plant-with-emacs-timers--christopher-howard--main.webm">Download --main.webm (37MB)</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-water--watering-my-digital-plant-with-emacs-timers--christopher-howard.mp4">Download .mp4 (21MB)</a></li>""" title="""Watering my (digital) plant with Emacs timers""" url="""/2024/talks/water""" speakers="""Christopher Howard""" watch="""https://emacsconf.org/2024/watch/gen""" slug="""water""" note="""captioned, video posted, video: 13:50"""]]
[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2024/emacsconf-2024-shell--emacs-as-a-shell--christopher-howard--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-shell--emacs-as-a-shell--christopher-howard--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-shell--emacs-as-a-shell--christopher-howard--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-shell--emacs-as-a-shell--christopher-howard--main.webm">Download --main.webm (87MB)</a></li>""" title="""Emacs as a shell""" url="""/2024/talks/shell""" speakers="""Christopher Howard""" watch="""https://emacsconf.org/2024/watch/gen""" slug="""shell""" note="""captioned, video posted, video: 37:13"""]]
[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2024/emacsconf-2024-casual--reimagining-the-emacs-user-experience-with-casual-suite--charles-choi--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-casual--reimagining-the-emacs-user-experience-with-casual-suite--charles-choi--answers.opus">Download --answers.opus (12MB)</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-casual--reimagining-the-emacs-user-experience-with-casual-suite--charles-choi--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-casual--reimagining-the-emacs-user-experience-with-casual-suite--charles-choi--answers.webm">Download --answers.webm (44MB)</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-casual--reimagining-the-emacs-user-experience-with-casual-suite--charles-choi--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-casual--reimagining-the-emacs-user-experience-with-casual-suite--charles-choi--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-casual--reimagining-the-emacs-user-experience-with-casual-suite--charles-choi--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-casual--reimagining-the-emacs-user-experience-with-casual-suite--charles-choi--main.webm">Download --main.webm (32MB)</a></li>""" title="""Re-imagining the Emacs user experience with Casual Suite""" url="""/2024/talks/casual""" speakers="""Charles Choi""" watch="""https://emacsconf.org/2024/watch/gen""" slug="""casual""" note="""captioned, video posted, Q&A posted, video: 18:24, answers: 22:12"""]]
-[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2024/emacsconf-2024-hyperdrive--new-in-hyperdriveel-quick-install-peer-graph-transclusion--joseph-turner--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-hyperdrive--new-in-hyperdriveel-quick-install-peer-graph-transclusion--joseph-turner--answers.opus">Download --answers.opus (10MB)</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-hyperdrive--new-in-hyperdriveel-quick-install-peer-graph-transclusion--joseph-turner--answers.vtt">Download --answers.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-hyperdrive--new-in-hyperdriveel-quick-install-peer-graph-transclusion--joseph-turner--answers.webm">Download --answers.webm (25MB)</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-hyperdrive--new-in-hyperdriveel-quick-install-peer-graph-transclusion--joseph-turner--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-hyperdrive--new-in-hyperdriveel-quick-install-peer-graph-transclusion--joseph-turner--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-hyperdrive--new-in-hyperdriveel-quick-install-peer-graph-transclusion--joseph-turner--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-hyperdrive--new-in-hyperdriveel-quick-install-peer-graph-transclusion--joseph-turner--main.webm">Download --main.webm (74MB)</a></li>""" title="""New in hyperdrive.el: quick install, peer graph, transclusion!""" url="""/2024/talks/hyperdrive""" speakers="""Joseph Turner""" watch="""https://emacsconf.org/2024/watch/gen""" slug="""hyperdrive""" note="""captioned, video posted, Q&A posted, video: 20:25, answers: 22:34"""]]
+[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2024/emacsconf-2024-hyperdrive--new-in-hyperdriveel-quick-install-peer-graph-transclusion--joseph-turner--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-hyperdrive--new-in-hyperdriveel-quick-install-peer-graph-transclusion--joseph-turner--answers.opus">Download --answers.opus (7.7MB)</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-hyperdrive--new-in-hyperdriveel-quick-install-peer-graph-transclusion--joseph-turner--answers.vtt">Download --answers.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-hyperdrive--new-in-hyperdriveel-quick-install-peer-graph-transclusion--joseph-turner--answers.webm">Download --answers.webm (25MB)</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-hyperdrive--new-in-hyperdriveel-quick-install-peer-graph-transclusion--joseph-turner--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-hyperdrive--new-in-hyperdriveel-quick-install-peer-graph-transclusion--joseph-turner--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-hyperdrive--new-in-hyperdriveel-quick-install-peer-graph-transclusion--joseph-turner--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-hyperdrive--new-in-hyperdriveel-quick-install-peer-graph-transclusion--joseph-turner--main.webm">Download --main.webm (74MB)</a></li>""" title="""New in hyperdrive.el: quick install, peer graph, transclusion!""" url="""/2024/talks/hyperdrive""" speakers="""Joseph Turner""" watch="""https://emacsconf.org/2024/watch/gen""" slug="""hyperdrive""" note="""captioned, video posted, Q&A posted, video: 20:25, answers: 22:34"""]]
[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2024/emacsconf-2024-writing--emacs-writing-studio--peter-prevos--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-writing--emacs-writing-studio--peter-prevos--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-writing--emacs-writing-studio--peter-prevos--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-writing--emacs-writing-studio--peter-prevos--main.webm">Download --main.webm (41MB)</a></li>""" title="""Emacs Writing Studio""" url="""/2024/talks/writing""" speakers="""Peter Prevos""" watch="""https://emacsconf.org/2024/watch/gen""" slug="""writing""" note="""captioned, video posted, video: 13:31"""]]
[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2024/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--answers.opus">Download --answers.opus (10MB)</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--answers.webm">Download --answers.webm (39MB)</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--edited.webm">Download --edited.webm (52MB)</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--main.webm">Download --main.webm (60MB)</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--notes.org">Download --notes.org</a></li>""" title="""Emacs 30 Highlights""" url="""/2024/talks/emacs30""" speakers="""Philip Kaludercic""" watch="""https://emacsconf.org/2024/watch/gen""" slug="""emacs30""" note="""captioned, video posted, Q&A posted, video: 24:55, answers: 23:36"""]]
[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2024/emacsconf-2024-links--unlocking-linked-data-replacing-specialized-apps-with-an-orgbased-semantic-wiki--abhinav-tushar--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-links--unlocking-linked-data-replacing-specialized-apps-with-an-orgbased-semantic-wiki--abhinav-tushar--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-links--unlocking-linked-data-replacing-specialized-apps-with-an-orgbased-semantic-wiki--abhinav-tushar--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-links--unlocking-linked-data-replacing-specialized-apps-with-an-orgbased-semantic-wiki--abhinav-tushar--main.webm">Download --main.webm (21MB)</a></li>""" title="""Unlocking linked data: replacing specialized apps with an Org-based semantic wiki""" url="""/2024/talks/links""" speakers="""Abhinav Tushar""" watch="""https://emacsconf.org/2024/watch/gen""" slug="""links""" note="""captioned, video posted, video: 11:21"""]]
[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2024/emacsconf-2024-regex--emacs-regex-compilation-and-future-directions-for-expressive-pattern-matching--danny-mcclanahan--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-regex--emacs-regex-compilation-and-future-directions-for-expressive-pattern-matching--danny-mcclanahan--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-regex--emacs-regex-compilation-and-future-directions-for-expressive-pattern-matching--danny-mcclanahan--main.webm">Download --main.webm (199MB)</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-regex--emacs-regex-compilation-and-future-directions-for-expressive-pattern-matching--danny-mcclanahan--slides.pdf">Download --slides.pdf</a></li>""" title="""Emacs regex compilation and future directions for expressive pattern matching""" url="""/2024/talks/regex""" speakers="""Danny McClanahan""" watch="""https://emacsconf.org/2024/watch/gen""" slug="""regex""" note="""captioned, video posted, video: 24:56"""]]
[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2024/emacsconf-2024-learning--survival-of-the-skillest-thriving-in-the-learning-jungle--bala-ramadurai--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-learning--survival-of-the-skillest-thriving-in-the-learning-jungle--bala-ramadurai--answers--edited.opus">Download --answers--edited.opus (20MB)</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-learning--survival-of-the-skillest-thriving-in-the-learning-jungle--bala-ramadurai--answers.opus">Download --answers.opus (11MB)</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-learning--survival-of-the-skillest-thriving-in-the-learning-jungle--bala-ramadurai--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-learning--survival-of-the-skillest-thriving-in-the-learning-jungle--bala-ramadurai--answers.webm">Download --answers.webm (57MB)</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-learning--survival-of-the-skillest-thriving-in-the-learning-jungle--bala-ramadurai--edited.webm">Download --edited.webm (57MB)</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-learning--survival-of-the-skillest-thriving-in-the-learning-jungle--bala-ramadurai--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-learning--survival-of-the-skillest-thriving-in-the-learning-jungle--bala-ramadurai--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-learning--survival-of-the-skillest-thriving-in-the-learning-jungle--bala-ramadurai--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-learning--survival-of-the-skillest-thriving-in-the-learning-jungle--bala-ramadurai--main.webm">Download --main.webm (137MB)</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-learning--survival-of-the-skillest-thriving-in-the-learning-jungle--bala-ramadurai--slides.pdf">Download --slides.pdf (9.5MB)</a></li>""" title="""Survival of the skillest: Thriving in the learning jungle""" url="""/2024/talks/learning""" speakers="""Bala Ramadurai""" watch="""https://emacsconf.org/2024/watch/gen""" slug="""learning""" note="""captioned, video posted, Q&A posted, video: 19:39, answers: 24:41"""]]
-[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2024/emacsconf-2024-blee--about-blee-towards-an-integrated-emacs-environment-for-enveloping-our-own-autonomy-directed-digital-ecosystem--mohsen-banan--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-blee--about-blee-towards-an-integrated-emacs-environment-for-enveloping-our-own-autonomy-directed-digital-ecosystem--mohsen-banan--answers.opus">Download --answers.opus (8.9MB)</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-blee--about-blee-towards-an-integrated-emacs-environment-for-enveloping-our-own-autonomy-directed-digital-ecosystem--mohsen-banan--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-blee--about-blee-towards-an-integrated-emacs-environment-for-enveloping-our-own-autonomy-directed-digital-ecosystem--mohsen-banan--answers.webm">Download --answers.webm (41MB)</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-blee--about-blee-towards-an-integrated-emacs-environment-for-enveloping-our-own-autonomy-directed-digital-ecosystem--mohsen-banan--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-blee--about-blee-towards-an-integrated-emacs-environment-for-enveloping-our-own-autonomy-directed-digital-ecosystem--mohsen-banan--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-blee--about-blee-towards-an-integrated-emacs-environment-for-enveloping-our-own-autonomy-directed-digital-ecosystem--mohsen-banan--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-blee--about-blee-towards-an-integrated-emacs-environment-for-enveloping-our-own-autonomy-directed-digital-ecosystem--mohsen-banan--main.webm">Download --main.webm (110MB)</a></li>""" title="""About Blee: enveloping our own autonomy directed digital ecosystem with Emacs""" url="""/2024/talks/blee""" speakers="""Mohsen BANAN""" watch="""https://emacsconf.org/2024/watch/gen""" slug="""blee""" note="""captioned, video posted, Q&A posted, video: 45:30, answers: 18:11"""]]
+[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2024/emacsconf-2024-blee--about-blee-towards-an-integrated-emacs-environment-for-enveloping-our-own-autonomy-directed-digital-ecosystem--mohsen-banan--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-blee--about-blee-towards-an-integrated-emacs-environment-for-enveloping-our-own-autonomy-directed-digital-ecosystem--mohsen-banan--answers.opus">Download --answers.opus (8.9MB)</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-blee--about-blee-towards-an-integrated-emacs-environment-for-enveloping-our-own-autonomy-directed-digital-ecosystem--mohsen-banan--answers.vtt">Download --answers.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-blee--about-blee-towards-an-integrated-emacs-environment-for-enveloping-our-own-autonomy-directed-digital-ecosystem--mohsen-banan--answers.webm">Download --answers.webm (41MB)</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-blee--about-blee-towards-an-integrated-emacs-environment-for-enveloping-our-own-autonomy-directed-digital-ecosystem--mohsen-banan--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-blee--about-blee-towards-an-integrated-emacs-environment-for-enveloping-our-own-autonomy-directed-digital-ecosystem--mohsen-banan--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-blee--about-blee-towards-an-integrated-emacs-environment-for-enveloping-our-own-autonomy-directed-digital-ecosystem--mohsen-banan--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-blee--about-blee-towards-an-integrated-emacs-environment-for-enveloping-our-own-autonomy-directed-digital-ecosystem--mohsen-banan--main.webm">Download --main.webm (110MB)</a></li>""" title="""About Blee: enveloping our own autonomy directed digital ecosystem with Emacs""" url="""/2024/talks/blee""" speakers="""Mohsen BANAN""" watch="""https://emacsconf.org/2024/watch/gen""" slug="""blee""" note="""captioned, video posted, Q&A posted, video: 45:30, answers: 18:11"""]]
[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2024/emacsconf-2024-hyperbole--fun-things-with-gnu-hyperbole--mats-lidell--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-hyperbole--fun-things-with-gnu-hyperbole--mats-lidell--answers.opus">Download --answers.opus (8.1MB)</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-hyperbole--fun-things-with-gnu-hyperbole--mats-lidell--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-hyperbole--fun-things-with-gnu-hyperbole--mats-lidell--answers.webm">Download --answers.webm (30MB)</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-hyperbole--fun-things-with-gnu-hyperbole--mats-lidell--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-hyperbole--fun-things-with-gnu-hyperbole--mats-lidell--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-hyperbole--fun-things-with-gnu-hyperbole--mats-lidell--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-hyperbole--fun-things-with-gnu-hyperbole--mats-lidell--main.webm">Download --main.webm (47MB)</a></li>""" title="""Fun things with GNU Hyperbole""" url="""/2024/talks/hyperbole""" speakers="""Mats Lidell""" watch="""https://emacsconf.org/2024/watch/gen""" slug="""hyperbole""" note="""captioned, video posted, Q&A posted, video: 14:10, answers: 21:56"""]]
[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2024/emacsconf-2024-pgmacs--pgmacs-browsing-and-editing-postgresql-databases-from-emacs--eric-marsden--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-pgmacs--pgmacs-browsing-and-editing-postgresql-databases-from-emacs--eric-marsden--answers.opus">Download --answers.opus (12MB)</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-pgmacs--pgmacs-browsing-and-editing-postgresql-databases-from-emacs--eric-marsden--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-pgmacs--pgmacs-browsing-and-editing-postgresql-databases-from-emacs--eric-marsden--answers.webm">Download --answers.webm (38MB)</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-pgmacs--pgmacs-browsing-and-editing-postgresql-databases-from-emacs--eric-marsden--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-pgmacs--pgmacs-browsing-and-editing-postgresql-databases-from-emacs--eric-marsden--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-pgmacs--pgmacs-browsing-and-editing-postgresql-databases-from-emacs--eric-marsden--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-pgmacs--pgmacs-browsing-and-editing-postgresql-databases-from-emacs--eric-marsden--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-pgmacs--pgmacs-browsing-and-editing-postgresql-databases-from-emacs--eric-marsden--main.webm">Download --main.webm (43MB)</a></li>""" title="""PGmacs: browsing and editing PostgreSQL databases from Emacs""" url="""/2024/talks/pgmacs""" speakers="""Eric Marsden""" watch="""https://emacsconf.org/2024/watch/gen""" slug="""pgmacs""" note="""captioned, video posted, Q&A posted, video: 13:17, answers: 20:02"""]]
[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2024/emacsconf-2024-literate--literate-programming-for-the-21st-century--howard-abrams--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-literate--literate-programming-for-the-21st-century--howard-abrams--answers.opus">Download --answers.opus (12MB)</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-literate--literate-programming-for-the-21st-century--howard-abrams--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-literate--literate-programming-for-the-21st-century--howard-abrams--answers.webm">Download --answers.webm (56MB)</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-literate--literate-programming-for-the-21st-century--howard-abrams--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-literate--literate-programming-for-the-21st-century--howard-abrams--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-literate--literate-programming-for-the-21st-century--howard-abrams--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-literate--literate-programming-for-the-21st-century--howard-abrams--main.webm">Download --main.webm (42MB)</a></li>""" title="""Literate programming for the 21st Century""" url="""/2024/talks/literate""" speakers="""Howard Abrams""" watch="""https://emacsconf.org/2024/watch/gen""" slug="""literate""" note="""captioned, video posted, Q&A posted, video: 15:51, answers: 22:48"""]]
diff --git a/2024/talks/blee.md b/2024/talks/blee.md
index db082d72..7bfa12a2 100644
--- a/2024/talks/blee.md
+++ b/2024/talks/blee.md
@@ -141,12 +141,12 @@ Previous Talks: <https://emacsconf.org/2021/talks/bidi> and
thought it would be better to ask.
- A: For everybody listening to this conference, the
**international** edition is the right choice.
- - It features more aggressive stance against intellectual property
+ - It features more aggressive stances against intellectual property
(being linked specifically to the American culture)
- There are pieces in the book where the typical American audience
might be offended
- ...But if your skin is thick enough to deal with reasonable
- criticism, the international edition for you.
+ criticism, the international edition is for you.
- Q:Thank you for this talk! How does your perspective interface with
works such as Yanis Varoufakis' Technofeudalism?
- A: Not familiar with the book.
@@ -163,7 +163,7 @@ Previous Talks: <https://emacsconf.org/2021/talks/bidi> and
- A: The idea is that teaching and learning should be
unrestricted, such as the Muslim/Iranian saying: "Passing along
the learning is the tax on having learnt".
- - "Being used as part of education"
+ [ The "tax" on knowledge is sharing it with others. زكات علم، آموختن آن به ديگران است. ]
- Q:As a specific example of how "ownership is not clean", look at the
Star Trek Picard series: they continuously asked Patrick Stewart to
come do another Star Trek series but he wouldn't because Star Trek
@@ -254,22 +254,21 @@ Previous Talks: <https://emacsconf.org/2021/talks/bidi> and
- Probably my favourite talk of the event
- Wonderful talk!
- This presentation gets better and better.
-- I don't know if this is a problem with
- Capitalism which can be many things to different people to the point
- the term might not mean much. I have a problem with people competing
- through corrosion rather than compition. For example google is
- restricting access to google drive api making everybodys app but
- googles worse. Capitilism "not fake Capitilism" predospes a free
- market which would limit this
- going to go checkout the book later as half way
thorugh the talk i got term overload
- Great talk, great software.
-- Thank you for the presentation Mosen.
+- Thank you for the presentation Mohsen.
- while this heavy topic is certainly a major critique of
capitalism as such, i certainly would not mix in here any sort of
religion-related things. hence leveraging "Halaal" for this is
quite disturbing.
- I skipped the whole thing because I suspected it would just annoy me for no other reason than that one term. (Maybe this was excessively prejudicial of me, but seriously, not my religion, I suspect I'd be unwelcome.) (maybe this is an English-specific thing, Do Not Mention Religion, because last time we mentioned it we had centuries of religious wars.)
+- Mohsen's response to the above two bullets.
+ Halaal is a very sensitive and potent word.
+ There is an entire chapter titled: "Introducing Halaal and Haraam into Globish" in the book.
+ In those 10 pages, I clarify that my use of Halaal is philosphical not religious.
+ Unfortunately the equivalent word for halaal does not exist in English.
+ Americanists, should first try to understand what halaal really means.
- Hard topic, it feels like we are in an era of closing open-source software, eg redhat
- YouTube comment: Phenomenal thinking. I will be reading the Nature of Polyexistentials
diff --git a/2024/talks/literate.md b/2024/talks/literate.md
index 82319369..94f5332c 100644
--- a/2024/talks/literate.md
+++ b/2024/talks/literate.md
@@ -232,6 +232,8 @@ Feedback:
- I for one had been looking forward to this particular talk, so there's that :)
- YouTube comment: Legend!
- YouTube comment: Howard! Your videos have been such an amazing source of information. You voice is engrained in my brains haha
+- Somehow my interest in #emacs reignited and a lot of is due to org presentation by @howard [@mms@bsd.cafe](https://mastodon.bsd.cafe/@mms/113724843960332570)
+
[[!inline pages="internal(2024/info/literate-after)" raw="yes"]]
diff --git a/2024/talks/sun-close.md b/2024/talks/sun-close.md
index 56f74ff8..66ed8965 100644
--- a/2024/talks/sun-close.md
+++ b/2024/talks/sun-close.md
@@ -77,11 +77,6 @@
- \<@sachac\> robin: I write to the pads with Emacs Lisp, but
I don't know how to, say, append considering the realtime
edits
-- \<robin\> this has been an all-around fantastic experience, both as
- a first-time attendee and speaker. many thanks to the volunteers who
- make emacsconf possible, and the other speakers for their wonderful
- talks (many of which i'll be reviewing now that i'm not so busy
- preparing \^\^)
- Things that have been working well
- Crontab
- Automation
@@ -196,7 +191,7 @@
- Ask speakers what kind of facilitation they want
- \<kickingvegas\> wish for next year: localized schedule times on
the emacsconf website
-
+ - Next year, I'll add pronouns and pronunciations to the Etherpad template
[[!inline pages="internal(2024/info/sun-close-after)" raw="yes"]]
diff --git a/2025.md b/2025.md
new file mode 100644
index 00000000..1193ad48
--- /dev/null
+++ b/2025.md
@@ -0,0 +1,39 @@
+[[!meta copyright="Copyright &copy; 2021-2022 Amin Bandali; 2023-2025 Sacha Chua"]]
+[[!sidebar content=""]]
+
+<p class="center">EmacsConf 2025 | Online Conference<br />
+<b>December 6 and 7, 2025 (Sat-Sun)</b></p>
+
+<p class="center">[[!img /i/emacsconf-logo1-256.png
+alt="EmacsConf logo"]]</p>
+
+<p class="center"><strong>[[Talks]] | [[Watch]]</strong> | [[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>
+
+Thank you for joining us for EmacsConf 2025!
+
+We held EmacsConf 2025 as an online conference again this year.
+We remain fully committed to freedom, and we continued to use 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/2025/captions/emacsconf-2025-blee-lcnt--bleelcnt-an-emacscentered-content-production-and-selfpublication-framework--mohsen-banan--main--chapters.vtt b/2025/captions/emacsconf-2025-blee-lcnt--bleelcnt-an-emacscentered-content-production-and-selfpublication-framework--mohsen-banan--main--chapters.vtt
new file mode 100644
index 00000000..a32fdf09
--- /dev/null
+++ b/2025/captions/emacsconf-2025-blee-lcnt--bleelcnt-an-emacscentered-content-production-and-selfpublication-framework--mohsen-banan--main--chapters.vtt
@@ -0,0 +1,77 @@
+WEBVTT
+
+
+00:00:05.760 --> 00:01:20.079
+Introduction
+
+00:01:20.080 --> 00:02:10.319
+Scope: A complete multi-media content processing framework
+
+00:02:10.320 --> 00:03:02.419
+Prior art and similar art
+
+00:03:02.420 --> 00:03:57.159
+LaTeX-Beamer + Reveal.js with Blee and BISOS
+
+00:03:57.160 --> 00:05:12.519
+Blee-LCNT novel concepts
+
+00:05:12.520 --> 00:06:32.559
+Part of a bigger picture - part of a series
+
+00:06:32.560 --> 00:12:52.639
+Nature of polyexistentials
+
+00:12:52.640 --> 00:14:23.119
+Content processing - a ByStar/BISOS/Blee Capability Bundle (BCB)
+
+00:14:23.120 --> 00:14:31.279
+ByStar containment hierarchy and ByStar capability bundles
+
+00:14:31.280 --> 00:15:21.999
+Aggregated conviviality of ByStar capabilities
+
+00:15:22.000 --> 00:15:47.867
+Parts list: integrated components
+
+00:15:47.868 --> 00:18:45.719
+Resulting contents - output forms and formats
+
+00:18:45.720 --> 00:20:31.979
+reveal.js
+
+00:20:31.980 --> 00:21:33.479
+Generating the video
+
+00:21:33.480 --> 00:22:39.179
+A unified single input -- a sequencef of frames
+
+00:22:39.180 --> 00:23:16.199
+Abstractions to keep in mind
+
+00:23:16.200 --> 00:24:24.359
+Frame control types
+
+00:24:24.360 --> 00:26:25.199
+How outputs are generate from the inputs
+
+00:26:25.200 --> 00:27:46.479
+Context for unified source walkthrough
+
+00:27:46.480 --> 00:29:24.079
+One slide
+
+00:29:24.080 --> 00:31:05.799
+Dynamic blocks
+
+00:31:05.800 --> 00:33:42.279
+Internationalization - a non-Americanist perspective
+
+00:33:42.280 --> 00:35:07.719
+Autonomous self-publication and federated re-publications
+
+00:35:07.720 --> 00:36:02.559
+Ingredients of BISOS platforms and their progression
+
+00:36:02.560 --> 00:36:41.640
+Moving forward
diff --git a/2025/captions/emacsconf-2025-blee-lcnt--bleelcnt-an-emacscentered-content-production-and-selfpublication-framework--mohsen-banan--main.vtt b/2025/captions/emacsconf-2025-blee-lcnt--bleelcnt-an-emacscentered-content-production-and-selfpublication-framework--mohsen-banan--main.vtt
new file mode 100644
index 00000000..90f7b470
--- /dev/null
+++ b/2025/captions/emacsconf-2025-blee-lcnt--bleelcnt-an-emacscentered-content-production-and-selfpublication-framework--mohsen-banan--main.vtt
@@ -0,0 +1,2058 @@
+WEBVTT captioned by mohsen
+
+NOTE Introduction
+
+00:00:05.760 --> 00:00:08.159
+Greetings. Salaam.
+
+00:00:08.160 --> 00:00:10.159
+This is Mohsen Banan.
+
+00:00:10.160 --> 00:00:12.839
+I am a software and internet engineer.
+
+00:00:12.840 --> 00:00:14.679
+The title of this presentation
+
+00:00:14.680 --> 00:00:18.839
+is "Blee-LCNT: An Emacs Centered
+
+00:00:18.840 --> 00:00:23.659
+Content Production and Self-Publication Framework".
+
+00:00:23.660 --> 00:00:25.559
+Blee stands for
+
+00:00:25.560 --> 00:00:29.279
+ByStar Libre-Halaal Emacs Environment.
+
+00:00:29.280 --> 00:00:31.799
+In last year's EmacsConf,
+
+00:00:31.800 --> 00:00:36.079
+I introduced Blee, BISOS and ByStar
+
+00:00:36.080 --> 00:00:39.439
+as concepts and as foundations.
+
+00:00:39.440 --> 00:00:41.079
+This year I want to focus
+
+00:00:41.080 --> 00:00:43.879
+on one concrete capability.
+
+00:00:43.880 --> 00:00:47.959
+Content Production and Self-Publication
+
+00:00:47.960 --> 00:00:54.119
+is a foundational Blee and BISOS Capability Bundle.
+
+00:00:54.120 --> 00:00:55.759
+Both this presentation
+
+00:00:55.760 --> 00:00:59.079
+and the Nature of Polyexistentials book
+
+00:00:59.080 --> 00:01:02.879
+were developed with Blee-LCNT.
+
+00:01:02.880 --> 00:01:06.759
+In this presentation I want to look at Emacs
+
+00:01:06.760 --> 00:01:08.519
+as a central ingredient
+
+00:01:08.520 --> 00:01:10.959
+for a usage environment
+
+00:01:10.960 --> 00:01:14.919
+that we can use to orchestrate production of
+
+00:01:14.920 --> 00:01:20.079
+quite fancy multi-media presentations.
+
+NOTE Scope: A complete multi-media content processing framework
+
+00:01:20.080 --> 00:01:23.079
+Let's consider two different scopes.
+
+00:01:23.080 --> 00:01:27.919
+First, the scope of Blee-LCNT Capabilities Bundle,
+
+00:01:27.920 --> 00:01:29.919
+which is that of a complete
+
+00:01:29.920 --> 00:01:32.599
+multi-media content authorship,
+
+00:01:32.600 --> 00:01:34.799
+generation, publication
+
+00:01:34.800 --> 00:01:37.639
+and distribution framework.
+
+00:01:37.640 --> 00:01:40.999
+That complete scope is presented in this slide
+
+00:01:41.000 --> 00:01:44.239
+and it spans both black ink
+
+00:01:44.240 --> 00:01:46.639
+and violet ink.
+
+00:01:46.640 --> 00:01:49.799
+Second, the scope of this presentation,
+
+00:01:49.800 --> 00:01:52.119
+which is more limited.
+
+00:01:52.120 --> 00:01:54.919
+In this presentation I confine myself
+
+00:01:54.920 --> 00:01:58.519
+to the bullets is violet ink.
+
+00:01:58.520 --> 00:02:01.159
+Here, I focus on presentation
+
+00:02:01.160 --> 00:02:03.599
+and video as content types
+
+00:02:03.600 --> 00:02:05.999
+and their authorship and generation
+
+00:02:06.000 --> 00:02:10.319
+and their federated re-publication.
+
+NOTE Prior art and similar art
+
+00:02:10.320 --> 00:02:12.559
+This is a common topic.
+
+00:02:12.560 --> 00:02:14.839
+It makes good sense for us to start with
+
+00:02:14.840 --> 00:02:19.079
+a review of prior art and similar art.
+
+00:02:19.080 --> 00:02:21.959
+I went through the past EmacsConf talks
+
+00:02:21.960 --> 00:02:23.919
+and found a good number of them
+
+00:02:23.920 --> 00:02:25.999
+that also deal with the topic
+
+00:02:26.000 --> 00:02:28.839
+of content generation.
+
+00:02:28.840 --> 00:02:30.319
+A few of these are included
+
+00:02:30.320 --> 00:02:33.359
+in black ink in this slide.
+
+00:02:33.360 --> 00:02:35.599
+Many of these have chosen the Babel,
+
+00:02:35.600 --> 00:02:40.719
+in other words Org-Mode+LaTeX as primary input.
+
+00:02:40.720 --> 00:02:43.599
+I prefer the inverse of that.
+
+00:02:43.600 --> 00:02:45.839
+I also looked for past talks
+
+00:02:45.840 --> 00:02:49.999
+which have used Reveal.js and LaTeX-Beamer.
+
+00:02:50.000 --> 00:02:53.399
+For example, Sacha's use of Reveal.js
+
+00:02:53.400 --> 00:02:56.959
+is shown in violet inK.
+
+00:02:56.960 --> 00:03:02.419
+And Ihor's use of Beamer is in teal ink.
+
+NOTE LaTeX-Beamer + Reveal.js with Blee and BISOS
+
+00:03:02.420 --> 00:03:05.399
+This presentation is about a combination
+
+00:03:05.400 --> 00:03:08.639
+of Reveal.js and LaTeX-Beamer.
+
+00:03:08.640 --> 00:03:10.599
+For those who may not be familiar
+
+00:03:10.600 --> 00:03:12.619
+with Beamer and Reveal,
+
+00:03:12.620 --> 00:03:14.799
+here is a quick intro.
+
+00:03:14.800 --> 00:03:19.039
+Among academics, LaTeX-Beamer is the go-to tool
+
+00:03:19.040 --> 00:03:22.159
+for producing presentations.
+
+00:03:22.160 --> 00:03:24.239
+Reveal.js is recognized
+
+00:03:24.240 --> 00:03:25.919
+as the best of breed
+
+00:03:25.920 --> 00:03:29.919
+for dispensing HTML slide decks.
+
+00:03:29.920 --> 00:03:32.439
+For many, Reveal and Beamer
+
+00:03:32.440 --> 00:03:35.959
+live in different universes.
+
+00:03:35.960 --> 00:03:38.679
+Beamer is pdf oriented
+
+00:03:38.680 --> 00:03:42.019
+and Reveal is html oriented.
+
+00:03:42.020 --> 00:03:44.519
+Combining two powerful tools
+
+00:03:44.520 --> 00:03:48.359
+makes for an even more powerful tool.
+
+00:03:48.360 --> 00:03:51.879
+This Blee-LCNT Presentations combines
+
+00:03:51.880 --> 00:03:57.159
+the best of LaTeX-Beamer with Reveal.js.
+
+NOTE Blee-LCNT novel concepts
+
+00:03:57.160 --> 00:04:00.679
+Beamer primarily functions as producer
+
+00:04:00.680 --> 00:04:03.099
+and Reveal functions as dispenser
+
+00:04:03.100 --> 00:04:05.579
+and multi-media enhancer.
+
+00:04:05.580 --> 00:04:08.299
+Here is how the combination works.
+
+00:04:08.300 --> 00:04:10.439
+LaTeX Beamer pdf result
+
+00:04:10.440 --> 00:04:13.839
+is dissected into named frame images
+
+00:04:13.840 --> 00:04:18.799
+which can then be inserted in Reveal.js.
+
+00:04:18.800 --> 00:04:21.239
+LaTeX Beamer frames can also be
+
+00:04:21.240 --> 00:04:24.799
+translated into html with HeVeA
+
+00:04:24.800 --> 00:04:28.999
+which can also be inserted in Reveal.js.
+
+00:04:29.000 --> 00:04:31.119
+Voice-overs for Beamer frames
+
+00:04:31.120 --> 00:04:34.039
+can be correlated to frame names
+
+00:04:34.040 --> 00:04:37.119
+and applied to image or html frames.
+
+00:04:37.120 --> 00:04:42.079
+Screen captures and image narrations as videos
+
+00:04:42.080 --> 00:04:44.359
+can be directly dispensed
+
+00:04:44.360 --> 00:04:46.379
+through Reveal.
+
+00:04:46.380 --> 00:04:49.439
+There are various additional novel concepts
+
+00:04:49.440 --> 00:04:50.599
+with regard to the way
+
+00:04:50.600 --> 00:04:54.559
+that we have integrated all of this together.
+
+00:04:54.560 --> 00:04:57.599
+Instead of Org-Mode+LaTeX,
+
+00:04:57.600 --> 00:05:00.999
+we do LaTeX+Org-Mode.
+
+00:05:01.000 --> 00:05:03.999
+Instead of Babel, we do COMEEGA,
+
+00:05:04.000 --> 00:05:05.999
+instead of the Literate model
+
+00:05:06.000 --> 00:05:08.839
+we introduce the Surrounded model.
+
+00:05:08.840 --> 00:05:10.839
+You shall see various examples
+
+00:05:10.840 --> 00:05:12.519
+of these shortly.
+
+NOTE Part of a bigger picture - part of a series
+
+00:05:12.520 --> 00:05:15.639
+All of this is part of a bigger picture.
+
+00:05:15.640 --> 00:05:17.619
+A much bigger picture.
+
+00:05:17.620 --> 00:05:23.599
+My talks at EmacsConf 2021, 2022
+
+00:05:23.600 --> 00:05:26.519
+and 2024 are related.
+
+00:05:26.520 --> 00:05:31.399
+This 2025 talk builds on those.
+
+00:05:31.400 --> 00:05:34.719
+Last year's talk "About Blee:
+
+00:05:34.720 --> 00:05:36.839
+enveloping our own autonomy
+
+00:05:36.840 --> 00:05:38.999
+directed digital ecosystem
+
+00:05:39.000 --> 00:05:42.199
+with Emacs" in particular,
+
+00:05:42.200 --> 00:05:44.979
+lays the foundations for this talk.
+
+00:05:44.980 --> 00:05:47.119
+If you have not seen that,
+
+00:05:47.120 --> 00:05:51.159
+it would make good sense to review it.
+
+00:05:51.160 --> 00:05:54.279
+In my previous talks I have been criticized
+
+00:05:54.280 --> 00:05:58.359
+of having a "prophetic" style.
+
+00:05:58.360 --> 00:06:02.059
+The scope of ByStar is lofty and immense.
+
+00:06:02.060 --> 00:06:04.879
+In many ways it is unbelievable.
+
+00:06:04.880 --> 00:06:09.139
+And EmacsConf talks are meant to be short.
+
+00:06:09.140 --> 00:06:11.839
+So, as a result, sometimes
+
+00:06:11.840 --> 00:06:13.959
+I end up being cryptic.
+
+00:06:13.960 --> 00:06:17.499
+Having accepted the "prophetic" criticism
+
+00:06:17.500 --> 00:06:19.399
+as legitimate,
+
+00:06:19.400 --> 00:06:23.599
+I now need to put a book on the table.
+
+00:06:23.600 --> 00:06:26.839
+With that book in place, moving forward,
+
+00:06:26.840 --> 00:06:29.339
+when needing to be cryptic,
+
+00:06:29.340 --> 00:06:32.559
+I shall cite Chapter and Verse.
+
+NOTE Nature of polyexistentials
+
+00:06:32.560 --> 00:06:34.879
+I am delighted to announce
+
+00:06:34.880 --> 00:06:37.559
+the availability of my recent book,
+
+00:06:37.560 --> 00:06:40.199
+"Nature of Polyexistentials".
+
+00:06:40.200 --> 00:06:42.959
+The full title of my book is:
+
+00:06:42.960 --> 00:06:45.039
+Nature Of Polyexistentials---
+
+00:06:45.040 --> 00:06:48.239
+Basis For Abolishment Of The Western
+
+00:06:48.240 --> 00:06:51.219
+Intellectual Property Rights Regime---
+
+00:06:51.220 --> 00:06:53.899
+And Introduction Of The Libre-Halaal
+
+00:06:53.900 --> 00:06:56.999
+ByStar Digital Ecosystem.
+
+00:06:57.000 --> 00:06:59.199
+Knowledge, know-how, uses of know-how,
+
+00:06:59.200 --> 00:07:02.879
+ideas, formulas, software and information
+
+00:07:02.880 --> 00:07:05.519
+are inherently non-scarce.
+
+00:07:05.520 --> 00:07:08.439
+They are *polyexistentials*.
+
+00:07:08.440 --> 00:07:10.239
+Unlike monoexistentials
+
+00:07:10.240 --> 00:07:12.259
+which exist in singular,
+
+00:07:12.260 --> 00:07:17.539
+polyexistentials naturally exist in multiples.
+
+00:07:17.540 --> 00:07:19.559
+What is abundant in nature
+
+00:07:19.560 --> 00:07:22.599
+is being made artificially scarce
+
+00:07:22.600 --> 00:07:25.399
+through man-made ownership rules
+
+00:07:25.400 --> 00:07:28.599
+called copyright and patents.
+
+00:07:28.600 --> 00:07:31.239
+These mistaken ownership rules,
+
+00:07:31.240 --> 00:07:34.959
+the so called Western IPR regime,
+
+00:07:34.960 --> 00:07:37.319
+has immense ramifications
+
+00:07:37.320 --> 00:07:38.839
+on the shape and the direction
+
+00:07:38.840 --> 00:07:42.619
+of the American Digital Ecosystem.
+
+00:07:42.620 --> 00:07:45.119
+It would be an understatement to say
+
+00:07:45.120 --> 00:07:47.779
+that the American Digital Ecosystem
+
+00:07:47.780 --> 00:07:50.599
+has put humanity in danger.
+
+00:07:50.600 --> 00:07:53.099
+Two parts of the book, in particular
+
+00:07:53.100 --> 00:07:55.679
+are of immediate relevance.
+
+00:07:55.680 --> 00:07:58.219
+Part III, the ethics layer,
+
+00:07:58.220 --> 00:08:01.119
+focuses on contours of cures.
+
+00:08:01.120 --> 00:08:02.839
+Having dismissed the Western
+
+00:08:02.840 --> 00:08:06.119
+intellectual property rights (IPR) regime
+
+00:08:06.120 --> 00:08:11.739
+as an erroneous governance model for polyexistentials,
+
+00:08:11.740 --> 00:08:14.319
+I propose the Libre-Halaal model
+
+00:08:14.320 --> 00:08:17.199
+of governance of polyexistentials
+
+00:08:17.200 --> 00:08:22.779
+towards facilitating conviviality of tools.
+
+00:08:22.780 --> 00:08:25.359
+Part IV, the engineering layer,
+
+00:08:25.360 --> 00:08:29.599
+introduces the Libre-Halaal ByStar Digital Ecosystem.
+
+00:08:29.600 --> 00:08:32.399
+as an ethical alternative
+
+00:08:32.400 --> 00:08:34.239
+to the prevailing proprietary
+
+00:08:34.240 --> 00:08:37.499
+American digital ecosystem.
+
+00:08:37.500 --> 00:08:40.479
+The book also provides additional details
+
+00:08:40.480 --> 00:08:42.919
+about the content generation
+
+00:08:42.920 --> 00:08:44.919
+and publication facilities
+
+00:08:44.920 --> 00:08:46.839
+that I am presenting here.
+
+00:08:46.840 --> 00:08:50.079
+And the book itself, as content,
+
+00:08:50.080 --> 00:08:53.439
+was generated and published
+
+00:08:53.440 --> 00:08:55.319
+using the facilities
+
+00:08:55.320 --> 00:08:57.239
+that I am presenting here.
+
+00:08:57.240 --> 00:08:59.199
+You can think of this book
+
+00:08:59.200 --> 00:09:01.159
+as being in two volumes.
+
+00:09:01.160 --> 00:09:05.919
+Our focus are Blee and BISOS in Volume II.
+
+00:09:05.920 --> 00:09:10.239
+Volume I deals with the general concept
+
+00:09:10.240 --> 00:09:13.879
+of polyexistence and invalidity
+
+00:09:13.880 --> 00:09:18.679
+of IPR and our terminoloy of Libre-Halaal---
+
+00:09:18.680 --> 00:09:23.519
+instead of the common but ill directed vocabulary
+
+00:09:23.520 --> 00:09:28.239
+of Free Software and Open-Source and FOSS.
+
+00:09:28.240 --> 00:09:31.239
+In Chapter 11, I introduce
+
+00:09:31.240 --> 00:09:34.759
+the very sensitive and potent vocabulary
+
+00:09:34.760 --> 00:09:37.719
+of Halaal and Libre-Halaal.
+
+00:09:37.720 --> 00:09:39.079
+The contents of this book
+
+00:09:39.080 --> 00:09:41.659
+belong to all of humanity
+
+00:09:41.660 --> 00:09:45.519
+and verbatim copying of it is unrestricted.
+
+00:09:45.520 --> 00:09:49.479
+If you want to read it, this book is yours.
+
+00:09:49.480 --> 00:09:51.839
+The "Nature of Polyexistentials" book
+
+00:09:51.840 --> 00:09:56.659
+is available both online and in print.
+
+00:09:56.660 --> 00:09:59.439
+This book is available as two editions.
+
+00:09:59.440 --> 00:10:03.819
+The US Edition and the International edition.
+
+00:10:03.820 --> 00:10:05.959
+The US Edition is written
+
+00:10:05.960 --> 00:10:10.079
+with a slightly milder Western unfriendly tone,
+
+00:10:10.080 --> 00:10:12.399
+while the International Edition
+
+00:10:12.400 --> 00:10:17.619
+includes additional original content in Farsi.
+
+00:10:17.620 --> 00:10:20.399
+I consider the International Edition
+
+00:10:20.400 --> 00:10:22.979
+to be the authoritative version.
+
+00:10:22.980 --> 00:10:25.319
+However, many readers in
+
+00:10:25.320 --> 00:10:27.319
+the US and Western countries
+
+00:10:27.320 --> 00:10:31.199
+may prefer the US Edition.
+
+00:10:31.200 --> 00:10:33.999
+I maintain separate Git repositories
+
+00:10:34.000 --> 00:10:36.039
+for each edition on GitHub:
+
+00:10:36.040 --> 00:10:42.839
+US Edition is at bxplpc/120033
+
+00:10:42.840 --> 00:10:51.419
+and International Edition: bxplpc/120074
+
+00:10:51.420 --> 00:10:53.679
+Cloning these repositories
+
+00:10:53.680 --> 00:10:56.399
+will give you access to the book
+
+00:10:56.400 --> 00:11:00.039
+in PDF format (suitable for both
+
+00:11:00.040 --> 00:11:04.039
+A4 and US Letter printing)
+
+00:11:04.040 --> 00:11:06.379
+and in EPUB format.
+
+00:11:06.380 --> 00:11:08.559
+Alternatively, the content
+
+00:11:08.560 --> 00:11:12.039
+can be downloaded directly from your browser
+
+00:11:12.040 --> 00:11:17.259
+without needing to clone the repositories.
+
+00:11:17.260 --> 00:11:19.079
+To ensure broader online
+
+00:11:19.080 --> 00:11:21.899
+availability and stability,
+
+00:11:21.900 --> 00:11:26.159
+I have also published the book on Zenodo,
+
+00:11:26.160 --> 00:11:31.779
+complete with a DOI (Digital Object Identifier).
+
+00:11:31.780 --> 00:11:34.439
+You can download both the A4
+
+00:11:34.440 --> 00:11:39.639
+and 8.5 x 11 PDFs from there as well.
+
+00:11:39.640 --> 00:11:44.119
+The book is also available in print on Amazon
+
+00:11:44.120 --> 00:11:46.239
+and at most major bookstores
+
+00:11:46.240 --> 00:11:49.379
+in the US and Western regions.
+
+00:11:49.380 --> 00:11:51.519
+The ISBNs for both editions
+
+00:11:51.520 --> 00:11:54.139
+are included in this slide.
+
+00:11:54.140 --> 00:11:56.319
+Additionally, I have published
+
+00:11:56.320 --> 00:12:00.719
+this book in Iran through Jangal Publishers.
+
+00:12:00.720 --> 00:12:03.079
+I did not write this book for profit.
+
+00:12:03.080 --> 00:12:05.359
+My aim is to share my thoughts
+
+00:12:05.360 --> 00:12:10.599
+and encourage readers to engage with my views and ideas.
+
+00:12:10.600 --> 00:12:12.499
+Your feedback is welcome,
+
+00:12:12.500 --> 00:12:14.119
+and I am genuinely interested
+
+00:12:14.120 --> 00:12:17.199
+in hearing your perspectives.
+
+00:12:17.200 --> 00:12:20.879
+In Western markets, I have priced the print edition
+
+00:12:20.880 --> 00:12:24.339
+somewhat above production costs.
+
+00:12:24.340 --> 00:12:26.639
+If you find value in the book
+
+00:12:26.640 --> 00:12:28.599
+and the ByStar project,
+
+00:12:28.600 --> 00:12:32.759
+purchasing a copy will help support my work.
+
+00:12:32.760 --> 00:12:37.459
+Thanks in advance for your support.
+
+00:12:37.460 --> 00:12:39.479
+And here are the same links
+
+00:12:39.480 --> 00:12:42.179
+as a native Reveal slide.
+
+00:12:42.180 --> 00:12:43.839
+If instead of a video,
+
+00:12:43.840 --> 00:12:47.759
+you are viewing this presentation as a Reveal web page,
+
+00:12:47.760 --> 00:12:52.639
+you can just click on the pointers and URLs.
+
+NOTE Content processing - a ByStar/BISOS/Blee Capability Bundle (BCB)
+
+00:12:52.640 --> 00:12:55.079
+Instead of the traditional model
+
+00:12:55.080 --> 00:12:59.559
+of giving you recipes in a DIY context
+
+00:12:59.560 --> 00:13:01.479
+towards the goal of creating
+
+00:13:01.480 --> 00:13:04.559
+content processing capabilities
+
+00:13:04.560 --> 00:13:07.659
+on top of what you may already have,
+
+00:13:07.660 --> 00:13:09.959
+I am doing the opposite.
+
+00:13:09.960 --> 00:13:15.159
+I am saying: take this whole BISOS and Blee thing,
+
+00:13:15.160 --> 00:13:17.559
+and in there you will also have
+
+00:13:17.560 --> 00:13:20.239
+the content processing capabilities
+
+00:13:20.240 --> 00:13:22.579
+that I am speaking of here.
+
+00:13:22.580 --> 00:13:24.919
+So, at the top level we have
+
+00:13:24.920 --> 00:13:27.519
+our own autonomy and privacy
+
+00:13:27.520 --> 00:13:30.199
+directed digital ecosystem,
+
+00:13:30.200 --> 00:13:32.839
+which in contrast to the center oriented
+
+00:13:32.840 --> 00:13:35.659
+American digital ecosystem,
+
+00:13:35.660 --> 00:13:38.479
+is edge oriented.
+
+00:13:38.480 --> 00:13:40.919
+We call it: "The Libre-Halaal
+
+00:13:40.920 --> 00:13:43.919
+ByStar Digital Ecosystem".
+
+00:13:43.920 --> 00:13:45.799
+All the systems in ByStar,
+
+00:13:45.800 --> 00:13:50.699
+run BISOS (By* Internet Services OS),
+
+00:13:50.700 --> 00:13:53.759
+which is a layer on top of Debian.
+
+00:13:53.760 --> 00:13:58.199
+The usage environment of ByStar and BISOS is Blee
+
+00:13:58.200 --> 00:14:01.579
+which is a layer on top of Emacs.
+
+00:14:01.580 --> 00:14:04.919
+With those in place, we then create
+
+00:14:04.920 --> 00:14:10.139
+a capability bundle called Blee-LCNT.
+
+00:14:10.140 --> 00:14:13.039
+So, when you buy into Blee and BISOS,
+
+00:14:13.040 --> 00:14:15.199
+you will naturally also get
+
+00:14:15.200 --> 00:14:18.719
+these content processing capabilities---
+
+00:14:18.720 --> 00:14:23.119
+without a need for any recipies or DIY effort.
+
+NOTE ByStar containment hierarchy and ByStar capability bundles
+
+00:14:23.120 --> 00:14:24.879
+If you were to look at the model
+
+00:14:24.880 --> 00:14:29.119
+that I introduced as containment hierarchies,
+
+00:14:29.120 --> 00:14:31.279
+it would look like this.
+
+NOTE Aggregated conviviality of ByStar capabilities
+
+00:14:31.280 --> 00:14:33.779
+We love Emacs and we love Unix
+
+00:14:33.780 --> 00:14:36.759
+because their design is convivial.
+
+00:14:36.760 --> 00:14:39.199
+By convivial, I am referring
+
+00:14:39.200 --> 00:14:40.759
+to Ivan Illich's concept
+
+00:14:40.760 --> 00:14:45.319
+and terminology of "Tools for Conviviality".
+
+00:14:45.320 --> 00:14:48.679
+It was first published in 1973.
+
+00:14:48.680 --> 00:14:50.959
+It's a must read.
+
+00:14:50.960 --> 00:14:52.639
+A goal of the design
+
+00:14:52.640 --> 00:14:54.799
+of the ByStar Digital Ecosystem
+
+00:14:54.800 --> 00:14:57.479
+is to enlarge the aggregated
+
+00:14:57.480 --> 00:15:01.719
+conviviality of its capabilities.
+
+00:15:01.720 --> 00:15:04.719
+What distinguishes Blee-LCNT
+
+00:15:04.720 --> 00:15:08.959
+from other content processing tools and frameworks,
+
+00:15:08.960 --> 00:15:12.439
+is our emphasis on enhancing
+
+00:15:12.440 --> 00:15:15.659
+the aggregated conviviality.
+
+00:15:15.660 --> 00:15:19.259
+These tools let you express yourself.
+
+00:15:19.260 --> 00:15:21.999
+They let you be in charge.
+
+NOTE Parts list: integrated components
+
+00:15:22.000 --> 00:15:24.499
+Here is our parts list.
+
+00:15:24.500 --> 00:15:25.839
+These are the components
+
+00:15:25.840 --> 00:15:27.959
+that we have chosen to bring together
+
+00:15:27.960 --> 00:15:32.779
+towards our goal of creating convivial tools.
+
+00:15:32.780 --> 00:15:36.039
+In this slide, we are using black ink
+
+00:15:36.040 --> 00:15:38.519
+to denote exisiting tools
+
+00:15:38.520 --> 00:15:41.339
+and we use violet ink
+
+00:15:41.340 --> 00:15:44.419
+to denote pieces that we have developed
+
+00:15:44.420 --> 00:15:47.100
+towards cohesive integration.
+
+00:15:46.560 --> 00:15:47.867
+[This] video,
+
+NOTE Resulting contents - output forms and formats
+
+00:15:47.868 --> 00:15:51.479
+the video is just one of the outputs.
+
+00:15:51.480 --> 00:15:54.499
+There are other outputs as well.
+
+00:15:54.500 --> 00:15:56.359
+In this figure, the outputs
+
+00:15:56.360 --> 00:15:58.859
+are shown in the top layer.
+
+00:15:58.860 --> 00:16:02.279
+Using this video as an example,
+
+00:16:02.280 --> 00:16:05.599
+this presentation's output also include
+
+00:16:05.600 --> 00:16:07.599
+the "Presentation Form"
+
+00:16:07.600 --> 00:16:10.999
+and the "Article-Presentation Form".
+
+00:16:11.000 --> 00:16:13.719
+Let's look at these more closely.
+
+00:16:13.720 --> 00:16:17.259
+For Presentations, there are 3 different forms.
+
+00:16:17.260 --> 00:16:19.559
+The Video Form, the Presentation From
+
+00:16:19.560 --> 00:16:22.819
+and the Article-Presentation Form.
+
+00:16:22.820 --> 00:16:27.439
+The Presentation Form produces both a pdf output
+
+00:16:27.440 --> 00:16:29.079
+and Reveal output.
+
+00:16:29.080 --> 00:16:32.879
+Next we will walkthrough some of the benefits
+
+00:16:32.880 --> 00:16:35.519
+that availability of these forms
+
+00:16:35.520 --> 00:16:38.099
+and formats provide.
+
+00:16:38.100 --> 00:16:41.959
+The video presentation that you are watching
+
+00:16:41.960 --> 00:16:44.599
+is just one of the outputs
+
+00:16:44.600 --> 00:16:48.479
+of the Blee-LCNT machinery.
+
+00:16:48.480 --> 00:16:52.679
+There are two PDF format outputs
+
+00:16:52.680 --> 00:16:56.439
+and two HTML outputs
+
+00:16:56.440 --> 00:16:58.859
+that are also quite useful.
+
+00:16:58.860 --> 00:17:02.119
+The primary output of Beamer
+
+00:17:02.120 --> 00:17:04.239
+is a set of slides
+
+00:17:04.240 --> 00:17:10.439
+that people use to give their talks with.
+
+00:17:10.440 --> 00:17:12.479
+Typically that's done live.
+
+00:17:12.480 --> 00:17:19.179
+In my case I dissect the images of each frame
+
+00:17:19.180 --> 00:17:21.639
+and do a voiceover on it
+
+00:17:21.640 --> 00:17:28.839
+and then dispense it through reveal.
+
+00:17:28.840 --> 00:17:33.379
+In a second, you will see that as well.
+
+00:17:33.380 --> 00:17:36.959
+This PDF output is very useful.
+
+00:17:36.960 --> 00:17:39.279
+You get the table of contents, of course,
+
+00:17:39.280 --> 00:17:42.207
+and in addition to that,
+
+00:17:42.208 --> 00:17:46.319
+Beamer generates navigations for you
+
+00:17:46.320 --> 00:17:49.599
+where on any part you get
+
+00:17:49.600 --> 00:17:51.839
+a small table of content as well.
+
+00:17:51.840 --> 00:17:57.119
+This is heavily used amongst academics,
+
+00:17:57.120 --> 00:18:00.959
+and it's a good output on its own,
+
+00:18:00.960 --> 00:18:03.319
+and I'm augmenting it
+
+00:18:03.320 --> 00:18:05.399
+in a variety of ways.
+
+00:18:05.400 --> 00:18:09.719
+In addition to the presentation PDF format,
+
+00:18:09.720 --> 00:18:15.359
+there is also an article-presentation PDF format
+
+00:18:15.360 --> 00:18:18.799
+which gives you the same content,
+
+00:18:18.800 --> 00:18:25.159
+but it gives it to you in a textual form
+
+00:18:25.160 --> 00:18:30.939
+with the table of content and the rest.
+
+00:18:30.940 --> 00:18:34.759
+This is a good form to use
+
+00:18:34.760 --> 00:18:39.919
+when you are giving, for example, class lectures,
+
+00:18:39.920 --> 00:18:45.719
+and the students often prefer this format.
+
+NOTE reveal.js
+
+00:18:45.720 --> 00:18:51.839
+Now for the HTML format output, the most relevant,
+
+00:18:51.840 --> 00:18:55.599
+of course, is the reveal itself.
+
+00:18:55.600 --> 00:19:05.679
+If you have not used reveal before,
+
+00:19:05.680 --> 00:19:10.559
+in my view, it's a HTML slide dispenser.
+
+00:19:10.560 --> 00:19:15.479
+I don't look at it as a presentation framework.
+
+00:19:15.480 --> 00:19:22.599
+I use, as you are seeing, we use Beamer to feed into it
+
+00:19:22.600 --> 00:19:25.759
+and we use it to dispense the information.
+
+00:19:25.760 --> 00:19:33.439
+It has all the typical navigation
+
+00:19:33.440 --> 00:19:39.959
+capabilities that you would expect,
+
+00:19:39.960 --> 00:19:44.319
+and most of what I have as slides are images,
+
+00:19:44.320 --> 00:19:48.239
+but occasionally, particularly when there is a need
+
+00:19:48.240 --> 00:19:52.999
+to provide pointers, HTML pointers,
+
+00:19:53.000 --> 00:20:01.439
+I then also include a textual output.
+
+00:20:01.440 --> 00:20:05.559
+This is also produced
+
+00:20:05.560 --> 00:20:09.839
+from the Beamer LaTeX source,
+
+00:20:09.840 --> 00:20:14.959
+but it's HTML through textual HTML,
+
+00:20:14.960 --> 00:20:19.019
+through HeVeA, not the image.
+
+00:20:19.020 --> 00:20:22.499
+You can... you get a table of contents.
+
+00:20:22.500 --> 00:20:24.574
+You can navigate
+
+00:20:24.575 --> 00:20:28.079
+and there are a whole lot of other features
+
+00:20:28.080 --> 00:20:31.979
+that reveal also provides.
+
+NOTE Generating the video
+
+00:20:31.980 --> 00:20:35.879
+So to generate the video,
+
+00:20:35.880 --> 00:20:40.980
+what I do is I come to
+
+00:20:40.981 --> 00:20:49.459
+the very beginning of the presentation.
+
+00:20:49.460 --> 00:20:51.519
+I turn on the screen capture recorder,
+
+00:20:51.520 --> 00:20:54.159
+and then I start playing
+
+00:20:54.160 --> 00:20:58.239
+the voiceover for each slide
+
+00:20:58.240 --> 00:21:02.519
+and at the very end, you get a video,
+
+00:21:02.520 --> 00:21:08.759
+but what you just did is you dispensed every frame,
+
+00:21:08.760 --> 00:21:11.279
+one at a time, through reveal.
+
+00:21:11.280 --> 00:21:15.319
+In addition to this HTML form,
+
+00:21:15.320 --> 00:21:22.239
+you also get an article presentation form of it,
+
+00:21:22.240 --> 00:21:24.159
+with a full table of contents
+
+00:21:24.160 --> 00:21:27.759
+and the videos are there, and the notes are there,
+
+00:21:27.760 --> 00:21:33.479
+and this is also quite useful.
+
+NOTE A unified single input -- a sequencef of frames
+
+00:21:33.480 --> 00:21:36.519
+Now, let's look at the one single input file
+
+00:21:36.520 --> 00:21:38.879
+that produced all of the outputs
+
+00:21:38.880 --> 00:21:39.879
+that we just saw.
+
+00:21:39.880 --> 00:21:43.079
+I have put both the input file
+
+00:21:43.080 --> 00:21:45.119
+and some of the output files
+
+00:21:45.120 --> 00:21:48.299
+for this presentation on Github.
+
+00:21:48.300 --> 00:21:49.839
+Here are some links
+
+00:21:49.840 --> 00:21:51.679
+to these repos and files.
+
+00:21:51.680 --> 00:21:54.679
+And here are the same links
+
+00:21:54.680 --> 00:21:57.119
+as a native Reveal slide.
+
+00:21:57.120 --> 00:21:59.879
+This figure gives us an overview
+
+00:21:59.880 --> 00:22:02.759
+of how one set of inputs
+
+00:22:02.760 --> 00:22:04.959
+encapsulted in a single file
+
+00:22:04.960 --> 00:22:08.759
+can produce all of the outputs that we saw.
+
+00:22:08.760 --> 00:22:11.439
+The main TeX file shown at the bottom
+
+00:22:11.440 --> 00:22:15.659
+is processed by both XeLaTeX and by HeVeA.
+
+00:22:15.660 --> 00:22:18.279
+That main TeX file, in addition
+
+00:22:18.280 --> 00:22:19.679
+to LaTeX syntax,
+
+00:22:19.680 --> 00:22:22.999
+also include org-mode constructs
+
+00:22:23.000 --> 00:22:27.039
+that facilitate addition of audio and video files.
+
+00:22:27.040 --> 00:22:34.879
+Later, I'll walkthrough the bodyPresArtEnFa.tex file
+
+00:22:34.880 --> 00:22:39.179
+that generated this very presentation with you.
+
+NOTE Abstractions to keep in mind
+
+00:22:39.180 --> 00:22:42.679
+When you construct that primary TeX file,
+
+00:22:42.680 --> 00:22:44.679
+there are several abstractions
+
+00:22:44.680 --> 00:22:46.899
+that you need to keep in mind.
+
+00:22:46.900 --> 00:22:49.119
+Is my presentation going to go
+
+00:22:49.120 --> 00:22:52.739
+from Left-To-Right or from Right-To-Left?
+
+00:22:52.740 --> 00:22:57.039
+Perso-Arabic presentations go from Right-To-Left.
+
+00:22:57.040 --> 00:22:59.679
+Another consideration is the types
+
+00:22:59.680 --> 00:23:03.119
+of forms of results that you want.
+
+00:23:03.120 --> 00:23:05.019
+Just the presentation
+
+00:23:05.020 --> 00:23:08.999
+or Article-Presentation as well?
+
+00:23:09.000 --> 00:23:10.879
+With those choices in place
+
+00:23:10.880 --> 00:23:13.399
+you can produce condition based text
+
+00:23:13.400 --> 00:23:16.199
+for each of your desired outputs.
+
+NOTE Frame control types
+
+00:23:16.200 --> 00:23:18.919
+Think of this video presentation
+
+00:23:18.920 --> 00:23:20.879
+as a sequence of frames.
+
+00:23:20.880 --> 00:23:26.119
+Each frame is controlled by an org-mode dynamic block.
+
+00:23:26.120 --> 00:23:29.039
+This table lists available dblocks
+
+00:23:29.040 --> 00:23:31.559
+from which you can choose.
+
+00:23:31.560 --> 00:23:34.039
+For example, this particular frame
+
+00:23:34.040 --> 00:23:34.839
+that we are watching
+
+00:23:34.840 --> 00:23:41.979
+is controlled by b:lcnt:pres:frame/derivedImage.
+
+00:23:41.980 --> 00:23:44.639
+Beamer creates a pdf file
+
+00:23:44.640 --> 00:23:47.879
+that includes the image of this slide.
+
+00:23:47.880 --> 00:23:51.459
+That image is then injected into Reveal.
+
+00:23:51.460 --> 00:23:55.359
+And in the end, a video of that image is produced
+
+00:23:55.360 --> 00:23:57.239
+with the narrations
+
+00:23:57.240 --> 00:23:59.259
+that I am uttering right now.
+
+00:23:59.260 --> 00:24:02.199
+All of this has similarly been applied
+
+00:24:02.200 --> 00:24:03.599
+to each and every frame
+
+00:24:03.600 --> 00:24:05.919
+that you have been watching.
+
+00:24:05.920 --> 00:24:08.399
+Similar to Frame Controls,
+
+00:24:08.400 --> 00:24:10.719
+there are org-mode dynamic blocks
+
+00:24:10.720 --> 00:24:13.519
+for "Frame Body Types".
+
+00:24:13.520 --> 00:24:15.839
+You can easily insert an image
+
+00:24:15.840 --> 00:24:19.639
+which is typically created by OpenOffice Draw
+
+00:24:19.640 --> 00:24:21.619
+into a frame.
+
+00:24:21.620 --> 00:24:24.359
+Same with say a screen capture video.
+
+NOTE How outputs are generate from the inputs
+
+00:24:24.360 --> 00:24:29.319
+Now that we have looked at the "Outputs" and the "Inputs",
+
+00:24:29.320 --> 00:24:31.679
+let's look at how the Outputs
+
+00:24:31.680 --> 00:24:35.919
+are generated from the Inputs.
+
+00:24:35.920 --> 00:24:39.399
+Let's bootstrap Raw-BISOS and Raw-Blee.
+
+00:24:39.400 --> 00:24:41.719
+Starting from scratch,
+
+00:24:41.720 --> 00:24:45.799
+get yourself a fresh copy of Debian 12.
+
+00:24:45.800 --> 00:24:52.719
+Then go to https://github.com/bxGenesis/start .
+
+00:24:52.720 --> 00:24:55.079
+The README.org file
+
+00:24:55.080 --> 00:24:57.119
+of that github repo
+
+00:24:57.120 --> 00:24:58.639
+is same as Chapter 18,
+
+00:24:58.640 --> 00:25:01.959
+"Engineering Adoption of BISOS and ByStar" of the book.
+
+00:25:01.960 --> 00:25:05.359
+We will next run "raw-bisos.sh",
+
+00:25:05.360 --> 00:25:09.959
+but prior to that, let's take a quick look.
+
+00:25:09.960 --> 00:25:14.759
+This bootstrap scripts will do a lot as root
+
+00:25:14.760 --> 00:25:16.479
+on your Fresh-Debian.
+
+00:25:16.480 --> 00:25:18.599
+It is best to first try it
+
+00:25:18.600 --> 00:25:21.179
+on a disposable VM.
+
+00:25:21.180 --> 00:25:27.159
+raw-bisos.sh adds the current debian user to sudoers.
+
+00:25:27.160 --> 00:25:30.399
+Then it installs pipx.
+
+00:25:30.400 --> 00:25:34.199
+And then with pipx it installs
+
+00:25:34.200 --> 00:25:37.999
+from PyPI bisos.provision.
+
+00:25:38.000 --> 00:25:43.279
+bisos.provision includes additional bash scripts
+
+00:25:43.280 --> 00:25:45.359
+that are then executed.
+
+00:25:45.360 --> 00:25:48.159
+Full installation involves
+
+00:25:48.160 --> 00:25:51.039
+setting up various accounts, groups,
+
+00:25:51.040 --> 00:25:53.279
+various directory hierarchies,
+
+00:25:53.280 --> 00:25:55.439
+lots of apt packages
+
+00:25:55.440 --> 00:25:57.979
+and lots of python packages
+
+00:25:57.980 --> 00:26:01.499
+from the bisos namespace.
+
+00:26:01.500 --> 00:26:03.879
+If you are ready, copy and paste
+
+00:26:03.880 --> 00:26:06.599
+this line and run it.
+
+00:26:06.600 --> 00:26:08.039
+You will be prompted
+
+00:26:08.040 --> 00:26:09.619
+for the root password.
+
+00:26:09.620 --> 00:26:11.279
+Then be patient.
+
+00:26:11.280 --> 00:26:12.559
+Full installation
+
+00:26:12.560 --> 00:26:14.519
+can take 15 minutes or so.
+
+00:26:14.520 --> 00:26:17.079
+The logs of this script
+
+00:26:17.080 --> 00:26:18.519
+are also captured
+
+00:26:18.520 --> 00:26:25.199
+in ~/raw-bisos-${dateTag}-log.org
+
+NOTE Context for unified source walkthrough
+
+00:26:25.200 --> 00:26:28.959
+Now that we have Raw-BISOS and Raw-Blee installed,
+
+00:26:28.960 --> 00:26:31.039
+we are ready to walk through
+
+00:26:31.040 --> 00:26:32.319
+the unified source
+
+00:26:32.320 --> 00:26:34.439
+of the very presentation
+
+00:26:34.440 --> 00:26:36.259
+that you are watching.
+
+00:26:36.260 --> 00:26:40.959
+The "bodyPresArtEnFa.tex" file
+
+00:26:40.960 --> 00:26:42.439
+that we will visit
+
+00:26:42.440 --> 00:26:45.059
+is in COMEEGA-LaTeX syntax
+
+00:26:45.060 --> 00:26:47.699
+with lots of org-mode dblocks
+
+00:26:47.700 --> 00:26:50.479
+which generate Beamer-LaTeX frames
+
+00:26:50.480 --> 00:26:54.139
+and conditioned LaTeX bodies.
+
+00:26:54.140 --> 00:26:55.599
+After the walkthrough,
+
+00:26:55.600 --> 00:27:00.359
+I'll describe dblocks and COMEEGA in more detail.
+
+00:27:00.360 --> 00:27:02.239
+At the tail end of the walkthrough,
+
+00:27:02.240 --> 00:27:05.319
+we will also go through the generation process
+
+00:27:05.320 --> 00:27:10.859
+which runs XeLaTeX and HeVeA and a lot more.
+
+00:27:10.860 --> 00:27:13.619
+Let's look at our input file.
+
+00:27:13.620 --> 00:27:17.019
+It's a LaTeX file in LaTeX mode,
+
+00:27:17.020 --> 00:27:24.279
+and it has org syntax org-mode included in it,
+
+00:27:24.280 --> 00:27:29.559
+and I can toggle between LaTeX and org-mode.
+
+00:27:29.560 --> 00:27:33.599
+So, now I'm gonna be in org-mode,
+
+00:27:33.600 --> 00:27:37.839
+and org-mode gives me everything
+
+00:27:37.840 --> 00:27:39.399
+that org has to offer,
+
+00:27:39.400 --> 00:27:46.479
+including a very convenient navigation framework.
+
+NOTE One slide
+
+00:27:46.480 --> 00:27:54.279
+Let's take one slide and take a look at how it was done.
+
+00:27:54.280 --> 00:27:58.679
+So I would come to this scope slide
+
+00:27:58.680 --> 00:28:03.999
+and while I am there, I'm going to click on N.
+
+00:28:04.000 --> 00:28:09.759
+N takes me to the native LaTeX form back,
+
+00:28:09.760 --> 00:28:16.359
+so that I'll be looking at it not in org, but in LaTeX.
+
+00:28:16.360 --> 00:28:22.906
+So we're back in LaTeX, and as you can see
+
+00:28:22.907 --> 00:28:25.999
+it uses a dynamic block
+
+00:28:26.000 --> 00:28:30.799
+starting with the comments and the BEGIN,
+
+00:28:30.800 --> 00:28:34.839
+and it uses a dynamic block
+
+00:28:34.840 --> 00:28:38.079
+named a framedDrive image,
+
+00:28:38.080 --> 00:28:45.399
+which means the content of this frame
+
+00:28:45.400 --> 00:28:50.439
+will be dispensed as an image, not as text,
+
+00:28:50.440 --> 00:28:56.899
+and it also automatically creates for me
+
+00:28:56.900 --> 00:29:00.439
+a name, a label, that can be used
+
+00:29:00.440 --> 00:29:05.119
+for voiceover augmentation.
+
+00:29:05.120 --> 00:29:08.119
+So a file in the audio directory
+
+00:29:08.120 --> 00:29:13.039
+called ScopeOfBleeLcnt.mp3
+
+00:29:13.040 --> 00:29:19.319
+is this audio that will come on top of this slide
+
+00:29:19.320 --> 00:29:24.079
+and then the rest is the LaTeX itself.
+
+NOTE Dynamic blocks
+
+00:29:24.080 --> 00:29:29.679
+The concept of "Org Dynamic Blocks"
+
+00:29:29.680 --> 00:29:31.519
+is very powerful.
+
+00:29:31.520 --> 00:29:33.599
+I think of them as universal
+
+00:29:33.600 --> 00:29:35.179
+visible macros.
+
+00:29:35.180 --> 00:29:41.359
+But, why should they be primarily used in just Org-Mode?
+
+00:29:41.360 --> 00:29:43.639
+I say, let's generalize them
+
+00:29:43.640 --> 00:29:46.059
+to "Emacs Dynamic Blocks".
+
+00:29:46.060 --> 00:29:49.959
+Have defaults for org-dblock-start-re
+
+00:29:49.960 --> 00:29:52.159
+in every relevant mode
+
+00:29:52.160 --> 00:29:55.099
+and use them everywhere.
+
+00:29:55.100 --> 00:29:56.319
+Blee does that.
+
+00:29:56.320 --> 00:30:01.719
+In COMEEGA-LaTeX, Dynamic Blocks create Frame Controls
+
+00:30:01.720 --> 00:30:05.519
+and insert Image and Video contents.
+
+00:30:05.520 --> 00:30:07.519
+Much of Blee and BISOS
+
+00:30:07.520 --> 00:30:09.959
+are implemented in COMEEGA.
+
+00:30:09.960 --> 00:30:13.599
+Almost all of our Elisp, Python, Bash
+
+00:30:13.600 --> 00:30:17.199
+and LaTeX work uses COMEEGA.
+
+00:30:17.200 --> 00:30:19.299
+COMEEGA stands for Collaborative
+
+00:30:19.300 --> 00:30:21.679
+Org-Mode
+
+00:30:21.680 --> 00:30:24.759
+Enhanced Emacs Generalized Authorship.
+
+00:30:24.760 --> 00:30:27.879
+It is the inverse of org-babel.
+
+00:30:27.880 --> 00:30:29.999
+COMEEGA adds org-mode
+
+00:30:30.000 --> 00:30:33.099
+to your programming mode.
+
+00:30:33.100 --> 00:30:35.079
+Full and proper use of COMEEGA,
+
+00:30:35.080 --> 00:30:38.299
+requires Polymode.
+
+00:30:38.300 --> 00:30:41.359
+Let's call that Poly-COMEEGA.
+
+00:30:41.360 --> 00:30:43.319
+But Emacs's Polymode
+
+00:30:43.320 --> 00:30:45.679
+is work-in-progress,
+
+00:30:45.680 --> 00:30:49.199
+particularly now with the new tree-sitter.
+
+00:30:49.200 --> 00:30:53.199
+So, in the interim, my usage of COMEEGA
+
+00:30:53.200 --> 00:30:55.919
+has been in the form of Toggle-COMEEGA.
+
+00:30:55.920 --> 00:30:59.479
+Where I manually switch between
+
+00:30:59.480 --> 00:31:02.359
+the programming-mode and org-mode.
+
+00:31:02.360 --> 00:31:04.199
+For me this has proved to be
+
+00:31:04.200 --> 00:31:05.799
+a fine interim solution.
+
+NOTE Internationalization - a non-Americanist perspective
+
+00:31:05.800 --> 00:31:09.679
+Naturally, content processing
+
+00:31:09.680 --> 00:31:11.239
+should be multi-lingual
+
+00:31:11.240 --> 00:31:14.159
+and internationalized.
+
+00:31:14.160 --> 00:31:15.839
+Let's look at that dimension.
+
+00:31:15.840 --> 00:31:21.019
+I am Iranian and much of what I write is in Farsi.
+
+00:31:21.020 --> 00:31:23.519
+Getting Perso-Arabic text right
+
+00:31:23.520 --> 00:31:25.519
+is often a challenge,
+
+00:31:25.520 --> 00:31:30.059
+as it involves Bi-Directional text (BIDI)
+
+00:31:30.060 --> 00:31:32.999
+and shaping of characters.
+
+00:31:33.000 --> 00:31:36.039
+In the context of our content generation
+
+00:31:36.040 --> 00:31:39.819
+these need to span all relevant tools,
+
+00:31:39.820 --> 00:31:41.759
+not just emacs.
+
+00:31:41.760 --> 00:31:43.759
+For emacs, I have created
+
+00:31:43.760 --> 00:31:46.239
+my own input method
+
+00:31:46.240 --> 00:31:49.419
+called farsi-transliterate-banan.
+
+00:31:49.420 --> 00:31:54.139
+My EmacsConf 2021 talk was about that.
+
+00:31:54.140 --> 00:31:57.199
+Now let's look at some examples
+
+00:31:57.200 --> 00:32:01.699
+and spice it up a bit with semantics.
+
+00:32:01.700 --> 00:32:05.279
+As an example of proper BIDI text,
+
+00:32:05.280 --> 00:32:07.899
+here is the orignal Farsi text
+
+00:32:07.900 --> 00:32:10.359
+along with English translation
+
+00:32:10.360 --> 00:32:12.519
+of Imam Khomeini's text
+
+00:32:12.520 --> 00:32:15.479
+with respect to invalidity
+
+00:32:15.480 --> 00:32:20.399
+of Western Intellectual Proprty Rights regime.
+
+00:32:20.400 --> 00:32:23.039
+And as another example
+
+00:32:23.040 --> 00:32:24.479
+of proper BIDI text,
+
+00:32:24.480 --> 00:32:29.919
+here is Ayatollah Mothari's take on Western IPR
+
+00:32:29.920 --> 00:32:35.159
+not being private property. Note that these predate
+
+00:32:35.160 --> 00:32:36.919
+by more than half a century
+
+00:32:36.920 --> 00:32:43.239
+Jack Dorsey and Elon Musk's tweets of April 11, 2025
+
+00:32:43.240 --> 00:32:47.199
+saying "Delete all IP law".
+
+00:32:47.200 --> 00:32:49.159
+This topic is too important
+
+00:32:49.160 --> 00:32:50.399
+and too sensitive
+
+00:32:50.400 --> 00:32:53.639
+to be left to American billionaires
+
+00:32:53.640 --> 00:32:55.639
+and their tweets.
+
+00:32:55.640 --> 00:32:58.199
+Let me again refer you to the logic
+
+00:32:58.200 --> 00:33:00.599
+of polyexistentials in my book.
+
+00:33:00.600 --> 00:33:06.359
+Chapter 14 of the book is dedicated to
+
+00:33:06.360 --> 00:33:08.579
+Ethics and ownership in Religions.
+
+00:33:08.580 --> 00:33:10.919
+With respect to my preference
+
+00:33:10.920 --> 00:33:12.719
+for Ethics over Freedom,
+
+00:33:12.720 --> 00:33:16.519
+let me refer you to Section 12.4
+
+00:33:16.520 --> 00:33:19.079
+"A Cynical Perspective
+
+00:33:19.080 --> 00:33:22.859
+on Freedom Orientation of Americans"
+
+00:33:22.860 --> 00:33:25.999
+in which I describe where the FOSS labels
+
+00:33:26.000 --> 00:33:29.039
+and the likes of Stallman, Raymond,
+
+00:33:29.040 --> 00:33:31.599
+Moglen and Lessig have gone wrong.
+
+00:33:31.600 --> 00:33:34.239
+If you are one of their followers,
+
+00:33:34.240 --> 00:33:36.599
+perhaps Chapter 12 is for you.
+
+00:33:36.600 --> 00:33:42.279
+My emphasis thus far has been on content generation.
+
+NOTE Autonomous self-publication and federated re-publications
+
+00:33:42.280 --> 00:33:44.999
+Let's very briefly also look at
+
+00:33:45.000 --> 00:33:47.159
+Autonomous Self-Publication
+
+00:33:47.160 --> 00:33:52.279
+and Federated Re-Publications of our content.
+
+00:33:52.280 --> 00:33:55.759
+From the very beginning the Debian folks
+
+00:33:55.760 --> 00:33:59.039
+understood the importance of "Universality"
+
+00:33:59.040 --> 00:34:03.359
+and coined the "Universal Debian" label.
+
+00:34:03.360 --> 00:34:05.919
+This means that we can base
+
+00:34:05.920 --> 00:34:08.619
+our entire digital ecosystem
+
+00:34:08.620 --> 00:34:13.499
+on just the Libre-Halaal Debian distro.
+
+00:34:13.500 --> 00:34:17.299
+And that is what we have done with ByStar.
+
+00:34:17.300 --> 00:34:20.039
+In ByStar, everything is based on
+
+00:34:20.040 --> 00:34:24.119
+just the Universal Debian everywhere.
+
+00:34:24.120 --> 00:34:26.999
+This has made our Usage Environment
+
+00:34:27.000 --> 00:34:31.319
+totally harmonious with our Service Environment
+
+00:34:31.320 --> 00:34:38.059
+allowing for very powerful software-service continuums.
+
+00:34:38.060 --> 00:34:41.479
+Of course, all of this is immediately applicable
+
+00:34:41.480 --> 00:34:46.019
+to our ByStar Content Bundle as well.
+
+00:34:46.020 --> 00:34:50.519
+Some have asked, why don't you also include Ubuntu?
+
+00:34:50.520 --> 00:34:53.679
+I think the opposite makes more sense.
+
+00:34:53.680 --> 00:34:56.699
+Ubuntu should converge with Debian.
+
+00:34:56.700 --> 00:34:59.639
+I tried to explain this to Mark Shuttleworth
+
+00:34:59.640 --> 00:35:02.479
+in an email a while back.
+
+00:35:02.480 --> 00:35:04.119
+I have included that email
+
+00:35:04.120 --> 00:35:07.719
+in Section 12.1.5.
+
+NOTE Ingredients of BISOS platforms and their progression
+
+00:35:07.720 --> 00:35:10.439
+In this presentation, we have stopped
+
+00:35:10.440 --> 00:35:13.159
+at the "Raw-BISOS" stage.
+
+00:35:13.160 --> 00:35:15.759
+We can further evolve Raw-BISOS
+
+00:35:15.760 --> 00:35:17.959
+and make it be "Sited"
+
+00:35:17.960 --> 00:35:22.239
+and provide autonomous publication services.
+
+00:35:22.240 --> 00:35:25.679
+But here by going through EmacsConf and youtube
+
+00:35:25.680 --> 00:35:30.959
+we are using the "Federated Re-Publications" model.
+
+00:35:30.960 --> 00:35:32.479
+Something this large,
+
+00:35:32.480 --> 00:35:35.479
+should be well documented.
+
+00:35:35.480 --> 00:35:37.079
+In Emacs, the way that
+
+00:35:37.080 --> 00:35:39.319
+we have been dealing with documentation
+
+00:35:39.320 --> 00:35:43.439
+and information retrieval is archaic.
+
+00:35:43.440 --> 00:35:46.079
+Man-pages, TeXInfo, Helpful-Mode
+
+00:35:46.080 --> 00:35:51.599
+and convention based Doc-Strings are old and limited.
+
+00:35:51.600 --> 00:35:55.279
+In BISOS and Blee, we use Blee-Panels
+
+00:35:55.280 --> 00:35:57.739
+for all kinds of documentation.
+
+00:35:57.740 --> 00:36:02.559
+Let me show you some examples.
+
+NOTE Moving forward
+
+00:36:02.560 --> 00:36:05.199
+So, what next?
+
+00:36:05.200 --> 00:36:10.599
+If Blee, BISOS, ByStar, Libre-Halaal, Polyexistentials
+
+00:36:10.600 --> 00:36:14.159
+and these Content Processing capabilities
+
+00:36:14.160 --> 00:36:16.639
+have piqued your interest,
+
+00:36:16.640 --> 00:36:19.379
+please feel welcome to contact me.
+
+00:36:19.380 --> 00:36:22.239
+These Emacs Conferences have proven
+
+00:36:22.240 --> 00:36:25.379
+to be very useful and productive.
+
+00:36:25.380 --> 00:36:27.199
+I look forward to your thoughts,
+
+00:36:27.200 --> 00:36:29.599
+feedback and questions.
+
+00:36:29.600 --> 00:36:35.359
+I want to thank all the EmacsConf 2025 Organizers
+
+00:36:35.360 --> 00:36:37.199
+for their great work,
+
+00:36:37.200 --> 00:36:41.640
+and Sacha in particular.
diff --git a/2025/captions/emacsconf-2025-bookclub-tapas--bookclub-tapas--maddie-sullivan--main--chapters.vtt b/2025/captions/emacsconf-2025-bookclub-tapas--bookclub-tapas--maddie-sullivan--main--chapters.vtt
new file mode 100644
index 00000000..0975552c
--- /dev/null
+++ b/2025/captions/emacsconf-2025-bookclub-tapas--bookclub-tapas--maddie-sullivan--main--chapters.vtt
@@ -0,0 +1,68 @@
+WEBVTT
+
+
+00:00:00.620 --> 00:00:29.679
+Introduction
+
+00:00:29.680 --> 00:01:03.839
+Hi, I'm Maddie!
+
+00:01:03.840 --> 00:02:00.519
+Bookclub Tapas
+
+00:02:00.520 --> 00:02:40.299
+Bookclub
+
+00:02:40.300 --> 00:03:55.799
+Too many hats, too many roles
+
+00:03:55.800 --> 00:05:24.779
+Narrativiation
+
+00:05:24.780 --> 00:05:47.659
+My starter kit - My stock, off the shelf suggestions
+
+00:05:47.660 --> 00:05:58.979
+Now what?
+
+00:05:58.980 --> 00:06:23.459
+Our overarching goal
+
+00:06:23.460 --> 00:07:05.119
+Our development focuses
+
+00:07:05.120 --> 00:08:37.979
+The rest of the headings
+
+00:08:37.980 --> 00:10:55.479
+Conversationality
+
+00:10:55.480 --> 00:13:01.919
+Ad-hoc means lesricsf tion
+
+00:13:01.920 --> 00:14:48.439
+Gratis documentation
+
+00:14:48.440 --> 00:16:21.499
+Keeping the thread of your intention
+
+00:16:21.500 --> 00:17:25.239
+Bookclub is becoming too much
+
+00:17:25.240 --> 00:18:22.839
+Introducing Tapas
+
+00:18:22.840 --> 00:22:25.179
+What are Tapas, what are Tapas not?
+
+00:22:25.180 --> 00:25:52.339
+Tapas are maybe best illustrated by example
+
+00:25:52.340 --> 00:28:36.099
+Introducing Squint
+
+00:28:36.100 --> 00:29:08.159
+What else does Bookclub Tapas do?
+
+00:29:08.160 --> 00:31:25.800
+Let's work together
diff --git a/2025/captions/emacsconf-2025-bookclub-tapas--bookclub-tapas--maddie-sullivan--main.vtt b/2025/captions/emacsconf-2025-bookclub-tapas--bookclub-tapas--maddie-sullivan--main.vtt
new file mode 100644
index 00000000..8e06a734
--- /dev/null
+++ b/2025/captions/emacsconf-2025-bookclub-tapas--bookclub-tapas--maddie-sullivan--main.vtt
@@ -0,0 +1,2400 @@
+WEBVTT captioned by sachac
+
+NOTE Introduction
+
+00:00:00.620 --> 00:00:04.159
+Alright! Hi everyone! Happy EmacsConf!
+
+00:00:04.160 --> 00:00:07.079
+I´m so excited to be here.
+
+00:00:07.080 --> 00:00:07.959
+It's surreal to be part
+
+00:00:07.960 --> 00:00:09.439
+of the conference itself,
+
+00:00:09.440 --> 00:00:11.239
+in addition to being a viewer.
+
+00:00:11.240 --> 00:00:13.879
+EmacsConf is like Christmas to me,
+
+00:00:13.880 --> 00:00:18.159
+and I'm so excited when it comes around every year.
+
+00:00:18.160 --> 00:00:21.119
+Today, my talk is on a programming methodology
+
+00:00:21.120 --> 00:00:23.999
+that I've created, discovered, stumbled upon.
+
+00:00:24.000 --> 00:00:26.439
+I call it "Bookclub Tapas."
+
+00:00:26.440 --> 00:00:27.759
+Before we get into that,
+
+00:00:27.760 --> 00:00:29.679
+let me introduce myself.
+
+NOTE Hi, I'm Maddie!
+
+00:00:29.680 --> 00:00:32.119
+My name is Maddie Sullivan,
+
+00:00:32.120 --> 00:00:34.239
+and my pronouns are she/her.
+
+00:00:34.240 --> 00:00:36.719
+I go by the handle ElephantErgonomics,
+
+00:00:36.720 --> 00:00:41.119
+which is shortened down to ElephantErgo in the IRC.
+
+00:00:41.120 --> 00:00:43.079
+You can reach out to me after the talk
+
+00:00:43.080 --> 00:00:44.959
+for questions, comments,
+
+00:00:44.960 --> 00:00:47.759
+or just to say hello by reaching out
+
+00:00:47.760 --> 00:00:56.959
+to hello@ElephantErgonomics.com.
+
+00:00:56.960 --> 00:01:00.039
+So this software development strategy I found,
+
+00:01:00.040 --> 00:01:03.839
+it's inspired by literate programming and Agile.
+
+NOTE Bookclub Tapas
+
+00:01:03.840 --> 00:01:07.439
+So what exactly is Bookclub Tapas?
+
+00:01:07.440 --> 00:01:09.439
+Bookclub Tapas is a conversation
+
+00:01:09.440 --> 00:01:11.719
+that you have with yourself.
+
+00:01:11.720 --> 00:01:13.479
+It's a log and a ledger,
+
+00:01:13.480 --> 00:01:16.519
+of your intentions, hopes, dreams,
+
+00:01:16.520 --> 00:01:17.119
+and what you've learned
+
+00:01:17.120 --> 00:01:19.719
+over the course of development.
+
+00:01:19.720 --> 00:01:22.799
+Bookclub Tapas is an oracle
+
+00:01:22.800 --> 00:01:24.199
+you can consult
+
+00:01:24.200 --> 00:01:26.933
+about the state of, and the strategies behind,
+
+00:01:26.934 --> 00:01:29.559
+your development process.
+
+00:01:29.560 --> 00:01:33.479
+Bookclub Tapas is also a peer programming partner
+
+00:01:33.480 --> 00:01:37.119
+that helps you decide how to best put forward your efforts
+
+00:01:37.120 --> 00:01:38.439
+and how to best pull together
+
+00:01:38.440 --> 00:01:40.399
+what you're working on.
+
+00:01:40.400 --> 00:01:42.719
+Bookclub Tapas will also help you to understand
+
+00:01:42.720 --> 00:01:45.239
+how to tailor scope to your needs,
+
+00:01:45.240 --> 00:01:46.759
+and how to have the best parts
+
+00:01:46.760 --> 00:01:49.399
+of your program shine through clearly.
+
+00:01:49.400 --> 00:01:52.159
+Bookclub Tapas consists of two parts:
+
+00:01:52.160 --> 00:01:54.159
+Bookclub and Tapas,
+
+00:01:54.160 --> 00:02:00.519
+but what does that mean exactly, though?
+
+NOTE Bookclub
+
+00:02:00.520 --> 00:02:04.719
+Bookclub is a reverse literate development strategy.
+
+00:02:04.720 --> 00:02:07.479
+Bookclub is a time for you to write,
+
+00:02:07.480 --> 00:02:08.959
+and then read and reflect.
+
+00:02:08.960 --> 00:02:10.719
+It's like a Bookclub,
+
+00:02:10.720 --> 00:02:12.559
+but it's for your program.
+
+00:02:12.560 --> 00:02:15.239
+Instead of inserting narration into your code
+
+00:02:15.240 --> 00:02:17.799
+to narrativize what you are accomplishing,
+
+00:02:17.800 --> 00:02:20.759
+you are instead inserting snippets of code
+
+00:02:20.760 --> 00:02:23.799
+into your narrative to make it come alive.
+
+00:02:23.800 --> 00:02:27.999
+So, what are we narrativizing, exactly?
+
+00:02:28.000 --> 00:02:30.439
+What sort of story are we telling?
+
+00:02:30.440 --> 00:02:34.319
+Bookclub is the story of you, your program,
+
+00:02:34.320 --> 00:02:36.559
+and how your efforts are allowing your program
+
+00:02:36.560 --> 00:02:40.299
+to come into the world.
+
+NOTE Too many hats, too many roles
+
+00:02:40.300 --> 00:02:42.479
+Software developers naturally have to wear
+
+00:02:42.480 --> 00:02:43.679
+a lot of different hats,
+
+00:02:43.680 --> 00:02:46.479
+and take on a lot of different roles.
+
+00:02:46.480 --> 00:02:48.159
+We apply ourselves into a lot
+
+00:02:48.160 --> 00:02:50.079
+of different contexts.
+
+00:02:50.080 --> 00:02:53.067
+We do research, interface architecture design,
+
+00:02:53.068 --> 00:02:55.519
+mathematics, philosophy.
+
+00:02:55.520 --> 00:02:57.679
+We take in the world around us
+
+00:02:57.680 --> 00:03:00.359
+and then build abstractions to model it.
+
+00:03:00.360 --> 00:03:01.799
+We translate the abstract
+
+00:03:01.800 --> 00:03:03.079
+into the concrete,
+
+00:03:03.080 --> 00:03:04.667
+and then when we're trying to teach software
+
+00:03:04.668 --> 00:03:05.999
+how to be "smart,"
+
+00:03:06.000 --> 00:03:07.239
+we translate the concrete
+
+00:03:07.240 --> 00:03:09.639
+back into the abstract.
+
+00:03:09.640 --> 00:03:11.500
+I can't help but feel like so much of
+
+00:03:11.501 --> 00:03:13.759
+what makes software development difficult
+
+00:03:13.760 --> 00:03:14.919
+is just trying to remember
+
+00:03:14.920 --> 00:03:16.679
+and keep track of everything.
+
+00:03:16.680 --> 00:03:17.959
+We have to try and remember
+
+00:03:17.960 --> 00:03:21.259
+so many different implementation details.
+
+00:03:21.260 --> 00:03:24.159
+We have to remember how our own code works,
+
+00:03:24.160 --> 00:03:26.679
+how the API of our dependencies work,
+
+00:03:26.680 --> 00:03:29.479
+how relevant real-world constraints behave,
+
+00:03:29.480 --> 00:03:31.319
+what the standards lay out,
+
+00:03:31.320 --> 00:03:34.159
+and how our data structures are laid out.
+
+00:03:34.160 --> 00:03:35.079
+When we're debugging,
+
+00:03:35.080 --> 00:03:37.519
+we simultaneously have to remember
+
+00:03:37.520 --> 00:03:40.239
+how our program is currently behaving,
+
+00:03:40.240 --> 00:03:42.679
+as well as how the program ought to behave
+
+00:03:42.680 --> 00:03:43.719
+in order to get a chance
+
+00:03:43.720 --> 00:03:46.039
+to reconcile that gap.
+
+00:03:46.040 --> 00:03:47.999
+It's honestly all way too much.
+
+00:03:48.000 --> 00:03:50.239
+We need a ledger of what we're actually doing
+
+00:03:50.240 --> 00:03:55.799
+in order to stay sane.
+
+NOTE Narrativiation
+
+00:03:55.800 --> 00:03:57.333
+I think a really effective way to
+
+00:03:57.334 --> 00:03:59.599
+make sense of things that are complex and important
+
+00:03:59.600 --> 00:04:01.039
+is to narrativize them,
+
+00:04:01.040 --> 00:04:02.839
+to turn them into stories.
+
+00:04:02.840 --> 00:04:06.039
+This is a strategy that humans have been using for a long time.
+
+00:04:06.040 --> 00:04:08.559
+Mnemonic devices, metaphors,
+
+00:04:08.560 --> 00:04:09.759
+and drawing parallels
+
+00:04:09.760 --> 00:04:12.199
+are all different ways of doing just this.
+
+00:04:12.200 --> 00:04:14.799
+Telling stories helps us to understand
+
+00:04:14.800 --> 00:04:16.359
+things that are big and complex
+
+00:04:16.360 --> 00:04:19.119
+by grounding them in our own experience
+
+00:04:19.120 --> 00:04:23.979
+and making it fit into our scale.
+
+00:04:23.980 --> 00:04:25.799
+So because the way that everyone
+
+00:04:25.800 --> 00:04:26.919
+naturally tells stories
+
+00:04:26.920 --> 00:04:28.239
+is going to be a little different,
+
+00:04:28.240 --> 00:04:30.067
+because the details that strike us
+
+00:04:30.068 --> 00:04:32.119
+as important and worth focusing on
+
+00:04:32.120 --> 00:04:34.239
+are going to be different for different people,
+
+00:04:34.240 --> 00:04:35.639
+I'm not going to say
+
+00:04:35.640 --> 00:04:36.799
+that there are hard and fast rules
+
+00:04:36.800 --> 00:04:39.359
+about how Bookclub "should work,"
+
+00:04:39.360 --> 00:04:41.133
+because how it "should work"
+
+00:04:41.134 --> 00:04:43.919
+is however it best fits your needs.
+
+00:04:43.920 --> 00:04:45.879
+Different people and different projects
+
+00:04:45.880 --> 00:04:47.559
+have different backgrounds and mindsets.
+
+00:04:47.560 --> 00:04:49.633
+And I don't think it's my place to say
+
+00:04:49.634 --> 00:04:51.879
+what strategy is correct as a universal law.
+
+00:04:51.880 --> 00:04:54.719
+You know, because Bookclub Tapas is, after all,
+
+00:04:54.720 --> 00:04:57.099
+just something I've sort of stumbled into.
+
+00:04:57.100 --> 00:05:00.039
+Bookclub is intrinsically ad-hoc.
+
+00:05:00.040 --> 00:05:02.159
+My providing a prescription of strategy
+
+00:05:02.160 --> 00:05:04.839
+is basically going to begin and end with the idea
+
+00:05:04.840 --> 00:05:07.519
+that you write a reverse-literate document
+
+00:05:07.520 --> 00:05:08.799
+that illustrates how you've gone
+
+00:05:08.800 --> 00:05:11.919
+about writing your program.
+
+00:05:11.920 --> 00:05:14.519
+All of that being said,
+
+00:05:14.520 --> 00:05:16.319
+I'm going to talk about
+
+00:05:16.320 --> 00:05:18.439
+how I've laid out my book club files
+
+00:05:18.440 --> 00:05:20.399
+and why I think this is a solid place
+
+00:05:20.400 --> 00:05:24.779
+from which to get started.
+
+NOTE My starter kit - My stock, off the shelf suggestions
+
+00:05:24.780 --> 00:05:27.839
+So my stock off-the-shelf suggestions
+
+00:05:27.840 --> 00:05:29.079
+for just getting started
+
+00:05:29.080 --> 00:05:32.960
+is to have sections for: our overarching goal,
+
+00:05:32.961 --> 00:05:35.059
+our development goals,
+
+00:05:35.060 --> 00:05:40.699
+a place for scratch work, a test suite, research,
+
+00:05:40.700 --> 00:05:42.467
+and then finally sections for variables,
+
+00:05:42.468 --> 00:05:47.659
+functions, and macros.
+
+NOTE Now what?
+
+00:05:47.660 --> 00:05:49.999
+So we have our starter kit sections.
+
+00:05:50.000 --> 00:05:51.959
+How do we go about using them?
+
+00:05:51.960 --> 00:05:53.639
+How do we get started?
+
+00:05:53.640 --> 00:05:55.319
+Well, we write them, you know,
+
+00:05:55.320 --> 00:05:56.439
+out in our org document,
+
+00:05:56.440 --> 00:05:58.979
+but then what do we do?
+
+NOTE Our overarching goal
+
+00:05:58.980 --> 00:06:01.599
+We start by writing what we know.
+
+00:06:01.600 --> 00:06:04.219
+We have a spark, a vision.
+
+00:06:04.220 --> 00:06:05.839
+We had the beginning of an idea
+
+00:06:05.840 --> 00:06:08.079
+of what we wanted our program to do.
+
+00:06:08.080 --> 00:06:09.839
+Alternatively, maybe we had
+
+00:06:09.840 --> 00:06:10.879
+a client lay our goals out.
+
+00:06:10.880 --> 00:06:13.299
+Either way, we have some idea
+
+00:06:13.300 --> 00:06:15.439
+of how we want our program to be shaped.
+
+00:06:15.440 --> 00:06:18.339
+Let's start by writing that down.
+
+00:06:18.340 --> 00:06:19.439
+What are we trying to do?
+
+00:06:19.440 --> 00:06:23.459
+What is our goal?
+
+NOTE Our development focuses
+
+00:06:23.460 --> 00:06:26.279
+After that, we're probably wondering to ourselves,
+
+00:06:26.280 --> 00:06:27.759
+"Okay, we have our goal,
+
+00:06:27.760 --> 00:06:30.079
+but how do we get there?"
+
+00:06:30.080 --> 00:06:31.359
+That's when we start writing
+
+00:06:31.360 --> 00:06:33.359
+our development focuses.
+
+00:06:33.360 --> 00:06:35.159
+If we have bursts of intuition
+
+00:06:35.160 --> 00:06:36.919
+about what functions to write,
+
+00:06:36.920 --> 00:06:39.799
+questions that we want to answer through research,
+
+00:06:39.800 --> 00:06:43.339
+we start enumerating those every time they hit us.
+
+00:06:43.340 --> 00:06:44.559
+Our goal is to write them
+
+00:06:44.560 --> 00:06:46.199
+all down in a checklist
+
+00:06:46.200 --> 00:06:48.159
+in order to turn them from daydreams
+
+00:06:48.160 --> 00:06:50.479
+into courses of action.
+
+00:06:50.480 --> 00:06:52.439
+If we aren't having development focuses
+
+00:06:52.440 --> 00:06:54.799
+hit us right away, that's okay.
+
+00:06:54.800 --> 00:06:57.279
+If we just stare at the goal for long enough,
+
+00:06:57.280 --> 00:06:58.319
+I think it's inevitable
+
+00:06:58.320 --> 00:06:59.559
+that the muse will speak,
+
+00:06:59.560 --> 00:07:00.879
+and we'll get a clear lead
+
+00:07:00.880 --> 00:07:05.119
+on a path forward.
+
+NOTE The rest of the headings
+
+00:07:05.120 --> 00:07:07.219
+So now what?
+
+00:07:07.220 --> 00:07:09.899
+Now that we have our development focuses,
+
+00:07:09.900 --> 00:07:11.759
+we want to go ahead and create
+
+00:07:11.760 --> 00:07:13.439
+the rest of the headings for ourselves
+
+00:07:13.440 --> 00:07:15.539
+so we can act upon them.
+
+00:07:15.540 --> 00:07:17.239
+We go ahead and write the rest
+
+00:07:17.240 --> 00:07:19.419
+of the file's structure ad-hoc
+
+00:07:19.420 --> 00:07:22.339
+in a way that will serve our needs for now.
+
+00:07:22.340 --> 00:07:24.079
+If it's not fitting us well later on,
+
+00:07:24.080 --> 00:07:25.279
+we can just go ahead and change it.
+
+00:07:25.280 --> 00:07:26.239
+There's no pressure.
+
+00:07:26.240 --> 00:07:27.719
+That's the beauty of having this
+
+00:07:27.720 --> 00:07:30.099
+all be in a plain Org document.
+
+00:07:30.100 --> 00:07:32.079
+If we're doing something consistently,
+
+00:07:32.080 --> 00:07:35.059
+we probably want to have a heading for it.
+
+00:07:35.060 --> 00:07:36.439
+We'll go ahead and create homes
+
+00:07:36.440 --> 00:07:38.919
+for our variables, our functions, our macros.
+
+00:07:38.920 --> 00:07:41.479
+We'll want to create a spot for scratch work
+
+00:07:41.480 --> 00:07:43.319
+to sort of like stretch our legs
+
+00:07:43.320 --> 00:07:45.399
+and lament in a stream-of-consciousness
+
+00:07:45.400 --> 00:07:47.079
+sort of format about how
+
+00:07:47.080 --> 00:07:50.159
+a particular piece of design ought to work.
+
+00:07:50.160 --> 00:07:52.359
+Basically, any time we wear a different "hat"
+
+00:07:52.360 --> 00:07:55.079
+or we take on a different "role" as a developer,
+
+00:07:55.080 --> 00:07:58.839
+it's worth considering creating a category for it.
+
+00:07:58.840 --> 00:08:00.719
+The best way for us to figure out
+
+00:08:00.720 --> 00:08:01.839
+what headings to fill in,
+
+00:08:01.840 --> 00:08:03.359
+and how to fill them in,
+
+00:08:03.360 --> 00:08:07.919
+is to just go ahead and act upon our development goals.
+
+00:08:07.920 --> 00:08:09.959
+If we have a question we want to answer,
+
+00:08:09.960 --> 00:08:12.519
+we'll want to create a Research heading
+
+00:08:12.520 --> 00:08:14.759
+so we can go ahead and have a spot
+
+00:08:14.760 --> 00:08:17.419
+for scratch-work for reasoning things out.
+
+00:08:17.420 --> 00:08:18.919
+If we want to write the first draft
+
+00:08:18.920 --> 00:08:20.679
+of a function we want,
+
+00:08:20.680 --> 00:08:22.799
+We'll want to create a heading for functions
+
+00:08:22.800 --> 00:08:37.979
+and then a sub-heading for that function in particular.
+
+NOTE Conversationality
+
+00:08:37.980 --> 00:08:40.419
+So now that we've filled in our sections,
+
+00:08:40.420 --> 00:08:42.379
+what do we do now?
+
+00:08:42.380 --> 00:08:43.679
+Our idea for a program
+
+00:08:43.680 --> 00:08:44.879
+has been turned into a story,
+
+00:08:44.880 --> 00:08:47.619
+but what does that actually get us?
+
+00:08:47.620 --> 00:08:50.839
+To me, a lot of what's exciting about Bookclub
+
+00:08:50.840 --> 00:08:52.919
+is that novelization goes in
+
+00:08:52.920 --> 00:08:56.059
+and a peer programming partner comes out.
+
+00:08:56.060 --> 00:08:58.359
+As we loop through reviewing our document,
+
+00:08:58.360 --> 00:08:59.799
+as we scan it up and down,
+
+00:08:59.800 --> 00:09:02.000
+we're able to engage in conversationality
+
+00:09:02.001 --> 00:09:04.999
+with our past self because of how verbose
+
+00:09:05.000 --> 00:09:06.499
+we've been in our notes.
+
+00:09:06.500 --> 00:09:08.439
+We can ask our past self questions,
+
+00:09:08.440 --> 00:09:09.879
+and get back answers.
+
+00:09:09.880 --> 00:09:11.979
+We've turned our past self
+
+00:09:11.980 --> 00:09:14.579
+into a peer programming partner.
+
+00:09:14.580 --> 00:09:16.359
+If we're wondering what to do next,
+
+00:09:16.360 --> 00:09:18.319
+we can check our Development Focuses.
+
+00:09:18.320 --> 00:09:20.759
+If we're wondering how something works,
+
+00:09:20.760 --> 00:09:22.199
+we can read documentation
+
+00:09:22.200 --> 00:09:24.719
+embedded in our function drafts,
+
+00:09:24.720 --> 00:09:26.919
+or we can read the outcomes of tests
+
+00:09:26.920 --> 00:09:28.659
+that we've performed in our research.
+
+00:09:28.660 --> 00:09:33.019
+We can ask ourselves questions and get answers.
+
+00:09:33.020 --> 00:09:34.439
+Some of what's most exciting
+
+00:09:34.440 --> 00:09:35.919
+about peer programming to me
+
+00:09:35.920 --> 00:09:38.079
+is having fresh perspective
+
+00:09:38.080 --> 00:09:41.079
+and alternate context.
+
+00:09:41.080 --> 00:09:42.679
+We have a fresh set of eyes
+
+00:09:42.680 --> 00:09:44.439
+on the program that aren't our own,
+
+00:09:44.440 --> 00:09:47.479
+and with that set of eyes
+
+00:09:47.480 --> 00:09:50.199
+comes someone else to share the burden
+
+00:09:50.200 --> 00:09:52.539
+of trying to remember everything.
+
+00:09:52.540 --> 00:09:54.839
+With Bookclub, instead of having
+
+00:09:54.840 --> 00:09:57.559
+a peer programmer that exists in physical space,
+
+00:09:57.560 --> 00:10:00.719
+we have one that's, to get all sci-fi for a moment,
+
+00:10:00.720 --> 00:10:03.039
+reaching forward towards us
+
+00:10:03.040 --> 00:10:04.999
+from backward in time.
+
+00:10:05.000 --> 00:10:06.799
+We're asynchronously working
+
+00:10:06.800 --> 00:10:08.119
+with our past selves
+
+00:10:08.120 --> 00:10:10.439
+as an equal-role collaborative
+
+00:10:10.440 --> 00:10:12.879
+partner in development.
+
+00:10:12.880 --> 00:10:15.039
+We have their perspective,
+
+00:10:15.040 --> 00:10:17.799
+their fresh memories of the code as it was written,
+
+00:10:17.800 --> 00:10:20.959
+and their focus on what was worth worrying about
+
+00:10:20.960 --> 00:10:22.319
+at a different point in time.
+
+00:10:22.320 --> 00:10:24.959
+We can ask them questions and get answers.
+
+00:10:24.960 --> 00:10:26.319
+We can ask them questions like,
+
+00:10:26.320 --> 00:10:28.199
+well, "What do I do now?"
+
+00:10:28.200 --> 00:10:30.419
+"How does this data structure work?"
+
+00:10:30.420 --> 00:10:33.679
+"What types does this third-party library take?"
+
+00:10:33.680 --> 00:10:35.119
+By asking these questions,
+
+00:10:35.120 --> 00:10:36.319
+I can even stay fresh
+
+00:10:36.320 --> 00:10:37.479
+on development progress
+
+00:10:37.480 --> 00:10:40.099
+that I last touched months ago.
+
+00:10:40.100 --> 00:10:42.799
+It's really easy to duplicate work,
+
+00:10:42.800 --> 00:10:44.719
+forget how things work,
+
+00:10:44.720 --> 00:10:46.159
+lose track of priorities.
+
+00:10:46.160 --> 00:10:48.279
+Bookclub helps keep us focused,
+
+00:10:48.280 --> 00:10:49.839
+it keeps us accountable,
+
+00:10:49.840 --> 00:10:55.479
+it even keeps us company.
+
+NOTE Ad-hoc means lesricsf tion
+
+00:10:55.480 --> 00:10:58.359
+One of the most immediately useful things about Bookclub,
+
+00:10:58.360 --> 00:11:00.867
+in my opinion, is that we immediately have
+
+00:11:00.868 --> 00:11:02.359
+a list of actionable items.
+
+00:11:02.360 --> 00:11:04.319
+Every time I have a little pain point,
+
+00:11:04.320 --> 00:11:06.639
+I go ahead and write it down,
+
+00:11:06.640 --> 00:11:09.079
+and I write down all of the things
+
+00:11:09.080 --> 00:11:11.579
+that would be nice to have done someday.
+
+00:11:11.580 --> 00:11:13.199
+So you might be wondering,
+
+00:11:13.200 --> 00:11:14.679
+and it's fair to wonder this,
+
+00:11:14.680 --> 00:11:17.479
+isn't this effectively just the GitHub issue model?
+
+00:11:17.480 --> 00:11:19.279
+We're listing out bug requests,
+
+00:11:19.280 --> 00:11:21.239
+issue requests, feature requests.
+
+00:11:21.240 --> 00:11:22.519
+It's not exactly a new idea,
+
+00:11:22.520 --> 00:11:24.559
+and it's pretty intuitive.
+
+00:11:24.560 --> 00:11:26.719
+I think the important consideration here
+
+00:11:26.720 --> 00:11:29.999
+is that having really formalized apparatus
+
+00:11:30.000 --> 00:11:31.639
+for entering in our thoughts
+
+00:11:31.640 --> 00:11:34.419
+can be an unnecessary source of friction.
+
+00:11:34.420 --> 00:11:36.359
+Bug listings don't tend to be
+
+00:11:36.360 --> 00:11:37.839
+a great fit for daydreaming
+
+00:11:37.840 --> 00:11:40.939
+or verbose considerations of philosophy.
+
+00:11:40.940 --> 00:11:42.919
+Bug listings tend to be reserved
+
+00:11:42.920 --> 00:11:45.119
+for catastrophes.
+
+00:11:45.120 --> 00:11:47.279
+I feel like a lot of the tooling
+
+00:11:47.280 --> 00:11:48.199
+that we currently use
+
+00:11:48.200 --> 00:11:51.279
+really struggles with creating ergonomics
+
+00:11:51.280 --> 00:11:54.879
+that make taking frictionless notes difficult.
+
+00:11:54.880 --> 00:11:57.159
+We have systems where all the disparate
+
+00:11:57.160 --> 00:11:59.079
+parts of what we're working on
+
+00:11:59.080 --> 00:12:02.499
+feel really far away from each other.
+
+00:12:02.500 --> 00:12:04.039
+We're pushed away from engaging
+
+00:12:04.040 --> 00:12:05.959
+in conversations with ourselves
+
+00:12:05.960 --> 00:12:07.919
+as a result of how disparate
+
+00:12:07.920 --> 00:12:09.159
+all of our tooling feels,
+
+00:12:09.160 --> 00:12:10.959
+how the process of working with it
+
+00:12:10.960 --> 00:12:12.899
+is incongruent.
+
+00:12:12.900 --> 00:12:15.599
+My hope is that we can instead
+
+00:12:15.600 --> 00:12:16.999
+engage with a process
+
+00:12:17.000 --> 00:12:18.359
+that makes it really trivial
+
+00:12:18.360 --> 00:12:20.199
+to write impulsive journaling
+
+00:12:20.200 --> 00:12:21.979
+about what we're doing.
+
+00:12:21.980 --> 00:12:23.839
+So much of design is ultimately
+
+00:12:23.840 --> 00:12:25.559
+just daydreaming.
+
+00:12:25.560 --> 00:12:27.279
+Good ideas tend to strike us hard,
+
+00:12:27.280 --> 00:12:29.779
+in a momentary flash of inspiration,
+
+00:12:29.780 --> 00:12:32.599
+and then they fade just as quickly.
+
+00:12:32.600 --> 00:12:35.239
+Anyone who's had an idea all at once
+
+00:12:35.240 --> 00:12:36.579
+in the middle of the night
+
+00:12:36.580 --> 00:12:38.159
+knows that they're going to have to choose
+
+00:12:38.160 --> 00:12:40.619
+between either committing to writing it down
+
+00:12:40.620 --> 00:12:41.959
+or accept that by morning
+
+00:12:41.960 --> 00:12:44.259
+they'll have lost it.
+
+00:12:44.260 --> 00:12:45.359
+If we're not writing
+
+00:12:45.360 --> 00:12:46.759
+what strikes us as important
+
+00:12:46.760 --> 00:12:48.639
+at the same moment that it's happening,
+
+00:12:48.640 --> 00:12:50.379
+we're going to lose it.
+
+00:12:50.380 --> 00:12:52.639
+It's not realistic to expect ourselves
+
+00:12:52.640 --> 00:12:54.519
+to hold onto our ideas forever
+
+00:12:54.520 --> 00:12:56.359
+with the same precision
+
+00:12:56.360 --> 00:13:01.919
+as when we were first inspired.
+
+NOTE Gratis documentation
+
+00:13:01.920 --> 00:13:11.319
+Okay. I'm gonna call you out real quick.
+
+00:13:11.320 --> 00:13:13.759
+If I ask all of you "Who wants to read
+
+00:13:13.760 --> 00:13:15.959
+really excellent documentation?"
+
+00:13:15.960 --> 00:13:17.079
+I imagine that everyone here
+
+00:13:17.080 --> 00:13:18.379
+is raising their hand.
+
+00:13:18.380 --> 00:13:20.759
+We want code to make sense
+
+00:13:20.760 --> 00:13:21.959
+and we want to know what
+
+00:13:21.960 --> 00:13:24.239
+the original developer had in mind.
+
+00:13:24.240 --> 00:13:26.399
+Even the original developer themselves
+
+00:13:26.400 --> 00:13:28.579
+would want this just for their own sake.
+
+00:13:28.580 --> 00:13:30.999
+I know that for me, I can even feel
+
+00:13:31.000 --> 00:13:32.319
+things becoming less fresh
+
+00:13:32.320 --> 00:13:33.759
+just after a couple months away
+
+00:13:33.760 --> 00:13:35.539
+from my codebase.
+
+00:13:35.540 --> 00:13:38.619
+And that was me from a couple months ago.
+
+00:13:38.620 --> 00:13:42.359
+They're not around anymore.
+
+00:13:42.360 --> 00:13:45.359
+Now, here's the rough part.
+
+00:13:45.360 --> 00:13:48.579
+Here's what I'm really gonna call you all out.
+
+00:13:48.580 --> 00:13:51.599
+"Who wants to write really excellent documentation?"
+
+00:13:51.600 --> 00:13:53.719
+Now, I don't know what's happening on your end,
+
+00:13:53.720 --> 00:13:55.559
+but I'm imagining crickets,
+
+00:13:55.560 --> 00:13:57.039
+silence, tumbleweeds
+
+00:13:57.040 --> 00:13:59.139
+blowing through to the horizon.
+
+00:13:59.140 --> 00:14:00.999
+It's a tough ask.
+
+00:14:01.000 --> 00:14:03.559
+It's not generally all that rewarding.
+
+00:14:03.560 --> 00:14:06.299
+If you're writing docs from scratch,
+
+00:14:06.300 --> 00:14:07.999
+a lot of it involves relearning
+
+00:14:08.000 --> 00:14:10.679
+the intentions behind crusty old code.
+
+00:14:10.680 --> 00:14:13.359
+For me, it hurts to not spend that same time
+
+00:14:13.360 --> 00:14:16.119
+implementing bug fixes and new features.
+
+00:14:16.120 --> 00:14:17.599
+It just doesn't feel like
+
+00:14:17.600 --> 00:14:19.619
+a great use of my time.
+
+00:14:19.620 --> 00:14:22.279
+Even if it's strictly for my own codebase
+
+00:14:22.280 --> 00:14:25.039
+for my own use, it's hard to sit down and do it
+
+00:14:25.040 --> 00:14:28.779
+even when I know how much I would benefit from it.
+
+00:14:28.780 --> 00:14:31.359
+My thinking is that when you write rough,
+
+00:14:31.360 --> 00:14:34.039
+piecewise daydreaming as you go,
+
+00:14:34.040 --> 00:14:36.039
+it's so much easier to not only
+
+00:14:36.040 --> 00:14:38.759
+begin writing documentation early in your process,
+
+00:14:38.760 --> 00:14:42.839
+but also to stay consistent about not slouching into
+
+00:14:42.840 --> 00:14:48.439
+an accumulation of a backlog.
+
+NOTE Keeping the thread of your intention
+
+00:14:48.440 --> 00:14:51.319
+So not only does writing documentation early
+
+00:14:51.320 --> 00:14:54.599
+make us more likely to keep that habit going,
+
+00:14:54.600 --> 00:14:56.399
+but it also makes the documentation
+
+00:14:56.400 --> 00:14:59.499
+we do write way more robust.
+
+00:14:59.500 --> 00:15:01.239
+When fiction meets reality
+
+00:15:01.240 --> 00:15:04.119
+and we start writing out code
+
+00:15:04.120 --> 00:15:06.119
+that is constrained by the real world
+
+00:15:06.120 --> 00:15:08.859
+and not just our imagination,
+
+00:15:08.860 --> 00:15:11.759
+we learn that things we assumed about our design
+
+00:15:11.760 --> 00:15:14.839
+aren't going to work out in practice.
+
+00:15:14.840 --> 00:15:16.879
+Because of this, we can enter
+
+00:15:16.880 --> 00:15:18.559
+into a sort of situation
+
+00:15:18.560 --> 00:15:21.139
+akin to boiling a frog in a pot of water.
+
+00:15:21.140 --> 00:15:23.079
+Frogs don't notice that they're being boiled
+
+00:15:23.080 --> 00:15:26.919
+if the water is only heated gradually enough.
+
+00:15:26.920 --> 00:15:31.099
+We decide to adjust our design only a little bit
+
+00:15:31.100 --> 00:15:33.919
+without changing the documentation right away.
+
+00:15:33.920 --> 00:15:34.999
+Doing that once is fine,
+
+00:15:35.000 --> 00:15:36.559
+but I don't believe for a second
+
+00:15:36.560 --> 00:15:38.559
+that we're only going to do it once.
+
+00:15:38.560 --> 00:15:39.919
+We can find ourselves surprised
+
+00:15:39.920 --> 00:15:41.659
+that as time goes on,
+
+00:15:41.660 --> 00:15:43.919
+our code looks nothing like our spec,
+
+00:15:43.920 --> 00:15:45.879
+and we lose the thread of what our code
+
+00:15:45.880 --> 00:15:48.699
+was supposed to do in the first place.
+
+00:15:48.700 --> 00:15:52.979
+When we stake our intentions clearly and early,
+
+00:15:52.980 --> 00:15:54.979
+you ground yourself in them.
+
+00:15:54.980 --> 00:15:58.439
+You reduce the risk of straying from them.
+
+00:15:58.440 --> 00:15:59.879
+You have clear reference
+
+00:15:59.880 --> 00:16:01.919
+for what you want your code to do,
+
+00:16:01.920 --> 00:16:03.319
+and you reduce the risk
+
+00:16:03.320 --> 00:16:05.919
+of having its purpose shift over time.
+
+00:16:05.920 --> 00:16:07.399
+When we take turns alternating
+
+00:16:07.400 --> 00:16:09.239
+between writing code and documentation
+
+00:16:09.240 --> 00:16:11.199
+rather than acting, you know,
+
+00:16:11.200 --> 00:16:14.319
+as having it all as one step,
+
+00:16:14.320 --> 00:16:16.479
+we risk taking turns just moving
+
+00:16:16.480 --> 00:16:21.499
+our goalpost back and forth.
+
+NOTE Bookclub is becoming too much
+
+00:16:21.500 --> 00:16:24.239
+So we've seen how our Bookclub files get us
+
+00:16:24.240 --> 00:16:25.839
+all sorts of amazing features
+
+00:16:25.840 --> 00:16:27.619
+and practical benefits.
+
+00:16:27.620 --> 00:16:29.599
+But we might be starting to notice a pattern
+
+00:16:29.600 --> 00:16:31.839
+as we continue to engage in conversation
+
+00:16:31.840 --> 00:16:33.839
+and work with our document
+
+00:16:33.840 --> 00:16:35.919
+and watch it grow in size.
+
+00:16:35.920 --> 00:16:38.819
+We originally created our Bookclub file
+
+00:16:38.820 --> 00:16:40.700
+with the hope to reduce
+
+00:16:40.701 --> 00:16:42.119
+what we would need to keep track of
+
+00:16:42.120 --> 00:16:44.879
+and to reduce our level of overwhelm.
+
+00:16:44.880 --> 00:16:48.919
+We might find that as our Bookclub file grows,
+
+00:16:48.920 --> 00:16:51.159
+we're encountering more detail
+
+00:16:51.160 --> 00:16:53.319
+than we can practically parse, manage,
+
+00:16:53.320 --> 00:16:55.759
+and decipher intention from.
+
+00:16:55.760 --> 00:16:57.719
+It can be easy to enter into a situation
+
+00:16:57.720 --> 00:16:59.839
+where we're drowning in the breadth of our notes,
+
+00:16:59.840 --> 00:17:03.399
+and in doing so we've recreated the same problem
+
+00:17:03.400 --> 00:17:05.419
+we originally set out to solve.
+
+00:17:05.420 --> 00:17:08.759
+Writing out every single detail helps us a lot
+
+00:17:08.760 --> 00:17:11.079
+to make sense of things at first,
+
+00:17:11.080 --> 00:17:13.519
+but then after a while, we can encounter
+
+00:17:13.520 --> 00:17:15.879
+a signal-to-noise problem
+
+00:17:15.880 --> 00:17:19.399
+when we try to make meaning from too many details.
+
+00:17:19.400 --> 00:17:25.239
+This is where tapas come in.
+
+NOTE Introducing Tapas
+
+00:17:25.240 --> 00:17:29.199
+So tapas in Spanish cuisine are appetizers.
+
+00:17:29.200 --> 00:17:31.559
+What's notable about tapas
+
+00:17:31.560 --> 00:17:33.839
+is that you can bring a bunch of them together
+
+00:17:33.840 --> 00:17:35.299
+to make a full meal.
+
+00:17:35.300 --> 00:17:38.379
+In the context of Bookclub Tapas,
+
+00:17:38.380 --> 00:17:40.339
+they serve a similar role.
+
+00:17:40.340 --> 00:17:42.719
+The idea is that we write flavorful libraries
+
+00:17:42.720 --> 00:17:45.419
+that together form a full program.
+
+00:17:45.420 --> 00:17:47.059
+We have a full program,
+
+00:17:47.060 --> 00:17:49.839
+but it's made from discrete modules.
+
+00:17:49.840 --> 00:17:52.719
+The idea behind tapas is that instead of creating
+
+00:17:52.720 --> 00:17:55.859
+one perfect, "solves everything" codebase,
+
+00:17:55.860 --> 00:17:57.319
+we want to create a whole bunch
+
+00:17:57.320 --> 00:17:59.079
+of separate libraries
+
+00:17:59.080 --> 00:18:02.919
+that themselves nail a specific subdomain.
+
+00:18:02.920 --> 00:18:04.119
+And once these libraries
+
+00:18:04.120 --> 00:18:05.179
+are all brought together,
+
+00:18:05.180 --> 00:18:08.019
+they form the whole that we're seeking.
+
+00:18:08.020 --> 00:18:10.079
+Once our Bookclub file becomes big enough
+
+00:18:10.080 --> 00:18:12.239
+such that we feel like our scope can be split
+
+00:18:12.240 --> 00:18:14.239
+into multiple libraries,
+
+00:18:14.240 --> 00:18:16.079
+that's when we want to take the opportunity
+
+00:18:16.080 --> 00:18:22.839
+to split our program up into parts, into Tapas.
+
+NOTE What are Tapas, what are Tapas not?
+
+00:18:22.840 --> 00:18:25.159
+So, maybe one of the best ways
+
+00:18:25.160 --> 00:18:27.039
+to understand what makes a good Tapa
+
+00:18:27.040 --> 00:18:30.599
+is to first examine what does not make a good Tapa.
+
+00:18:30.600 --> 00:18:32.159
+The single most important thing
+
+00:18:32.160 --> 00:18:33.559
+to understand about Tapas
+
+00:18:33.560 --> 00:18:37.139
+is that they themselves are substantial.
+
+00:18:37.140 --> 00:18:38.879
+There's a lot of back and forth
+
+00:18:38.880 --> 00:18:40.679
+on the idea of micro-libraries,
+
+00:18:40.680 --> 00:18:42.879
+their merits, their dangers,
+
+00:18:42.880 --> 00:18:45.419
+and when and where they kind of work best.
+
+00:18:45.420 --> 00:18:46.359
+I think the distinction
+
+00:18:46.360 --> 00:18:47.599
+that I would like to draw
+
+00:18:47.600 --> 00:18:50.719
+is that I think that tapas belong in the larger end
+
+00:18:50.720 --> 00:18:53.759
+of scale and complexity for microlibraries
+
+00:18:53.760 --> 00:18:56.159
+rather than the smaller end.
+
+00:18:56.160 --> 00:18:58.079
+I think particularly small helpers
+
+00:18:58.080 --> 00:19:00.299
+like NPM's is-odd
+
+00:19:00.300 --> 00:19:01.919
+are a good example of something
+
+00:19:01.920 --> 00:19:05.479
+I think does not constitute a good Tapa.
+
+00:19:05.480 --> 00:19:08.799
+Meanwhile, I think Python's Requests library
+
+00:19:08.800 --> 00:19:11.799
+is a really good example of a Tapa.
+
+00:19:11.800 --> 00:19:15.319
+I believe Requests only does HTTP connections,
+
+00:19:15.320 --> 00:19:18.319
+but I feel like that's not so simple and straightforward
+
+00:19:18.320 --> 00:19:20.239
+that you can just go ahead and implement it
+
+00:19:20.240 --> 00:19:23.199
+on your own real quick.
+
+00:19:23.200 --> 00:19:24.639
+A real danger of creating
+
+00:19:24.640 --> 00:19:27.219
+helper libraries that are too small
+
+00:19:27.220 --> 00:19:31.159
+is that we don't remove abstraction
+
+00:19:31.160 --> 00:19:33.319
+nearly as much as we postpone it.
+
+00:19:33.320 --> 00:19:35.819
+If our libraries are small,
+
+00:19:35.820 --> 00:19:38.899
+but the glue code that binds them is large,
+
+00:19:38.900 --> 00:19:40.079
+we haven't done anything
+
+00:19:40.080 --> 00:19:41.519
+to reduce complexity
+
+00:19:41.520 --> 00:19:44.179
+or employ abstraction in a meaningful way.
+
+00:19:44.180 --> 00:19:47.479
+If all of the complexity exists in our glue code,
+
+00:19:47.480 --> 00:19:49.799
+we've simply replaced our functions
+
+00:19:49.800 --> 00:19:52.519
+with libraries of the same size and purpose.
+
+00:19:52.520 --> 00:19:54.559
+Our codebase is still monolithic
+
+00:19:54.560 --> 00:19:58.039
+instead of having meaningfully divided scope.
+
+00:19:58.040 --> 00:19:59.559
+I think that a good Tapa
+
+00:19:59.560 --> 00:20:01.479
+ought to feel like augmentations
+
+00:20:01.480 --> 00:20:03.979
+or extensions to the standard library.
+
+00:20:03.980 --> 00:20:05.199
+You know, maybe something kind of
+
+00:20:05.200 --> 00:20:08.379
+akin to Scheme's SRFI system.
+
+00:20:08.380 --> 00:20:10.599
+I think that the goal of good Tapas
+
+00:20:10.600 --> 00:20:13.919
+is not to solve a particular problem,
+
+00:20:13.920 --> 00:20:18.519
+but instead to solve a particular class of problem.
+
+00:20:18.520 --> 00:20:20.159
+The goal of a well-written Tapa
+
+00:20:20.160 --> 00:20:22.999
+is to solve needing to do hard work in general
+
+00:20:23.000 --> 00:20:25.559
+rather than solving what can only really be
+
+00:20:25.560 --> 00:20:26.679
+an individual need
+
+00:20:26.680 --> 00:20:28.439
+of an individual program.
+
+00:20:28.440 --> 00:20:30.359
+I feel like Tapas are most helpful
+
+00:20:30.360 --> 00:20:32.119
+when we instead seek to solve
+
+00:20:32.120 --> 00:20:35.319
+a larger overarching problem
+
+00:20:35.320 --> 00:20:39.439
+that intersects with the problem space of our code base.
+
+00:20:39.440 --> 00:20:42.239
+When we have a handful of Tapas
+
+00:20:42.240 --> 00:20:46.179
+that are roughly the same size and scale,
+
+00:20:46.180 --> 00:20:48.119
+the glue code that marries them
+
+00:20:48.120 --> 00:20:52.179
+is also roughly the same size and scale.
+
+00:20:52.180 --> 00:20:55.639
+As a heuristic, I try to aim for any function
+
+00:20:55.640 --> 00:20:57.839
+being approximately 3 calls in length,
+
+00:20:57.840 --> 00:21:00.839
+and then any Tapa being between 6
+
+00:21:00.840 --> 00:21:06.399
+and 12 functions in length.
+
+00:21:06.400 --> 00:21:08.039
+The number of Tapas themselves
+
+00:21:08.040 --> 00:21:09.639
+can be as many or as few as you need,
+
+00:21:09.640 --> 00:21:12.879
+but then your Tapas can split into
+
+00:21:12.880 --> 00:21:16.459
+their own separate Tapas as needed.
+
+00:21:16.460 --> 00:21:18.799
+My hope is that the collection of our Tapas,
+
+00:21:18.800 --> 00:21:20.599
+especially as we create
+
+00:21:20.600 --> 00:21:22.319
+dependency chains among them,
+
+00:21:22.320 --> 00:21:25.039
+is that each next Tapa is a trivial case
+
+00:21:25.040 --> 00:21:27.099
+of the one prerequisite to it.
+
+00:21:27.100 --> 00:21:28.879
+Every Tapa is a meaningful,
+
+00:21:28.880 --> 00:21:31.059
+human-readable abstraction
+
+00:21:31.060 --> 00:21:33.439
+that enables us to feel confident about our tooling
+
+00:21:33.440 --> 00:21:35.639
+without drowning in detail.
+
+00:21:35.640 --> 00:21:38.499
+The whole stack can be understood by humans,
+
+00:21:38.500 --> 00:21:40.159
+but we only have to focus on
+
+00:21:40.160 --> 00:21:41.879
+any one piece of it at a time,
+
+00:21:41.880 --> 00:21:47.419
+rather than focusing on the entire stack all at once.
+
+00:21:47.420 --> 00:21:48.879
+We can practically achieve
+
+00:21:48.880 --> 00:21:51.259
+a huge final product,
+
+00:21:51.260 --> 00:21:52.759
+but each individual step
+
+00:21:52.760 --> 00:21:54.279
+in working towards that goal
+
+00:21:54.280 --> 00:21:56.039
+is still at a human scale.
+
+00:21:56.040 --> 00:22:02.179
+One thing I want to make sure to point out,
+
+00:22:02.180 --> 00:22:03.279
+one thing I want to make sure
+
+00:22:03.280 --> 00:22:05.179
+to point out explicitly, real quick,
+
+00:22:05.180 --> 00:22:06.279
+is that having access
+
+00:22:06.280 --> 00:22:07.839
+to a hygienic macro system,
+
+00:22:07.840 --> 00:22:10.259
+like the ones that we have in Lisps,
+
+00:22:10.260 --> 00:22:11.999
+makes for an amazing experience
+
+00:22:12.000 --> 00:22:13.319
+for creating Tapas.
+
+00:22:13.320 --> 00:22:15.279
+The types of abstractions that we can do
+
+00:22:15.280 --> 00:22:17.039
+by modifying syntax at compile time
+
+00:22:17.040 --> 00:22:18.439
+makes for incredibly intuitive
+
+00:22:18.440 --> 00:22:25.179
+and ergonomic tooling.
+
+NOTE Tapas are maybe best illustrated by example
+
+00:22:25.180 --> 00:22:27.279
+So we've talked quite a bit about
+
+00:22:27.280 --> 00:22:28.919
+what I think makes a Tapa good,
+
+00:22:28.920 --> 00:22:30.759
+but I think maybe the best way
+
+00:22:30.760 --> 00:22:32.679
+to understand the concept
+
+00:22:32.680 --> 00:22:35.599
+is to have a look at the whole workflow in practice.
+
+00:22:35.600 --> 00:22:37.479
+I've been working on this, currently
+
+00:22:37.480 --> 00:22:40.219
+unnamed, Elisp program recently.
+
+00:22:40.220 --> 00:22:42.959
+It's a validator for the filetags lines
+
+00:22:42.960 --> 00:22:45.819
+of my Org Mode files.
+
+00:22:45.820 --> 00:22:49.299
+So I have Org Mode files
+
+00:22:49.300 --> 00:22:50.999
+under my Documents directory,
+
+00:22:51.000 --> 00:22:53.633
+organized in this hierarchical way,
+
+00:22:53.634 --> 00:22:57.039
+and the nested directories have meaningful names.
+
+00:22:57.040 --> 00:23:00.300
+I want the headers of my Org files to be tagged
+
+00:23:00.301 --> 00:23:01.800
+in accordance with the sequence
+
+00:23:01.801 --> 00:23:04.199
+of the names of the directories.
+
+00:23:04.200 --> 00:23:06.167
+I do this by having the file-tags line
+
+00:23:06.168 --> 00:23:06.999
+at the top of the file
+
+00:23:07.000 --> 00:23:09.519
+just list the path segments in order.
+
+00:23:09.520 --> 00:23:12.199
+If I have an Org file in the directory
+
+00:23:12.200 --> 00:23:16.559
+"~/Documents/foo/bar",
+
+00:23:16.560 --> 00:23:20.799
+the file-tags line has the tags "foo" and "bar".
+
+00:23:20.800 --> 00:23:23.139
+This is totally fine to do by hand,
+
+00:23:23.140 --> 00:23:24.919
+but I want a program
+
+00:23:24.920 --> 00:23:27.119
+that recursively searches through my directories
+
+00:23:27.120 --> 00:23:29.799
+to validate that the tags are correct
+
+00:23:29.800 --> 00:23:33.459
+because it's easy to drop something.
+
+00:23:33.460 --> 00:23:36.039
+This scale of problem is actually kind of perfect
+
+00:23:36.040 --> 00:23:39.959
+for demonstrating how Bookclub Tapas work in action.
+
+00:23:39.960 --> 00:23:40.759
+We have a problem
+
+00:23:40.760 --> 00:23:42.639
+that's mostly rather simple,
+
+00:23:42.640 --> 00:23:44.359
+but it has a lot of moving pieces.
+
+00:23:44.360 --> 00:23:47.799
+We want to iterate over directories recursively,
+
+00:23:47.800 --> 00:23:49.559
+we want to do string manipulation,
+
+00:23:49.560 --> 00:23:50.879
+we want to parse buffers,
+
+00:23:50.880 --> 00:23:52.899
+and we want to edit buffers.
+
+00:23:52.900 --> 00:23:55.359
+All of these tasks are simple enough on their own,
+
+00:23:55.360 --> 00:23:56.679
+but it's deceptively easy
+
+00:23:56.680 --> 00:23:58.399
+to start tripping over ourselves
+
+00:23:58.400 --> 00:23:59.959
+when we feel like it's necessary
+
+00:23:59.960 --> 00:24:03.019
+to do all of these different things in one step.
+
+00:24:03.020 --> 00:24:05.399
+So there are a ton of great string
+
+00:24:05.400 --> 00:24:06.959
+manipulation tools for Emacs,
+
+00:24:06.960 --> 00:24:08.079
+so that's checked off,
+
+00:24:08.080 --> 00:24:10.939
+that's done, taken care of.
+
+00:24:10.940 --> 00:24:12.119
+I'm still kind of daydreaming
+
+00:24:12.120 --> 00:24:14.399
+about writing a wrapper around
+
+00:24:14.400 --> 00:24:16.039
+some of the Emacs standard libraries
+
+00:24:16.040 --> 00:24:16.999
+for directory traversal,
+
+00:24:17.000 --> 00:24:20.179
+just to make it a little bit nicer to work with.
+
+00:24:20.180 --> 00:24:20.799
+But the big thing
+
+00:24:20.800 --> 00:24:22.519
+that really struck me as odd
+
+00:24:22.520 --> 00:24:25.479
+is that there doesn't seem to be a great tooling
+
+00:24:25.480 --> 00:24:28.239
+for destructuring Emacs buffers
+
+00:24:28.240 --> 00:24:29.399
+beyond just chaining together
+
+00:24:29.400 --> 00:24:31.379
+a bunch of editor commands.
+
+00:24:31.380 --> 00:24:33.959
+Emacs is so buffer-oriented,
+
+00:24:33.960 --> 00:24:36.439
+I feel like it really deserves a good library
+
+00:24:36.440 --> 00:24:38.719
+for programmatic buffer destructuring.
+
+00:24:38.720 --> 00:24:40.559
+I looked around for a bit,
+
+00:24:40.560 --> 00:24:42.799
+but I couldn't really find anything.
+
+00:24:42.800 --> 00:24:44.759
+So at the end of the day,
+
+00:24:44.760 --> 00:24:47.279
+I could definitely just grit my teeth
+
+00:24:47.280 --> 00:24:50.919
+and put my head down and just use tools
+
+00:24:50.920 --> 00:24:54.359
+that feel cumbersome to work with if I wanted to.
+
+00:24:54.360 --> 00:24:55.199
+I could write something
+
+00:24:55.200 --> 00:24:56.039
+that's "good enough"
+
+00:24:56.040 --> 00:24:57.759
+just for the purpose of my package
+
+00:24:57.760 --> 00:25:00.279
+and then hide it deep inside the code base.
+
+00:25:00.280 --> 00:25:03.819
+I could absolutely do that.
+
+00:25:03.820 --> 00:25:07.919
+But I can't help but think about how
+
+00:25:07.920 --> 00:25:11.099
+after I properly write the tooling I'm missing,
+
+00:25:11.100 --> 00:25:13.159
+I'm really going to be thanking myself
+
+00:25:13.160 --> 00:25:15.879
+in terms of reduced implementational complexity,
+
+00:25:15.880 --> 00:25:19.039
+reduced bug hunting, real reusability,
+
+00:25:19.040 --> 00:25:22.199
+and ultimately really just a deep sense of pride
+
+00:25:22.200 --> 00:25:23.719
+in knowing that I took the time
+
+00:25:23.720 --> 00:25:27.319
+to do something in a way that feels "right."
+
+00:25:27.320 --> 00:25:28.799
+This right here is the perfect time
+
+00:25:28.800 --> 00:25:30.239
+to split off Tapas.
+
+00:25:30.240 --> 00:25:32.119
+Any time that we find ourselves
+
+00:25:32.120 --> 00:25:34.319
+reaching for a fictional dependency,
+
+00:25:34.320 --> 00:25:35.439
+wishing that someone had written
+
+00:25:35.440 --> 00:25:37.679
+a library like this...
+
+00:25:37.680 --> 00:25:39.119
+We can take that opportunity
+
+00:25:39.120 --> 00:25:42.019
+to remember that we are "someone."
+
+00:25:42.020 --> 00:25:44.319
+We can write that library ourselves,
+
+00:25:44.320 --> 00:25:46.679
+and we deserve to write that library
+
+00:25:46.680 --> 00:25:52.339
+because we deserve to get to use it.
+
+NOTE Introducing Squint
+
+00:25:52.340 --> 00:25:55.279
+So I'm going to briefly show
+
+00:25:55.280 --> 00:25:56.899
+a Bookclub buffer
+
+00:25:56.900 --> 00:25:59.259
+for a program called Squint.
+
+00:25:59.260 --> 00:26:00.879
+It's the buffer destructure
+
+00:26:00.880 --> 00:26:03.199
+that I've been talking about, and it's real.
+
+00:26:03.200 --> 00:26:04.519
+It's a wrapper around
+
+00:26:04.520 --> 00:26:05.999
+Emacs's narrowing functionality
+
+00:26:06.000 --> 00:26:08.739
+and regular expression search.
+
+00:26:08.740 --> 00:26:11.799
+It's not totally done,
+
+00:26:11.800 --> 00:26:15.279
+and will likely see some breaking changes,
+
+00:26:15.280 --> 00:26:16.759
+but I really like where it is.
+
+00:26:16.760 --> 00:26:18.679
+I'll be posting it in its current state
+
+00:26:18.680 --> 00:26:22.399
+on some of the big source repository sites
+
+00:26:22.400 --> 00:26:23.279
+relatively soon.
+
+00:26:23.280 --> 00:26:24.719
+I think it has a good feature,
+
+00:26:24.720 --> 00:26:26.519
+which is really quite exciting.
+
+00:26:26.520 --> 00:26:28.999
+And it'll likely probably get split off
+
+00:26:29.000 --> 00:26:29.799
+into its own Tapas.
+
+00:26:29.800 --> 00:26:32.239
+We'll see. No matter what,
+
+00:26:32.240 --> 00:26:34.319
+I do recommend being on the lookout for it,
+
+00:26:34.320 --> 00:26:35.599
+because I think it'll be
+
+00:26:35.600 --> 00:26:37.479
+a really excellent demonstration
+
+00:26:37.480 --> 00:26:39.679
+of some of the solid ideas
+
+00:26:39.680 --> 00:26:43.899
+behind how to get rolling with Bookclub Tapas.
+
+00:26:43.900 --> 00:26:46.639
+So I have my background section
+
+00:26:46.640 --> 00:26:49.039
+where I'm basically just sort of laying out,
+
+00:26:49.040 --> 00:26:53.239
+you know, what the objective is for the program.
+
+00:26:53.240 --> 00:26:55.119
+I have my vision where I'm doing
+
+00:26:55.120 --> 00:26:58.019
+some daydreaming about, you know,
+
+00:26:58.020 --> 00:26:59.639
+how this all ought to work.
+
+00:26:59.640 --> 00:27:00.919
+I date stamped this.
+
+00:27:00.920 --> 00:27:02.919
+As you can see, it's from a while ago,
+
+00:27:02.920 --> 00:27:05.599
+but I still have the full context of, you know,
+
+00:27:05.600 --> 00:27:08.159
+all the things that I've done working on this.
+
+00:27:08.160 --> 00:27:12.319
+I listed out a bunch of ideas
+
+00:27:12.320 --> 00:27:15.479
+for different forms for functions macros.
+
+00:27:15.480 --> 00:27:21.839
+I did different pieces of research.
+
+00:27:21.840 --> 00:27:23.199
+Yeah, I was trying to figure out
+
+00:27:23.200 --> 00:27:24.679
+for the width restriction macro,
+
+00:27:24.680 --> 00:27:26.599
+what types does it take?
+
+00:27:26.600 --> 00:27:28.479
+And I did a whole bunch of tests
+
+00:27:28.480 --> 00:27:31.279
+to try and ultimately figure it out.
+
+00:27:31.280 --> 00:27:35.719
+Because it claims in the documentation,
+
+00:27:35.720 --> 00:27:37.399
+I believe, that it will just take
+
+00:27:37.400 --> 00:27:39.439
+any type for labels.
+
+00:27:39.440 --> 00:27:43.959
+But in my testing, that's not
+
+00:27:43.960 --> 00:27:44.879
+ultimately what I found.
+
+00:27:44.880 --> 00:27:46.519
+The results of my tests
+
+00:27:46.520 --> 00:27:50.119
+is that symbols, numbers, they work.
+
+00:27:50.120 --> 00:27:51.319
+Strings do not.
+
+00:27:51.320 --> 00:27:52.919
+I'm not sure why that is.
+
+00:27:52.920 --> 00:27:54.439
+But for my purposes,
+
+00:27:54.440 --> 00:27:58.159
+this is what I need to know.
+
+00:27:58.160 --> 00:28:00.359
+I have my development focuses here.
+
+00:28:00.360 --> 00:28:03.879
+So I have my assorted goals
+
+00:28:03.880 --> 00:28:05.119
+for different directions
+
+00:28:05.120 --> 00:28:08.059
+I want to take the program.
+
+00:28:08.060 --> 00:28:13.339
+And then lastly, I have my functions, my macros.
+
+00:28:13.340 --> 00:28:14.439
+And this right here
+
+00:28:14.440 --> 00:28:18.079
+is the titular macro.
+
+00:28:18.080 --> 00:28:20.499
+This is ultimately the big meat
+
+00:28:20.500 --> 00:28:24.859
+of the program.
+
+00:28:24.860 --> 00:28:28.219
+And it's all contained happily organized
+
+00:28:28.220 --> 00:28:30.359
+inside my Bookclub file.
+
+00:28:30.360 --> 00:28:31.199
+I'm quite happy with it.
+
+00:28:31.200 --> 00:28:36.099
+I think it looks really nice.
+
+NOTE What else does Bookclub Tapas do?
+
+00:28:36.100 --> 00:28:40.759
+So what else does Bookclub tapas do?
+
+00:28:40.760 --> 00:28:44.519
+I don't know. It probably does a lot of stuff.
+
+00:28:44.520 --> 00:28:46.439
+It does all sorts of stuff
+
+00:28:46.440 --> 00:28:47.439
+that I don't know about yet,
+
+00:28:47.440 --> 00:28:48.879
+but this is where you come in.
+
+00:28:48.880 --> 00:28:51.439
+I'm really excited to see what people do
+
+00:28:51.440 --> 00:28:52.879
+when they take these ideas
+
+00:28:52.880 --> 00:28:54.019
+and run with them.
+
+00:28:54.020 --> 00:28:56.819
+And if you have something really cool you're doing with it,
+
+00:28:56.820 --> 00:28:59.239
+please email me and come talk to me about it.
+
+00:28:59.240 --> 00:29:00.599
+I'd love to hear about it.
+
+00:29:00.600 --> 00:29:08.159
+Again, my email is hello@ElephantErgonomics.com.
+
+NOTE Let's work together
+
+00:29:08.160 --> 00:29:10.839
+So last, before we wrap up,
+
+00:29:10.840 --> 00:29:12.599
+I want to go ahead and give
+
+00:29:12.600 --> 00:29:14.199
+a quick plug for my services.
+
+00:29:14.200 --> 00:29:17.019
+I am an independent software engineer
+
+00:29:17.020 --> 00:29:20.079
+that has an emphasis in backend design
+
+00:29:20.080 --> 00:29:21.599
+and general automation.
+
+00:29:21.600 --> 00:29:23.919
+In particular, I have an emphasis
+
+00:29:23.920 --> 00:29:26.839
+in that really cool new generative AI thing
+
+00:29:26.840 --> 00:29:28.559
+that everyone's been talking about recently.
+
+00:29:28.560 --> 00:29:30.679
+If you have a headache,
+
+00:29:30.680 --> 00:29:33.239
+you have some sort of pain point
+
+00:29:33.240 --> 00:29:34.799
+for your small or large business,
+
+00:29:34.800 --> 00:29:36.767
+you wish you could just wiggle your nose
+
+00:29:36.768 --> 00:29:38.999
+and have disappear, come talk to me.
+
+00:29:39.000 --> 00:29:41.599
+I'll make it disappear. I love doing that.
+
+00:29:41.600 --> 00:29:46.979
+Reach out to me at hello@ElephantErgonomics.com.
+
+00:29:46.980 --> 00:29:48.319
+If you think that Bookclub Tapas
+
+00:29:48.320 --> 00:29:51.039
+would be a great fit for your team and your project,
+
+00:29:51.040 --> 00:29:53.039
+I'd love to hop on and help you
+
+00:29:53.040 --> 00:29:55.119
+get the ball rolling quickly.
+
+00:29:55.120 --> 00:29:59.819
+Go ahead and email me at hello@ElephantErgonomics.com.
+
+00:29:59.820 --> 00:30:01.639
+Lastly, if you're a member
+
+00:30:01.640 --> 00:30:03.799
+of the larger Lisp community
+
+00:30:03.800 --> 00:30:06.859
+and you want to fund independent software development
+
+00:30:06.860 --> 00:30:08.319
+for things that really excite you,
+
+00:30:08.320 --> 00:30:09.639
+for passion projects
+
+00:30:09.640 --> 00:30:11.439
+that make our ecosystem richer,
+
+00:30:11.440 --> 00:30:17.079
+I'd love to look into accepting independent funding
+
+00:30:17.080 --> 00:30:20.419
+so I can commit more hours
+
+00:30:20.420 --> 00:30:22.679
+toward making that happen.
+
+00:30:22.680 --> 00:30:24.599
+Some of the projects that I want to work on
+
+00:30:24.600 --> 00:30:28.679
+are a Python Foreign Function Interface for Guile Scheme,
+
+00:30:28.680 --> 00:30:31.959
+a framework for rapidly creating simulation games
+
+00:30:31.960 --> 00:30:33.878
+that feels just as simple
+
+00:30:33.879 --> 00:30:36.239
+as writing Emacs configurations,
+
+00:30:36.240 --> 00:30:37.719
+I want to work on getting
+
+00:30:37.720 --> 00:30:41.459
+a full graphical web browser inside of Emacs,
+
+00:30:41.460 --> 00:30:43.359
+and I want to finish programs like Squint.
+
+00:30:43.360 --> 00:30:44.879
+These are just some of the projects
+
+00:30:44.880 --> 00:30:46.019
+I want to work on,
+
+00:30:46.020 --> 00:30:48.239
+but I need funding to do so.
+
+00:30:48.240 --> 00:30:49.559
+If you want to see these things happen,
+
+00:30:49.560 --> 00:30:53.799
+send me an email at hello@ElephantErgonomics.com
+
+00:30:53.800 --> 00:30:55.559
+with both your intention
+
+00:30:55.560 --> 00:30:57.359
+to pledge a monthly contribution
+
+00:30:57.360 --> 00:30:59.399
+as well as clarification,
+
+00:30:59.400 --> 00:31:02.079
+a sort of vote on which project
+
+00:31:02.080 --> 00:31:03.519
+you would like to see me prioritize.
+
+00:31:03.520 --> 00:31:06.679
+I would love to have folks reach out
+
+00:31:06.680 --> 00:31:07.519
+for any of these reasons.
+
+00:31:07.520 --> 00:31:12.199
+I would just love to talk to you.
+
+00:31:12.200 --> 00:31:14.619
+Thank you so much for watching!
+
+00:31:14.620 --> 00:31:16.519
+I really hope that the talk was interesting,
+
+00:31:16.520 --> 00:31:18.639
+and I'm really excited to see
+
+00:31:18.640 --> 00:31:19.719
+your thoughts and questions
+
+00:31:19.720 --> 00:31:21.959
+right now in the Q&A!
+
+00:31:21.960 --> 00:31:25.800
+Thank you so much for watching. Bye!
diff --git a/2025/captions/emacsconf-2025-calc--basic-calc-functionality-for-engineering-or-electronics--christopher-howard--main--chapters.vtt b/2025/captions/emacsconf-2025-calc--basic-calc-functionality-for-engineering-or-electronics--christopher-howard--main--chapters.vtt
new file mode 100644
index 00000000..f3af8a6f
--- /dev/null
+++ b/2025/captions/emacsconf-2025-calc--basic-calc-functionality-for-engineering-or-electronics--christopher-howard--main--chapters.vtt
@@ -0,0 +1,41 @@
+WEBVTT
+
+
+00:00:03.620 --> 00:02:36.639
+Introduction
+
+00:02:36.640 --> 00:04:54.279
+What is Calc?
+
+00:04:54.280 --> 00:06:37.398
+calc-algebraic-entry
+
+00:06:37.399 --> 00:08:07.759
+calc-roll-down
+
+00:08:07.760 --> 00:08:58.179
+Advanced functions
+
+00:08:58.180 --> 00:09:54.719
+Solving equations with calc-solve-for
+
+00:09:54.720 --> 00:12:00.079
+Systems of equations
+
+00:12:00.080 --> 00:12:39.959
+calc-find-root
+
+00:12:39.960 --> 00:14:17.539
+Derivatives and integrals
+
+00:14:17.540 --> 00:18:12.159
+Programmable functions
+
+00:18:12.160 --> 00:20:08.799
+Plotting
+
+00:20:08.800 --> 00:22:38.599
+Wish list
+
+00:22:38.600 --> 00:23:35.920
+Wrapping up
diff --git a/2025/captions/emacsconf-2025-calc--basic-calc-functionality-for-engineering-or-electronics--christopher-howard--main.vtt b/2025/captions/emacsconf-2025-calc--basic-calc-functionality-for-engineering-or-electronics--christopher-howard--main.vtt
new file mode 100644
index 00000000..f0bf2d2a
--- /dev/null
+++ b/2025/captions/emacsconf-2025-calc--basic-calc-functionality-for-engineering-or-electronics--christopher-howard--main.vtt
@@ -0,0 +1,888 @@
+WEBVTT captioned by sachac
+
+NOTE Introduction
+
+00:00:03.620 --> 00:00:08.799
+Hello, my name is Christopher Howard and welcome to my talk.
+
+00:00:08.800 --> 00:00:11.319
+This is basically an introduction
+
+00:00:11.320 --> 00:00:15.119
+to the built-in Emacs calculator,
+
+00:00:15.120 --> 00:00:18.319
+properly known as Emacs Calc,
+
+00:00:18.320 --> 00:00:21.439
+particularly from the perspective of someone
+
+00:00:21.440 --> 00:00:27.559
+with a technical background such as engineering or electronics.
+
+00:00:27.560 --> 00:00:32.879
+I will say, though, my personal interest is not really
+
+00:00:32.880 --> 00:00:37.839
+in digital computing or digital calculators,
+
+00:00:37.840 --> 00:00:42.519
+but lately has been focused more on analog computing.
+
+00:00:42.520 --> 00:00:46.799
+I have, for example, been working to master
+
+00:00:46.800 --> 00:00:50.839
+the venerable slide rule, a mechanical computer
+
+00:00:50.840 --> 00:00:57.319
+that calculates multiplication powers and logarithms.
+
+00:00:57.320 --> 00:01:02.199
+Here's a picture of one.
+
+00:01:02.200 --> 00:01:06.799
+It's a physical tool that was used for hundreds of years
+
+00:01:06.800 --> 00:01:08.999
+for this sort of thing
+
+00:01:09.000 --> 00:01:16.679
+before the handheld calculator was made popular.
+
+00:01:16.680 --> 00:01:18.639
+And I also had a project that I did
+
+00:01:18.640 --> 00:01:21.119
+for a while to several months
+
+00:01:21.120 --> 00:01:33.119
+to build an electronic analog computer.
+
+00:01:33.120 --> 00:01:38.679
+A rudimentary attempt of mine, but it's functional,
+
+00:01:38.680 --> 00:01:43.399
+and it's basically a 1960s or 1970s style
+
+00:01:43.400 --> 00:01:48.839
+electronic analog computer built very much on a budget,
+
+00:01:48.840 --> 00:01:52.559
+but the box in the middle is the computer proper
+
+00:01:52.560 --> 00:01:55.719
+which has most of the components inside of it
+
+00:01:55.720 --> 00:02:00.199
+as well as the potentiometers for setting values,
+
+00:02:00.200 --> 00:02:02.039
+and an operation switch.
+
+00:02:02.040 --> 00:02:04.399
+There's a patch panel on the left
+
+00:02:04.400 --> 00:02:07.119
+for connecting the different integrators,
+
+00:02:07.120 --> 00:02:11.319
+amplifiers, multipliers, and so forth together.
+
+00:02:11.320 --> 00:02:16.919
+Then the output of the simulation is displayed
+
+00:02:16.920 --> 00:02:19.799
+on the oscilloscope on the right side,
+
+00:02:19.800 --> 00:02:25.479
+which is a digital oscilloscope.
+
+00:02:25.480 --> 00:02:28.439
+To be honest, I think that a talk about analog computing
+
+00:02:28.440 --> 00:02:30.199
+would be much more interesting
+
+00:02:30.200 --> 00:02:32.039
+than the talk that I'm about to give,
+
+00:02:32.040 --> 00:02:36.639
+but unfortunately that would be out of scope for EmacsConf.
+
+NOTE What is Calc?
+
+00:02:36.640 --> 00:02:39.919
+So instead I will talk about Emacs Calc,
+
+00:02:39.920 --> 00:02:43.359
+the digital calculator built into Emacs.
+
+00:02:43.360 --> 00:02:47.519
+Emacs Calc, while not being a replacement for software
+
+00:02:47.520 --> 00:02:51.479
+like GNU Octave, does have advanced calculator functionality
+
+00:02:51.480 --> 00:02:55.039
+that can be useful in engineering, electronics,
+
+00:02:55.040 --> 00:03:00.759
+or other technical applications. So I don't want to oversell it,
+
+00:03:00.760 --> 00:03:06.479
+but I think functionality-wise, Calc is somewhere in between
+
+00:03:06.480 --> 00:03:12.239
+what you'd expect of a decent scientific calculator
+
+00:03:12.240 --> 00:03:23.939
+and an advanced graphics calculator.
+
+00:03:23.940 --> 00:03:28.839
+So this talk I'll mention is not intended to be a tutorial
+
+00:03:28.840 --> 00:03:33.839
+but only a brief introduction to Calc.
+
+00:03:33.840 --> 00:03:37.439
+Please refer to the built-in Calc info manual
+
+00:03:37.440 --> 00:03:46.739
+for detailed instructions on how to complete operations.
+
+00:03:46.740 --> 00:04:01.479
+Turn off my volume here.
+
+00:04:01.480 --> 00:04:05.719
+The documentation for Emacs Calc is built-in,
+
+00:04:05.720 --> 00:04:10.439
+although on some distributions you may have to install
+
+00:04:10.440 --> 00:04:24.479
+the Emacs documentation separately for licensing reasons.
+
+00:04:24.480 --> 00:04:28.599
+Calc presents itself as a stack-based calculator
+
+00:04:28.600 --> 00:04:31.599
+where entries are dropped onto a stack
+
+00:04:31.600 --> 00:04:36.739
+and then an operation is performed on the stack entries.
+
+00:04:36.740 --> 00:04:42.899
+For example, I can drop 1.23 onto the stack,
+
+00:04:42.900 --> 00:04:54.279
+and then 8.56, and then multiply them together.
+
+NOTE calc-algebraic-entry
+
+00:04:54.280 --> 00:05:01.559
+It may present itself as a stack-based calculator,
+
+00:05:01.560 --> 00:05:05.399
+but indeed, Calc is also capable of accepting input
+
+00:05:05.400 --> 00:05:07.739
+in the more well-known algebraic format
+
+00:05:07.740 --> 00:05:10.759
+by using the calc-algebraic-entry command,
+
+00:05:10.760 --> 00:05:14.999
+which by default is bound to the apostrophe (') key.
+
+00:05:15.000 --> 00:05:19.759
+So you type the apostrophe key, enter the algebraic input,
+
+00:05:19.760 --> 00:05:22.759
+including parentheses as needed.
+
+00:05:22.760 --> 00:05:28.199
+For example, here's a calculation of the resonance frequency
+
+00:05:28.200 --> 00:05:35.039
+of a coil which has an inductance of 250 microhenries
+
+00:05:35.040 --> 00:05:41.059
+and 160 picofarads, taken from one of my electronics handbooks.
+
+00:05:41.060 --> 00:05:50.019
+The formula for that is 1 over 2 pi
+
+00:05:50.020 --> 00:05:57.439
+and then the square root of our inductance
+
+00:05:57.440 --> 00:06:06.279
+which is in this case 250 microfarads - excuse me, microhenries
+
+00:06:06.280 --> 00:06:19.399
+and then the capacitance is 160 picofarads.
+
+00:06:19.400 --> 00:06:24.399
+Small typo here.
+
+00:06:24.400 --> 00:06:26.639
+Now I need to evaluate that one more time,
+
+00:06:26.640 --> 00:06:30.919
+because pi is a symbol.
+
+00:06:30.920 --> 00:06:37.398
+I get about 800 kHz resonant frequency.
+
+NOTE calc-roll-down
+
+00:06:37.399 --> 00:06:41.679
+The command calc-roll-down,
+
+00:06:41.680 --> 00:06:44.199
+which by default is bound to the TAB key,
+
+00:06:44.200 --> 00:06:47.919
+will swap the top two stack entries,
+
+00:06:47.920 --> 00:06:51.559
+which is sometimes useful if you need to manipulate something
+
+00:06:51.560 --> 00:06:56.999
+that's further down the stack.
+
+00:06:57.000 --> 00:07:02.039
+So I can swap this around and say multiply by two
+
+00:07:02.040 --> 00:07:05.479
+and then put it back where it was.
+
+00:07:05.480 --> 00:07:14.039
+This command is also capable of rolling the entire stack.
+
+00:07:14.040 --> 00:07:18.899
+Say I want to shift them all around.
+
+00:07:18.900 --> 00:07:21.399
+This can be done by passing extra arguments
+
+00:07:21.400 --> 00:07:23.559
+to the calc-roll-down function.
+
+00:07:23.560 --> 00:07:28.279
+That's a little bit inconvenient to do manually,
+
+00:07:28.280 --> 00:07:40.079
+so in my init file, I defined here a key definition
+
+00:07:40.080 --> 00:07:45.759
+that passes in those arguments correctly.
+
+00:07:45.760 --> 00:07:49.179
+I attached this to shift-tab,
+
+00:07:49.180 --> 00:07:52.319
+so this way, I can roll the entire stack.
+
+00:07:52.320 --> 00:07:56.159
+Then I could change one entry here
+
+00:07:56.160 --> 00:08:03.459
+and then put it back where it was.
+
+00:08:03.460 --> 00:08:07.759
+So Calc does algebraic input.
+
+NOTE Advanced functions
+
+00:08:07.760 --> 00:08:10.159
+It also does advanced functions
+
+00:08:10.160 --> 00:08:15.599
+that you would expect any handheld scientific calculator,
+
+00:08:15.600 --> 00:08:19.159
+including trigonometric functions.
+
+00:08:19.160 --> 00:08:25.319
+For example, we can get the sine of a number.
+
+00:08:25.320 --> 00:08:30.719
+Now I'll mention here that Calc has multiple modes.
+
+00:08:30.720 --> 00:08:32.319
+Right now it's in degree mode.
+
+00:08:32.320 --> 00:08:38.159
+You can switch over to radian mode if you want.
+
+00:08:38.160 --> 00:08:42.799
+I'm going to put it back in degrees.
+
+00:08:42.800 --> 00:08:49.799
+Drop 12 degrees on the stack, and then get the sine of that.
+
+00:08:49.800 --> 00:08:58.179
+And then with the inverse sine function, I can put it back.
+
+NOTE Solving equations with calc-solve-for
+
+00:08:58.180 --> 00:09:07.519
+Calc also has the nifty ability to solve equations for you
+
+00:09:07.520 --> 00:09:13.919
+so long as the equation is not too complicated.
+
+00:09:13.920 --> 00:09:19.959
+This is using the calc-solve-for function.
+
+00:09:19.960 --> 00:09:31.699
+For example, we could enter in an equation algebraically,
+
+00:09:31.700 --> 00:09:36.679
+then run calc-solve-for, and we just have to tell it
+
+00:09:36.680 --> 00:09:40.999
+what variable we want to solve for. And there we go.
+
+00:09:41.000 --> 00:09:43.199
+We can do this manually as well
+
+00:09:43.200 --> 00:09:54.719
+just so you can see that we get the same result.
+
+NOTE Systems of equations
+
+00:09:54.720 --> 00:09:57.959
+Calc is also able to solve systems of equations.
+
+00:09:57.960 --> 00:10:03.439
+We can put more than one equation on the stack,
+
+00:10:03.440 --> 00:10:08.959
+and then solve for several variables.
+
+00:10:08.960 --> 00:10:13.319
+To give a technical example for this,
+
+00:10:13.320 --> 00:10:30.659
+I'll show you a resistor network scribble that I did recently.
+
+00:10:30.660 --> 00:10:32.819
+Hopefully you can see that. Basically,
+
+00:10:32.820 --> 00:10:38.719
+it's fairly simple, a pretty simple resistor network
+
+00:10:38.720 --> 00:10:42.159
+with 1 kilo ohm and 10 kilo ohm resistors,
+
+00:10:42.160 --> 00:10:48.959
+and using the loop methods, we are calculating the currents,
+
+00:10:48.960 --> 00:10:52.759
+the current in each loop, and then that current can be used
+
+00:10:52.760 --> 00:10:58.839
+to solve for the voltage of each individual resistor
+
+00:10:58.840 --> 00:11:06.199
+if we want to. So at the bottom there we have the equations
+
+00:11:06.200 --> 00:11:11.519
+that we come up with as we work through each loop.
+
+00:11:11.520 --> 00:11:19.579
+And I'm going to paste that into Calc.
+
+00:11:19.580 --> 00:11:22.719
+To save some time, I'm going to copy and paste that
+
+00:11:22.720 --> 00:11:34.259
+from my notes instead of typing it out.
+
+00:11:34.260 --> 00:11:38.259
+So we have two equations there on the stack
+
+00:11:38.260 --> 00:11:44.719
+in one stack entry. We run that calc-solve-for function again,
+
+00:11:44.720 --> 00:11:49.899
+and we tell it which variables we want to solve for.
+
+00:11:49.900 --> 00:11:51.959
+And voila! Those are our currents,
+
+00:11:51.960 --> 00:11:55.719
+which we can then use to get the voltages
+
+00:11:55.720 --> 00:12:00.079
+for the individual resistors.
+
+NOTE calc-find-root
+
+00:12:00.080 --> 00:12:01.999
+I'll just briefly mention
+
+00:12:02.000 --> 00:12:05.839
+that if Calc is not able to solve an equation
+
+00:12:05.840 --> 00:12:07.779
+with calc-solve-for,
+
+00:12:07.780 --> 00:12:10.279
+then you might be helped by another calc function
+
+00:12:10.280 --> 00:12:11.559
+called calc-find-root.
+
+00:12:11.560 --> 00:12:14.439
+This function basically does a manual search
+
+00:12:14.440 --> 00:12:30.199
+for a numerical solution to the equation.
+
+00:12:30.200 --> 00:12:39.959
+And there's the documentation page on that.
+
+NOTE Derivatives and integrals
+
+00:12:39.960 --> 00:12:44.039
+Calc can also solve or find derivatives of functions,
+
+00:12:44.040 --> 00:12:47.579
+at least the more straightforward functions.
+
+00:12:47.580 --> 00:12:49.839
+For a simple example,
+
+00:12:49.840 --> 00:13:00.559
+we can get the derivative of that
+
+00:13:00.560 --> 00:13:11.979
+with the derivative function.
+
+00:13:11.980 --> 00:13:17.159
+On the other hand, Calc is also capable of figuring out
+
+00:13:17.160 --> 00:13:22.099
+indefinite integrals.
+
+00:13:22.100 --> 00:13:26.859
+Say we put that function back on the stack,
+
+00:13:26.860 --> 00:13:32.559
+and this time, we call the integral function.
+
+00:13:32.560 --> 00:13:35.079
+There you go. Of course, you have to add
+
+00:13:35.080 --> 00:13:39.819
+your own constant of integration.
+
+00:13:39.820 --> 00:13:43.399
+For integrals that Calc cannot figure out symbolically,
+
+00:13:43.400 --> 00:13:46.079
+a numerical integration method is available
+
+00:13:46.080 --> 00:13:59.998
+through the calc-num-integral command, which is documented...
+
+00:13:59.999 --> 00:14:17.539
+The function documentation is available here, more or less.
+
+NOTE Programmable functions
+
+00:14:17.540 --> 00:14:20.399
+I definitely need to mention
+
+00:14:20.400 --> 00:14:24.759
+that Calc is capable of doing programmable functions.
+
+00:14:24.760 --> 00:14:29.619
+That is to say, you can program your own functions into Calc.
+
+00:14:29.620 --> 00:14:32.239
+There are three separate ways to do this.
+
+00:14:32.240 --> 00:14:36.279
+One is through a macro method
+
+00:14:36.280 --> 00:14:41.539
+similar to Emacs's usual keyboard macros.
+
+00:14:41.540 --> 00:14:46.519
+The second method is to transform an algebraic function
+
+00:14:46.520 --> 00:14:50.859
+into a stored function definition.
+
+00:14:50.860 --> 00:14:54.059
+And the third is to use Elisp directly.
+
+00:14:54.060 --> 00:14:56.599
+Personally, I find that the second method
+
+00:14:56.600 --> 00:15:01.799
+is the most practical, the most convenient and practical
+
+00:15:01.800 --> 00:15:08.059
+in my opinion. So I'll give a quick example of that.
+
+00:15:08.060 --> 00:15:14.159
+So I could... Let's say I wanted to have a function
+
+00:15:14.160 --> 00:15:20.699
+for calculating capacitive reactance.
+
+00:15:20.700 --> 00:15:28.899
+I'll define that in algebraic mode first.
+
+00:15:28.900 --> 00:15:33.639
+The function for that is 1 over 2 pi
+
+00:15:33.640 --> 00:15:41.599
+the frequency and the capacitance.
+
+00:15:41.600 --> 00:15:44.959
+Drop that on the stack. You see, it does automatically
+
+00:15:44.960 --> 00:15:52.079
+get simplified a little bit, but it's the same function.
+
+00:15:52.080 --> 00:15:58.839
+And then I press letters Z and F. Do that again.
+
+00:15:58.840 --> 00:16:06.239
+Z and F to start transforming that into a stored function.
+
+00:16:06.240 --> 00:16:11.039
+It asks me to select a user key, a single key press.
+
+00:16:11.040 --> 00:16:15.479
+I'll use the letter c.
+
+00:16:15.480 --> 00:16:19.079
+Then it's going to ask for a longer command name.
+
+00:16:19.080 --> 00:16:24.639
+I've actually defined this once before, so it prefilled in
+
+00:16:24.640 --> 00:16:38.339
+that command name.
+
+00:16:38.340 --> 00:16:42.999
+Then I need to enter which variables in the formula
+
+00:16:43.000 --> 00:16:46.559
+are actual arguments, rather than just symbols
+
+00:16:46.560 --> 00:16:52.559
+to be evaluated later. I prefer to put this in with frequency
+
+00:16:52.560 --> 00:16:54.279
+and the capacitance after that,
+
+00:16:54.280 --> 00:16:57.799
+but actually in this particular case,
+
+00:16:57.800 --> 00:17:07.339
+it doesn't matter at all to the mathematics.
+
+00:17:07.340 --> 00:17:11.399
+So, now all I have to do, that this is defined,
+
+00:17:11.400 --> 00:17:15.199
+is I can drop the frequency on the stack,
+
+00:17:15.200 --> 00:17:24.399
+which we'll say, for this example, will be 4.5 MHz,
+
+00:17:24.400 --> 00:17:32.279
+and then drop on the capacitance, which in this example
+
+00:17:32.280 --> 00:17:40.319
+will be 22 pF.
+
+00:17:40.320 --> 00:17:42.439
+Then I'll call the function that I just defined.
+
+00:17:42.440 --> 00:17:45.239
+I don't really like having to try to remember
+
+00:17:45.240 --> 00:17:48.679
+the short letters that I've come up with,
+
+00:17:48.680 --> 00:17:57.839
+so I'll just use the longer name.
+
+00:17:57.840 --> 00:17:59.799
+I need to evaluate one more time
+
+00:17:59.800 --> 00:18:05.619
+because the symbol pi is in there and not yet evaluated.
+
+00:18:05.620 --> 00:18:07.539
+And so if I've done that right,
+
+00:18:07.540 --> 00:18:12.159
+we have a capacitive reactance of about 1600 ohms.
+
+NOTE Plotting
+
+00:18:12.160 --> 00:18:16.839
+As the last feature that I'll mention here,
+
+00:18:16.840 --> 00:18:24.059
+Emacs Calc does have an interface with gnuplot,
+
+00:18:24.060 --> 00:18:30.799
+if you want to have Calc work as your graphing calculator.
+
+00:18:30.800 --> 00:18:33.159
+I do need to be honest and mention
+
+00:18:33.160 --> 00:18:35.579
+that I don't generally use it myself
+
+00:18:35.580 --> 00:18:39.719
+because there's another program in GNOME
+
+00:18:39.720 --> 00:18:43.499
+that I've found to be generally more convenient
+
+00:18:43.500 --> 00:18:47.399
+for the things that I want to graph quickly.
+
+00:18:47.400 --> 00:18:53.399
+But I think I can give you a simple example.
+
+00:18:53.400 --> 00:19:00.339
+So first, we need to drop a range on the stack.
+
+00:19:00.340 --> 00:19:06.619
+Let's say 0 to 10.
+
+00:19:06.620 --> 00:19:11.639
+And then we need to drop the function on the stack.
+
+00:19:11.640 --> 00:19:17.839
+And then I believe it's the letters g and f that graph this.
+
+00:19:17.840 --> 00:19:22.319
+Let's see. Yep, there we go.
+
+00:19:22.320 --> 00:19:25.059
+So there's our function and it looks nice.
+
+00:19:25.060 --> 00:19:26.659
+That was pretty easy.
+
+00:19:26.660 --> 00:19:29.019
+That's the fast way to do it.
+
+00:19:29.020 --> 00:19:32.839
+I will, as a disclaimer, mention that
+
+00:19:32.840 --> 00:19:34.159
+using this quick approach,
+
+00:19:34.160 --> 00:19:38.759
+that sometimes more complicated graphs
+
+00:19:38.760 --> 00:19:39.999
+will not turn out nicely,
+
+00:19:40.000 --> 00:19:44.339
+because by default, the resolution will be pretty low.
+
+00:19:44.340 --> 00:19:48.119
+That is to say it's... gnuplot is going to be
+
+00:19:48.120 --> 00:19:49.899
+skipping a lot of points
+
+00:19:49.900 --> 00:19:52.039
+and so you'll have to learn a bit more
+
+00:19:52.040 --> 00:19:55.319
+about how to use the interface,
+
+00:19:55.320 --> 00:19:59.519
+what parameters to pass if you want all your graphs
+
+00:19:59.520 --> 00:20:03.699
+to come out looking nice.
+
+00:20:03.700 --> 00:20:08.799
+So that covers all the features that I wanted to cover.
+
+NOTE Wish list
+
+00:20:08.800 --> 00:20:13.279
+I wanted to briefly mention a wish list of items
+
+00:20:13.280 --> 00:20:16.679
+that I'd like to see in Calc.
+
+00:20:16.680 --> 00:20:23.639
+One of them would be improper integrals.
+
+00:20:23.640 --> 00:20:25.159
+So that's like our definite integrals
+
+00:20:25.160 --> 00:20:32.859
+except for where a limit of integration is infinity.
+
+00:20:32.860 --> 00:20:38.559
+That's something that can be useful in a few applications.
+
+00:20:38.560 --> 00:20:41.079
+Something else that would be neat to have would be
+
+00:20:41.080 --> 00:20:45.679
+annotations for row entries. So for example
+
+00:20:45.680 --> 00:20:48.819
+if I was putting together a sum of numbers
+
+00:20:48.820 --> 00:20:53.279
+for, say, my monthly budget,
+
+00:20:53.280 --> 00:20:57.479
+let's say I was paying $2,000 for my rent
+
+00:20:57.480 --> 00:21:03.831
+and let's say $800 a month for my groceries,
+
+00:21:03.832 --> 00:21:07.931
+(a lot of kids to feed there)
+
+00:21:07.932 --> 00:21:14.565
+and then say another $60 for dining out, and so on,
+
+00:21:14.566 --> 00:21:18.259
+it would be nice if there was some way
+
+00:21:18.260 --> 00:21:21.319
+to put a little annotation next to each number
+
+00:21:21.320 --> 00:21:23.399
+so that you could remember
+
+00:21:23.400 --> 00:21:27.039
+what the meaning of that number was more easily.
+
+00:21:27.040 --> 00:21:31.199
+I actually looked into programming this into Calc myself,
+
+00:21:31.200 --> 00:21:35.919
+but discovered that it would require reprogramming
+
+00:21:35.920 --> 00:21:41.839
+quite a bit of Calc to make that work well
+
+00:21:41.840 --> 00:21:43.479
+across all calc functionality,
+
+00:21:43.480 --> 00:21:46.939
+and so, eventually, I gave up.
+
+00:21:46.940 --> 00:21:51.139
+But I'd still really like to have that feature.
+
+00:21:51.140 --> 00:21:52.039
+The final thing, though
+
+00:21:52.040 --> 00:21:54.579
+I think this would not necessarily belong in Calc,
+
+00:21:54.580 --> 00:21:57.919
+I think it would be cool if Emacs had some way
+
+00:21:57.920 --> 00:22:00.599
+to run numerical solutions
+
+00:22:00.600 --> 00:22:02.599
+for systems of differential equations,
+
+00:22:02.600 --> 00:22:06.019
+also known as a differential analyzer.
+
+00:22:06.020 --> 00:22:09.279
+So this would allow you to be able to set up simulation models
+
+00:22:09.280 --> 00:22:11.679
+involving systems of differential equations,
+
+00:22:11.680 --> 00:22:14.879
+for example, a spring mass system, or pressure temperature,
+
+00:22:14.880 --> 00:22:18.039
+or what have you, and then run the simulation
+
+00:22:18.040 --> 00:22:22.119
+using numerical approximation.
+
+00:22:22.120 --> 00:22:24.079
+Maybe it would be silly
+
+00:22:24.080 --> 00:22:25.999
+to actually put that in Calc itself,
+
+00:22:26.000 --> 00:22:30.339
+but a nice interface maybe to some other software,
+
+00:22:30.340 --> 00:22:33.299
+simple software that did that,
+
+00:22:33.300 --> 00:22:35.779
+an easy to use interface for that
+
+00:22:35.780 --> 00:22:38.599
+would be really great.
+
+NOTE Wrapping up
+
+00:22:38.600 --> 00:22:41.800
+So that's my entire talk.
+
+00:22:41.801 --> 00:22:44.534
+I'll just mention some information.
+
+00:22:44.535 --> 00:22:48.365
+If you want to learn more about me
+
+00:22:48.366 --> 00:22:50.119
+or things that I'm interested in,
+
+00:22:50.120 --> 00:22:57.779
+I do not any longer have a web presence.
+
+00:22:57.780 --> 00:22:59.659
+I don't have a website anymore,
+
+00:22:59.660 --> 00:23:03.359
+but I do have a Gemini capsule
+
+00:23:03.360 --> 00:23:07.139
+that I post to all the time.
+
+00:23:07.140 --> 00:23:13.879
+And if you can install, if you're willing to install the...
+
+00:23:13.880 --> 00:23:19.079
+Gemini browser known as Elpher
+
+00:23:19.080 --> 00:23:23.698
+into Emacs, which is available from ELPA,
+
+00:23:23.699 --> 00:23:27.359
+then you can browse directly to it
+
+00:23:27.360 --> 00:23:31.439
+and look around my Gemini capsule.
+
+00:23:31.440 --> 00:23:35.920
+Thank you very much.
diff --git a/2025/captions/emacsconf-2025-commonlisp--common-lisp-images-communicating-likeahuman-through-shared-emacs-slime-and-eev--screwlisp--main.vtt b/2025/captions/emacsconf-2025-commonlisp--common-lisp-images-communicating-likeahuman-through-shared-emacs-slime-and-eev--screwlisp--main.vtt
new file mode 100644
index 00000000..59f437f1
--- /dev/null
+++ b/2025/captions/emacsconf-2025-commonlisp--common-lisp-images-communicating-likeahuman-through-shared-emacs-slime-and-eev--screwlisp--main.vtt
@@ -0,0 +1,1260 @@
+WEBVTT captioned by sachac and jay_bird
+
+NOTE Introduction
+
+00:00:00.000 --> 00:00:07.119
+Hey, everyone. This talk is on this tradition,
+
+00:00:07.120 --> 00:00:10.639
+intelligent agents in Emacs
+
+00:00:10.640 --> 00:00:13.799
+using my Leonardo software individuals,
+
+00:00:13.800 --> 00:00:16.919
+which I've mistyped as I just wrote here, I see.
+
+00:00:16.920 --> 00:00:20.159
+Thank you to Sacha and everyone
+
+00:00:20.160 --> 00:00:25.239
+at EmacsConf and Emacs, I guess.
+
+00:00:25.240 --> 00:00:26.599
+Sorry that I was running late.
+
+00:00:26.600 --> 00:00:29.759
+I'm screwlisp.small-web.org.
+
+00:00:29.760 --> 00:00:33.999
+I run those one or two weekly shows for a long time,
+
+00:00:34.000 --> 00:00:35.599
+the Lispy Gopher Climate.
+
+00:00:35.600 --> 00:00:42.199
+I'm active on the Mastodon at @screwlisp@gamerplus.org.
+
+00:00:42.200 --> 00:00:46.719
+I'm screwtape on lambda.moo.mud.org.
+
+00:00:46.720 --> 00:00:50.474
+And I ported, over the last kind of year,
+
+00:00:50.475 --> 00:00:58.499
+years, to some extent, I ported Eric Sandewall's system
+
+00:00:58.500 --> 00:01:01.519
+for developing intelligent software agents,
+
+00:01:01.520 --> 00:01:04.879
+which he finished working on in 2014.
+
+00:01:04.880 --> 00:01:10.119
+I got it working again around 2025.
+
+00:01:10.120 --> 00:01:14.199
+First, we're going to take a long arc.
+
+00:01:14.200 --> 00:01:16.759
+We're going to motivate... This is the idea.
+
+00:01:16.760 --> 00:01:18.119
+You can see I'm using Org Mode,
+
+00:01:18.120 --> 00:01:19.959
+which I hope provides a good example
+
+00:01:19.960 --> 00:01:25.359
+for all the Org-Mode-oriented talks this conference.
+
+00:01:25.360 --> 00:01:26.399
+But you can also see
+
+00:01:26.400 --> 00:01:33.107
+that I'm using Eduardo Ochs's eev minor mode with Org.
+
+00:01:33.108 --> 00:01:35.640
+But we can see a little bit of the difference
+
+00:01:35.641 --> 00:01:39.207
+between these two, and that will kind of evolve into
+
+00:01:39.208 --> 00:01:45.259
+my style with the agent communication in Emacs.
+
+00:01:45.260 --> 00:01:52.999
+So you can see I used eev anchors as my Emacs headings.
+
+00:01:53.000 --> 00:01:56.839
+In eev, you just evaluate Elisp expressions
+
+00:01:56.840 --> 00:01:58.679
+as links to places.
+
+00:01:58.680 --> 00:02:01.679
+An anchor will link you somewhere else in the document.
+
+00:02:01.680 --> 00:02:04.807
+So my table of contents links to my talk, I guess.
+
+00:02:04.808 --> 00:02:07.507
+Anchors come in two halves,
+
+00:02:07.508 --> 00:02:12.940
+so that's why I built that unique table of contents
+
+00:02:12.941 --> 00:02:21.479
+experience there. What else am I going to say?
+
+NOTE Totally normal computing
+
+00:02:21.480 --> 00:02:24.174
+So first, let's just do some totally normal computing
+
+00:02:24.175 --> 00:02:27.140
+because intelligence is going to be difficult to describe.
+
+00:02:27.141 --> 00:02:31.100
+Let's just try and compute normally in Emacs in Org Mode
+
+00:02:31.101 --> 00:02:34.359
+and then segue more so into eev,
+
+00:02:34.360 --> 00:02:38.359
+and then maybe I would like if an agent was intelligent,
+
+00:02:38.360 --> 00:02:40.839
+I would think that an intelligent agent
+
+00:02:40.840 --> 00:02:43.319
+would do something like what I'm doing.
+
+00:02:43.320 --> 00:02:47.239
+It should be recognizably similar to what I do myself.
+
+00:02:47.240 --> 00:02:52.399
+I don't think the word intelligence is relevant
+
+00:02:52.400 --> 00:02:55.679
+if it's not related to something I'm not familiar with.
+
+NOTE Using Emacs as a human
+
+00:02:55.680 --> 00:03:00.999
+Using Emacs as a human, reading headings from my article,
+
+00:03:01.000 --> 00:03:03.919
+using Common Lisp. Right, my friend jeremy_list
+
+00:03:03.920 --> 00:03:06.879
+wrote actually a big project,
+
+00:03:06.880 --> 00:03:09.799
+but part of it was base64 encoding,
+
+00:03:09.800 --> 00:03:17.439
+and I just yoinked his C code for base64 encoding, I think.
+
+00:03:17.440 --> 00:03:20.759
+This is just clearly some C-based 64 encoding.
+
+00:03:20.760 --> 00:03:24.279
+If you go to my blog, his project is actually a C++ project
+
+00:03:24.280 --> 00:03:29.579
+and you can see me doing this with C++ rather than C.
+
+00:03:29.580 --> 00:03:33.319
+But basically, you can go to my blog articles
+
+00:03:33.320 --> 00:03:40.299
+if you want more detail to read something instead.
+
+00:03:40.300 --> 00:03:42.433
+And then here's some embeddable Common Lisp,
+
+00:03:42.434 --> 00:03:48.439
+Jack Daniel's ECL ANSI Common Lisp compiler I guess.
+
+00:03:48.440 --> 00:03:49.639
+This is just what it looks like.
+
+00:03:49.640 --> 00:03:52.239
+You can see I'm using Org Mode trickily,
+
+00:03:52.240 --> 00:03:56.119
+using noweb to put the lines of the C source block
+
+00:03:56.120 --> 00:04:00.279
+in this one. We're tangling it to this file
+
+00:04:00.280 --> 00:04:01.919
+rather than evaluating it.
+
+00:04:01.920 --> 00:04:05.279
+So, you know, literate programming, tangle and weave.
+
+00:04:05.280 --> 00:04:06.999
+We're just using Org Mode
+
+00:04:07.000 --> 00:04:09.197
+like the other Org Mode people
+
+00:04:09.198 --> 00:04:12.079
+are all showing us this conference, I guess.
+
+00:04:12.080 --> 00:04:13.399
+Then we have to compile it.
+
+00:04:13.400 --> 00:04:16.039
+It's always hard to remember these invocations for me.
+
+00:04:16.040 --> 00:04:20.159
+Results file. The file is my .fas file,
+
+00:04:20.160 --> 00:04:24.559
+because the way ECL's C and C++ integration works
+
+00:04:24.560 --> 00:04:30.519
+is that it just has to be seen by compile-file in Lisp.
+
+00:04:30.520 --> 00:04:32.119
+I cached this earlier.
+
+00:04:32.120 --> 00:04:36.199
+Oh, I should actually start Lisp, actually, shouldn't I?
+
+00:04:36.200 --> 00:04:39.639
+How are we going to do this?
+
+00:04:39.640 --> 00:04:47.099
+(setq inferior-lisp-program "ecl"). We could M-x slime.
+
+00:04:47.100 --> 00:04:48.919
+Because... we better actually load this.
+
+00:04:48.920 --> 00:04:54.119
+I did a dry run before.
+
+00:04:54.120 --> 00:04:58.259
+I think we can just load this, because I already did it.
+
+00:04:58.260 --> 00:05:04.079
+But I cached it. Let's nuke the cache.
+
+00:05:04.080 --> 00:05:06.599
+Okay, I'm going to say that that probably worked.
+
+00:05:06.600 --> 00:05:09.319
+Now, as you saw, that base64 encoding
+
+00:05:09.320 --> 00:05:13.619
+was just, I guess, number to character code
+
+00:05:13.620 --> 00:05:19.140
+to other character code. So I wrote this higher-level Lisp one,
+
+00:05:19.141 --> 00:05:20.599
+but that's not really the point.
+
+00:05:20.600 --> 00:05:26.199
+Obviously, Emacs also has Base64 encoding.
+
+00:05:26.200 --> 00:05:27.979
+It's just a point that we might have
+
+00:05:27.980 --> 00:05:29.959
+C++ and C external programs
+
+00:05:29.960 --> 00:05:31.239
+that we'd like to be integrating
+
+00:05:31.240 --> 00:05:37.139
+into our Emacs agents capabilities.
+
+00:05:37.140 --> 00:05:46.474
+Here we can see a normal named Org Mode source block.
+
+00:05:46.475 --> 00:05:50.474
+that calls that function, then an Org Mode source block
+
+00:05:50.475 --> 00:05:56.299
+that calls Emacs's base64-decode-string as a way of
+
+00:05:56.300 --> 00:05:57.940
+validating it, I guess.
+
+00:05:57.941 --> 00:06:00.140
+We go to Org, so we can see...
+
+00:06:00.141 --> 00:06:04.407
+I have a named call to that function calling the Lisp function
+
+00:06:04.408 --> 00:06:07.040
+Org is just kind of like this.
+
+00:06:07.041 --> 00:06:11.559
+It's cached but I don't seem to have run it before.
+
+00:06:11.560 --> 00:06:13.574
+Then I do the Emacs decode.
+
+00:06:13.575 --> 00:06:15.974
+So if we just run this using C-c C-c,
+
+00:06:15.975 --> 00:06:17.240
+and we can kind of see
+
+00:06:17.241 --> 00:06:22.179
+what Org Mode is like a little bit here.
+
+00:06:22.180 --> 00:06:24.319
+All right, yes, so as we can see,
+
+00:06:24.320 --> 00:06:27.659
+oh hang on, let's run this as well actually.
+
+00:06:27.660 --> 00:06:32.193
+So the C embeddable Common Lisp
+
+00:06:32.194 --> 00:06:35.199
+base64 encoding gets us this.
+
+00:06:35.200 --> 00:06:38.079
+And then Emacs is decoding and gets us back,
+
+00:06:38.080 --> 00:06:40.319
+kind of validates it. I think I'm missing some things.
+
+00:06:40.320 --> 00:06:43.079
+I don't pad characters out to the correct byte lengths,
+
+00:06:43.080 --> 00:06:45.399
+that kind of thing, but it's fine.
+
+NOTE using this via eev as a human
+
+00:06:45.400 --> 00:06:48.719
+And then I kind of contrast that to,
+
+00:06:48.720 --> 00:06:53.179
+I really like what my friend mdhughes.tech,
+
+00:06:53.180 --> 00:06:57.319
+game dev of the ages, calls REPL-driven development,
+
+00:06:57.320 --> 00:07:06.139
+which he says is kind of the opposite of literate coding.
+
+00:07:06.140 --> 00:07:08.940
+I think eev, at least for me,
+
+00:07:08.941 --> 00:07:11.079
+is kind of like REPL-driven development.
+
+00:07:11.080 --> 00:07:16.159
+So in eev, if you just press F8, the thing happens.
+
+00:07:16.160 --> 00:07:17.479
+And if it's a red star line,
+
+00:07:17.480 --> 00:07:19.439
+the thing is an Emacs Lisp thing,
+
+00:07:19.440 --> 00:07:22.999
+and otherwise it goes to the eepitch target.
+
+00:07:23.000 --> 00:07:26.719
+So if I do this, great, now I'm pitching to that slime
+
+00:07:26.720 --> 00:07:32.759
+REPL ECL I made. And then I pressed F8. Press F8 again.
+
+00:07:32.760 --> 00:07:34.480
+The string got coerced to a list.
+
+00:07:34.481 --> 00:07:38.359
+F8. Now it's car codified.
+
+00:07:38.360 --> 00:07:41.319
+I quite like this, because this looks like something I can do
+
+00:07:41.320 --> 00:07:44.239
+and understand doing and reason about doing.
+
+00:07:44.240 --> 00:07:49.519
+Then I form a command to send from Lisp to Emacs.
+
+00:07:49.520 --> 00:07:52.599
+Then I do it and I recover the string from the beginning.
+
+00:07:52.600 --> 00:07:56.119
+I guess I had one of these here. Oh, by the way, look at
+
+00:07:56.120 --> 00:07:59.159
+What Org Mode did with an eev source block.
+
+00:07:59.160 --> 00:08:00.999
+And then when I close the source block
+
+00:08:01.000 --> 00:08:02.679
+using C-c ',
+
+00:08:02.680 --> 00:08:05.319
+it brings me back to the Org doc,
+
+00:08:05.320 --> 00:08:09.159
+which was a cool synergy between the eev minor mode
+
+00:08:09.160 --> 00:08:16.019
+and eev source blocks in Org Mode that I noticed.
+
+00:08:16.020 --> 00:08:22.599
+And so I kind of want my agents to be like this eev usage.
+
+00:08:22.600 --> 00:08:25.159
+Clearly, Org is super powerful,
+
+00:08:25.160 --> 00:08:28.159
+but I don't even like writing calls like this,
+
+00:08:28.160 --> 00:08:32.079
+where you write the function that will happen last first,
+
+00:08:32.080 --> 00:08:39.039
+so you're kind of writing right to left, first to last.
+
+00:08:39.040 --> 00:08:41.239
+Whereas in REPL-driven development,
+
+00:08:41.240 --> 00:08:43.199
+I guess I'm writing top to bottom,
+
+00:08:43.200 --> 00:08:46.979
+and eev, I guess, executable logs
+
+00:08:46.980 --> 00:08:48.599
+are logs that are like that.
+
+00:08:48.600 --> 00:08:52.378
+So I kind of like eev's view for reasoning
+
+00:08:52.379 --> 00:08:54.399
+more than Org's Tangle.
+
+00:08:54.400 --> 00:08:57.319
+Obviously, Tangle is trying to do tricky things,
+
+00:08:57.320 --> 00:09:01.359
+but maybe they have different specializations,
+
+00:09:01.360 --> 00:09:04.879
+and eev's one is more close
+
+00:09:04.880 --> 00:09:07.799
+to my own version of intelligence, maybe.
+
+NOTE Software individuals using eev in Emacs like a human
+
+00:09:07.800 --> 00:09:13.539
+Software individuals using eev in Emacs like a human.
+
+00:09:13.540 --> 00:09:17.279
+Yeah, you can always visit my blog post for more detail.
+
+00:09:17.280 --> 00:09:20.039
+Right, I made a CLOS object
+
+00:09:20.040 --> 00:09:22.519
+in Common Lisp to wrap doing this.
+
+00:09:22.520 --> 00:09:23.639
+It's not really the topic.
+
+00:09:23.640 --> 00:09:27.959
+It's in the appendix somewhere if you need it.
+
+00:09:27.960 --> 00:09:29.559
+So I've just executed that.
+
+00:09:29.560 --> 00:09:32.079
+You can look at the appendix in your own time.
+
+NOTE Sandewall's leonardo system
+
+00:09:32.080 --> 00:09:33.959
+Jumping over to actually starting
+
+00:09:33.960 --> 00:09:36.319
+our hypothetical intelligent agent.
+
+00:09:36.320 --> 00:09:38.239
+I guess we're doing eev here.
+
+00:09:38.240 --> 00:09:46.759
+So if we open this, press F8 a bunch of times.
+
+00:09:46.760 --> 00:09:49.199
+Oh, and if you were cloning it yourself,
+
+00:09:49.200 --> 00:09:56.719
+I guess that's what you would do. setq eepitch-buffer-name.
+
+00:09:56.720 --> 00:10:00.319
+Oh yeah, if you went to an eepitch shell and then came back.
+
+00:10:00.320 --> 00:10:01.679
+You would have had to do that, but I didn't.
+
+00:10:01.680 --> 00:10:04.239
+I didn't, so I didn't need to.
+
+00:10:04.240 --> 00:10:07.279
+Sandewall's style is to use relative paths
+
+00:10:07.280 --> 00:10:11.974
+to tell which agent is acting inside a software individual.
+
+00:10:11.975 --> 00:10:13.359
+Remembering a software individual
+
+00:10:13.360 --> 00:10:15.239
+is potentially a bunch of agents.
+
+00:10:15.240 --> 00:10:18.479
+And we load... So one individual,
+
+00:10:18.480 --> 00:10:21.919
+all the agents in each individual share a kernel.
+
+00:10:21.920 --> 00:10:25.599
+So only one agent in one software individual
+
+00:10:25.600 --> 00:10:28.279
+is active at any given time, but the agents are separate.
+
+00:10:28.280 --> 00:10:31.279
+They just all have to share the kernel resource,
+
+00:10:31.280 --> 00:10:38.319
+which is the Remus agent. Oh, I got rid of this.
+
+00:10:38.320 --> 00:10:43.279
+And start the CLE is the thing.
+
+00:10:43.280 --> 00:10:46.119
+Oh, I did need to have an EmacsConf knowledge base.
+
+00:10:46.120 --> 00:10:48.959
+Well, let's just keep eepitching for a little bit.
+
+00:10:48.960 --> 00:10:55.259
+So I think I made... I'm going to call it emacsconf-kb.
+
+00:10:55.260 --> 00:10:59.679
+Right, that looks likely. And I think that the agent...
+
+00:10:59.680 --> 00:11:03.479
+I can check this. I could have checked that.
+
+00:11:03.480 --> 00:11:12.699
+I could have done something like (get emacsconf-kb contents).
+
+00:11:12.700 --> 00:11:13.479
+Yeah, and you can see
+
+00:11:13.480 --> 00:11:15.879
+there's a location inside it which is agent1,
+
+00:11:15.880 --> 00:11:17.519
+which I assume is an entity file
+
+00:11:17.520 --> 00:11:20.599
+that I was working with before.
+
+00:11:20.600 --> 00:11:21.919
+And then what were we going to do?
+
+00:11:21.920 --> 00:11:28.279
+Oh yeah, back to the embeddable Common Lisp image.
+
+00:11:28.280 --> 00:11:36.099
+So if I just press our button back to there...
+
+NOTE Start a loop for one leonardo software individual
+
+00:11:36.100 --> 00:11:41.119
+And so my idea is that for an Emacs agent,
+
+00:11:41.120 --> 00:11:46.999
+basically, I'd like to have an Emacs Lisp list.
+
+00:11:47.000 --> 00:11:49.640
+And just when stuff gets into that list,
+
+00:11:49.641 --> 00:11:53.239
+the agent which is always running, but running slowly,
+
+00:11:53.240 --> 00:11:58.359
+will incrementally just do the stuff it finds in that list.
+
+00:11:58.360 --> 00:12:00.759
+Populating that list probably gets into stuff
+
+00:12:00.760 --> 00:12:03.199
+like your Beliefs, Desires, Intents framework
+
+00:12:03.200 --> 00:12:06.159
+and those kind of well-known and well-studied algorithms.
+
+00:12:06.160 --> 00:12:07.799
+That's not the point here.
+
+00:12:07.800 --> 00:12:14.259
+I just want to have a list in Emacs that my ECL...
+
+00:12:14.260 --> 00:12:16.079
+I'm just going to run a loop in ECL,
+
+00:12:16.080 --> 00:12:18.319
+and the ECL is going to keep sending
+
+00:12:18.320 --> 00:12:22.399
+anything it finds in that Emacs Lisp list
+
+00:12:22.400 --> 00:12:25.399
+to the software agent. The agent is also in Emacs,
+
+00:12:25.400 --> 00:12:28.759
+so it would be able to populate its own list itself
+
+00:12:28.760 --> 00:12:36.159
+if it had an idea of evaluating desires and chances to improve
+
+00:12:36.160 --> 00:12:37.559
+whatever it wants to improve
+
+00:12:37.560 --> 00:12:39.999
+and chances to avoid whatever it wants to avoid.
+
+00:12:40.000 --> 00:12:47.599
+We talked a little bit too much. Let's just start this.
+
+00:12:47.600 --> 00:12:51.539
+Sorry that I'm manually setting up my screen.
+
+00:12:51.540 --> 00:12:55.499
+Then let's put CLisp over here.
+
+00:12:55.500 --> 00:12:58.679
+Right, we could work with this, right?
+
+00:12:58.680 --> 00:13:00.099
+This loop isn't very important.
+
+00:13:00.100 --> 00:13:04.919
+It's just a Common Lisp loop. I copy my friend jmbr's style
+
+00:13:04.920 --> 00:13:08.199
+of using Lisp machine-style keyword arguments
+
+00:13:08.200 --> 00:13:12.119
+instead of symbols like cl-loop,
+
+00:13:12.120 --> 00:13:16.719
+the compatibility thing in Emacs Lisp does.
+
+00:13:16.720 --> 00:13:28.139
+I'd never initialized that. Well, let's do that.
+
+00:13:28.140 --> 00:13:30.679
+Okay, now we have the list.
+
+00:13:30.680 --> 00:13:35.019
+And just every 30, let's turn it down to every 20 seconds.
+
+00:13:35.020 --> 00:13:37.159
+Hypothetically, it's going to put
+
+00:13:37.160 --> 00:13:39.999
+whatever it finds in there, into there.
+
+00:13:40.000 --> 00:13:46.239
+And so, I think, yeah, and now... Great.
+
+00:13:46.240 --> 00:13:50.099
+So here I'm just going to fill it with stuff.
+
+00:13:50.100 --> 00:13:54.839
+And this is quite interesting, I think.
+
+00:13:54.840 --> 00:13:58.479
+It just shows I can put a whole bunch of stuff into that list.
+
+00:13:58.480 --> 00:14:01.199
+Ideally, the agent would populate it itself
+
+00:14:01.200 --> 00:14:03.359
+with a BDI algorithm or something.
+
+00:14:03.360 --> 00:14:04.919
+But if we just put some stuff in there,
+
+00:14:04.920 --> 00:14:07.799
+we'll see that it will all get sent
+
+00:14:07.800 --> 00:14:14.799
+basically using Eduardo's eepitch internal machinery, at least.
+
+00:14:14.800 --> 00:14:17.479
+And hence, it meets my requirement
+
+00:14:17.480 --> 00:14:20.779
+that it works exactly like I work.
+
+00:14:20.780 --> 00:14:25.859
+And then in eev, I just have to press M-e.
+
+00:14:25.860 --> 00:14:31.479
+Oh, it works via Emacs server, and I didn't start that,
+
+00:14:31.480 --> 00:14:39.719
+so if we server-start, hopefully...
+
+00:14:39.720 --> 00:14:42.799
+And then, ideally, things will just begin happening
+
+00:14:42.800 --> 00:14:53.119
+in this slime-repl C/Lisp agent.
+
+00:14:53.120 --> 00:15:05.419
+Oh, if this was still running.
+
+00:15:05.420 --> 00:15:07.199
+Okay, well we got at least one,
+
+00:15:07.200 --> 00:15:09.639
+but hypothetically lots of these will happen.
+
+00:15:09.640 --> 00:15:13.699
+So, show agent, I guess,
+
+00:15:13.700 --> 00:15:17.039
+happened over here. I put a whole bunch of "sleep-for"s in,
+
+00:15:17.040 --> 00:15:19.719
+because I thought that going slowly
+
+00:15:19.720 --> 00:15:21.319
+would make it seem more human.
+
+00:15:21.320 --> 00:15:24.639
+Like I saw in Eduardo's talk last year
+
+00:15:24.640 --> 00:15:29.099
+which is where I learned about eev.
+
+00:15:29.100 --> 00:15:32.319
+The system is a little fragile.
+
+00:15:32.320 --> 00:15:41.079
+Hypothetically, we have a whole bunch of agents.
+
+00:15:41.080 --> 00:15:43.039
+I guess every time it gets sent,
+
+00:15:43.040 --> 00:15:44.999
+it checks that we're in the right agent.
+
+00:15:45.000 --> 00:15:46.999
+And it's not actually just sending a string,
+
+00:15:47.000 --> 00:15:52.799
+it's sending a sequence of string actions over there.
+
+00:15:52.800 --> 00:15:57.479
+And so we see Emacs Lisp hypothetically put,
+
+00:15:57.480 --> 00:16:06.859
+I guess it put this "foo bar baz!" into an entity, message-1,
+
+00:16:06.860 --> 00:16:11.899
+which should be of type message, I guess, conceivably.
+
+00:16:11.900 --> 00:16:13.319
+I forget if I set that up earlier.
+
+00:16:13.320 --> 00:16:14.719
+It's in the appendix somewhere.
+
+00:16:14.720 --> 00:16:17.999
+And then it just called, it did a sequence of actions
+
+00:16:18.000 --> 00:16:21.319
+which was really just one action of showing that.
+
+00:16:21.320 --> 00:16:26.399
+And then I called b64-encode on message1,
+
+00:16:26.400 --> 00:16:30.599
+which I believe will have set message-1 encoded.
+
+00:16:30.600 --> 00:16:37.242
+Can I check that manually while it's happening?
+
+00:16:37.243 --> 00:16:51.499
+Disaster. Well that's what it should have been.
+
+00:16:51.500 --> 00:16:54.940
+Well, I did mention it was a little bit fragile.
+
+00:16:54.941 --> 00:17:03.279
+What if we put... Can we kind of rescue this?
+
+00:17:03.280 --> 00:17:07.239
+I don't want to try redoing this. It's slightly fragile.
+
+00:17:07.240 --> 00:17:12.639
+What it would do, we can see the actions are kind of getting there,
+
+00:17:12.640 --> 00:17:16.719
+but somehow my message didn't end up getting encoded
+
+00:17:16.720 --> 00:17:18.119
+by that sequence of actions.
+
+00:17:18.120 --> 00:17:23.279
+So this decode will have also made the decoded one be null.
+
+NOTE Let's do it manually
+
+00:17:23.280 --> 00:17:26.239
+Let's just do it manually. Should have worked.
+
+00:17:26.240 --> 00:17:30.559
+b64-encode, which calls out to Emacs
+
+00:17:30.560 --> 00:17:37.299
+to get everything actually done.
+
+00:17:37.300 --> 00:17:41.519
+Oh, I got interrupted by the agent.
+
+00:17:41.520 --> 00:17:43.320
+Well, if I do it manually, it worked.
+
+00:17:43.321 --> 00:17:53.519
+Hypothetically, the queue thing should have worked. Great.
+
+00:17:53.520 --> 00:17:56.840
+Well, you can see it's kind of working.
+
+00:17:56.841 --> 00:17:57.440
+Could be more robust.
+
+00:17:57.441 --> 00:18:03.640
+The reason is that I think what I did is a bit fragile,
+
+00:18:03.641 --> 00:18:07.107
+but the intent is that FIPA,
+
+00:18:07.108 --> 00:18:09.307
+Foundation for Intelligent Physical Agents's
+
+00:18:09.308 --> 00:18:15.639
+SL standard has tools for reliability
+
+00:18:15.640 --> 00:18:19.919
+through repetition and checking outcomes and that kind of thing.
+
+00:18:19.920 --> 00:18:22.959
+So I would use those. I'm not putting too much work
+
+00:18:22.960 --> 00:18:26.679
+into being ultra-reliable right now, but it kind of worked.
+
+00:18:26.680 --> 00:18:29.759
+We saw, I guess, at least Embeddable Common Lisp
+
+00:18:29.760 --> 00:18:35.599
+believed it used emacsclient externally, asynchronously,
+
+00:18:35.600 --> 00:18:38.359
+to send these to Emacs within Emacs.
+
+00:18:38.360 --> 00:18:41.599
+I put a whole bunch of sleeps into its thing
+
+00:18:41.600 --> 00:18:44.999
+to make it look slow and human-like, kind of happened
+
+00:18:45.000 --> 00:18:52.719
+because Emacs' model is that it's kind of single-threaded.
+
+00:18:52.720 --> 00:18:59.639
+Can I just... I bet if we run this again
+
+00:18:59.640 --> 00:19:02.119
+It'll at least look like it's succeeding
+
+00:19:02.120 --> 00:19:05.039
+because I fixed the base64 encoding
+
+00:19:05.040 --> 00:19:11.399
+and so forth in the background. I wonder if it will.
+
+NOTE Wrapping up
+
+00:19:11.400 --> 00:19:15.559
+In the meantime, let's wrap up this talk to some extent.
+
+00:19:15.560 --> 00:19:18.799
+Then I'm just kind of saying what I'm expecting to happen.
+
+00:19:18.800 --> 00:19:20.479
+I took out next action.
+
+00:19:20.480 --> 00:19:25.279
+Originally, I was keeping the list inside of the agent.
+
+00:19:25.280 --> 00:19:27.879
+Then I decided to keep the list inside Emacs
+
+00:19:27.880 --> 00:19:31.679
+because I have kind of first class Emacs is my IDE,
+
+00:19:31.680 --> 00:19:37.607
+so I have better access to what's going on in my IDE.
+
+NOTE Intelligence
+
+00:19:37.608 --> 00:19:39.559
+Then I wanted to talk about intelligence a little bit
+
+00:19:39.560 --> 00:19:41.199
+in whatever my remaining time is.
+
+00:19:41.200 --> 00:19:43.039
+I just have these great bullet points
+
+00:19:43.040 --> 00:19:45.559
+of Nosredna yduJ and Eric Sandewall.
+
+00:19:45.560 --> 00:19:50.039
+So Nosredna yduJ, when she was on the show quite a long time ago,
+
+00:19:50.040 --> 00:19:55.559
+she... I keep describing things as expert systems
+
+00:19:55.560 --> 00:19:57.039
+and she wanted to know what I meant
+
+00:19:57.040 --> 00:19:58.359
+when I said expert systems,
+
+00:19:58.360 --> 00:20:00.199
+and I gave her a Lisp software example
+
+00:20:00.200 --> 00:20:02.618
+and she said she personally wrote
+
+00:20:02.619 --> 00:20:06.279
+that software in the 80s that I was referring to
+
+00:20:06.280 --> 00:20:08.239
+and she wanted to know how it was an expert system.
+
+00:20:08.240 --> 00:20:10.039
+What I mean when I say expert system
+
+00:20:10.040 --> 00:20:19.839
+is a system that works kind of like I do and eev's eepitch does.
+
+00:20:19.840 --> 00:20:21.999
+It's where we can really reason
+
+00:20:22.000 --> 00:20:24.199
+in a very human-relatable way
+
+00:20:24.200 --> 00:20:26.479
+about what the inputs to the program is.
+
+00:20:26.480 --> 00:20:31.399
+And also a program should be exposed to other programs
+
+00:20:31.400 --> 00:20:36.559
+in terms of like a well-structured transfer of knowledge as inputs,
+
+00:20:36.560 --> 00:20:38.010
+and it should have a well-structured
+
+00:20:38.011 --> 00:20:41.939
+transfer of knowledge kind of outputs.
+
+00:20:41.940 --> 00:20:47.159
+I don't know why this b64-encode message wasn't working.
+
+00:20:47.160 --> 00:20:49.999
+Then we kind of faked it into working.
+
+00:20:50.000 --> 00:20:52.399
+It's going to be embarrassing for me
+
+00:20:52.400 --> 00:20:58.739
+if anybody watches this. But yeah, so yduJ's thing...
+
+00:20:58.740 --> 00:20:59.959
+And then I was going to also build
+
+00:20:59.960 --> 00:21:02.679
+that into Eric Sandewall's one.
+
+00:21:02.680 --> 00:21:05.639
+So this is my vision of expert systems
+
+00:21:05.640 --> 00:21:07.779
+as kind of maybe this is an important
+
+00:21:07.780 --> 00:21:11.679
+general style loosely associated with Lisp.
+
+00:21:11.680 --> 00:21:14.399
+Same as the Lisp editor Emacs.
+
+00:21:14.400 --> 00:21:17.665
+So Eric Sandewall's description of intelligence
+
+00:21:17.666 --> 00:21:21.159
+was that his grandchildren were intelligent.
+
+00:21:21.160 --> 00:21:26.439
+So if we had software agents that were intelligent,
+
+00:21:26.440 --> 00:21:32.439
+this would be true if and maybe only if they were similar
+
+00:21:32.440 --> 00:21:33.719
+to his grandchildren
+
+00:21:33.720 --> 00:21:36.319
+who were a good reference for intelligence.
+
+00:21:36.320 --> 00:21:39.199
+And grandchildren live for a really long time.
+
+00:21:39.200 --> 00:21:42.879
+They kind of learn gradually.
+
+00:21:42.880 --> 00:21:46.879
+They don't run on GPUs for a few minutes
+
+00:21:46.880 --> 00:21:51.879
+and then get thrown out forever, something like that.
+
+00:21:51.880 --> 00:21:54.959
+And so this is the kind of vision of, I guess,
+
+00:21:54.960 --> 00:21:57.919
+the Leonardo system software individual stuff.
+
+00:21:57.920 --> 00:22:03.946
+You can see we kind of faked it into...
+
+00:22:03.947 --> 00:22:06.320
+at least the show get message one decoded bits were working.
+
+00:22:06.321 --> 00:22:07.300
+I'm not sure what was happening
+
+00:22:07.301 --> 00:22:12.674
+with the Elisp ones that worked interactively,
+
+00:22:12.675 --> 00:22:18.607
+but then they didn't work in my loopy thing.
+
+00:22:18.608 --> 00:22:21.307
+Oh yeah, and then so I mentioned
+
+00:22:21.308 --> 00:22:24.640
+thank you to Sacha at the start of this talk.
+
+00:22:24.641 --> 00:22:26.974
+And so Eric Sandewall's emphasis
+
+00:22:26.975 --> 00:22:31.340
+that you'd really like intelligent software agents,
+
+00:22:31.341 --> 00:22:34.174
+Leonardo system agents, to be like your grandchildren.
+
+00:22:34.175 --> 00:22:40.659
+And I was talking to somebody, maybe to Ramin Honary
+
+00:22:40.660 --> 00:22:44.959
+who's doing the schemacs talk this year
+
+00:22:44.960 --> 00:22:46.874
+about Sacha's writing.
+
+00:22:46.875 --> 00:22:48.840
+A lot of Sacha's writing is about
+
+00:22:48.841 --> 00:22:51.774
+her experiences of life and technology,
+
+00:22:51.775 --> 00:22:54.374
+and especially raising A*
+
+00:22:54.375 --> 00:22:59.740
+and her observations of her progeny A*'s
+
+00:22:59.741 --> 00:23:05.319
+experiences of life and technology,
+
+00:23:05.320 --> 00:23:07.874
+I would say as well as being
+
+00:23:07.875 --> 00:23:18.039
+the Emacs News and Emacs conf doer that she is.
+
+00:23:18.040 --> 00:23:22.740
+Yeah, and so I think a lot of what Sacha is seen doing
+
+00:23:22.741 --> 00:23:25.840
+and concerned with are specifically what Eric Sandewall
+
+00:23:25.841 --> 00:23:31.207
+identifies as the study of intelligence as such,
+
+00:23:31.208 --> 00:23:36.479
+as should apply to computing as well. That was my thought
+
+00:23:36.480 --> 00:23:42.979
+on Sacha, Eric Sandewall, intelligence, and yduJ.
+
+00:23:42.980 --> 00:23:44.240
+I have this note from pizzapal...
+
+00:23:44.241 --> 00:23:46.274
+I didn't realize that Microsoft had announced
+
+00:23:46.275 --> 00:23:49.679
+that 2025 was going to be the year of the software agent.
+
+00:23:49.680 --> 00:23:51.199
+I only found this out in hindsight
+
+00:23:51.200 --> 00:23:54.199
+when I saw people crowing on the Mastodon
+
+00:23:54.200 --> 00:23:58.079
+about how Microsoft had basically declared
+
+00:23:58.080 --> 00:24:00.779
+that their Year of the Agent marketing campaign
+
+00:24:00.780 --> 00:24:04.459
+was a failure
+
+00:24:04.460 --> 00:24:09.279
+where basically people didn't like the same old web services
+
+00:24:09.280 --> 00:24:11.359
+but now while you're accessing,
+
+00:24:11.360 --> 00:24:15.239
+while you're formally kind of accessing a web service,
+
+00:24:15.240 --> 00:24:16.959
+the kind of web service that used to be called
+
+00:24:16.960 --> 00:24:19.279
+serverless web services, this kind of thing,
+
+00:24:19.280 --> 00:24:23.879
+but you're just being gibbered at by Microsoft Copilot
+
+00:24:23.880 --> 00:24:27.119
+while you're trying to use regular services.
+
+00:24:27.120 --> 00:24:29.279
+And people turned out not to like this.
+
+00:24:29.280 --> 00:24:32.399
+I think that, as we can see in this agent,
+
+00:24:32.400 --> 00:24:36.374
+the agent really needs to be running on its own clock
+
+00:24:36.375 --> 00:24:37.907
+and independently of you.
+
+00:24:37.908 --> 00:24:42.279
+Like if you imagine your body is getting
+
+00:24:42.280 --> 00:24:46.074
+novel, slightly speculative instructions from your brain
+
+00:24:46.075 --> 00:24:50.680
+constantly throughout your entire waking day, quite slowly,
+
+00:24:50.681 --> 00:24:54.974
+this is what an agent should be like.
+
+00:24:54.975 --> 00:24:59.540
+And it should be... Sandewall wrote about this.
+
+00:24:59.541 --> 00:25:01.540
+Basically, computer programs
+
+00:25:01.541 --> 00:25:04.840
+aren't going to want to use human natural language with each other.
+
+00:25:04.841 --> 00:25:06.674
+There's nothing desirable about that,
+
+00:25:06.675 --> 00:25:10.674
+so you wouldn't have two hypothetical Microsoft agents,
+
+00:25:10.675 --> 00:25:13.399
+which are just regular web services with
+
+00:25:13.400 --> 00:25:16.340
+a GPT model gibbering at you
+
+00:25:16.341 --> 00:25:19.839
+while you're trying to use the web service.
+
+00:25:19.840 --> 00:25:22.539
+I think we can see...
+
+00:25:22.540 --> 00:25:26.740
+Microsoft did the wrong thing with the word agent,
+
+00:25:26.741 --> 00:25:30.707
+allowing that agent is an overloaded term like static.
+
+00:25:30.708 --> 00:25:34.256
+I'm going to stop this. I'm not going to try and fix this.
+
+00:25:34.257 --> 00:25:36.313
+Sorry, everybody. Thank you. Talk to you on the Mastodon.
+
+00:25:36.314 --> 00:25:37.919
+Hopefully, see you on the show.
+
+00:25:37.920 --> 00:25:40.399
+See you at your conference talks.
+
+00:25:40.400 --> 00:25:45.599
+My blog has writing and examples of this with multi-agents,
+
+00:25:45.600 --> 00:25:50.819
+more C and C++ stuff, Lisp things.
+
+00:25:50.820 --> 00:25:53.439
+You're welcome to come on my show to be interviewed,
+
+00:25:53.440 --> 00:25:56.640
+however formally we do that. See everybody next time.
diff --git a/2025/captions/emacsconf-2025-gardening--gardening-in-emacs-a-windows-users-tale-of-tending-tweaking-and-triumph--marco-bresciani--main--chapters.vtt b/2025/captions/emacsconf-2025-gardening--gardening-in-emacs-a-windows-users-tale-of-tending-tweaking-and-triumph--marco-bresciani--main--chapters.vtt
new file mode 100644
index 00000000..0b803303
--- /dev/null
+++ b/2025/captions/emacsconf-2025-gardening--gardening-in-emacs-a-windows-users-tale-of-tending-tweaking-and-triumph--marco-bresciani--main--chapters.vtt
@@ -0,0 +1,32 @@
+WEBVTT
+
+
+00:00:05.980 --> 00:00:39.039
+Introduction
+
+00:00:39.040 --> 00:02:11.519
+What is a digital garden?
+
+00:02:11.520 --> 00:03:39.199
+Why a digital garden?
+
+00:03:39.200 --> 00:04:57.439
+How to digital garden?
+
+00:04:57.440 --> 00:08:18.819
+How to make Emacs portable, on Windows
+
+00:08:18.820 --> 00:10:36.119
+My Emacs customization
+
+00:10:36.120 --> 00:14:50.659
+PlantUML and Japanese
+
+00:14:50.660 --> 00:16:04.519
+My Org Mode publishing configuration
+
+00:16:04.520 --> 00:17:03.279
+The final result
+
+00:17:03.280 --> 00:17:36.880
+Thank you for listening
diff --git a/2025/captions/emacsconf-2025-gardening--gardening-in-emacs-a-windows-users-tale-of-tending-tweaking-and-triumph--marco-bresciani--main.vtt b/2025/captions/emacsconf-2025-gardening--gardening-in-emacs-a-windows-users-tale-of-tending-tweaking-and-triumph--marco-bresciani--main.vtt
new file mode 100644
index 00000000..b853b855
--- /dev/null
+++ b/2025/captions/emacsconf-2025-gardening--gardening-in-emacs-a-windows-users-tale-of-tending-tweaking-and-triumph--marco-bresciani--main.vtt
@@ -0,0 +1,1110 @@
+WEBVTT captioned by rodion
+
+NOTE Introduction
+
+00:00:05.980 --> 00:00:08.959
+Hello, everyone. My name is Marco
+
+00:00:08.960 --> 00:00:13.359
+and today I'll talk about gardening with Emacs.
+
+00:00:13.360 --> 00:00:17.199
+Gardening? Yes, but digital gardening, obviously.
+
+00:00:17.200 --> 00:00:20.359
+But first, one thing: I'm sorry, yes,
+
+00:00:20.360 --> 00:00:22.519
+I'm a Microsoft Windows user.
+
+00:00:22.520 --> 00:00:24.679
+I know, I know. I said I'm sorry.
+
+00:00:24.680 --> 00:00:26.159
+Please stick with me.
+
+00:00:26.160 --> 00:00:27.319
+Do not skip this talk!
+
+00:00:27.320 --> 00:00:31.199
+Promise, I'll show you only free software!
+
+00:00:31.200 --> 00:00:33.199
+And speaking about free software,
+
+00:00:33.200 --> 00:00:35.919
+yes, this presentation is not made with Emacs,
+
+00:00:35.920 --> 00:00:39.039
+but I made it with LibreOffice.
+
+NOTE What is a digital garden?
+
+00:00:39.040 --> 00:00:41.999
+So what is a digital garden?
+
+00:00:42.000 --> 00:00:43.319
+A digital garden is
+
+00:00:43.320 --> 00:00:45.479
+your personal corner of the internet
+
+00:00:45.480 --> 00:00:47.839
+to cultivate ideas.
+
+00:00:47.840 --> 00:00:50.079
+Think of it like a real garden
+
+00:00:50.080 --> 00:00:54.394
+where you plant seeds (your new thoughts),
+
+00:00:54.395 --> 00:00:57.379
+you water them (you add the details),
+
+00:00:57.380 --> 00:00:59.959
+and watch them grow.
+
+00:00:59.960 --> 00:01:03.199
+Unlike a fixed-date blog,
+
+00:01:03.200 --> 00:01:06.319
+which shows only polished results,
+
+00:01:06.320 --> 00:01:09.279
+a garden includes works-in-progress--
+
+00:01:09.280 --> 00:01:12.479
+like seedlings in a greenhouse.
+
+00:01:12.480 --> 00:01:14.759
+It's a network of notes
+
+00:01:14.760 --> 00:01:17.319
+connected by links and tags,
+
+00:01:17.320 --> 00:01:21.279
+helping you see patterns in your thinking.
+
+00:01:21.280 --> 00:01:24.159
+Here, the ideas are not static;
+
+00:01:24.160 --> 00:01:26.399
+they evolve as you learn,
+
+00:01:26.400 --> 00:01:29.359
+creating a living archive of your mind,
+
+00:01:29.360 --> 00:01:37.739
+just like the plants in a garden grow.
+
+00:01:37.740 --> 00:01:41.519
+Also here, instead of the blog platform,
+
+00:01:41.520 --> 00:01:46.879
+you decide the tools, the look, and your pace.
+
+00:01:46.880 --> 00:01:50.599
+I'll show you how I run my garden
+
+00:01:50.600 --> 00:01:53.039
+with plain Org Mode files
+
+00:01:53.040 --> 00:01:55.639
+and our favorite Emacs.
+
+00:01:55.640 --> 00:01:57.879
+In short: a digital garden
+
+00:01:57.880 --> 00:02:01.039
+is a flexible, pressure-free space
+
+00:02:01.040 --> 00:02:04.212
+to explore, learn in public
+
+00:02:04.213 --> 00:02:07.159
+and connect the knowledge--
+
+00:02:07.160 --> 00:02:11.519
+your own digital ecosystem.
+
+NOTE Why a digital garden?
+
+00:02:11.520 --> 00:02:13.559
+Why a digital garden?
+
+00:02:13.560 --> 00:02:17.359
+Well, a digital garden keeps knowledge alive:
+
+00:02:17.360 --> 00:02:21.039
+instead of freezing content after "publish,"
+
+00:02:21.040 --> 00:02:22.399
+you revisit and refine it,
+
+00:02:22.400 --> 00:02:26.079
+so ideas stay accurate and useful.
+
+00:02:26.080 --> 00:02:29.239
+By sharing half-formed thoughts early,
+
+00:02:29.240 --> 00:02:31.559
+you lower the barrier to writing
+
+00:02:31.560 --> 00:02:34.159
+and let concepts evolve gradually--
+
+00:02:34.160 --> 00:02:37.839
+no need to wait for one "perfect" essay.
+
+00:02:37.840 --> 00:02:41.119
+Links and tags weave ideas together,
+
+00:02:41.120 --> 00:02:43.479
+revealing unexpected patterns
+
+00:02:43.480 --> 00:02:46.439
+that isolated posts would hide.
+
+00:02:46.440 --> 00:02:49.919
+This approach sheds perfectionism,
+
+00:02:49.920 --> 00:02:52.559
+encouraging small, regular updates
+
+00:02:52.560 --> 00:02:55.879
+that build momentum and invite collaboration.
+
+00:02:55.880 --> 00:03:00.079
+Well, actually, even not regular updates are fine.
+
+00:03:00.080 --> 00:03:04.879
+Early readers can offer feedback, share resources,
+
+00:03:04.880 --> 00:03:07.239
+or identify blind spots,
+
+00:03:07.240 --> 00:03:12.039
+accelerating your and their improvement.
+
+00:03:12.040 --> 00:03:14.719
+Over time, your garden can become
+
+00:03:14.720 --> 00:03:18.439
+a searchable showcase of your thinking,
+
+00:03:18.440 --> 00:03:21.239
+a living résumé for collaborators, peers,
+
+00:03:21.240 --> 00:03:25.919
+or anyone curious about how you learn.
+
+00:03:25.920 --> 00:03:27.799
+And what about me?
+
+00:03:27.800 --> 00:03:29.119
+Why a digital garden?
+
+00:03:29.120 --> 00:03:33.139
+Well, I actually have started a digital garden
+
+00:03:33.140 --> 00:03:39.199
+to learn Emacs and Org Mode.
+
+NOTE How to digital garden?
+
+00:03:39.200 --> 00:03:41.439
+How to digital garden?
+
+00:03:41.440 --> 00:03:42.999
+Well, start simple.
+
+00:03:43.000 --> 00:03:45.079
+Pick one place for your notes
+
+00:03:45.080 --> 00:03:46.119
+and put them online.
+
+00:03:46.120 --> 00:03:50.419
+Even the worst Github ever out there is fine.
+
+00:03:50.420 --> 00:03:53.519
+Then, well, maybe you can move out of GitHub,
+
+00:03:53.520 --> 00:03:55.019
+but that's another story.
+
+00:03:55.020 --> 00:03:57.919
+Capture your ideas quickly.
+
+00:03:57.920 --> 00:04:00.239
+Publish them, even rough,
+
+00:04:00.240 --> 00:04:02.939
+and maybe, if you want, tag them as seeds
+
+00:04:02.940 --> 00:04:06.439
+to let the other people know they are rough.
+
+00:04:06.440 --> 00:04:09.439
+Learning in public is useful
+
+00:04:09.440 --> 00:04:11.579
+because link-related pages
+
+00:04:11.580 --> 00:04:16.859
+so that readers can work through your thinking,
+
+00:04:16.860 --> 00:04:19.919
+helping them see your connections.
+
+00:04:19.920 --> 00:04:22.039
+Once a week or whenever you want,
+
+00:04:22.040 --> 00:04:24.959
+prune outdated pieces if you want
+
+00:04:24.960 --> 00:04:26.519
+or keep them there
+
+00:04:26.520 --> 00:04:30.459
+and add fresh insights if you have any.
+
+00:04:30.460 --> 00:04:33.399
+Share your updates openly.
+
+00:04:33.400 --> 00:04:38.079
+Invite comments because steady small steps
+
+00:04:38.080 --> 00:04:41.559
+will keep the garden thriving.
+
+00:04:41.560 --> 00:04:43.239
+And what about me?
+
+00:04:43.240 --> 00:04:46.359
+How I do digital garden work with Emacs?
+
+00:04:46.360 --> 00:04:51.139
+With Org Mode and its publishing to HTML file,
+
+00:04:51.140 --> 00:04:57.439
+and we will see it in a moment.
+
+NOTE How to make Emacs portable, on Windows
+
+00:04:57.440 --> 00:05:01.319
+How to make Emacs portable on Windows
+
+00:05:01.320 --> 00:05:03.699
+is the first topic.
+
+00:05:03.700 --> 00:05:05.999
+Well, being in Windows,
+
+00:05:06.000 --> 00:05:08.739
+I have the advantage and the possibility
+
+00:05:08.740 --> 00:05:10.879
+to bring and use my data
+
+00:05:10.880 --> 00:05:14.299
+and software basically everywhere:
+
+00:05:14.300 --> 00:05:18.159
+home, office, my sister-in-law's PC
+
+00:05:18.160 --> 00:05:19.439
+when she needs technical help,
+
+00:05:19.440 --> 00:05:21.439
+friends and the like.
+
+00:05:21.440 --> 00:05:23.239
+So for these reasons,
+
+00:05:23.240 --> 00:05:25.319
+it's been many, many years
+
+00:05:25.320 --> 00:05:28.519
+I'm using exclusively portable applications
+
+00:05:28.520 --> 00:05:31.539
+that do not need an installation
+
+00:05:31.540 --> 00:05:33.239
+and bring their own data
+
+00:05:33.240 --> 00:05:37.319
+and configuration bundled together.
+
+00:05:37.320 --> 00:05:38.799
+And now also Emacs is portable,
+
+00:05:38.800 --> 00:05:43.679
+inside my tiny, really tiny, USB key.
+
+00:05:43.680 --> 00:05:44.839
+How?
+
+00:05:44.840 --> 00:05:46.919
+I mean: not being sure
+
+00:05:46.920 --> 00:05:48.799
+if my USB key drive letter
+
+00:05:48.800 --> 00:05:52.119
+will be D:, E:, K:,
+
+00:05:52.120 --> 00:05:53.639
+or whatever other drive letter
+
+00:05:53.640 --> 00:05:54.759
+will be assigned to it
+
+00:05:54.760 --> 00:05:57.719
+by the system I'm plugging it into,
+
+00:05:57.720 --> 00:06:00.319
+how can I specify, to Emacs,
+
+00:06:00.320 --> 00:06:04.439
+that its home folder is on my USB?
+
+00:06:04.440 --> 00:06:07.359
+Well, I could maybe have used relative paths,
+
+00:06:07.360 --> 00:06:10.879
+but then, where's the fun of hacking things?
+
+00:06:10.880 --> 00:06:12.699
+The trick here is
+
+00:06:12.700 --> 00:06:17.679
+the not-so-well-known ~dp0 system variable
+
+00:06:17.680 --> 00:06:20.699
+that contains the execution directory
+
+00:06:20.700 --> 00:06:25.519
+full path of the executable file.
+
+00:06:25.520 --> 00:06:29.039
+And yes, it ends with a backslash,
+
+00:06:29.040 --> 00:06:33.339
+so composing it with other literal paths is ugly as well.
+
+00:06:33.340 --> 00:06:37.539
+The ~dp0 variable is only available
+
+00:06:37.540 --> 00:06:40.759
+inside a batch file during its execution,
+
+00:06:40.760 --> 00:06:46.719
+and expands to the drive (d) and the path (p),
+
+00:06:46.720 --> 00:06:50.700
+in which that batch file (0th)
+
+00:06:50.701 --> 00:06:55.499
+command line parameter is located
+
+00:06:55.500 --> 00:06:58.439
+(that obviously cannot change
+
+00:06:58.440 --> 00:07:02.399
+because it's executing).
+
+00:07:02.400 --> 00:07:04.679
+The data are obtained
+
+00:07:04.680 --> 00:07:08.733
+from the %0 system variable
+
+00:07:08.734 --> 00:07:10.599
+that contains the batch file name.
+
+00:07:10.600 --> 00:07:12.439
+I actually have never tried,
+
+00:07:12.440 --> 00:07:16.279
+but it should even allow to let the batch run
+
+00:07:16.280 --> 00:07:19.819
+from a UNC network location
+
+00:07:19.820 --> 00:07:22.639
+with no mapped drive letter at all!
+
+00:07:22.640 --> 00:07:24.279
+And that's the batch file
+
+00:07:24.280 --> 00:07:28.279
+I'm using to run Emacs with an automatically selected
+
+00:07:28.280 --> 00:07:31.139
+and fixed Emacs folder,
+
+00:07:31.140 --> 00:07:33.119
+emacshome folder,
+
+00:07:33.120 --> 00:07:35.899
+sibling of the unzipped Emacs one,
+
+00:07:35.900 --> 00:07:37.679
+regardless the computer I'm in
+
+00:07:37.680 --> 00:07:40.219
+and the assigned drive letter.
+
+00:07:40.220 --> 00:07:42.159
+If you need a portable Emacs,
+
+00:07:42.160 --> 00:07:45.519
+this is probably the simplest way to go!
+
+00:07:45.520 --> 00:07:48.399
+Just put the runemacs.bat file
+
+00:07:48.400 --> 00:07:50.079
+in your unzipped Emacs
+
+00:07:50.080 --> 00:07:54.379
+(well, 30.2 actually now) bin folder,
+
+00:07:54.380 --> 00:07:56.519
+and your Emacs and its configuration
+
+00:07:56.520 --> 00:07:58.619
+will always be there with you.
+
+00:07:58.620 --> 00:08:00.199
+With this, I'm basically
+
+00:08:00.200 --> 00:08:01.559
+creating the possibility
+
+00:08:01.560 --> 00:08:05.239
+to bring my own digital garden with me,
+
+00:08:05.240 --> 00:08:09.466
+just like a little desk Zen garden,
+
+00:08:09.467 --> 00:08:11.479
+and together with it, also,
+
+00:08:11.480 --> 00:08:13.859
+all the tools that I need to work on it,
+
+00:08:13.860 --> 00:08:18.819
+always with me, in my USB key.
+
+NOTE My Emacs customization
+
+00:08:18.820 --> 00:08:20.679
+Speaking about configuration,
+
+00:08:20.680 --> 00:08:22.199
+here comes the second topic:
+
+00:08:22.200 --> 00:08:25.479
+my Emacs customization.
+
+00:08:25.480 --> 00:08:28.079
+Having a portable Emacs allows to
+
+00:08:28.080 --> 00:08:31.319
+always have the configuration with me.
+
+00:08:31.320 --> 00:08:33.559
+Yes, okay, but which configuration?
+
+00:08:33.560 --> 00:08:38.519
+Well, obviously, I'm speaking of the init.el file
+
+00:08:38.520 --> 00:08:41.999
+that lives inside of the emacs.d folder
+
+00:08:42.000 --> 00:08:45.239
+in my emacshome portable configuration folder
+
+00:08:45.240 --> 00:08:46.879
+that we just saw.
+
+00:08:46.880 --> 00:08:48.319
+I'm not an Emacs expert,
+
+00:08:48.320 --> 00:08:51.519
+but I want to highlight a point here
+
+00:08:51.520 --> 00:08:55.559
+that has to be clear to every one of us:
+
+00:08:55.560 --> 00:08:59.159
+the set of basic considerations I had
+
+00:08:59.160 --> 00:09:02.019
+for text width, tabs versus spaces,
+
+00:09:02.020 --> 00:09:05.139
+trailing spaces, and so on.
+
+00:09:05.140 --> 00:09:07.299
+As you can see here,
+
+00:09:07.300 --> 00:09:08.959
+I'm pretty opinionated,
+
+00:09:08.960 --> 00:09:10.759
+but this is the important part:
+
+00:09:10.760 --> 00:09:15.339
+we are lucky enough to be able to use Emacs,
+
+00:09:15.340 --> 00:09:16.919
+that is presumably
+
+00:09:16.920 --> 00:09:20.359
+the most highly configurable tool ever,
+
+00:09:20.360 --> 00:09:21.679
+so let's use it!
+
+00:09:21.680 --> 00:09:24.279
+Remember that it's your Emacs,
+
+00:09:24.280 --> 00:09:27.859
+and you can and must configure it
+
+00:09:27.860 --> 00:09:28.879
+for your needs,
+
+00:09:28.880 --> 00:09:33.139
+even if it might seem ridiculous to others.
+
+00:09:33.140 --> 00:09:35.279
+Here, the configuration you see
+
+00:09:35.280 --> 00:09:37.239
+is not the important part.
+
+00:09:37.240 --> 00:09:39.759
+The important part is how you feel
+
+00:09:39.760 --> 00:09:42.419
+with your configuration.
+
+00:09:42.420 --> 00:09:45.359
+For example: I have a fill-column-indicator
+
+00:09:45.360 --> 00:09:47.319
+at 72 characters,
+
+00:09:47.320 --> 00:09:49.479
+I prefer spaces instead of tabs,
+
+00:09:49.480 --> 00:09:53.019
+no trailing spaces, truncate lines, and so on.
+
+00:09:53.020 --> 00:09:55.479
+It might seem weird to some of you
+
+00:09:55.480 --> 00:09:57.959
+and to most of my colleagues
+
+00:09:57.960 --> 00:09:58.959
+(and friends as well,
+
+00:09:58.960 --> 00:10:00.619
+but that's another story!)
+
+00:10:00.620 --> 00:10:02.239
+and it might even be.
+
+00:10:02.240 --> 00:10:05.199
+But I'm comfortable with my configuration,
+
+00:10:05.200 --> 00:10:07.599
+and you should be with yours too.
+
+00:10:07.600 --> 00:10:11.479
+That is: as an owner and worker
+
+00:10:11.480 --> 00:10:13.479
+of my own digital garden,
+
+00:10:13.480 --> 00:10:15.719
+it's obviously easier for me
+
+00:10:15.720 --> 00:10:18.079
+to choose my own tools
+
+00:10:18.080 --> 00:10:21.039
+and adapt those to my needs,
+
+00:10:21.040 --> 00:10:23.159
+instead of the opposite!
+
+00:10:23.160 --> 00:10:25.719
+If I want to put the roses
+
+00:10:25.720 --> 00:10:27.759
+in a circle instead of a row
+
+00:10:27.760 --> 00:10:30.399
+that is maybe the best practice, who cares?
+
+00:10:30.400 --> 00:10:36.119
+It's my garden, and I use it as I want.
+
+NOTE PlantUML and Japanese
+
+00:10:36.120 --> 00:10:38.439
+Continuing on the configuration party,
+
+00:10:38.440 --> 00:10:44.859
+the third topic is PlantUML and Japanese.
+
+00:10:44.860 --> 00:10:47.199
+Why those two are listed together?
+
+00:10:47.200 --> 00:10:48.679
+Well, they are weird enough
+
+00:10:48.680 --> 00:10:50.879
+to be both part of my configuration.
+
+00:10:50.880 --> 00:10:52.839
+First, I think PlantUML
+
+00:10:52.840 --> 00:10:55.019
+is a very nice and powerful tool,
+
+00:10:55.020 --> 00:10:57.359
+so integrating it in Emacs
+
+00:10:57.360 --> 00:10:58.899
+is pretty useful,
+
+00:10:58.900 --> 00:11:01.079
+even if I'm currently using it
+
+00:11:01.080 --> 00:11:04.239
+only to generate SVG images
+
+00:11:04.240 --> 00:11:08.959
+when publishing my digital garden to HTML.
+
+00:11:08.960 --> 00:11:10.599
+There are some pain points
+
+00:11:10.600 --> 00:11:11.759
+that I still have to solve,
+
+00:11:11.760 --> 00:11:14.739
+and I know that it's also possible to use it
+
+00:11:14.740 --> 00:11:16.279
+for (pre)viewing diagrams
+
+00:11:16.280 --> 00:11:19.159
+directly in Emacs, without publishing,
+
+00:11:19.160 --> 00:11:22.839
+but maybe I don't need this feature at the moment.
+
+00:11:22.840 --> 00:11:27.119
+And I have to thank our favorite Sacha Chua here,
+
+00:11:27.120 --> 00:11:29.279
+because she taught me (through Mastodon)
+
+00:11:29.280 --> 00:11:32.359
+how to automatically answer y,
+
+00:11:32.360 --> 00:11:33.919
+when publishing in HTML,
+
+00:11:33.920 --> 00:11:36.919
+every time that PlantUML has to (re)generate an SVG.
+
+00:11:36.920 --> 00:11:39.199
+So, thank you Sacha.
+
+00:11:39.200 --> 00:11:41.839
+Moving to Japanese, let me go back to
+
+00:11:41.840 --> 00:11:43.559
+the previous slide for a moment
+
+00:11:43.560 --> 00:11:46.319
+to show you a bit more in detail
+
+00:11:46.320 --> 00:11:49.799
+the coding system I've configured.
+
+00:11:49.800 --> 00:11:54.239
+If this PC is helping me in moving
+
+00:11:54.240 --> 00:11:56.359
+back to the previous slide.
+
+00:11:56.360 --> 00:12:02.519
+Okay, so let me... No, it's not working.
+
+00:12:02.520 --> 00:12:05.819
+It's not... Okay.
+
+00:12:05.820 --> 00:12:09.399
+So, speaking about Japanese,
+
+00:12:09.400 --> 00:12:12.359
+I have studied Japanese.
+
+00:12:12.360 --> 00:12:13.799
+My wife is Japanese,
+
+00:12:13.800 --> 00:12:15.599
+but that's a detail.
+
+00:12:15.600 --> 00:12:18.039
+So I frequently write in Japanese,
+
+00:12:18.040 --> 00:12:19.639
+and I wanted to write in Japanese
+
+00:12:19.640 --> 00:12:21.219
+also inside Emacs.
+
+00:12:21.220 --> 00:12:23.239
+I learned, as you can see,
+
+00:12:23.240 --> 00:12:25.559
+that UTF-8 DOS
+
+00:12:25.560 --> 00:12:28.479
+is a more than enough coding system
+
+00:12:28.480 --> 00:12:31.139
+to allow me writing in the same file,
+
+00:12:31.140 --> 00:12:35.639
+both Italian with all our accented letters
+
+00:12:35.640 --> 00:12:40.359
+and Japanese through Windows IME system.
+
+00:12:40.360 --> 00:12:44.879
+This allows me to properly write, save, read files,
+
+00:12:44.880 --> 00:12:48.719
+but it was not enough for copying
+
+00:12:48.720 --> 00:12:51.179
+and pasting Japanese text.
+
+00:12:51.180 --> 00:12:55.119
+If I copied some Japanese text from the browser
+
+00:12:55.120 --> 00:12:56.759
+or even from another text editor,
+
+00:12:56.760 --> 00:12:57.879
+it didn't work.
+
+00:12:57.880 --> 00:13:00.679
+It only pasted the rubbish in Emacs
+
+00:13:00.680 --> 00:13:04.559
+until I found out that for whatever reason,
+
+00:13:04.560 --> 00:13:07.679
+I had to use, as you can see in bold,
+
+00:13:07.680 --> 00:13:13.279
+UTF-16LE DOS for the selection coding system.
+
+00:13:13.280 --> 00:13:14.879
+And this basically allows me
+
+00:13:14.880 --> 00:13:17.719
+to copy Japanese from another file,
+
+00:13:17.720 --> 00:13:19.599
+text editor, browser, whatever,
+
+00:13:19.600 --> 00:13:22.699
+and paste it in Emacs and vice versa.
+
+00:13:22.700 --> 00:13:24.399
+So the lesson here is,
+
+00:13:24.400 --> 00:13:26.279
+if you need European languages
+
+00:13:26.280 --> 00:13:29.159
+and Japanese inside your Emacs,
+
+00:13:29.160 --> 00:13:32.359
+well, this coding system works.
+
+00:13:32.360 --> 00:13:36.999
+Let me go back to PlantUML and Japanese.
+
+00:13:37.000 --> 00:13:40.519
+Another interesting thing about Japanese
+
+00:13:40.520 --> 00:13:44.279
+is this nice macro I found
+
+00:13:44.280 --> 00:13:46.979
+in the Emacs mailing list
+
+00:13:46.980 --> 00:13:49.719
+to add furigana to Japanese kanjis
+
+00:13:49.720 --> 00:13:53.639
+when exporting or publishing to HTML.
+
+00:13:53.640 --> 00:13:55.559
+It's actually even possible to do the same
+
+00:13:55.560 --> 00:13:57.679
+with LaTeX export/publish
+
+00:13:57.680 --> 00:14:00.359
+and I'll give you some references later.
+
+00:14:00.360 --> 00:14:03.239
+It's very useful because I can show,
+
+00:14:03.240 --> 00:14:06.859
+as you can see on the example at the bottom,
+
+00:14:06.860 --> 00:14:10.219
+I can show the easier-to-read pronunciation
+
+00:14:10.220 --> 00:14:14.079
+even for readers with really basic knowledge of Japanese.
+
+00:14:14.080 --> 00:14:17.319
+(And it's also useful to myself, actually,
+
+00:14:17.320 --> 00:14:20.259
+to remember how to pronounce those kanji!)
+
+00:14:20.260 --> 00:14:22.559
+For those of you that have no idea
+
+00:14:22.560 --> 00:14:27.039
+on how to read or write Japanese, well, sorry.
+
+00:14:27.040 --> 00:14:31.479
+As you can see, the garden evolved from the beginning
+
+00:14:31.480 --> 00:14:33.319
+on how to use Emacs and Org Mode,
+
+00:14:33.320 --> 00:14:35.199
+and it's evolving further,
+
+00:14:35.200 --> 00:14:37.399
+and here it's becoming open to
+
+00:14:37.400 --> 00:14:40.639
+different plants (or PlantUML…)
+
+00:14:40.640 --> 00:14:43.839
+and also be able to adapt
+
+00:14:43.840 --> 00:14:50.659
+to different foreign visitors' needs.
+
+NOTE My Org Mode publishing configuration
+
+00:14:50.660 --> 00:14:54.879
+Third topic: my Org Mode publishing configuration,
+
+00:14:54.880 --> 00:14:58.159
+or where the digital garden is born.
+
+00:14:58.160 --> 00:15:00.839
+The latest (but not least!) part of
+
+00:15:00.840 --> 00:15:03.359
+the creation and tending of my digital garden
+
+00:15:03.360 --> 00:15:07.119
+is the publishing file that is needed to export
+
+00:15:07.120 --> 00:15:11.279
+the whole Org Mode project into HTML.
+
+00:15:11.280 --> 00:15:14.759
+Here I do not have many fancy configurations,
+
+00:15:14.760 --> 00:15:19.519
+even though I'm copying the publishing.el file itself
+
+00:15:19.520 --> 00:15:21.459
+in the output folder,
+
+00:15:21.460 --> 00:15:24.859
+to make it available in the published version of the garden.
+
+00:15:24.860 --> 00:15:28.519
+Also I have added the mentioned configuration
+
+00:15:28.520 --> 00:15:32.979
+to manage SVG (or PNG) exports from PlantUML
+
+00:15:32.980 --> 00:15:34.279
+(thank you again, Sacha),
+
+00:15:34.280 --> 00:15:36.999
+and I'm also forcing HTML5
+
+00:15:37.000 --> 00:15:40.059
+without scripts as the result format.
+
+00:15:40.060 --> 00:15:41.239
+Together with this,
+
+00:15:41.240 --> 00:15:43.439
+I also have a fancy CSS addition
+
+00:15:43.440 --> 00:15:44.359
+to the default one
+
+00:15:44.360 --> 00:15:48.239
+that uses the System Font Stack concept
+
+00:15:48.240 --> 00:15:49.759
+to harmonize fonts
+
+00:15:49.760 --> 00:15:51.879
+with readers' local systems,
+
+00:15:51.880 --> 00:15:54.319
+without downloading or injecting
+
+00:15:54.320 --> 00:15:55.279
+external fonts.
+
+00:15:55.280 --> 00:15:57.799
+I've customized links and tags a bit,
+
+00:15:57.800 --> 00:15:59.839
+with the CSS, together with tables
+
+00:15:59.840 --> 00:16:01.159
+and some other pieces here and there,
+
+00:16:01.160 --> 00:16:04.519
+but nothing too much fancy.
+
+NOTE The final result
+
+00:16:04.520 --> 00:16:08.439
+So, this is one (not-so-)random page
+
+00:16:08.440 --> 00:16:10.039
+of my digital garden,
+
+00:16:10.040 --> 00:16:12.359
+or my knowledge 枯山水,
+
+00:16:12.360 --> 00:16:17.619
+my knowledge Zen garden, as I prefer to call it.
+
+00:16:17.620 --> 00:16:20.519
+This is, specifically, the page related
+
+00:16:20.520 --> 00:16:23.639
+to write about the Digital Garden concept itself,
+
+00:16:23.640 --> 00:16:26.079
+as a sort of meta-writing.
+
+00:16:26.080 --> 00:16:27.319
+You can see the different
+
+00:16:27.320 --> 00:16:28.879
+rendering of the links,
+
+00:16:28.880 --> 00:16:31.639
+depending if they are internal, in blue,
+
+00:16:31.640 --> 00:16:37.659
+or external to the garden in gray-ish.
+
+00:16:37.660 --> 00:16:39.439
+You can see the Japanese furigana
+
+00:16:39.440 --> 00:16:40.919
+on top of the kanjis,
+
+00:16:40.920 --> 00:16:44.359
+and you also can see the automatic table of contents,
+
+00:16:44.360 --> 00:16:47.599
+the custom aside component that highlights
+
+00:16:47.600 --> 00:16:50.819
+the latest modification date, and so on.
+
+00:16:50.820 --> 00:16:53.279
+Everything I've spoke about here
+
+00:16:53.280 --> 00:16:55.919
+is available in my digital garden
+
+00:16:55.920 --> 00:16:57.599
+in my knowledge kare-san-sui, again,
+
+00:16:57.600 --> 00:17:00.599
+as a sort of self-description
+
+00:17:00.600 --> 00:17:03.279
+of the digital garden itself.
+
+NOTE Thank you for listening
+
+00:17:03.280 --> 00:17:04.279
+Thank you, everyone,
+
+00:17:04.280 --> 00:17:06.079
+for being with me till the end.
+
+00:17:06.080 --> 00:17:08.719
+So as I said, if you want more details
+
+00:17:08.720 --> 00:17:10.039
+about these topics,
+
+00:17:10.040 --> 00:17:13.159
+take a look at my knowledge kare-san-sui.
+
+00:17:13.160 --> 00:17:16.359
+The link is here, and feel free to contact me
+
+00:17:16.360 --> 00:17:17.479
+through Delta Chat
+
+00:17:17.480 --> 00:17:20.319
+at this email address.
+
+00:17:20.320 --> 00:17:21.319
+Yes, I know.
+
+00:17:21.320 --> 00:17:23.719
+It's a Microsoft email address.
+
+00:17:23.720 --> 00:17:25.079
+It's an old one.
+
+00:17:25.080 --> 00:17:29.019
+I recycled it. I know. It's my fault.
+
+00:17:29.020 --> 00:17:36.880
+Thank you again, and happy Emacs everyone!
diff --git a/2025/captions/emacsconf-2025-gmail--orggmail-a-deep-integration-of-gmail-into-your-org-mode--bala-ramadurai--main--chapters.vtt b/2025/captions/emacsconf-2025-gmail--orggmail-a-deep-integration-of-gmail-into-your-org-mode--bala-ramadurai--main--chapters.vtt
new file mode 100644
index 00000000..23622244
--- /dev/null
+++ b/2025/captions/emacsconf-2025-gmail--orggmail-a-deep-integration-of-gmail-into-your-org-mode--bala-ramadurai--main--chapters.vtt
@@ -0,0 +1,77 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:00:19.839
+Before we begin
+
+00:00:19.840 --> 00:01:02.799
+The 4-year overnight success
+
+00:01:02.800 --> 00:01:15.599
+The real title
+
+00:01:15.600 --> 00:01:34.279
+Why not gnus/mu4e/notmuch?
+
+00:01:34.280 --> 00:02:17.919
+The honest answer
+
+00:02:17.920 --> 00:02:49.439
+The org-gmail philosophy
+
+00:02:49.440 --> 00:03:21.199
+Architecture (the boring but important slide)
+
+00:03:21.200 --> 00:04:37.479
+Demo 1: From gmail to org
+
+00:04:37.480 --> 00:05:43.039
+Settings
+
+00:05:43.040 --> 00:07:56.879
+Downloading
+
+00:07:56.880 --> 00:09:33.679
+Replying
+
+00:09:33.680 --> 00:10:57.159
+Label management
+
+00:10:57.160 --> 00:12:04.119
+Refiling
+
+00:12:04.120 --> 00:13:37.139
+Archiving
+
+00:13:37.140 --> 00:15:53.679
+Action commands
+
+00:15:53.680 --> 00:16:28.279
+Org Agenda
+
+00:16:28.280 --> 00:17:07.439
+Trash
+
+00:17:07.440 --> 00:17:40.559
+Real workflow: GTD
+
+00:17:40.560 --> 00:18:35.959
+Real Workflow: P.A.R.A.
+
+00:18:35.960 --> 00:20:07.679
+What this is NOT
+
+00:20:07.680 --> 00:20:54.759
+Technical decisions
+
+00:20:54.760 --> 00:21:41.439
+Roadmap
+
+00:21:41.440 --> 00:22:32.939
+Contributing
+
+00:22:32.940 --> 00:22:41.119
+The big picture
+
+00:22:41.120 --> 00:23:04.400
+Let's connect
diff --git a/2025/captions/emacsconf-2025-gmail--orggmail-a-deep-integration-of-gmail-into-your-org-mode--bala-ramadurai--main.vtt b/2025/captions/emacsconf-2025-gmail--orggmail-a-deep-integration-of-gmail-into-your-org-mode--bala-ramadurai--main.vtt
new file mode 100644
index 00000000..06ab2200
--- /dev/null
+++ b/2025/captions/emacsconf-2025-gmail--orggmail-a-deep-integration-of-gmail-into-your-org-mode--bala-ramadurai--main.vtt
@@ -0,0 +1,1764 @@
+WEBVTT captioned by bala
+
+NOTE Before we begin
+
+00:00:00.000 --> 00:00:01.759
+Hello everyone.
+
+00:00:01.760 --> 00:00:03.439
+My name is Bala Ramadurai.
+
+00:00:03.440 --> 00:00:07.839
+Today I'm going to be talking about org-gmail.
+
+00:00:07.840 --> 00:00:10.039
+That's something that I put together.
+
+00:00:10.040 --> 00:00:12.719
+This is what I call gmail meets org mode.
+
+00:00:12.720 --> 00:00:15.119
+And they get along too.
+
+00:00:15.120 --> 00:00:16.519
+Let's talk about email
+
+00:00:16.520 --> 00:00:19.839
+and how to manage email via org mode.
+
+NOTE The 4-year overnight success
+
+00:00:19.840 --> 00:00:23.919
+This project is a four year overnight success.
+
+00:00:23.920 --> 00:00:26.039
+It was in 2021.
+
+00:00:26.040 --> 00:00:27.279
+I said, Hey, wait a second.
+
+00:00:27.280 --> 00:00:30.519
+It'll be so cool if we can integrate Gmail with org.
+
+00:00:30.520 --> 00:00:32.959
+So I started trying out new things.
+
+00:00:32.960 --> 00:00:34.399
+And immediately I realized
+
+00:00:34.400 --> 00:00:36.799
+this is a much larger project than I thought.
+
+00:00:36.800 --> 00:00:40.599
+So it lived in someday maybe.org
+
+00:00:40.600 --> 00:00:42.599
+for about three years.
+
+00:00:42.600 --> 00:00:48.759
+Enter 2024 AI arrives and in 2025 I had a working
+
+00:00:48.760 --> 00:00:50.919
+prototype in 24 hours flat.
+
+00:00:50.920 --> 00:00:55.759
+So three years and 364 days, nothing much happened
+
+00:00:55.760 --> 00:00:58.159
+and one day it actually got it working.
+
+00:00:58.160 --> 00:01:00.919
+Sometimes procrastination is just waiting for the
+
+00:01:00.920 --> 00:01:02.799
+right tools.
+
+NOTE The real title
+
+00:01:02.800 --> 00:01:05.519
+The real title should have been org mail for
+
+00:01:05.520 --> 00:01:08.479
+people who like org mode more than email.
+
+00:01:08.480 --> 00:01:12.799
+The Gmail monster that has always been attacking us.
+
+00:01:12.800 --> 00:01:15.599
+Okay, but we still have to deal with email.
+
+NOTE Why not gnus/mu4e/notmuch?
+
+00:01:15.600 --> 00:01:18.599
+One of the most common questions that I've got so far.
+
+00:01:18.600 --> 00:01:24.639
+Why not gnus or mu4e or notmuch, or other tools.
+
+00:01:24.640 --> 00:01:26.359
+They are amazing.
+
+00:01:26.360 --> 00:01:29.239
+Use them if it works for you, absolutely.
+
+00:01:29.240 --> 00:01:30.319
+Just go right ahead.
+
+00:01:30.320 --> 00:01:32.239
+If it works for you, don't change anything
+
+00:01:32.240 --> 00:01:34.279
+because this looks cool.
+
+NOTE The honest answer
+
+00:01:34.280 --> 00:01:36.599
+Well, the honest answer for me is that
+
+00:01:36.600 --> 00:01:39.399
+they want to be your email client.
+
+00:01:39.400 --> 00:01:40.879
+That's not what I am after.
+
+00:01:40.880 --> 00:01:42.959
+I don't want an email client.
+
+00:01:42.960 --> 00:01:45.039
+I have enough email clients already.
+
+00:01:45.040 --> 00:01:46.239
+I don't want one more.
+
+00:01:46.240 --> 00:01:49.359
+And they require 500 lines of config.
+
+00:01:49.360 --> 00:01:50.679
+I've tried it.
+
+00:01:50.680 --> 00:01:53.039
+It's a lot of maintenance for myself,
+
+00:01:53.040 --> 00:01:54.359
+I still have those somewhere.
+
+00:01:54.360 --> 00:01:57.319
+The mu4e config or the gnus config.
+
+00:01:57.320 --> 00:01:59.439
+They struggle with Gmail's labels,
+
+00:01:59.440 --> 00:02:01.839
+threading, messages and deletion.
+
+00:02:01.840 --> 00:02:05.439
+I find it tough, and it's either
+
+00:02:05.440 --> 00:02:07.079
+all in emacs or nothing.
+
+00:02:07.080 --> 00:02:10.079
+It cannot be a combinatorial approach,
+
+00:02:10.080 --> 00:02:11.159
+is what I realized.
+
+00:02:11.160 --> 00:02:13.519
+So I said, why can't we have both?
+
+00:02:13.520 --> 00:02:15.959
+I want the org mode's focus
+
+00:02:15.960 --> 00:02:17.919
+and Gmail's flexibility.
+
+NOTE The org-gmail philosophy
+
+00:02:17.920 --> 00:02:20.559
+Org-gmail philosophy is very simple.
+
+00:02:20.560 --> 00:02:22.199
+You triage in Gmail.
+
+00:02:22.200 --> 00:02:26.279
+Use the fast web UI for the easy stuff
+
+00:02:26.280 --> 00:02:27.879
+and process in org mode.
+
+00:02:27.880 --> 00:02:30.639
+Pull important threads where you do real work.
+
+00:02:30.640 --> 00:02:33.719
+And of course, a two way sync is possible.
+
+00:02:33.720 --> 00:02:36.639
+Changes flow both directions.
+
+00:02:36.640 --> 00:02:39.479
+Big inspiration has been org-gcal.
+
+00:02:39.480 --> 00:02:42.319
+I named it org-gmail because I saw org-gcal.
+
+00:02:42.320 --> 00:02:43.159
+It was so cool.
+
+00:02:43.160 --> 00:02:44.759
+I really wanted it.
+
+00:02:44.760 --> 00:02:47.719
+Think of it like an org capture for email, but
+
+00:02:47.720 --> 00:02:49.439
+just bidirectional.
+
+NOTE Architecture (the boring but important slide)
+
+00:02:49.440 --> 00:02:52.999
+Alright, the architecture (boring, but important
+
+00:02:53.000 --> 00:02:56.679
+slide) is that Gmail interacts with Python via an
+
+00:02:56.680 --> 00:02:59.439
+API and interacts with Emacs Lisp.
+
+00:02:59.440 --> 00:03:02.519
+User commands, org formatting, all that magic is
+
+00:03:02.520 --> 00:03:04.279
+done on the Emacs side with Lisp.
+
+00:03:04.280 --> 00:03:09.140
+Python side handles the Gmail API, OAuth,
+
+00:03:09.141 --> 00:03:12.407
+json wrangling and Gmail API handles
+
+00:03:12.408 --> 00:03:13.959
+the actual email data.
+
+00:03:13.960 --> 00:03:17.679
+You can do pip install, add to the load path, and
+
+00:03:17.680 --> 00:03:21.199
+10 minute OAuth setup, you are all set.
+
+NOTE Demo 1: From gmail to org
+
+00:03:21.200 --> 00:03:27.079
+We'll switch over to demo from gmail to org.
+
+00:03:27.080 --> 00:03:29.039
+How do you go about doing that?
+
+00:03:29.040 --> 00:03:32.879
+I will start off with a demo folder that I have.
+
+00:03:32.880 --> 00:03:35.119
+It has this tree structure.
+
+00:03:35.120 --> 00:03:36.559
+Ignore the tilde files.
+
+00:03:36.560 --> 00:03:37.919
+So this is what it contains.
+
+00:03:37.920 --> 00:03:41.639
+An org folder with all the working directory, the
+
+00:03:41.640 --> 00:03:44.639
+actual where the life of org mode is.
+
+00:03:44.640 --> 00:03:48.239
+And I have a credentials.json, this is for logging
+
+00:03:48.240 --> 00:03:49.119
+into Gmail.
+
+00:03:49.120 --> 00:03:50.799
+This is a file that you can download.
+
+00:03:50.800 --> 00:03:53.319
+The instructions are in my README in the
+
+00:03:53.320 --> 00:03:54.159
+repository.
+
+00:03:54.160 --> 00:03:56.119
+You can find out how to get yourself a
+
+00:03:56.120 --> 00:03:57.719
+credentials.json.
+
+00:03:57.720 --> 00:03:59.159
+It's not very difficult.
+
+00:03:59.160 --> 00:04:01.479
+Once you have these, you're all set.
+
+00:04:01.480 --> 00:04:05.359
+All you need to do is if you have straight or any
+
+00:04:05.360 --> 00:04:08.539
+of the other VC packages ready, that you can take
+
+00:04:08.540 --> 00:04:11.500
+a Git repository and have that in your folder, you
+
+00:04:11.501 --> 00:04:13.399
+can do that, or you can do it like this.
+
+00:04:13.400 --> 00:04:15.159
+Have a Git clone.
+
+00:04:15.160 --> 00:04:16.479
+Like I'm doing it right now.
+
+00:04:16.480 --> 00:04:19.239
+Just clone it, keep it in.
+
+00:04:19.240 --> 00:04:20.874
+And now you'll see
+
+00:04:20.875 --> 00:04:23.199
+that the Gmail is already there.
+
+00:04:23.200 --> 00:04:25.199
+There are two files that are really ultra
+
+00:04:25.200 --> 00:04:28.039
+important, which is, gmail_label_manager.py and
+
+00:04:28.040 --> 00:04:30.479
+org-gmail.el.
+
+00:04:30.480 --> 00:04:31.899
+These are the two files that do the email
+
+00:04:31.900 --> 00:04:33.199
+processing.
+
+00:04:33.200 --> 00:04:35.199
+I have a plain vanilla Emacs
+
+00:04:35.200 --> 00:04:37.479
+that I'm going to use for the demo.
+
+NOTE Settings
+
+00:04:37.480 --> 00:04:39.439
+These are a few settings
+
+00:04:39.440 --> 00:04:42.159
+that you will need in order to get going.
+
+00:04:42.160 --> 00:04:45.959
+So one is the Gmail itself, the elisp, and the
+
+00:04:45.960 --> 00:04:47.039
+Python script.
+
+00:04:47.040 --> 00:04:49.399
+You'll need to require the package.
+
+00:04:49.400 --> 00:04:52.399
+The org agenda files need to be set.
+
+00:04:52.400 --> 00:04:54.839
+If they're already there, then yes, it needs to
+
+00:04:54.840 --> 00:04:55.879
+include the org files.
+
+00:04:55.880 --> 00:04:59.279
+Main settings are, you need an org file in order
+
+00:04:59.280 --> 00:05:02.239
+to download all the emails from Gmail.
+
+00:05:02.240 --> 00:05:03.879
+You need the credentials path.
+
+00:05:03.880 --> 00:05:05.519
+You need the Python script,
+
+00:05:05.520 --> 00:05:07.439
+wherever it is pointed to that.
+
+00:05:07.440 --> 00:05:10.039
+The date drawer, you can customize it
+
+00:05:10.040 --> 00:05:11.319
+to whatever you want.
+
+00:05:11.320 --> 00:05:12.159
+I call it org-gmail.
+
+00:05:12.160 --> 00:05:14.639
+You can set it to ignore certain labels,
+
+00:05:14.640 --> 00:05:15.799
+not to download it.
+
+00:05:15.800 --> 00:05:17.359
+You're not interested in certain labels
+
+00:05:17.360 --> 00:05:18.479
+being downloaded.
+
+00:05:18.480 --> 00:05:19.599
+You can set that
+
+00:05:19.600 --> 00:05:21.959
+and process time out of 300 seconds.
+
+00:05:21.960 --> 00:05:25.359
+These are some things to keep life sane in this
+
+00:05:25.360 --> 00:05:27.819
+plain vanilla emacs.
+
+00:05:27.820 --> 00:05:30.799
+So I have this refile targets and stuff.
+
+00:05:30.800 --> 00:05:33.579
+That's the main org-gmail settings are all here.
+
+00:05:33.580 --> 00:05:37.879
+I'm going to eval this buffer so that we have all
+
+00:05:37.880 --> 00:05:40.039
+of it and we are all set.
+
+00:05:40.040 --> 00:05:43.039
+So we have org-gmail ready to work right now.
+
+NOTE Downloading
+
+00:05:43.040 --> 00:05:44.959
+The first thing I'm going to show you is
+
+00:05:44.960 --> 00:05:48.079
+org-gmail-download-by-label.
+
+00:05:48.080 --> 00:05:50.599
+This is the demo Gmail that I have.
+
+00:05:50.600 --> 00:05:53.619
+They all have some kind of test emails and I'm
+
+00:05:53.620 --> 00:05:56.199
+going to label them.
+
+00:05:56.200 --> 00:06:00.719
+I've created this hierarchy of labels here based
+
+00:06:00.720 --> 00:06:04.119
+on Tiago Forte's PARA - Project, Area, Resources,
+
+00:06:04.120 --> 00:06:06.079
+Archives structure.
+
+00:06:06.080 --> 00:06:09.439
+1Projects, DemoProject1, 2Areas, DemoArea,
+
+00:06:09.440 --> 00:06:12.119
+4Archives, 2025, OldProject.
+
+00:06:12.120 --> 00:06:14.959
+I've labeled them inside my Gmail.
+
+00:06:14.960 --> 00:06:20.759
+Okay, now let's go to Emacs and we will now
+
+00:06:20.760 --> 00:06:23.719
+download these things, but before downloading
+
+00:06:23.720 --> 00:06:26.919
+them, you will need to authenticate.
+
+00:06:26.920 --> 00:06:28.800
+So for that, you can start
+
+00:06:28.801 --> 00:06:30.900
+with any org-gmail command.
+
+00:06:30.901 --> 00:06:35.079
+So I'm going to take org-gmail-download-by-label.
+
+00:06:35.080 --> 00:06:38.839
+When I press that, it immediately opens a session
+
+00:06:38.840 --> 00:06:39.999
+in my browser.
+
+00:06:40.000 --> 00:06:40.659
+Okay?
+
+00:06:40.660 --> 00:06:45.799
+What you can't see is a list of my Gmail accounts
+
+00:06:45.800 --> 00:06:46.759
+that I'm going to select.
+
+00:06:46.760 --> 00:06:50.039
+I'm going to select my one Gmail account, and I'm
+
+00:06:50.040 --> 00:06:53.199
+going to show you the next screen.
+
+00:06:53.200 --> 00:06:56.999
+So in this screen, you'll have to continue and
+
+00:06:57.000 --> 00:06:59.119
+select, and the authentication is completed.
+
+00:06:59.120 --> 00:07:02.679
+So once it's, this is done, you can close this.
+
+00:07:02.680 --> 00:07:08.999
+Come back to Emacs and you will have Select Gmail.
+
+00:07:09.000 --> 00:07:10.439
+So it has tab support.
+
+00:07:10.440 --> 00:07:11.719
+If you click tab, it will tell you
+
+00:07:11.720 --> 00:07:13.919
+what all labels are available.
+
+00:07:13.920 --> 00:07:16.319
+I can pick anyone.
+
+00:07:16.320 --> 00:07:21.839
+1Projects/DemoProject1, and let's see what happens.
+
+00:07:21.840 --> 00:07:26.479
+It starts downloading and it downloads.
+
+00:07:26.480 --> 00:07:28.799
+And all three messages, four messages,
+
+00:07:28.800 --> 00:07:29.719
+five messages.
+
+00:07:29.720 --> 00:07:30.759
+Six, seven.
+
+00:07:30.760 --> 00:07:33.319
+There are 11 messages in total,
+
+00:07:33.320 --> 00:07:36.039
+and it's downloading all of them.
+
+00:07:36.040 --> 00:07:40.319
+~/demo/org/0Inbox.
+
+00:07:40.320 --> 00:07:42.079
+That's where I have it.
+
+00:07:42.080 --> 00:07:44.399
+And here are the emails.
+
+00:07:44.400 --> 00:07:46.439
+They're all in org mode, format.
+
+00:07:46.440 --> 00:07:48.399
+All the emails are in here.
+
+00:07:48.400 --> 00:07:49.719
+Since it's org mode,
+
+00:07:49.720 --> 00:07:52.679
+it can fold them all and you will see those emails.
+
+00:07:52.680 --> 00:07:54.279
+So these are five emails
+
+00:07:54.280 --> 00:07:56.879
+that are present for the DemoProject1.
+
+NOTE Replying
+
+00:07:56.880 --> 00:07:59.279
+The next one I wanted to show you was
+
+00:07:59.280 --> 00:08:01.039
+reply without leaving emacs.
+
+00:08:01.040 --> 00:08:04.919
+Let's go back to emacs.
+
+00:08:04.920 --> 00:08:06.479
+How am I going to reply?
+
+00:08:06.480 --> 00:08:09.319
+org-gmail-reply-at-point.
+
+00:08:09.320 --> 00:08:11.379
+That's how I'm going to reply.
+
+00:08:11.380 --> 00:08:13.119
+Reply all or reply.
+
+00:08:13.120 --> 00:08:13.759
+Okay.
+
+00:08:13.760 --> 00:08:16.199
+Let's first find out what is the email all about.
+
+00:08:16.200 --> 00:08:16.719
+Okay.
+
+00:08:16.720 --> 00:08:19.319
+There's just one sender with just one recipient.
+
+00:08:19.320 --> 00:08:21.399
+So the reply all or reply
+
+00:08:21.400 --> 00:08:23.020
+doesn't make a difference.
+
+00:08:23.021 --> 00:08:23.700
+Okay?
+
+00:08:23.701 --> 00:08:28.339
+So we will reply at point and if it's Reply All,
+
+00:08:28.340 --> 00:08:30.999
+it includes my own email as well.
+
+00:08:31.000 --> 00:08:34.399
+In this, my email is .mx.
+
+00:08:34.400 --> 00:08:35.159
+Okay.
+
+00:08:35.160 --> 00:08:39.279
+Cc, I can cc anybody I want and I won't do that.
+
+00:08:39.280 --> 00:08:42.039
+I have a Gmail reply window.
+
+00:08:42.040 --> 00:08:43.439
+Split window here.
+
+00:08:43.440 --> 00:08:47.159
+C-c C-c is what will send the reply.
+
+00:08:47.160 --> 00:08:50.479
+C-c C-k is what will cancel the reply.
+
+00:08:50.480 --> 00:08:51.919
+I want to reply.
+
+00:08:51.920 --> 00:08:57.779
+So let's say test reply from within emacs
+
+00:08:57.780 --> 00:09:00.559
+and bala@balaramadurai.net
+
+00:09:00.560 --> 00:09:01.719
+should receive this email.
+
+00:09:01.720 --> 00:09:02.999
+Okay.
+
+00:09:03.000 --> 00:09:07.599
+Initial successfully reply sent for this email id.
+
+00:09:07.600 --> 00:09:08.599
+Okay.
+
+00:09:08.600 --> 00:09:11.959
+A feature request I can already imagine is
+
+00:09:11.960 --> 00:09:15.439
+the reply also appearing at the bottom of this.
+
+00:09:15.440 --> 00:09:16.759
+It's not yet there.
+
+00:09:16.760 --> 00:09:18.279
+In the next version I will have that.
+
+00:09:18.280 --> 00:09:22.319
+Let's check if I've have sent that email.
+
+00:09:22.320 --> 00:09:25.319
+Let's check in the sent box.
+
+00:09:25.320 --> 00:09:29.119
+I just checked in the sent and yes,
+
+00:09:29.120 --> 00:09:31.959
+a test reply from within emacs, does show up.
+
+00:09:31.960 --> 00:09:33.039
+Okay, great.
+
+00:09:33.040 --> 00:09:33.679
+That works.
+
+NOTE Label management
+
+00:09:33.680 --> 00:09:36.959
+The third demo is going to be on label management.
+
+00:09:36.960 --> 00:09:38.439
+How do I manage labels?
+
+00:09:38.440 --> 00:09:39.359
+Let's see.
+
+00:09:39.360 --> 00:09:40.399
+Let's go back to emacs.
+
+00:09:40.400 --> 00:09:46.599
+Suppose, I am not keen on this DemoProject1 for this.
+
+00:09:46.600 --> 00:09:50.839
+It should belong to DemoArea, okay?
+
+00:09:50.840 --> 00:09:52.919
+For this thread itself doesn't belong to this.
+
+00:09:52.920 --> 00:09:57.879
+Let's do org-gmail-edit-label-at-point.
+
+00:09:57.880 --> 00:10:00.879
+Well, I don't want one project at all.
+
+00:10:00.880 --> 00:10:05.899
+It should be under 2Areas/DemoArea.
+
+00:10:05.900 --> 00:10:08.559
+I don't think it, it's not tab supported.
+
+00:10:08.560 --> 00:10:09.519
+You should know this.
+
+00:10:09.520 --> 00:10:09.999
+I will.
+
+00:10:10.000 --> 00:10:11.439
+That's another feature request.
+
+00:10:11.440 --> 00:10:14.599
+2Areas/DemoArea.
+
+00:10:14.600 --> 00:10:17.679
+And when I say this, it should update it.
+
+00:10:17.680 --> 00:10:19.039
+Yes, it has updated it.
+
+00:10:19.040 --> 00:10:21.039
+So you can see that it has updated
+
+00:10:21.040 --> 00:10:22.159
+the label here as well.
+
+00:10:22.160 --> 00:10:26.159
+We can go check if it has indeed changed it
+
+00:10:26.160 --> 00:10:29.399
+in our... what is the name of the email?
+
+00:10:29.400 --> 00:10:31.439
+It's a test mail for one project demo
+
+00:10:31.440 --> 00:10:33.459
+and the date is at 3 12.
+
+00:10:33.460 --> 00:10:36.839
+Let's check if DemoArea has it.
+
+00:10:36.840 --> 00:10:39.559
+It's not refreshed, but there are two,
+
+00:10:39.560 --> 00:10:42.279
+two emails now under DemoArea.
+
+00:10:42.280 --> 00:10:43.639
+It's obviously done the job well.
+
+00:10:43.640 --> 00:10:46.119
+It's happening as expected.
+
+00:10:46.120 --> 00:10:49.159
+I just turned this back from DemoArea to
+
+00:10:49.160 --> 00:10:50.159
+DemoProject1.
+
+00:10:50.160 --> 00:10:53.759
+If you decide that I want to move all of
+
+00:10:53.760 --> 00:10:56.559
+DemoProject1 to archive, I'm done with the
+
+00:10:56.560 --> 00:10:57.159
+project.
+
+NOTE Refiling
+
+00:10:57.160 --> 00:10:58.319
+Oh, by the way, you could...
+
+00:10:58.320 --> 00:10:59.599
+that's the whole point
+
+00:10:59.600 --> 00:11:00.919
+of this is to have
+
+00:11:00.920 --> 00:11:05.199
+all of this refiled into your project,
+
+00:11:05.200 --> 00:11:06.719
+you can do that.
+
+00:11:06.720 --> 00:11:08.919
+I don't know if I have that.
+
+00:11:08.920 --> 00:11:11.639
+Yes, I have demo project one
+
+00:11:11.640 --> 00:11:17.519
+and I could have emails and I created a node
+
+00:11:17.520 --> 00:11:20.439
+and I moved everything there to that folder
+
+00:11:20.440 --> 00:11:24.799
+so that when I want to look at the demo project.
+
+00:11:24.800 --> 00:11:25.959
+Let me look at this.
+
+00:11:25.960 --> 00:11:29.559
+In that context, in the project context and email,
+
+00:11:29.560 --> 00:11:33.959
+I have notes, let's say, and one of the emails is
+
+00:11:33.960 --> 00:11:34.839
+a note.
+
+00:11:34.840 --> 00:11:38.359
+And I want to be able to keep it that way.
+
+00:11:38.360 --> 00:11:41.719
+I could refile it and put it under notes as well,
+
+00:11:41.720 --> 00:11:44.439
+saying that this has some password, it has some
+
+00:11:44.440 --> 00:11:46.559
+reference that I need to have it there.
+
+00:11:46.560 --> 00:11:48.199
+I can have it under notes as well.
+
+00:11:48.200 --> 00:11:49.919
+So that's the advantage.
+
+00:11:49.920 --> 00:11:52.879
+Once it's inside the org mode system, you can do
+
+00:11:52.880 --> 00:11:55.239
+many things that are usually org-modesy.
+
+00:11:55.240 --> 00:11:57.599
+So you can do all of that within your org mode
+
+00:11:57.600 --> 00:12:00.199
+with emails, manipulate them, see it under a
+
+00:12:00.200 --> 00:12:01.359
+context, reply to that.
+
+00:12:01.360 --> 00:12:02.574
+All of that can happen
+
+00:12:02.575 --> 00:12:04.119
+right within your project context.
+
+NOTE Archiving
+
+00:12:04.120 --> 00:12:05.439
+You're done with this project.
+
+00:12:05.440 --> 00:12:06.999
+You want to move to archive.
+
+00:12:07.000 --> 00:12:09.479
+So what you need to do is you don't have to be
+
+00:12:09.480 --> 00:12:11.839
+here, you can do it this from anywhere.
+
+00:12:11.840 --> 00:12:15.199
+Bulk movement of labels, you can do it.
+
+00:12:15.200 --> 00:12:19.679
+If you had consult, embark, ivy, or helm, this will
+
+00:12:19.680 --> 00:12:22.439
+show up as a dropdown and it looks neater.
+
+00:12:22.440 --> 00:12:24.399
+This, I'm using a vanilla emacs, so this is what
+
+00:12:24.400 --> 00:12:26.279
+you would see, but it has tab support.
+
+00:12:26.280 --> 00:12:27.519
+You can use that.
+
+00:12:27.520 --> 00:12:32.319
+So I want to transfer 1Projects/DemoArea1, I want
+
+00:12:32.320 --> 00:12:32.999
+to move it to archive.
+
+00:12:33.000 --> 00:12:36.719
+So let's say 4Archives is the folder.
+
+00:12:36.720 --> 00:12:41.759
+So 4Archives/2025 already set this up.
+
+00:12:41.760 --> 00:12:46.739
+I have not created this label in Gmail.
+
+00:12:46.740 --> 00:12:48.680
+So do I need to go back to Gmail and create that?
+
+00:12:48.681 --> 00:12:49.839
+No, not at all.
+
+00:12:49.840 --> 00:12:52.159
+You can do this from the comfort of your org mode.
+
+00:12:52.160 --> 00:12:54.679
+Go in here and enter this.
+
+00:12:54.680 --> 00:12:55.639
+Let's see what happens.
+
+00:12:55.640 --> 00:12:57.759
+So it found that it is not there.
+
+00:12:57.760 --> 00:13:01.439
+So it created a new label and it's now moving all
+
+00:13:01.440 --> 00:13:04.799
+of the emails, all of those threads into archives
+
+00:13:04.800 --> 00:13:07.079
+without deleting 1Projects/DemoProject1.
+
+00:13:07.080 --> 00:13:09.639
+So it still has 1Projects/DemoProject1 and it also
+
+00:13:09.640 --> 00:13:10.639
+updated the labels here.
+
+00:13:10.640 --> 00:13:12.239
+So the project has been moved.
+
+00:13:12.240 --> 00:13:14.999
+If you want to move it to archive this entire...
+
+00:13:15.000 --> 00:13:16.479
+You can do that too.
+
+00:13:16.480 --> 00:13:19.079
+Let's see if it has archives.
+
+00:13:19.080 --> 00:13:21.959
+Yes, it has archives and I have it...
+
+00:13:21.960 --> 00:13:24.519
+have a heading called 2025.
+
+00:13:24.520 --> 00:13:26.274
+My demo project can be moved there
+
+00:13:26.275 --> 00:13:27.279
+and I'm done here.
+
+00:13:27.280 --> 00:13:28.399
+My project was done.
+
+00:13:28.400 --> 00:13:30.079
+All the emails are moved to archive.
+
+00:13:30.080 --> 00:13:32.479
+So is this project from my project folder.
+
+00:13:32.480 --> 00:13:34.919
+You can integrate it into your workflow, your org
+
+00:13:34.920 --> 00:13:37.139
+mode workflow.
+
+NOTE Action commands
+
+00:13:37.140 --> 00:13:39.039
+Next, we have action commands.
+
+00:13:39.040 --> 00:13:41.399
+What all can you do with singular emails?
+
+00:13:41.400 --> 00:13:44.999
+You can do four things with single emails.
+
+00:13:45.000 --> 00:13:49.659
+Delegate, defer, act on it or trash at point.
+
+00:13:49.660 --> 00:13:50.399
+Defer.
+
+00:13:50.400 --> 00:13:52.519
+Doesn't seem to work yet.
+
+00:13:52.520 --> 00:13:53.599
+That is a snooze part.
+
+00:13:53.600 --> 00:13:54.759
+Doesn't seem to work yet.
+
+00:13:54.760 --> 00:13:55.719
+That's another bug.
+
+00:13:55.720 --> 00:13:58.239
+That's the second bug I have in my package.
+
+00:13:58.240 --> 00:13:59.599
+But the rest of them work.
+
+00:13:59.600 --> 00:14:02.519
+Delegate is to move it to somebody so they can do
+
+00:14:02.520 --> 00:14:03.119
+the job.
+
+00:14:03.120 --> 00:14:06.399
+Act is you will do it with a context with a to-do
+
+00:14:06.400 --> 00:14:08.119
+which will show up in your agenda.
+
+00:14:08.120 --> 00:14:10.839
+Trash the email from your Gmail, and you are done.
+
+00:14:10.840 --> 00:14:12.079
+Okay, let's do that.
+
+00:14:12.080 --> 00:14:13.879
+Let's go back to emacs.
+
+00:14:13.880 --> 00:14:18.079
+I just moved everything back to DemoProject1.
+
+00:14:18.080 --> 00:14:20.919
+I moved everything back so that I can demonstrate
+
+00:14:20.920 --> 00:14:22.679
+the four actions that I'm showing.
+
+00:14:22.680 --> 00:14:23.519
+At least three actions.
+
+00:14:23.520 --> 00:14:25.039
+One of them doesn't work yet.
+
+00:14:25.040 --> 00:14:30.179
+So if I want to delegate it to somebody in this
+
+00:14:30.180 --> 00:14:31.607
+case myself, but I can delegate it
+
+00:14:31.608 --> 00:14:32.839
+to anybody I want.
+
+00:14:32.840 --> 00:14:36.159
+So how do I do that so I can delegate this, or
+
+00:14:36.160 --> 00:14:38.959
+delegate is org-gmail-delegate-at-point.
+
+00:14:38.960 --> 00:14:42.279
+Move the cursor to the email, delegate it to this
+
+00:14:42.280 --> 00:14:44.919
+guy balaramadurai.net.
+
+00:14:44.920 --> 00:14:46.607
+You can add a note saying,
+
+00:14:46.608 --> 00:14:50.799
+Hey, act on task quickly.
+
+00:14:50.800 --> 00:14:53.399
+Boss is watching.
+
+00:14:53.400 --> 00:14:54.919
+Okay?
+
+00:14:54.920 --> 00:14:59.519
+So you can say yes, and this thread gets forwarded
+
+00:14:59.520 --> 00:15:01.440
+to your colleague
+
+00:15:01.441 --> 00:15:03.559
+and so that they can take this up.
+
+00:15:03.560 --> 00:15:05.819
+It has indeed arrived here.
+
+00:15:05.820 --> 00:15:07.039
+You can see.
+
+00:15:07.040 --> 00:15:08.839
+Boss is watching.
+
+00:15:08.840 --> 00:15:11.399
+The test reply was also arrived here.
+
+00:15:11.400 --> 00:15:13.079
+You can also see that email.
+
+00:15:13.080 --> 00:15:15.359
+So that was delegate.
+
+00:15:15.360 --> 00:15:18.519
+So how do we set up actions?
+
+00:15:18.520 --> 00:15:21.199
+So let's not mess this email.
+
+00:15:21.200 --> 00:15:22.599
+This is the second email.
+
+00:15:22.600 --> 00:15:23.919
+How do you act
+
+00:15:23.920 --> 00:15:24.919
+on it?
+
+00:15:24.920 --> 00:15:27.159
+That's an action you set for yourself is add
+
+00:15:27.160 --> 00:15:31.000
+action at point, and you do that.
+
+00:15:31.001 --> 00:15:32.940
+What action can you set for yourself?
+
+00:15:32.941 --> 00:15:38.619
+Write a long report using an LLM.
+
+00:15:38.620 --> 00:15:42.279
+Okay, so it's changed the status to a to-do task.
+
+00:15:42.280 --> 00:15:44.959
+And the to-do is right here.
+
+00:15:44.960 --> 00:15:47.833
+Now, here you can schedule it
+
+00:15:47.834 --> 00:15:50.700
+to say tomorrow 9:00 AM.
+
+00:15:50.701 --> 00:15:51.800
+So there you go.
+
+00:15:51.801 --> 00:15:53.679
+At 9:00 AM I'll be looking at this.
+
+NOTE Org Agenda
+
+00:15:53.680 --> 00:15:55.119
+Now here's the cool part.
+
+00:15:55.120 --> 00:15:58.933
+You can actually find the whole thing
+
+00:15:58.934 --> 00:16:00.559
+in org agenda.
+
+00:16:00.560 --> 00:16:03.267
+So my entire email threads
+
+00:16:03.268 --> 00:16:05.959
+are all in the org agenda.
+
+00:16:05.960 --> 00:16:09.679
+They're all present here and my task associated is
+
+00:16:09.680 --> 00:16:11.319
+also here in the agenda.
+
+00:16:11.320 --> 00:16:12.767
+This is marked TODO,
+
+00:16:12.768 --> 00:16:14.919
+means I haven't acted on that email.
+
+00:16:14.920 --> 00:16:16.159
+It's still pending.
+
+00:16:16.160 --> 00:16:19.119
+And what do I have to do is right here within
+
+00:16:19.120 --> 00:16:21.559
+here, which is the action that I have to carry on
+
+00:16:21.560 --> 00:16:22.719
+in the DemoProject1.
+
+00:16:22.720 --> 00:16:24.533
+You can see that demo project one
+
+00:16:24.534 --> 00:16:25.739
+is showing up in the bottom.
+
+00:16:25.740 --> 00:16:28.279
+Okay. It's cool way you can also see it in the agenda.
+
+NOTE Trash
+
+00:16:28.280 --> 00:16:31.599
+I am not interested in this email at all.
+
+00:16:31.600 --> 00:16:33.199
+Let's say I, I want to delete it.
+
+00:16:33.200 --> 00:16:33.719
+Let's see.
+
+00:16:33.720 --> 00:16:35.319
+Yes, I finished the task.
+
+00:16:35.320 --> 00:16:37.599
+Now the task is finished.
+
+00:16:37.600 --> 00:16:40.039
+I really don't want to see this email, this
+
+00:16:40.040 --> 00:16:40.919
+message alone.
+
+00:16:40.920 --> 00:16:42.159
+Alright.
+
+00:16:42.160 --> 00:16:42.599
+Easy peasy.
+
+00:16:42.600 --> 00:16:46.679
+Let's do Gmail Trash at point.
+
+00:16:46.680 --> 00:16:48.020
+And you say, message,
+
+00:16:48.021 --> 00:16:49.901
+I don't want to delete the entire thread.
+
+00:16:49.880 --> 00:16:50.399
+Yes.
+
+00:16:50.400 --> 00:16:51.959
+Delete it.
+
+00:16:51.960 --> 00:16:53.239
+Delete the message alone.
+
+00:16:53.240 --> 00:16:54.239
+And it's gone.
+
+00:16:54.240 --> 00:16:56.039
+But it's not gone.
+
+00:16:56.040 --> 00:16:57.159
+It's gone to the trash.
+
+00:16:57.160 --> 00:16:59.733
+The entire subtree was deleted
+
+00:16:59.734 --> 00:17:01.880
+and we have a clean flow here.
+
+00:17:01.881 --> 00:17:04.479
+I have archived, it is still in the archive, but
+
+00:17:04.480 --> 00:17:07.439
+it's still active according to my Gmail folder.
+
+NOTE Real workflow: GTD
+
+00:17:07.440 --> 00:17:09.574
+Next I'm going to show you is
+
+00:17:09.575 --> 00:17:12.039
+real workflow capture.
+
+00:17:12.040 --> 00:17:15.799
+You can use label in email with ToProcess
+
+00:17:15.800 --> 00:17:19.359
+downloaded to the inbox.org, and do one of these
+
+00:17:19.360 --> 00:17:20.599
+you've already seen.
+
+00:17:20.600 --> 00:17:22.519
+Later still doesn't work.
+
+00:17:22.520 --> 00:17:25.639
+I will get it to work, but hopefully by the time
+
+00:17:25.640 --> 00:17:28.759
+the conference is up, you will have the feature up
+
+00:17:28.760 --> 00:17:29.399
+and ready.
+
+00:17:29.400 --> 00:17:32.679
+Rest of the stuff works, delegate works, trash
+
+00:17:32.680 --> 00:17:34.039
+works, and add action works.
+
+00:17:34.040 --> 00:17:37.479
+We are in weekly review can have an email context,
+
+00:17:37.480 --> 00:17:40.559
+not just links to an external URL.
+
+NOTE Real Workflow: P.A.R.A.
+
+00:17:40.560 --> 00:17:46.519
+In the P.A.R.A Our Project, Areas, Resources and
+
+00:17:46.520 --> 00:17:50.039
+Archives structure, you can have Gmail labels
+
+00:17:50.040 --> 00:17:51.199
+mirror your PARA structure.
+
+00:17:51.200 --> 00:17:53.879
+You can have that within your org mode structure,
+
+00:17:53.880 --> 00:17:56.239
+and you can mimic that very well.
+
+00:17:56.240 --> 00:17:59.419
+All the emails embedded in your own structure and
+
+00:17:59.420 --> 00:18:02.067
+you can download it by label
+
+00:18:02.068 --> 00:18:03.520
+in the place you want.
+
+00:18:03.521 --> 00:18:05.439
+I'm still working on that feature where you can
+
+00:18:05.440 --> 00:18:08.559
+have it inside the project structure itself rather
+
+00:18:08.560 --> 00:18:09.839
+than an index.org.
+
+00:18:09.840 --> 00:18:11.719
+It'll take some time, but I will do it.
+
+00:18:11.720 --> 00:18:14.839
+But right now you can refile it once it's in the
+
+00:18:14.840 --> 00:18:17.459
+index.org or any other file you choose, and then
+
+00:18:17.460 --> 00:18:21.039
+you can bulk move labels to archive and move that
+
+00:18:21.040 --> 00:18:23.319
+entire project repository to
+
+00:18:23.320 --> 00:18:26.319
+your archive also. That works very well.
+
+00:18:26.320 --> 00:18:29.919
+And your org files and Gmail stay in sync
+
+00:18:29.920 --> 00:18:33.039
+effortlessly, and the whole email part of it
+
+00:18:33.040 --> 00:18:35.239
+becomes part of your knowledge management system.
+
+00:18:35.240 --> 00:18:35.959
+Okay.
+
+NOTE What this is NOT
+
+00:18:35.960 --> 00:18:37.639
+We have reached the end of the demo.
+
+00:18:37.640 --> 00:18:39.667
+Hopefully you understood
+
+00:18:39.668 --> 00:18:41.799
+what org-gmail was all about.
+
+00:18:41.800 --> 00:18:44.639
+If you have any questions, let me know, but some
+
+00:18:44.640 --> 00:18:47.519
+bits of warning, I wanted to give you what this
+
+00:18:47.520 --> 00:18:50.239
+package is not, it's not a full fledged email
+
+00:18:50.240 --> 00:18:50.959
+client.
+
+00:18:50.960 --> 00:18:55.319
+It's meant for label management and importing some
+
+00:18:55.320 --> 00:18:58.739
+emails that you wanted or you're interested in to
+
+00:18:58.740 --> 00:19:02.079
+the context of your projects or areas or your GTD
+
+00:19:02.080 --> 00:19:02.679
+context.
+
+00:19:02.680 --> 00:19:07.159
+It is not a replacement for gnus, mu4e or notmuch.
+
+00:19:07.160 --> 00:19:10.479
+It is not a way to read all your emails in emacs.
+
+00:19:10.480 --> 00:19:13.439
+It cannot handle a large server load for sure.
+
+00:19:13.440 --> 00:19:15.679
+It is not offline capable.
+
+00:19:15.680 --> 00:19:17.359
+It needs API access.
+
+00:19:17.360 --> 00:19:19.479
+So bear that in mind.
+
+00:19:19.480 --> 00:19:22.159
+What it is, is a bridge between
+
+00:19:22.160 --> 00:19:23.879
+gmail and org mode.
+
+00:19:23.880 --> 00:19:27.359
+It's a way to manage important email threads.
+
+00:19:27.360 --> 00:19:29.559
+So you can keep updating threads.
+
+00:19:29.560 --> 00:19:32.039
+Whenever there's a reply, you keep downloading it
+
+00:19:32.040 --> 00:19:32.919
+to that thread.
+
+00:19:32.920 --> 00:19:35.279
+If you want to keep track of what's going on, what
+
+00:19:35.280 --> 00:19:37.079
+is the logical way you can all see it.
+
+00:19:37.080 --> 00:19:40.599
+You can even use ellama or one of those to make
+
+00:19:40.600 --> 00:19:41.999
+sense of the conversation.
+
+00:19:42.000 --> 00:19:45.279
+If it's a long longish thread, it's a power tool
+
+00:19:45.280 --> 00:19:49.079
+for the getting things done or Tiago Forte's PARA
+
+00:19:49.080 --> 00:19:49.839
+method.
+
+00:19:49.840 --> 00:19:52.119
+I've used PARA for a long time now.
+
+00:19:52.120 --> 00:19:54.839
+I'm a power user of PARA, so to speak, so I find
+
+00:19:54.840 --> 00:19:56.319
+this extremely useful myself.
+
+00:19:56.320 --> 00:19:59.067
+It's about 800 lines of Python
+
+00:19:59.068 --> 00:20:02.479
+and about 300 to 500 lines of elisp.
+
+00:20:02.480 --> 00:20:06.999
+It's usable in 10 minutes, but can remain powerful
+
+00:20:07.000 --> 00:20:07.679
+for years.
+
+NOTE Technical decisions
+
+00:20:07.680 --> 00:20:10.599
+So some technical decisions that I took.
+
+00:20:10.600 --> 00:20:13.419
+Why Python plus Gmail, API.
+
+00:20:13.420 --> 00:20:17.959
+Gmail API is better at handling than an imap with
+
+00:20:17.960 --> 00:20:19.359
+all the other metadata.
+
+00:20:19.360 --> 00:20:20.199
+I found it easier.
+
+00:20:20.200 --> 00:20:22.679
+Python has excellent Google API libraries.
+
+00:20:22.680 --> 00:20:25.479
+Email calls Python via the call-process.
+
+00:20:25.480 --> 00:20:27.559
+json is the interchange format.
+
+00:20:27.560 --> 00:20:29.879
+Why not pure elisp?
+
+00:20:29.880 --> 00:20:33.799
+For one, OAuth 2.0 flow is a bit complex.
+
+00:20:33.800 --> 00:20:35.719
+I found it a bit complex to meander on.
+
+00:20:35.720 --> 00:20:38.139
+That's probably why it took me three years, 364
+
+00:20:38.140 --> 00:20:40.319
+days to get over it.
+
+00:20:40.320 --> 00:20:43.839
+Gmail API Client libraries are mature, easier to
+
+00:20:43.840 --> 00:20:48.459
+test/debug separately and lets emacs do what it
+
+00:20:48.460 --> 00:20:50.159
+does best, which is text editing.
+
+00:20:50.160 --> 00:20:54.759
+Pragmatism over purity, the emacs way since 1976.
+
+NOTE Roadmap
+
+00:20:54.760 --> 00:20:57.159
+Okay, some roadmap here.
+
+00:20:57.160 --> 00:21:00.239
+But near term I want better error messages.
+
+00:21:00.240 --> 00:21:02.759
+It still gives me python error messages.
+
+00:21:02.760 --> 00:21:05.039
+There are some asynchronous operations there's no
+
+00:21:05.040 --> 00:21:06.319
+blocking going on.
+
+00:21:06.320 --> 00:21:08.879
+It needs a search integration soon.
+
+00:21:08.880 --> 00:21:11.119
+Attachment I have not yet touched.
+
+00:21:11.120 --> 00:21:13.879
+That's a big big if, I don't know how to integrate
+
+00:21:13.880 --> 00:21:15.879
+with org-attach, I'm still wondering how to do
+
+00:21:15.880 --> 00:21:16.439
+that.
+
+00:21:16.440 --> 00:21:19.519
+Perhaps I should be able to interact with Outlook
+
+00:21:19.520 --> 00:21:21.919
+also, fast mail, proton mail.
+
+00:21:21.920 --> 00:21:24.759
+I don't know AI summaries of thread.
+
+00:21:24.760 --> 00:21:27.759
+I'm thinking ellama could do it, but I'm not very
+
+00:21:27.760 --> 00:21:28.319
+sure.
+
+00:21:28.320 --> 00:21:32.079
+Calendar integration is a nice idea, but org-gcal
+
+00:21:32.080 --> 00:21:33.319
+and org gmail...
+
+00:21:33.320 --> 00:21:34.279
+How will they interact?
+
+00:21:34.280 --> 00:21:35.839
+How will that work?
+
+00:21:35.840 --> 00:21:37.759
+I'm still not sure. I use them separately.
+
+00:21:37.760 --> 00:21:40.599
+And any other feature requests that you may have,
+
+00:21:40.600 --> 00:21:41.439
+just let me know.
+
+NOTE Contributing
+
+00:21:41.440 --> 00:21:44.919
+What I may need help with if you have the time and
+
+00:21:44.920 --> 00:21:47.439
+you're interested in this project, is to test it
+
+00:21:47.440 --> 00:21:49.079
+on macOS and Windows.
+
+00:21:49.080 --> 00:21:50.159
+I use Linux.
+
+00:21:50.160 --> 00:21:51.759
+I use it on Debian.
+
+00:21:51.760 --> 00:21:52.719
+It works fine.
+
+00:21:52.720 --> 00:21:54.359
+OAuth edge cases.
+
+00:21:54.360 --> 00:21:55.719
+I'm not sure how it works.
+
+00:21:55.720 --> 00:21:57.519
+It shows me some error or the other
+
+00:21:57.520 --> 00:21:58.119
+here and there.
+
+00:21:58.120 --> 00:22:00.919
+Definitely documentation needs improvements.
+
+00:22:00.920 --> 00:22:04.239
+Other email provider expertise will be welcome.
+
+00:22:04.240 --> 00:22:07.359
+What's ready is, GitHub repo with issues.
+
+00:22:07.360 --> 00:22:10.239
+You can start with that could be great if you can
+
+00:22:10.240 --> 00:22:11.879
+tell me some issues with that.
+
+00:22:11.880 --> 00:22:13.879
+Some kind of development guide.
+
+00:22:13.880 --> 00:22:15.479
+I am not a programmer.
+
+00:22:15.480 --> 00:22:18.079
+I vibe-coded most of it.
+
+00:22:18.080 --> 00:22:20.919
+So a development guide, a true blood developer,
+
+00:22:20.920 --> 00:22:22.479
+if they can come and tell me,
+
+00:22:22.480 --> 00:22:23.999
+here is what you should be doing,
+
+00:22:24.000 --> 00:22:26.239
+I'm more than happy to listen to that.
+
+00:22:26.240 --> 00:22:27.959
+And probably a test suite.
+
+00:22:27.960 --> 00:22:28.959
+I do that manually.
+
+00:22:28.960 --> 00:22:31.239
+All of this, some kind of help with that
+
+00:22:31.240 --> 00:22:32.939
+will also work.
+
+NOTE The big picture
+
+00:22:32.940 --> 00:22:36.559
+The big picture is org-mode and Gmail
+
+00:22:36.560 --> 00:22:37.679
+can be friends.
+
+00:22:37.680 --> 00:22:41.119
+They can bond over a cup of coffee.
+
+NOTE Let's connect
+
+00:22:41.120 --> 00:22:41.959
+Let's connect.
+
+00:22:41.960 --> 00:22:47.659
+Here are my details and I am all game to listen to
+
+00:22:47.660 --> 00:22:48.679
+your question and answers.
+
+00:22:48.680 --> 00:22:51.279
+I'm happy to give you any answer or responses that
+
+00:22:51.280 --> 00:22:51.999
+I find.
+
+00:22:52.000 --> 00:22:54.439
+Please do connect with me on LinkedIn. I have my
+
+00:22:54.440 --> 00:22:58.359
+website here, and please do fork or install
+
+00:22:58.360 --> 00:23:00.519
+org-gmail and let me know what you think.
+
+00:23:00.520 --> 00:23:02.759
+Let's talk about taming email.
+
+00:23:02.760 --> 00:23:04.400
+Thank you very much.
diff --git a/2025/captions/emacsconf-2025-gnus--reading-and-writing-emails-in-gnu-emacs-with-gnus--amin-bandali--main--chapters.vtt b/2025/captions/emacsconf-2025-gnus--reading-and-writing-emails-in-gnu-emacs-with-gnus--amin-bandali--main--chapters.vtt
new file mode 100644
index 00000000..fc516878
--- /dev/null
+++ b/2025/captions/emacsconf-2025-gnus--reading-and-writing-emails-in-gnu-emacs-with-gnus--amin-bandali--main--chapters.vtt
@@ -0,0 +1,50 @@
+WEBVTT
+
+
+00:00:02.620 --> 00:01:25.239
+Introduction
+
+00:01:25.240 --> 00:02:49.959
+Demo
+
+00:02:49.960 --> 00:03:58.559
+Don't panic
+
+00:03:58.560 --> 00:05:46.239
+Configuring servers
+
+00:05:46.240 --> 00:06:26.599
+.authinfo
+
+00:06:26.600 --> 00:08:25.719
+Configuration
+
+00:08:25.720 --> 00:09:40.079
+Starting Gnus
+
+00:09:40.080 --> 00:10:19.899
+Always showing groups
+
+00:10:19.900 --> 00:11:30.119
+Reading messages
+
+00:11:30.120 --> 00:12:55.159
+Debugging IMAP
+
+00:12:55.160 --> 00:14:25.559
+Topics
+
+00:14:25.560 --> 00:15:24.319
+Customizing message display
+
+00:15:24.320 --> 00:17:26.659
+Sending emails
+
+00:17:26.660 --> 00:19:27.959
+Plans
+
+00:19:27.960 --> 00:20:12.759
+Wrapping up
+
+00:20:12.760 --> 00:21:37.760
+nnimap
diff --git a/2025/captions/emacsconf-2025-gnus--reading-and-writing-emails-in-gnu-emacs-with-gnus--amin-bandali--main.vtt b/2025/captions/emacsconf-2025-gnus--reading-and-writing-emails-in-gnu-emacs-with-gnus--amin-bandali--main.vtt
new file mode 100644
index 00000000..c4e86336
--- /dev/null
+++ b/2025/captions/emacsconf-2025-gnus--reading-and-writing-emails-in-gnu-emacs-with-gnus--amin-bandali--main.vtt
@@ -0,0 +1,1332 @@
+WEBVTT captioned by sachac
+
+NOTE Introduction
+
+00:00:02.620 --> 00:00:04.799
+Hello, my name is Amin Bandali,
+
+00:00:04.800 --> 00:00:06.359
+and today I'd like to talk about
+
+00:00:06.360 --> 00:00:08.799
+reading and writing emails in GNU Emacs
+
+00:00:08.800 --> 00:00:14.319
+using Gnus specifically.
+
+00:00:14.320 --> 00:00:16.879
+Gnus has had this sort of reputation
+
+00:00:16.880 --> 00:00:20.599
+of being difficult to approach and configure.
+
+00:00:20.600 --> 00:00:23.359
+That's understandable
+
+00:00:23.360 --> 00:00:26.319
+because it has many, many options
+
+00:00:26.320 --> 00:00:27.679
+and major and minor modes
+
+00:00:27.680 --> 00:00:30.679
+that interact in different ways with each other.
+
+00:00:30.680 --> 00:00:35.319
+And it also doesn't help that Gnus started originally
+
+00:00:35.320 --> 00:00:36.359
+as a newsreader
+
+00:00:36.360 --> 00:00:38.759
+rather than a mail client.
+
+00:00:38.760 --> 00:00:40.879
+So a lot of the terminology that it uses
+
+00:00:40.880 --> 00:00:42.519
+is also rooted in that,
+
+00:00:42.520 --> 00:00:45.559
+in reading and writing news.
+
+00:00:45.560 --> 00:00:48.119
+But nevertheless, with this video and talk,
+
+00:00:48.120 --> 00:00:52.159
+I hope to provide a sort
+
+00:00:52.160 --> 00:00:55.759
+of very quick introduction
+
+00:00:55.760 --> 00:00:57.539
+of starting to use Gnus
+
+00:00:57.540 --> 00:01:00.919
+to read and write email and send it.
+
+00:01:00.920 --> 00:01:02.679
+We will use Gnus' IMAP support,
+
+00:01:02.680 --> 00:01:06.119
+mainly because a lot of people
+
+00:01:06.120 --> 00:01:08.679
+these days have email accounts
+
+00:01:08.680 --> 00:01:10.759
+with mail service providers
+
+00:01:10.760 --> 00:01:12.039
+that support IMAP,
+
+00:01:12.040 --> 00:01:14.319
+which is an open standard.
+
+00:01:14.320 --> 00:01:17.479
+So it's widely available and supported
+
+00:01:17.480 --> 00:01:19.719
+across many different providers
+
+00:01:19.720 --> 00:01:25.239
+as well as mail clients or mail user agents as well.
+
+NOTE Demo
+
+00:01:25.240 --> 00:01:30.559
+Okay, so let's just jump straight right in.
+
+00:01:30.560 --> 00:01:34.279
+I will enter this demo directory that I created
+
+00:01:34.280 --> 00:01:36.919
+for the purposes of this demonstration
+
+00:01:36.920 --> 00:01:40.999
+and change my home directory to this one
+
+00:01:41.000 --> 00:01:49.839
+so that we can safely experiment with Gnus here.
+
+00:01:49.840 --> 00:01:53.979
+For this presentation, I've written up
+
+00:01:53.980 --> 00:01:56.839
+a quick initialization file or init file
+
+00:01:56.840 --> 00:01:59.719
+that I will share afterwards as well
+
+00:01:59.720 --> 00:02:01.639
+to get us going with Gnus.
+
+00:02:01.640 --> 00:02:04.519
+There's not much to it at the moment.
+
+00:02:04.520 --> 00:02:07.399
+Just set up the package archives and
+
+00:02:07.400 --> 00:02:09.479
+install the keycast package
+
+00:02:09.480 --> 00:02:14.079
+for showing the key presses in the mode line.
+
+00:02:14.080 --> 00:02:15.359
+Yeah, that's about it.
+
+00:02:15.360 --> 00:02:16.239
+And I'll also define
+
+00:02:16.240 --> 00:02:20.279
+a little like inline function +emacs.d
+
+00:02:20.280 --> 00:02:24.079
+that allows me to conveniently write
+
+00:02:24.080 --> 00:02:26.639
+and have it expanded
+
+00:02:26.640 --> 00:02:29.300
+or refer to files and directories, rather,
+
+00:02:29.301 --> 00:02:30.900
+paths that we could expand,
+
+00:02:30.901 --> 00:02:32.833
+inside my Emacs configuration directory.
+
+00:02:32.834 --> 00:02:37.500
+I also have this eval-last-sexp
+
+00:02:37.501 --> 00:02:41.119
+bound to a global key,
+
+00:02:41.120 --> 00:02:43.279
+so that I will be able to easily
+
+00:02:43.280 --> 00:02:47.519
+use it for this talk.
+
+00:02:47.520 --> 00:02:49.959
+Okay, let's jump right in.
+
+NOTE Don't panic
+
+00:02:49.960 --> 00:02:52.239
+First things first, don't panic.
+
+00:02:52.240 --> 00:02:55.267
+And that's actually also the name
+
+00:02:55.268 --> 00:02:58.359
+of the very first node
+
+00:02:58.360 --> 00:03:01.559
+in the Gnus manual when you open it.
+
+00:03:01.560 --> 00:03:02.839
+And it's actually nice.
+
+00:03:02.840 --> 00:03:04.479
+I definitely, definitely recommend
+
+00:03:04.480 --> 00:03:07.079
+that you look through
+
+00:03:07.080 --> 00:03:10.199
+at least the very first couple of chapters of this,
+
+00:03:10.200 --> 00:03:14.199
+skim through it, and later on refer to it
+
+00:03:14.200 --> 00:03:16.133
+whenever you find something confusing
+
+00:03:16.134 --> 00:03:19.499
+or don't understand it.
+
+00:03:19.500 --> 00:03:21.359
+But yeah, we'll start
+
+00:03:21.360 --> 00:03:22.399
+with these two paragraphs here.
+
+00:03:22.400 --> 00:03:23.639
+So again, a Gnus installation
+
+00:03:23.640 --> 00:03:28.119
+is basically just a list of one or more servers
+
+00:03:28.120 --> 00:03:30.119
+and the subscribed groups from those servers
+
+00:03:30.120 --> 00:03:32.319
+and articles in those groups.
+
+00:03:32.320 --> 00:03:34.279
+You can already kind of see
+
+00:03:34.280 --> 00:03:39.479
+where that influence of a newsreader comes in.
+
+00:03:39.480 --> 00:03:41.839
+But yeah, basically what it's saying is that,
+
+00:03:41.840 --> 00:03:43.839
+you know, we have one or more servers.
+
+00:03:43.840 --> 00:03:47.079
+We can think of them as email servers.
+
+00:03:47.080 --> 00:03:49.359
+Groups can be like, we can think
+
+00:03:49.360 --> 00:03:52.959
+of them as folders or directories.
+
+00:03:52.960 --> 00:03:55.239
+And yeah, articles,
+
+00:03:55.240 --> 00:03:58.559
+those would be like our email messages.
+
+NOTE Configuring servers
+
+00:03:58.560 --> 00:03:59.679
+With Gnus, we can add
+
+00:03:59.680 --> 00:04:06.119
+and configure servers mainly using two variables.
+
+00:04:06.120 --> 00:04:07.919
+One of them is the gnus-select-method
+
+00:04:07.920 --> 00:04:11.479
+and the other is gnus-secondary-select-methods.
+
+00:04:11.480 --> 00:04:15.759
+The first one predates the second one
+
+00:04:15.760 --> 00:04:17.559
+and I generally don't recommend using it, because
+
+00:04:17.560 --> 00:04:22.559
+first of all, it can only point
+
+00:04:22.560 --> 00:04:26.359
+to one server, and that server,
+
+00:04:26.360 --> 00:04:27.879
+because it's the primary,
+
+00:04:27.880 --> 00:04:32.559
+then Gnus won't add a prefix to its groups,
+
+00:04:32.560 --> 00:04:34.839
+so later on, as you get into
+
+00:04:34.840 --> 00:04:36.679
+more advanced features of Gnus
+
+00:04:36.680 --> 00:04:38.519
+and, for example, want to write rules
+
+00:04:38.520 --> 00:04:42.959
+to modify your message composition
+
+00:04:42.960 --> 00:04:47.039
+in a way for certain groups, or file mail,
+
+00:04:47.040 --> 00:04:48.799
+automatically classify mail,
+
+00:04:48.800 --> 00:04:51.879
+this distinction can become
+
+00:04:51.880 --> 00:04:53.959
+confusing and annoying.
+
+00:04:53.960 --> 00:04:57.199
+My recommendation is to always and only use
+
+00:04:57.200 --> 00:05:01.799
+the gnus-secondary-select-methods.
+
+00:05:01.800 --> 00:05:07.319
+Yeah, so let's do that here.
+
+00:05:07.320 --> 00:05:10.299
+I'm gonna uncomment this portion.
+
+00:05:10.300 --> 00:05:16.419
+So here, I set the primary select method to nil,
+
+00:05:16.420 --> 00:05:24.159
+and the second one, I define an nnimap server
+
+00:05:24.160 --> 00:05:30.039
+of the nnimap backend.
+
+00:05:30.040 --> 00:05:32.439
+I give it the name ec25gnus.
+
+00:05:32.440 --> 00:05:35.879
+What I want it to do is to
+
+00:05:35.880 --> 00:05:37.799
+connect to my mail server,
+
+00:05:37.800 --> 00:05:41.079
+which is at this address,
+
+00:05:41.080 --> 00:05:46.239
+and fetch emails from it over TLS with this username.
+
+NOTE .authinfo
+
+00:05:46.240 --> 00:05:50.719
+And then the passwords or the credentials,
+
+00:05:50.720 --> 00:05:56.839
+you can put them in the .authinfo file.
+
+00:05:56.840 --> 00:05:58.799
+Normally, you would want to, for example,
+
+00:05:58.800 --> 00:06:03.719
+encrypt this file with your GPG key.
+
+00:06:03.720 --> 00:06:06.719
+But for this demonstration, I haven't.
+
+00:06:06.720 --> 00:06:10.479
+So yeah, the format is the keyword "machine"
+
+00:06:10.480 --> 00:06:15.239
+followed by the name of your Gnus server or account,
+
+00:06:15.240 --> 00:06:17.199
+followed by the word "login",
+
+00:06:17.200 --> 00:06:19.199
+then your login username,
+
+00:06:19.200 --> 00:06:23.959
+and then the password, which here it's not shown.
+
+00:06:23.960 --> 00:06:26.599
+Yeah.
+
+NOTE Configuration
+
+00:06:26.600 --> 00:06:28.679
+But before we actually set this,
+
+00:06:28.680 --> 00:06:31.479
+I'll just show you that if we like start Gnus
+
+00:06:31.480 --> 00:06:33.719
+with M-x gnus,
+
+00:06:33.720 --> 00:06:36.439
+initially, it will just show
+
+00:06:36.440 --> 00:06:37.759
+an error like this.
+
+00:06:37.760 --> 00:06:40.399
+Even if we continue, it's empty.
+
+00:06:40.400 --> 00:06:43.399
+There's not much because Gnus doesn't know
+
+00:06:43.400 --> 00:06:47.039
+where to fetch these emails from.
+
+00:06:47.040 --> 00:06:52.159
+And that's what we will configure.
+
+00:06:52.160 --> 00:06:55.859
+Excuse me.
+
+00:06:55.860 --> 00:06:57.559
+Yeah, so just for convenience,
+
+00:06:57.560 --> 00:06:59.079
+we can bind Gnus to,
+
+00:06:59.080 --> 00:07:00.679
+for example, C-c g, as I've done here.
+
+00:07:00.680 --> 00:07:04.119
+You will want to set your name
+
+00:07:04.120 --> 00:07:05.799
+and email address, like so.
+
+00:07:05.800 --> 00:07:09.239
+Here we tell Emacs
+
+00:07:09.240 --> 00:07:11.439
+that we are going to be using Gnus for reading email,
+
+00:07:11.440 --> 00:07:12.839
+because Emacs comes
+
+00:07:12.840 --> 00:07:14.759
+with other email clients as well,
+
+00:07:14.760 --> 00:07:18.559
+such as Rmail, and in fact, defaults to Rmail,
+
+00:07:18.560 --> 00:07:24.839
+so this way, we tell it to use Gnus.
+
+00:07:24.840 --> 00:07:31.559
+By default, Gnus puts its newsrc file and other files,
+
+00:07:31.560 --> 00:07:34.319
+I believe it still scatters them
+
+00:07:34.320 --> 00:07:35.439
+in a few different directories
+
+00:07:35.440 --> 00:07:36.279
+in your home directory,
+
+00:07:36.280 --> 00:07:37.399
+so it's a little bit messy.
+
+00:07:37.400 --> 00:07:40.039
+So what I prefer to do is to just put it
+
+00:07:40.040 --> 00:07:42.439
+all under the Gnus directory
+
+00:07:42.440 --> 00:07:47.439
+inside of my Emacs configuration, as I do here.
+
+00:07:47.440 --> 00:07:50.639
+Yeah, and then here we just tell Gnus
+
+00:07:50.640 --> 00:07:53.319
+to, like, don't try to bother
+
+00:07:53.320 --> 00:07:55.759
+with a generic newsrc file
+
+00:07:55.760 --> 00:07:57.119
+that would be shared
+
+00:07:57.120 --> 00:07:58.399
+with other news readers.
+
+00:07:58.400 --> 00:07:59.679
+Just want to use it for email.
+
+00:07:59.680 --> 00:08:01.959
+And yeah, so we just tell Gnus
+
+00:08:01.960 --> 00:08:03.039
+to keep all of its data
+
+00:08:03.040 --> 00:08:08.079
+inside a dedicated .newsrc.eld
+
+00:08:08.080 --> 00:08:12.159
+(for Emacs Lisp data) file instead.
+
+00:08:12.160 --> 00:08:15.199
+And we can also have Gnus not prompt us
+
+00:08:15.200 --> 00:08:19.679
+when we want to exit with q.
+
+00:08:19.680 --> 00:08:23.399
+Anyway, so let's go ahead and evaluate this.
+
+00:08:23.400 --> 00:08:25.719
+So this has been set,
+
+NOTE Starting Gnus
+
+00:08:25.720 --> 00:08:32.267
+so if we type M-x gnus again, or hit C-c g,
+
+00:08:32.268 --> 00:08:35.699
+now we're faced with an empty buffer,
+
+00:08:35.700 --> 00:08:37.399
+and it says no news is good news,
+
+00:08:37.400 --> 00:08:38.399
+and that's actually
+
+00:08:38.400 --> 00:08:40.719
+one of the characteristics of Gnus
+
+00:08:40.720 --> 00:08:44.779
+is that by default it tries
+
+00:08:44.780 --> 00:08:47.619
+to like sort of declutter
+
+00:08:47.620 --> 00:08:49.199
+and show us a little less possible
+
+00:08:49.200 --> 00:08:50.819
+in the group buffer,
+
+00:08:50.820 --> 00:08:53.259
+meaning that if you don't have
+
+00:08:53.260 --> 00:08:55.639
+any groups with unread or marked
+
+00:08:55.640 --> 00:09:00.119
+or, like, starred messages, it will not show them.
+
+00:09:00.120 --> 00:09:03.959
+To actually see all of our groups or folders,
+
+00:09:03.960 --> 00:09:08.359
+we hit shift L or capital L,
+
+00:09:08.360 --> 00:09:12.419
+and we see that we have an inbox here,
+
+00:09:12.420 --> 00:09:14.879
+as expected. So we enter the inbox,
+
+00:09:14.880 --> 00:09:17.459
+and we see that there is an article there
+
+00:09:17.460 --> 00:09:20.779
+and it's already been marked as read.
+
+00:09:20.780 --> 00:09:22.679
+But if we mark it as unread
+
+00:09:22.680 --> 00:09:25.959
+and exit and enter Gnus again,
+
+00:09:25.960 --> 00:09:27.279
+this is what we would see.
+
+00:09:27.280 --> 00:09:28.839
+We would see that our group
+
+00:09:28.840 --> 00:09:34.099
+and then we enter it, we see our mail here.
+
+00:09:34.100 --> 00:09:36.159
+Yeah, and this is our very first email
+
+00:09:36.160 --> 00:09:40.079
+that we read in GNU Emacs here, inside Gnus.
+
+NOTE Always showing groups
+
+00:09:40.080 --> 00:09:43.839
+It might be useful to have Gnus always show
+
+00:09:43.840 --> 00:09:46.839
+certain groups or folders
+
+00:09:46.840 --> 00:09:48.319
+even if they don't have
+
+00:09:48.320 --> 00:09:52.339
+anything unread or marked inside of them.
+
+00:09:52.340 --> 00:09:56.039
+The way we can do that is
+
+00:09:56.040 --> 00:09:57.599
+by setting this variable
+
+00:09:57.600 --> 00:10:01.339
+gnus-permanently-visible-groups
+
+00:10:01.340 --> 00:10:03.039
+to a regular expression
+
+00:10:03.040 --> 00:10:09.119
+that describes the name of these groups.
+
+00:10:09.120 --> 00:10:11.539
+So if we launch Gnus again,
+
+00:10:11.540 --> 00:10:14.759
+this time, we see that that group is visible,
+
+00:10:14.760 --> 00:10:19.899
+even though there's no unread messages in it.
+
+NOTE Reading messages
+
+00:10:19.900 --> 00:10:24.399
+When we enter a group or folder,
+
+00:10:24.400 --> 00:10:26.719
+we will see a list of all of our messages.
+
+00:10:26.720 --> 00:10:27.799
+Here, we only have one.
+
+00:10:27.800 --> 00:10:31.939
+We can press M-u or Alt-u
+
+00:10:31.940 --> 00:10:34.679
+to mark something as unread.
+
+00:10:34.680 --> 00:10:38.539
+You can press d to mark it as read.
+
+00:10:38.540 --> 00:10:40.079
+If you press just u,
+
+00:10:40.080 --> 00:10:41.959
+it'll tick the article,
+
+00:10:41.960 --> 00:10:44.039
+which is kind of the equivalent
+
+00:10:44.040 --> 00:10:46.999
+of marking the message or email
+
+00:10:47.000 --> 00:10:50.539
+as starred in other email clients
+
+00:10:50.540 --> 00:10:55.719
+such as Thunderbird.
+
+00:10:55.720 --> 00:11:00.639
+We see that when there are groups
+
+00:11:00.640 --> 00:11:03.959
+that have starred or ticked messages
+
+00:11:03.960 --> 00:11:04.679
+inside of them,
+
+00:11:04.680 --> 00:11:05.599
+Gnus will mark them
+
+00:11:05.600 --> 00:11:16.019
+with this little star here, or asterisk.
+
+00:11:16.020 --> 00:11:17.639
+This talk is just barely
+
+00:11:17.640 --> 00:11:19.039
+scratching the surface.
+
+00:11:19.040 --> 00:11:21.080
+Let's see how far...
+
+00:11:21.081 --> 00:11:22.759
+How am I doing with the time?
+
+00:11:22.760 --> 00:11:30.119
+Okay, 11 minutes already.
+
+NOTE Debugging IMAP
+
+00:11:30.120 --> 00:11:32.079
+Just a couple of helpful things here,
+
+00:11:32.080 --> 00:11:36.919
+like this nnimap-record-commands variable.
+
+00:11:36.920 --> 00:11:38.519
+It's useful when you want to debug
+
+00:11:38.520 --> 00:11:40.119
+your IMAP setup with Gnus.
+
+00:11:40.120 --> 00:11:42.859
+If you set it to anything non-nil,
+
+00:11:42.860 --> 00:11:46.699
+it will log the commands that it runs
+
+00:11:46.700 --> 00:11:49.539
+to a special `*imap log*` buffer.
+
+00:11:49.540 --> 00:11:50.719
+And here I just set it
+
+00:11:50.720 --> 00:11:52.679
+to this init-file-debug variable,
+
+00:11:52.680 --> 00:11:55.159
+which is set to non-nil
+
+00:11:55.160 --> 00:11:56.439
+whenever you launch Emacs
+
+00:11:56.440 --> 00:11:59.279
+with the --debug-init switch,
+
+00:11:59.280 --> 00:12:02.239
+so that's pretty helpful.
+
+00:12:02.240 --> 00:12:05.119
+You want to also set your sent folder,
+
+00:12:05.120 --> 00:12:07.479
+basically, where Gnus will save
+
+00:12:07.480 --> 00:12:09.439
+a copy of the message that you just sent.
+
+00:12:09.440 --> 00:12:12.799
+Normally, I think the convention these days is,
+
+00:12:12.800 --> 00:12:16.599
+a lot of you know servers and clients
+
+00:12:16.600 --> 00:12:18.799
+use a dedicated sent folder,
+
+00:12:18.800 --> 00:12:24.339
+but with Gnus, I just prefer to use INBOX itself.
+
+00:12:24.340 --> 00:12:27.119
+Mainly because then I will have
+
+00:12:27.120 --> 00:12:28.759
+threading working for free,
+
+00:12:28.760 --> 00:12:31.939
+so I can read the entire thread
+
+00:12:31.940 --> 00:12:34.299
+of an email chain there in one place.
+
+00:12:34.300 --> 00:12:35.319
+Of course, we don't have to keep
+
+00:12:35.320 --> 00:12:38.899
+the messages in there forever.
+
+00:12:38.900 --> 00:12:42.079
+And in fact, Gnus has facilities,
+
+00:12:42.080 --> 00:12:43.479
+both manual and automated,
+
+00:12:43.480 --> 00:12:45.999
+for expiring emails into
+
+00:12:46.000 --> 00:12:52.679
+different locations or different folders.
+
+00:12:52.680 --> 00:12:55.159
+Yeah. So let's move on here.
+
+NOTE Topics
+
+00:12:55.160 --> 00:13:02.039
+Topics are another nice feature of Gnus.
+
+00:13:02.040 --> 00:13:03.279
+So this is useful
+
+00:13:03.280 --> 00:13:05.359
+for creating some topics
+
+00:13:05.360 --> 00:13:08.459
+and then classifying or grouping
+
+00:13:08.460 --> 00:13:10.599
+your directories there.
+
+00:13:10.600 --> 00:13:11.799
+So we will see the use
+
+00:13:11.800 --> 00:13:13.639
+of this in a moment,
+
+00:13:13.640 --> 00:13:17.019
+where, let's say, I want to add
+
+00:13:17.020 --> 00:13:19.999
+a second account to Gnus.
+
+00:13:20.000 --> 00:13:23.559
+This one I'm going to call ec25work.
+
+00:13:23.560 --> 00:13:24.679
+Let's pretend that
+
+00:13:24.680 --> 00:13:29.859
+this is my work email.
+
+00:13:29.860 --> 00:13:32.479
+So if we open Gnus now,
+
+00:13:32.480 --> 00:13:36.999
+we see that our work INBOX
+
+00:13:37.000 --> 00:13:37.959
+also shows up here.
+
+00:13:37.960 --> 00:13:41.299
+And because we enabled topic mode,
+
+00:13:41.300 --> 00:13:42.359
+we see that we have
+
+00:13:42.360 --> 00:13:43.439
+these sort of buttons
+
+00:13:43.440 --> 00:13:44.839
+like Gnus and misc here.
+
+00:13:44.840 --> 00:13:46.679
+And we can, I believe,
+
+00:13:46.680 --> 00:13:49.799
+create a topic with capital T n.
+
+00:13:49.800 --> 00:13:52.879
+We can call it personal, this one.
+
+00:13:52.880 --> 00:13:56.939
+Let's create another one, work.
+
+00:13:56.940 --> 00:13:59.579
+And then what we can do is go
+
+00:13:59.580 --> 00:14:02.799
+over the directory that we want,
+
+00:14:02.800 --> 00:14:04.759
+for example, this one,
+
+00:14:04.760 --> 00:14:08.219
+hit capital T m to move it
+
+00:14:08.220 --> 00:14:11.899
+to the personal topic,
+
+00:14:11.900 --> 00:14:13.079
+and this work one,
+
+00:14:13.080 --> 00:14:15.199
+move it to the work topic.
+
+00:14:15.200 --> 00:14:17.439
+So we can nicely classify
+
+00:14:17.440 --> 00:14:23.119
+and group our groups folders here,
+
+00:14:23.120 --> 00:14:24.719
+which is especially useful
+
+00:14:24.720 --> 00:14:25.559
+when you have hundreds of them.
+
+NOTE Customizing message display
+
+00:14:25.560 --> 00:14:29.759
+Anyhow, we can customize
+
+00:14:29.760 --> 00:14:35.039
+different aspects of message display.
+
+00:14:35.040 --> 00:14:35.839
+Like for example,
+
+00:14:35.840 --> 00:14:38.199
+we can this way customize
+
+00:14:38.200 --> 00:14:39.199
+and change the order of
+
+00:14:39.200 --> 00:14:41.599
+which headers we want to see and where.
+
+00:14:41.600 --> 00:14:45.199
+So if I launch Gnus
+
+00:14:45.200 --> 00:14:48.459
+and go back to this email here,
+
+00:14:48.460 --> 00:14:52.139
+these are the headers that we see at the top.
+
+00:14:52.140 --> 00:14:52.639
+Excuse me.
+
+00:14:52.640 --> 00:14:55.159
+And with Gnus we can always
+
+00:14:55.160 --> 00:14:57.799
+We can have it show all the headers
+
+00:14:57.800 --> 00:15:01.999
+by pressing t to toggle the headers.
+
+00:15:02.000 --> 00:15:04.579
+Here we can see all the nitty-gritty
+
+00:15:04.580 --> 00:15:06.359
+and all of the headers in the message
+
+00:15:06.360 --> 00:15:12.219
+and we can toggle it back with t again.
+
+00:15:12.220 --> 00:15:16.479
+We can modify and customize the sorting
+
+00:15:16.480 --> 00:15:20.019
+with dedicated sorting functions.
+
+00:15:20.020 --> 00:15:20.999
+It comes with a number of them
+
+00:15:21.000 --> 00:15:21.599
+out of the box
+
+00:15:21.600 --> 00:15:24.319
+but we can define them as well.
+
+NOTE Sending emails
+
+00:15:24.320 --> 00:15:29.759
+Now to send emails. Let's see.
+
+00:15:29.760 --> 00:15:30.999
+We will be using message,
+
+00:15:31.000 --> 00:15:34.939
+and that's what Gnus itself uses.
+
+00:15:34.940 --> 00:15:38.579
+So I will set things up here.
+
+00:15:38.580 --> 00:15:42.639
+Let's see.
+
+00:15:42.640 --> 00:15:44.519
+Okay, so first of all,
+
+00:15:44.520 --> 00:15:46.439
+we want to have Gnus mark
+
+00:15:46.440 --> 00:15:48.519
+the messages that we write to others
+
+00:15:48.520 --> 00:15:49.759
+as read automatically,
+
+00:15:49.760 --> 00:15:51.359
+so this option does that.
+
+00:15:51.360 --> 00:15:58.039
+And then we define posting styles this way
+
+00:15:58.040 --> 00:16:01.619
+using the prefix, the name
+
+00:16:01.620 --> 00:16:04.359
+of the IMAP server.
+
+00:16:04.360 --> 00:16:06.519
+And this is how we can tell it to use
+
+00:16:06.520 --> 00:16:09.199
+what email address for the From [header]
+
+00:16:09.200 --> 00:16:14.599
+and which SMTP server to send it with.
+
+00:16:14.600 --> 00:16:17.879
+Yeah, and then gcc is where Gnus will save
+
+00:16:17.880 --> 00:16:20.199
+the copy of the messages that we write.
+
+00:16:20.200 --> 00:16:24.139
+So if we go ahead and launch Gnus again.
+
+00:16:24.140 --> 00:16:26.279
+We can go into our personal email here,
+
+00:16:26.280 --> 00:16:28.919
+hit m to compose a new message.
+
+00:16:28.920 --> 00:16:33.559
+We can prepare an email to,
+
+00:16:33.560 --> 00:16:35.119
+let's say, our work address.
+
+00:16:35.120 --> 00:16:42.419
+Hello from EmacsConf 2025 Gnus talk.
+
+00:16:42.420 --> 00:16:47.639
+Hello, this is just a test. :)
+
+00:16:47.640 --> 00:16:55.739
+Yeah, and we hit send.
+
+00:16:55.740 --> 00:16:56.919
+The sending will be done
+
+00:16:56.920 --> 00:17:03.479
+using Emacs's built-in SMTP libraries.
+
+00:17:03.480 --> 00:17:05.119
+Sometimes it can take a moment.
+
+00:17:05.120 --> 00:17:07.599
+Okay, that's it. It's done.
+
+00:17:07.600 --> 00:17:09.259
+So if we go back out
+
+00:17:09.260 --> 00:17:11.559
+and if we hit g to get new news,
+
+00:17:11.560 --> 00:17:15.679
+we should be able to see our new email there
+
+00:17:15.680 --> 00:17:17.639
+in the other account that we just sent it to.
+
+00:17:17.640 --> 00:17:22.360
+So we can come here, open it,
+
+00:17:22.361 --> 00:17:26.659
+and there we go.
+
+NOTE Plans
+
+00:17:26.660 --> 00:17:29.239
+There is a lot to configure in Gnus,
+
+00:17:29.240 --> 00:17:31.439
+and we're just barely scratching the surface,
+
+00:17:31.440 --> 00:17:34.079
+and unfortunately I don't have the time
+
+00:17:34.080 --> 00:17:34.999
+to explain all of these
+
+00:17:35.000 --> 00:17:36.519
+but I do plan on doing
+
+00:17:36.520 --> 00:17:38.839
+a much longer running series,
+
+00:17:38.840 --> 00:17:41.499
+whether it's text or videos,
+
+00:17:41.500 --> 00:17:42.879
+showing how to configure
+
+00:17:42.880 --> 00:17:45.319
+and use a lot of these different aspects of Gnus.
+
+00:17:45.320 --> 00:17:49.519
+But yeah, here, near the end, just a couple of...
+
+00:17:49.520 --> 00:17:54.919
+quick things. I find it's nice to have message
+
+00:17:54.920 --> 00:17:56.519
+prompt us for [confirmation]
+
+00:17:56.520 --> 00:17:59.199
+that we do want to send a message.
+
+00:17:59.200 --> 00:18:01.359
+Actually, when it does that, I take
+
+00:18:01.360 --> 00:18:02.599
+another look over my email
+
+00:18:02.600 --> 00:18:07.059
+to make sure I don't have any typos.
+
+00:18:07.060 --> 00:18:09.519
+It's generally a good idea to wrap your messages
+
+00:18:09.520 --> 00:18:14.119
+around 70 or 72 characters.
+
+00:18:14.120 --> 00:18:16.619
+We do that here.
+
+00:18:16.620 --> 00:18:19.159
+We can tell Gnus to forward messages
+
+00:18:19.160 --> 00:18:22.599
+as a proper MIME part,
+
+00:18:22.600 --> 00:18:27.059
+instead of some half-broken way.
+
+00:18:27.060 --> 00:18:30.119
+This customization, the sendmail function,
+
+00:18:30.120 --> 00:18:34.239
+is how we tell Gnus with message
+
+00:18:34.240 --> 00:18:38.239
+to use the SMTP library to sending the email,
+
+00:18:38.240 --> 00:18:42.479
+and these two variables are useful for
+
+00:18:42.480 --> 00:18:45.959
+omitting our own email address
+
+00:18:45.960 --> 00:18:47.439
+when we want to send someone,
+
+00:18:47.440 --> 00:18:50.179
+like when we hit r, to reply to someone.
+
+00:18:50.180 --> 00:18:51.959
+if we configure these variables,
+
+00:18:51.960 --> 00:18:52.959
+then Gnus won't add
+
+00:18:52.960 --> 00:18:56.059
+our own address to the To or Cc,
+
+00:18:56.060 --> 00:18:58.479
+which is pretty useful.
+
+00:18:58.480 --> 00:18:59.919
+I also find it helpful
+
+00:18:59.920 --> 00:19:03.359
+to unbind C-c C-s.
+
+00:19:03.360 --> 00:19:04.974
+That's another key
+
+00:19:04.975 --> 00:19:06.319
+for sending the message [in addition to C-c C-c].
+
+00:19:06.320 --> 00:19:09.719
+And because C-c C-d,
+
+00:19:09.720 --> 00:19:13.359
+which is very close to it on the QWERTY layout,
+
+00:19:13.360 --> 00:19:15.719
+is useful for saving a draft
+
+00:19:15.720 --> 00:19:16.839
+and then coming back to it,
+
+00:19:16.840 --> 00:19:20.079
+I don't want to accidentally hit C-c C-s,
+
+00:19:20.080 --> 00:19:22.039
+and send the message prematurely.
+
+00:19:22.040 --> 00:19:25.979
+So I unbind it.
+
+00:19:25.980 --> 00:19:27.959
+Yeah, anyway, that's about it.
+
+NOTE Wrapping up
+
+00:19:27.960 --> 00:19:31.039
+That's a kind of very quick tour
+
+00:19:31.040 --> 00:19:37.119
+and introduction of setting up Gnus.
+
+00:19:37.120 --> 00:19:40.719
+Here, we just configured a remote IMAP server,
+
+00:19:40.720 --> 00:19:43.519
+but we can also, of course,
+
+00:19:43.520 --> 00:19:46.359
+set up a local IMAP server such as Dovecot
+
+00:19:46.360 --> 00:19:48.399
+and point Gnus to there,
+
+00:19:48.400 --> 00:19:52.799
+and use programs like OfflineIMAP, I believe,
+
+00:19:52.800 --> 00:19:57.479
+or the mbsync program from isync package
+
+00:19:57.480 --> 00:20:02.939
+or isync project to synchronize our messages
+
+00:20:02.940 --> 00:20:04.479
+to local mail directories
+
+00:20:04.480 --> 00:20:06.279
+and then point Gnus to it.
+
+00:20:06.280 --> 00:20:08.359
+The reason we might want to use that
+
+00:20:08.360 --> 00:20:11.719
+is to always have a copy of our messages at hand
+
+00:20:11.720 --> 00:20:12.759
+so we can use offline.
+
+NOTE nnimap
+
+00:20:12.760 --> 00:20:17.439
+And why use nnimap specifically?
+
+00:20:17.440 --> 00:20:27.399
+As of now, the Maildir backend included with Gnus
+
+00:20:27.400 --> 00:20:29.679
+is very inefficient,
+
+00:20:29.680 --> 00:20:31.399
+especially when dealing with
+
+00:20:31.400 --> 00:20:33.839
+tens or hundreds of thousands of messages
+
+00:20:33.840 --> 00:20:36.659
+like some of us are.
+
+00:20:36.660 --> 00:20:38.759
+It just takes an eternity to try
+
+00:20:38.760 --> 00:20:43.259
+and index them and get going.
+
+00:20:43.260 --> 00:20:44.639
+In that case, what I recommend doing
+
+00:20:44.640 --> 00:20:47.799
+is instead of interfacing directly with Maildir,
+
+00:20:47.800 --> 00:20:52.359
+for Gnus, just install and run
+
+00:20:52.360 --> 00:20:54.359
+Dovecot, a local IMAP server,
+
+00:20:54.360 --> 00:20:59.819
+and point Gnus to that.
+
+00:20:59.820 --> 00:21:02.959
+I plan on writing tutorials or doing videos
+
+00:21:02.960 --> 00:21:06.639
+about these other aspects
+
+00:21:06.640 --> 00:21:10.519
+of configuring Gnus after the conference.
+
+00:21:10.520 --> 00:21:11.439
+That's about it for me,
+
+00:21:11.440 --> 00:21:14.119
+so I hope you find this helpful.
+
+00:21:14.120 --> 00:21:16.679
+If you have any questions,
+
+00:21:16.680 --> 00:21:18.239
+please feel free to email me
+
+00:21:18.240 --> 00:21:23.759
+at bandali@gnu.org or @kelar.org.
+
+00:21:23.760 --> 00:21:25.879
+You can take a look at my personal website
+
+00:21:25.880 --> 00:21:26.839
+where I plan on posting
+
+00:21:26.840 --> 00:21:31.059
+other Emacs and Gnus materials.
+
+00:21:31.060 --> 00:21:33.039
+And yeah, thank you for watching
+
+00:21:33.040 --> 00:21:35.159
+and I hope you enjoy the rest of the conference.
+
+00:21:35.160 --> 00:21:37.760
+Take care.
diff --git a/2025/captions/emacsconf-2025-graphics--modern-emacselisp-hardwaresoftware-accelerated-graphics--emanuel-berg--main.vtt b/2025/captions/emacsconf-2025-graphics--modern-emacselisp-hardwaresoftware-accelerated-graphics--emanuel-berg--main.vtt
new file mode 100644
index 00000000..333eb857
--- /dev/null
+++ b/2025/captions/emacsconf-2025-graphics--modern-emacselisp-hardwaresoftware-accelerated-graphics--emanuel-berg--main.vtt
@@ -0,0 +1,4 @@
+WEBVTT captioned by sachac
+
+00:00:00.000 --> 00:22:15.777
+[ This video has no audio. ]
diff --git a/2025/captions/emacsconf-2025-greader--gnu-emacs-greader-gnam-reader-mode-is-the-best-emacs-mode-in-existence--yuval-langer--main.vtt b/2025/captions/emacsconf-2025-greader--gnu-emacs-greader-gnam-reader-mode-is-the-best-emacs-mode-in-existence--yuval-langer--main.vtt
new file mode 100644
index 00000000..780ff013
--- /dev/null
+++ b/2025/captions/emacsconf-2025-greader--gnu-emacs-greader-gnam-reader-mode-is-the-best-emacs-mode-in-existence--yuval-langer--main.vtt
@@ -0,0 +1,223 @@
+WEBVTT captioned by sachac
+
+NOTE Introduction
+
+00:00:01.460 --> 00:00:03.785
+Hi, I'm Yuval Langer.
+
+00:00:03.786 --> 00:00:09.479
+Some may know me as cow_2001 on IRC.
+
+00:00:09.480 --> 00:00:12.119
+I'd like to tell you about greader mode,
+
+00:00:12.120 --> 00:00:14.519
+a versatile text-to-speech package
+
+00:00:14.520 --> 00:00:18.399
+written by Michelangelo Rodriguez.
+
+00:00:18.400 --> 00:00:20.399
+Sometimes you want to read a bunch
+
+00:00:20.400 --> 00:00:23.039
+and cannot be bothered, right?
+
+00:00:23.040 --> 00:00:25.079
+You'd rather plop on your chair
+
+00:00:25.080 --> 00:00:27.519
+and let the words come to you.
+
+00:00:27.520 --> 00:00:31.157
+You can do it using greader Mode.
+
+NOTE What is greader mode?
+
+00:00:31.158 --> 00:00:33.119
+What is greader mode?
+
+00:00:33.120 --> 00:00:36.319
+Greader mode is a text-to-speech minor mode
+
+00:00:36.320 --> 00:00:40.399
+with which you can read any buffer using the point.
+
+00:00:40.400 --> 00:00:41.602
+You move your point
+
+00:00:41.603 --> 00:00:43.559
+right before the text you want to read
+
+00:00:43.560 --> 00:00:47.639
+and run greader-read command.
+
+00:00:47.640 --> 00:00:50.839
+You can then use the left and right arrow keys
+
+00:00:50.840 --> 00:00:56.599
+to jump to the previous sentence or the next sentence.
+
+NOTE Installing Greader
+
+00:00:56.600 --> 00:00:59.143
+Installing GReader:
+
+00:00:59.144 --> 00:01:05.439
+Greader is available on the GNU Emacs app store
+
+00:01:05.440 --> 00:01:07.285
+and its copyright assigned to
+
+00:01:07.286 --> 00:01:10.959
+the Free Software Foundation.
+
+00:01:10.960 --> 00:01:12.857
+To install Greader,
+
+00:01:12.858 --> 00:01:19.279
+you can run M-x list-packages RET.
+
+00:01:19.280 --> 00:01:23.099
+look it up with C-s greader,
+
+00:01:23.100 --> 00:01:26.679
+press i to mark it for installation,
+
+00:01:26.680 --> 00:01:31.759
+and then press x to execute the installation.
+
+NOTE Basic usage
+
+00:01:31.760 --> 00:01:33.211
+Basic usage:
+
+00:01:33.212 --> 00:01:37.559
+We can now open a text file and start reading.
+
+00:01:37.560 --> 00:01:42.599
+Let's open The Willows by Algernon Blackwood.
+
+00:01:42.600 --> 00:01:44.479
+I've never read the story,
+
+00:01:44.480 --> 00:01:48.279
+but HP Lovecraft said it was the best horror story
+
+00:01:48.280 --> 00:01:52.959
+he had ever read, so it is in my reading list.
+
+00:01:52.960 --> 00:02:01.519
+Now load greader using M-x greader-mode.
+
+00:02:01.520 --> 00:02:08.139
+To start reading, press C-r SPC.
+
+00:02:08.140 --> 00:02:10.559
+The Project Gutenberg ebook of The willows.
+
+00:02:10.560 --> 00:02:14.079
+This will run the greader-read command.
+
+00:02:14.080 --> 00:02:16.799
+To stop, press the SPC key.
+
+00:02:16.800 --> 00:02:20.819
+This will run the greader-stop command.
+
+NOTE Navigation
+
+00:02:20.820 --> 00:02:22.359
+Navigation:
+
+00:02:22.360 --> 00:02:24.679
+You can navigate like you normally do,
+
+00:02:24.680 --> 00:02:27.559
+but using the left or right arrow keys
+
+00:02:27.560 --> 00:02:30.199
+will move the point between sentences
+
+00:02:30.200 --> 00:02:33.087
+instead of characters.
+
+00:02:33.088 --> 00:02:36.639
+So... This ebook is...
+
+00:02:36.640 --> 00:02:38.095
+You may copy it, give it away,
+
+00:02:38.096 --> 00:02:41.479
+or reuse it if you are not.
+
+00:02:41.480 --> 00:02:43.580
+Let's move to the start of the story.
+
+00:02:57.040 --> 00:02:58.088
+"After leaving Vienna,
+
+00:02:58.089 --> 00:02:59.839
+and long before you come to Budapest,
+
+00:02:59.840 --> 00:03:00.919
+the Danube enters a region
+
+00:03:00.920 --> 00:03:02.919
+of singular loneliness and desolation,
+
+00:03:02.920 --> 00:03:04.879
+where its waters spread away on all sides,
+
+00:03:04.880 --> 00:03:06.199
+regardless of a main channel,
+
+00:03:06.200 --> 00:03:08.799
+and the country becomes a swamp for miles upon miles,
+
+00:03:08.800 --> 00:03:11.759
+covered by a vast sea of low willow bushes."
+
+NOTE Reading rate
+
+00:03:12.380 --> 00:03:15.839
+Reading rate: this reading rate is rather slow.
+
+00:03:15.840 --> 00:03:19.519
+Let's pick up the pace using the plus key.
+
+00:03:19.520 --> 00:03:23.519
+This will run the greader-inc-rate command.
+
+00:03:23.520 --> 00:03:26.780
+You must do that while greader is reading.
+
+00:03:37.885 --> 00:03:39.779
+Now it is too fast.
+
+00:03:39.780 --> 00:03:44.679
+We can slow down using the - key.
+
+00:03:44.680 --> 00:03:52.485
+This will run the greader-dec-rate command.
+
+00:03:54.560 --> 00:03:59.384
+"In high flood this great acreage
+
+00:03:59.385 --> 00:04:01.239
+of sand, shingle-beds, and willow-grown islands
+
+00:04:01.240 --> 00:04:02.439
+is almost topped by the water,
+
+00:04:02.440 --> 00:04:03.609
+but in normal seasons the bushes
+
+00:04:03.610 --> 00:04:04.919
+bend and rustle in the free winds,
+
+00:04:04.920 --> 00:04:06.399
+showing their silver leaves to the sunshine
+
+00:04:06.400 --> 00:04:08.320
+in an ever-moving plain of bewildering beauty."
diff --git a/2025/captions/emacsconf-2025-juicemacs--juicemacs-exploring-speculative-jit-compilation-for-elisp-in-java--kana--main.vtt b/2025/captions/emacsconf-2025-juicemacs--juicemacs-exploring-speculative-jit-compilation-for-elisp-in-java--kana--main.vtt
new file mode 100644
index 00000000..46820e94
--- /dev/null
+++ b/2025/captions/emacsconf-2025-juicemacs--juicemacs-exploring-speculative-jit-compilation-for-elisp-in-java--kana--main.vtt
@@ -0,0 +1,1238 @@
+WEBVTT captioned by kana
+
+
+00:00:01.200 --> 00:00:02.803
+Hello! This is Kana!
+
+00:00:02.903 --> 00:00:04.367
+And today I'll be talking about
+
+00:00:04.368 --> 00:00:06.067
+<b>J</b>ust-<b>I</b>n-<b>T</b>ime compilation, or JIT,
+
+00:00:06.068 --> 00:00:07.363
+for Emacs Lisp,
+
+00:00:07.463 --> 00:00:11.163
+based on my work-in-progress Emacs clone, Juicemacs.
+
+00:00:11.263 --> 00:00:13.533
+Juicemacs aims to explore a few things
+
+00:00:13.534 --> 00:00:15.843
+that I've been wondering about for a while.
+
+00:00:15.943 --> 00:00:18.567
+For exmaple, what if we had better or even
+
+00:00:18.568 --> 00:00:21.223
+transparent concurrency in ELisp?
+
+00:00:21.323 --> 00:00:23.243
+Or, can we have a concurrent GUI?
+
+00:00:23.343 --> 00:00:26.783
+One that does not block, or is blocked by Lisp code?
+
+00:00:26.883 --> 00:00:31.067
+And finally what can JIT compilation do for ELisp?
+
+00:00:31.068 --> 00:00:34.083
+Will it provide better performance?
+
+00:00:34.183 --> 00:00:37.400
+However, a main problem with explorations
+
+00:00:37.401 --> 00:00:38.623
+in Emacs clones is that,
+
+00:00:38.723 --> 00:00:40.863
+Emacs is a whole universe.
+
+00:00:40.963 --> 00:00:43.600
+And that means, to make these explorations
+
+00:00:43.601 --> 00:00:45.383
+meaningful for Emacs users,
+
+00:00:45.483 --> 00:00:47.967
+we need to cover a lot of Emacs features,
+
+00:00:47.968 --> 00:00:50.543
+before we can ever begin.
+
+00:00:50.643 --> 00:00:53.923
+For example, one of the features of Emacs is that,
+
+00:00:54.023 --> 00:00:56.003
+it supports a lot of encodings.
+
+00:00:56.103 --> 00:00:59.267
+Let's look at this string: it can be encoded
+
+00:00:59.268 --> 00:01:03.643
+in both Unicode and Shift-JIS, a Japanese encoding system.
+
+00:01:03.743 --> 00:01:07.067
+But currently, Unicode does not have
+
+00:01:07.068 --> 00:01:09.803
+an official mapping for this "ki" (﨑) character.
+
+00:01:09.903 --> 00:01:12.767
+So when we map from Shift-JIS to Unicode,
+
+00:01:12.768 --> 00:01:14.423
+in most programming languages,
+
+00:01:14.523 --> 00:01:16.533
+you end up with something like this:
+
+00:01:16.534 --> 00:01:19.143
+it's a replacement character.
+
+00:01:19.243 --> 00:01:22.067
+But in Emacs, it actually extends
+
+00:01:22.068 --> 00:01:23.883
+the Unicode range by threefold,
+
+00:01:23.983 --> 00:01:26.833
+and uses the extra range to losslessly
+
+00:01:26.834 --> 00:01:29.483
+support characters like this.
+
+00:01:29.583 --> 00:01:31.923
+So if you want to support this feature,
+
+00:01:32.023 --> 00:01:34.033
+that basically rules out all string
+
+00:01:34.034 --> 00:01:37.243
+libraries with Unicode assumptions.
+
+00:01:37.843 --> 00:01:40.067
+For another, you need to support
+
+00:01:40.068 --> 00:01:41.883
+the regular expressions in Emacs,
+
+00:01:41.983 --> 00:01:45.023
+which are, really irregular.
+
+00:01:45.123 --> 00:01:46.900
+For example, it supports asserting
+
+00:01:46.901 --> 00:01:49.403
+about the user cursor position.
+
+00:01:49.503 --> 00:01:52.033
+And it also uses some character tables,
+
+00:01:52.034 --> 00:01:53.883
+that can be modified from Lisp code,
+
+00:01:53.983 --> 00:01:56.163
+to determine to case mappings.
+
+00:01:56.263 --> 00:01:59.567
+And all that makes it really hard, or even
+
+00:01:59.568 --> 00:02:05.123
+impossible to use any existing regexp libraries.
+
+00:02:05.223 --> 00:02:07.883
+Also, you need a functional garbage collector.
+
+00:02:07.983 --> 00:02:09.867
+You need threading primitives, because
+
+00:02:09.868 --> 00:02:12.323
+Emacs has already had some threading support.
+
+00:02:12.423 --> 00:02:14.533
+And you might want the performance of your clone
+
+00:02:14.534 --> 00:02:18.963
+to match Emacs, even with its native compilation enabled.
+
+00:02:19.063 --> 00:02:21.500
+Not to mention you also need a GUI for an editor.
+
+00:02:21.501 --> 00:02:23.543
+And so on.
+
+00:02:23.643 --> 00:02:25.633
+For Juicemacs, building on Java and
+
+00:02:25.634 --> 00:02:27.563
+a compiler framework called Truffle,
+
+00:02:27.663 --> 00:02:30.503
+helps in getting better performance;
+
+00:02:30.603 --> 00:02:32.933
+and by choosing a language with a good GC,
+
+00:02:32.934 --> 00:02:38.063
+we can actually focus more on the challenges above.
+
+00:02:38.163 --> 00:02:41.433
+Currently, Juicemacs has implemented three out of,
+
+00:02:41.434 --> 00:02:43.983
+at least four of the interpreters in Emacs.
+
+00:02:44.083 --> 00:02:46.363
+One for lisp code, one for bytecode,
+
+00:02:46.463 --> 00:02:48.567
+and one for regular expressions,
+
+00:02:48.568 --> 00:02:50.903
+all of them JIT-capable.
+
+00:02:51.003 --> 00:02:53.667
+Other than these, Emacs also has around
+
+00:02:53.668 --> 00:02:56.083
+two thousand built-in functions in C code.
+
+00:02:56.183 --> 00:02:57.333
+And Juicemacs has around
+
+00:02:57.334 --> 00:02:59.763
+four hundred of them implemented.
+
+00:02:59.863 --> 00:03:03.603
+It's not that many, but it is surprisingly enough
+
+00:03:03.703 --> 00:03:05.200
+to bootstrap Emacs and run
+
+00:03:05.201 --> 00:03:08.483
+the portable dumper, or pdump, in short.
+
+00:03:08.583 --> 00:03:11.243
+Let's have a try.
+
+00:03:11.343 --> 00:03:11.703
+
+
+00:03:11.803 --> 00:03:14.923
+So this is the binary produced by Java native image.
+
+00:03:15.023 --> 00:03:17.167
+And it's loading all the files
+
+00:03:17.168 --> 00:03:18.763
+needed for bootstrapping.
+
+00:03:18.863 --> 00:03:22.233
+Then it dumps the memory to a file to
+
+00:03:22.234 --> 00:03:24.923
+be loaded later, giving us fast startup.
+
+00:03:25.023 --> 00:03:28.723
+As we can see here, it throws some frame errors
+
+00:03:28.823 --> 00:03:31.400
+because Juicemacs doesn't have an editor UI
+
+00:03:31.401 --> 00:03:33.283
+or functional frames yet.
+
+00:03:33.383 --> 00:03:35.367
+But otherwise, it can already run
+
+00:03:35.368 --> 00:03:36.643
+quite some lisp code.
+
+00:03:36.743 --> 00:03:40.400
+For example, this code uses the benchmark library
+
+00:03:40.401 --> 00:03:44.403
+to measure the performance of this Fibonacci function.
+
+00:03:44.503 --> 00:03:47.067
+And we can see here, the JIT engine is
+
+00:03:47.068 --> 00:03:51.163
+already kicking in and makes the execution faster.
+
+00:03:51.263 --> 00:03:53.483
+In addition to that, with a bit of workaround,
+
+00:03:53.583 --> 00:03:56.467
+Juicemacs can also run some of the ERT,
+
+00:03:56.468 --> 00:04:01.043
+or, <b>E</b>macs <b>R</b>egression <b>T</b>est suite, that comes with Emacs.
+
+00:04:01.143 --> 00:04:05.823
+So... Yes, there are a bunch of test failures,
+
+00:04:05.923 --> 00:04:07.933
+which means we are not that compatible
+
+00:04:07.934 --> 00:04:09.523
+with Emacs and need more work.
+
+00:04:09.623 --> 00:04:12.803
+But the whole testing procedure runs fine,
+
+00:04:12.903 --> 00:04:14.767
+and it has proper stack traces,
+
+00:04:14.768 --> 00:04:17.803
+which is quite useful for debugging Juicemacs.
+
+00:04:17.903 --> 00:04:21.033
+So with that, a rather functional JIT runtime,
+
+00:04:21.034 --> 00:04:25.983
+let's now try look into today's topic, JIT compilation for ELisp.
+
+00:04:26.083 --> 00:04:28.533
+So, you probably know that Emacs has supported
+
+00:04:28.534 --> 00:04:32.083
+native-compilation, or nativecomp in short, for some time now.
+
+00:04:32.183 --> 00:04:35.033
+It mainly uses GCC to compile Lisp code
+
+00:04:35.034 --> 00:04:37.363
+into native code, ahead of time.
+
+00:04:37.463 --> 00:04:41.433
+And during runtime, Emacs loads those compiled files,
+
+00:04:41.434 --> 00:04:44.523
+and gets the performance of native code.
+
+00:04:44.623 --> 00:04:47.643
+However, for example, for installed packages,
+
+00:04:47.743 --> 00:04:49.059
+we might want to compile them when we
+
+00:04:49.060 --> 00:04:51.823
+actually use them instead of ahead of time.
+
+00:04:51.923 --> 00:04:53.733
+And Emacs supports this through
+
+00:04:53.734 --> 00:04:55.683
+this <i>native-comp-jit-compilation</i> flag.
+
+00:04:55.783 --> 00:04:59.767
+What it does is, during runtime, Emacs sends
+
+00:04:59.768 --> 00:05:03.203
+loaded files to external Emacs worker processes,
+
+00:05:03.303 --> 00:05:06.903
+which will then compile those files asynchronously.
+
+00:05:07.003 --> 00:05:09.043
+And when the compilation is done,
+
+00:05:09.143 --> 00:05:11.967
+the current Emacs session will load the compiled code back
+
+00:05:11.968 --> 00:05:16.323
+and improves its performance, on the fly.
+
+00:05:16.423 --> 00:05:18.643
+When you look at this procedure, however, it is,
+
+00:05:18.743 --> 00:05:21.563
+ahead-of-time compilation, done at runtime.
+
+00:05:21.663 --> 00:05:25.123
+And it is what current Emacs calls JIT compilation.
+
+00:05:25.223 --> 00:05:27.867
+But if you look at some other JIT engines,
+
+00:05:27.868 --> 00:05:31.803
+you'll see much more complex architectures.
+
+00:05:31.903 --> 00:05:34.233
+So, take luaJIT for an example,
+
+00:05:34.234 --> 00:05:36.163
+in addition to this red line here,
+
+00:05:36.263 --> 00:05:38.767
+which leads us from an interpreted state
+
+00:05:38.768 --> 00:05:40.643
+to a compiled native state,
+
+00:05:40.743 --> 00:05:42.163
+which is also what Emacs does,
+
+00:05:42.263 --> 00:05:44.333
+LuaJIT also supports going from
+
+00:05:44.334 --> 00:05:47.523
+a compiled state back to its interpreter.
+
+00:05:47.623 --> 00:05:51.483
+And this process is called "deoptimization".
+
+00:05:51.583 --> 00:05:55.300
+In contrast to its name, deoptimization here actually
+
+00:05:55.301 --> 00:05:58.563
+enables a huge category of JIT optimizations.
+
+00:05:58.663 --> 00:06:00.163
+They are called speculation.
+
+00:06:01.463 --> 00:06:04.600
+Basically, with speculation, the compiler
+
+00:06:04.601 --> 00:06:07.683
+can use runtime statistics to speculate,
+
+00:06:07.783 --> 00:06:11.443
+to make bolder assumptions in the compiled code.
+
+00:06:11.543 --> 00:06:13.983
+And when the assumptions are invalidated,
+
+00:06:14.083 --> 00:06:18.323
+the runtime deoptimizes the code, updates statistics,
+
+00:06:18.423 --> 00:06:21.133
+and then recompile the code based on new assumptions,
+
+00:06:21.134 --> 00:06:24.443
+and that will make the code more performant.
+
+00:06:24.543 --> 00:06:26.763
+Let's look at an example.
+
+00:06:28.463 --> 00:06:30.967
+So, here is a really simple function,
+
+00:06:30.968 --> 00:06:33.083
+that adds one to the input number.
+
+00:06:33.183 --> 00:06:36.167
+But in Emacs, it is not that simple,
+
+00:06:36.168 --> 00:06:38.203
+because Emacs has three categories of numbers,
+
+00:06:38.303 --> 00:06:42.700
+that is, fix numbers, or machine-word-sized integers,
+
+00:06:42.701 --> 00:06:45.603
+floating numbers, and big integers.
+
+00:06:45.703 --> 00:06:47.600
+And when we compile this, we need
+
+00:06:47.601 --> 00:06:49.363
+to handle all three cases.
+
+00:06:49.463 --> 00:06:52.600
+And if we analyze the code produced by Emacs,
+
+00:06:52.601 --> 00:06:54.683
+as is shown by this gray graph here,
+
+00:06:54.783 --> 00:06:58.083
+we can see that it has, two paths:
+
+00:06:58.183 --> 00:07:01.403
+One fast path, that does fast fix number addition;
+
+00:07:01.503 --> 00:07:03.967
+and one for slow paths, that calls out
+
+00:07:03.968 --> 00:07:06.523
+to an external plus-one function,
+
+00:07:06.623 --> 00:07:09.683
+to handle floating number and big integers.
+
+00:07:09.783 --> 00:07:13.167
+Now, if we pass integers into this function,
+
+00:07:13.168 --> 00:07:16.283
+it's pretty fast because it's on the fast path.
+
+00:07:16.383 --> 00:07:19.767
+However, if we pass in a floating number,
+
+00:07:19.768 --> 00:07:21.843
+then it has to go through the slow path,
+
+00:07:21.943 --> 00:07:25.563
+doing an extra function call, which is slow.
+
+00:07:25.663 --> 00:07:28.733
+What speculation might help here is that,
+
+00:07:28.734 --> 00:07:31.443
+it can have flexible fast paths.
+
+00:07:31.543 --> 00:07:34.563
+When we pass a floating number into this function,
+
+00:07:34.663 --> 00:07:37.400
+which currently has only fixnumbers on the fast path,
+
+00:07:37.401 --> 00:07:40.723
+it also has to go through the slow path.
+
+00:07:40.823 --> 00:07:44.567
+But the difference is that, a speculative runtime can
+
+00:07:44.568 --> 00:07:47.763
+deoptimize and recompile the code to adapt to this.
+
+00:07:47.863 --> 00:07:50.367
+And when it recompiles, it might add
+
+00:07:50.368 --> 00:07:52.643
+floating number onto the fast path,
+
+00:07:52.743 --> 00:07:55.003
+and now floating number operations are also fast.
+
+00:07:55.103 --> 00:07:58.567
+And this kind of speculation is why
+
+00:07:58.568 --> 00:08:03.603
+speculative runtime can be really fast.
+
+00:08:03.703 --> 00:08:05.723
+Let's take a look at some benchmarks.
+
+00:08:05.823 --> 00:08:09.423
+They're obtained with the <i>elisp-benchmarks</i> library on ELPA.
+
+00:08:09.523 --> 00:08:12.600
+The blue line here is for nativecomp,
+
+00:08:12.601 --> 00:08:16.043
+and these blue areas mean that nativecomp is slower.
+
+00:08:16.143 --> 00:08:19.133
+And, likewise, green areas mean that
+
+00:08:19.134 --> 00:08:20.523
+Juicemacs is slower.
+
+00:08:20.623 --> 00:08:22.867
+At a glance, the two (or four)
+
+00:08:22.868 --> 00:08:25.143
+actually seems somehow on par, to me.
+
+00:08:25.243 --> 00:08:30.383
+But, let's take a closer look at some of them.
+
+00:08:30.483 --> 00:08:32.667
+So, the first few benchmarks are the classic,
+
+00:08:32.668 --> 00:08:33.983
+Fibonacci benchmarks.
+
+00:08:34.083 --> 00:08:36.933
+We know that, the series is formed by
+
+00:08:36.934 --> 00:08:39.203
+adding the previous two numbers in the series.
+
+00:08:39.303 --> 00:08:41.700
+And looking at this expression here,
+
+00:08:41.701 --> 00:08:44.043
+Fibonacci benchmarks are quite intensive
+
+00:08:44.143 --> 00:08:46.800
+in number additions, subtractions,
+
+00:08:46.801 --> 00:08:49.103
+and function calls, if you use recursions.
+
+00:08:49.203 --> 00:08:51.000
+And it is exactly why
+
+00:08:51.001 --> 00:08:54.323
+Fibonacci series is a good benchmark.
+
+00:08:54.423 --> 00:08:57.243
+And looking at the results here... wow.
+
+00:08:57.343 --> 00:08:59.843
+Emacs nativecomp executes instantaneously.
+
+00:08:59.943 --> 00:09:04.523
+It's a total defeat for Juicemacs, seemingly.
+
+00:09:04.623 --> 00:09:08.043
+Now, if you're into benchmarks, you know something is wrong here:
+
+00:09:08.143 --> 00:09:11.683
+we are comparing the different things.
+
+00:09:11.783 --> 00:09:14.200
+So let's look under the hood
+
+00:09:14.201 --> 00:09:15.483
+and disassemble the function
+
+00:09:15.583 --> 00:09:17.567
+with this convenient Emacs command
+
+00:09:17.568 --> 00:09:19.063
+called <i>disassemble</i>...
+
+00:09:19.163 --> 00:09:23.043
+And these two lines of code is what we got.
+
+00:09:23.143 --> 00:09:24.700
+So, we already can see
+
+00:09:24.701 --> 00:09:26.123
+what's going on here:
+
+00:09:26.223 --> 00:09:29.963
+GCC sees Fibonacci is a pure function,
+
+00:09:30.063 --> 00:09:31.867
+because it returns the same value
+
+00:09:31.868 --> 00:09:33.243
+for the same arguments,
+
+00:09:33.343 --> 00:09:35.700
+so GCC chooses to do the computation
+
+00:09:35.701 --> 00:09:36.723
+at compile time
+
+00:09:36.823 --> 00:09:39.133
+and inserts the final number directly
+
+00:09:39.134 --> 00:09:40.323
+into the compiled code.
+
+00:09:41.823 --> 00:09:43.603
+It is actually great!
+
+00:09:43.703 --> 00:09:45.400
+Because it shows that nativecomp
+
+00:09:45.401 --> 00:09:47.283
+knows about pure functions,
+
+00:09:47.383 --> 00:09:48.700
+and can do all kinds of things
+
+00:09:48.701 --> 00:09:51.203
+like removing or constant-folding them.
+
+00:09:51.303 --> 00:09:54.403
+And Juicemacs just does not do that.
+
+00:09:54.503 --> 00:09:57.367
+However, we are also concerned about
+
+00:09:57.368 --> 00:09:59.003
+the things we mentioned earlier:
+
+00:09:59.103 --> 00:10:00.900
+the performance of number additions,
+
+00:10:00.901 --> 00:10:02.983
+or function calls.
+
+00:10:03.083 --> 00:10:05.633
+So, in order to let the benchmarks
+
+00:10:05.634 --> 00:10:06.863
+show some extra things,
+
+00:10:06.963 --> 00:10:08.367
+we need to modify it a bit...
+
+00:10:08.368 --> 00:10:11.323
+by simply making things non-constant.
+
+00:10:11.423 --> 00:10:15.203
+With that, Emacs gets much slower now.
+
+00:10:15.303 --> 00:10:17.133
+And again, let's look what's
+
+00:10:17.134 --> 00:10:21.083
+happening behind these numbers.
+
+00:10:21.183 --> 00:10:23.500
+Similarly, with the <i>disassemble</i> command,
+
+00:10:23.501 --> 00:10:25.643
+we can look into the assembly.
+
+00:10:25.743 --> 00:10:28.019
+And again, we can already see
+
+00:10:28.020 --> 00:10:29.303
+what's happening here.
+
+00:10:29.403 --> 00:10:32.083
+So, Juicemacs, due to its speculation nature,
+
+00:10:32.183 --> 00:10:35.443
+supports fast paths for all three kind of numbers.
+
+00:10:35.543 --> 00:10:39.233
+However, currently, Emacs nativecomp
+
+00:10:39.234 --> 00:10:41.243
+does not have any fast path
+
+00:10:41.343 --> 00:10:43.433
+for the operations here like additions,
+
+00:10:43.434 --> 00:10:45.803
+or subtractions, or comparisons,
+
+00:10:45.903 --> 00:10:48.067
+which is exactly what
+
+00:10:48.068 --> 00:10:50.963
+Fibonacci benchmarks are measuring.
+
+00:10:51.063 --> 00:10:53.800
+Emacs, at this time, has to call some generic,
+
+00:10:53.801 --> 00:10:57.963
+external functions for them, and this is slow.
+
+00:11:00.063 --> 00:11:03.203
+But is nativecomp really that slow?
+
+00:11:03.303 --> 00:11:04.967
+So, I also ran the same benchmark
+
+00:11:04.968 --> 00:11:07.083
+in Common Lisp, with SBCL.
+
+00:11:07.183 --> 00:11:09.000
+And nativecomp is already fast,
+
+00:11:09.001 --> 00:11:11.003
+compared to untyped SBCL.
+
+00:11:11.103 --> 00:11:15.500
+It's because SBCL also emits call instructions
+
+00:11:15.501 --> 00:11:18.483
+when it comes to no type info.
+
+00:11:18.583 --> 00:11:21.700
+However, once we declare the types,
+
+00:11:21.701 --> 00:11:25.283
+SBCL is able to compile a fast path for fix numbers,
+
+00:11:25.383 --> 00:11:27.467
+which makes its performance on par
+
+00:11:27.468 --> 00:11:30.683
+with speculative JIT engines (that is, Juicemacs),
+
+00:11:30.783 --> 00:11:34.763
+because, now both of us are now on fast paths.
+
+00:11:36.063 --> 00:11:38.400
+Additionally, if we are bold enough
+
+00:11:38.401 --> 00:11:41.203
+to pass this safety zero flag to SBCL,
+
+00:11:41.303 --> 00:11:43.700
+it will remove all the slow paths
+
+00:11:43.701 --> 00:11:44.963
+and type checks,
+
+00:11:45.063 --> 00:11:46.367
+and its performance is close
+
+00:11:46.368 --> 00:11:48.643
+to what you get with C.
+
+00:11:48.743 --> 00:11:51.299
+Well, probably we don't want safety zero
+
+00:11:51.300 --> 00:11:52.063
+most of the time.
+
+00:11:52.163 --> 00:11:55.133
+But even then, if nativecomp were to
+
+00:11:55.134 --> 00:11:57.763
+get fast paths for more constructs,
+
+00:11:57.863 --> 00:11:59.867
+there certainly is quite
+
+00:11:59.868 --> 00:12:03.563
+some room for performance improvement.
+
+00:12:04.063 --> 00:12:06.803
+Let's look at some more benchmarks.
+
+00:12:06.903 --> 00:12:08.933
+For example, for this inclist,
+
+00:12:08.934 --> 00:12:10.923
+or increment-list, benchmark,
+
+00:12:11.023 --> 00:12:14.333
+Juicemacs is really slow here. Partly,
+
+00:12:14.334 --> 00:12:17.603
+it comes from the cost of Java boxing integers.
+
+00:12:17.703 --> 00:12:20.300
+On the other hand, for Emacs nativecomp,
+
+00:12:20.301 --> 00:12:22.043
+for this particular benchmark,
+
+00:12:22.143 --> 00:12:23.667
+it actually has fast paths
+
+00:12:23.668 --> 00:12:25.523
+for all of the operations.
+
+00:12:25.623 --> 00:12:27.723
+And that's why it can be so fast,
+
+00:12:27.823 --> 00:12:30.667
+and that also proves the nativecomp
+
+00:12:30.668 --> 00:12:33.843
+has a lot potential for improvement.
+
+00:12:33.943 --> 00:12:35.833
+There is another benchmark here
+
+00:12:35.834 --> 00:12:37.963
+that use advices.
+
+00:12:38.063 --> 00:12:40.500
+So Emacs Lisp supports using
+
+00:12:40.501 --> 00:12:42.203
+advices to override functions
+
+00:12:42.303 --> 00:12:44.833
+by wrapping the original function, and an advice
+
+00:12:44.834 --> 00:12:47.443
+function, two of them, inside a glue function.
+
+00:12:47.543 --> 00:12:51.467
+And in this benchmark, we advice the Fibonacci function
+
+00:12:51.468 --> 00:12:54.523
+to cache the first ten entries to speed up computation,
+
+00:12:54.623 --> 00:13:00.003
+as can be seen in the speed-up in the Juicemacs results.
+
+00:13:00.103 --> 00:13:02.900
+However, it seems that nativecomp does not yet
+
+00:13:02.901 --> 00:13:08.523
+compile glue functions, and that makes advices slower.
+
+00:13:08.623 --> 00:13:12.043
+With these benchmarks, let's discuss this big question:
+
+00:13:12.143 --> 00:13:16.563
+Should GNU Emacs adopt speculative JIT compilation?
+
+00:13:16.663 --> 00:13:18.967
+Well, the hidden question is actually,
+
+00:13:18.968 --> 00:13:21.223
+is it worth it?
+
+00:13:21.323 --> 00:13:24.163
+And, my personal answer is, maybe not.
+
+00:13:24.263 --> 00:13:28.133
+The first reason is that, slow paths, like, floating numbers,
+
+00:13:28.134 --> 00:13:31.043
+are actually not that frequent in Emacs.
+
+00:13:31.143 --> 00:13:34.100
+And optimizing for fast paths like fix numbers
+
+00:13:34.101 --> 00:13:37.983
+can already get us very good performance already.
+
+00:13:38.083 --> 00:13:40.333
+And the second or main reason is that,
+
+00:13:40.334 --> 00:13:43.163
+speculative JIT is very hard.
+
+00:13:43.263 --> 00:13:46.843
+LuaJIT, for example, took a genius to build.
+
+00:13:46.943 --> 00:13:50.967
+Even with the help of GCC, we need to hand-write
+
+00:13:50.968 --> 00:13:54.283
+all those fast path or slow path or switching logic.
+
+00:13:54.383 --> 00:13:58.133
+We need to find a way to deoptimize, which requires
+
+00:13:58.134 --> 00:14:01.803
+mapping machine registers back to interpreter stack.
+
+00:14:01.903 --> 00:14:04.067
+And also, speculation needs runtime info,
+
+00:14:04.068 --> 00:14:07.323
+which also costs us extra memory.
+
+00:14:07.423 --> 00:14:10.763
+Moreover, as is shown by some benchmarks above,
+
+00:14:10.863 --> 00:14:13.333
+there's some low-hanging fruits in nativecomp that
+
+00:14:13.334 --> 00:14:17.343
+might get us better performance with relatively lower effort.
+
+00:14:17.443 --> 00:14:22.163
+Compared to this, a JIT engine is a huge, huge undertaking.
+
+00:14:22.263 --> 00:14:26.123
+But, for Juicemacs, the JIT engine comes a lot cheaper,
+
+00:14:26.223 --> 00:14:29.067
+because, we are cheating by building on
+
+00:14:29.068 --> 00:14:33.443
+an existing compiler framework called Truffle.
+
+00:14:33.543 --> 00:14:35.883
+Truffle is a meta-compiler framework,
+
+00:14:35.983 --> 00:14:37.633
+which means that it lets you write
+
+00:14:37.634 --> 00:14:40.103
+an interpreter, add required annotations,
+
+00:14:40.203 --> 00:14:42.500
+and it will automatically turn the
+
+00:14:42.501 --> 00:14:45.643
+interpreter into a JIT runtime.
+
+00:14:45.743 --> 00:14:49.083
+So for example, here is a typical bytecode interpreter.
+
+00:14:49.183 --> 00:14:51.233
+After you add the required annotations,
+
+00:14:51.234 --> 00:14:52.523
+Truffle will know that,
+
+00:14:52.623 --> 00:14:55.533
+the bytecode here is constant, and it should
+
+00:14:55.534 --> 00:14:59.123
+unroll this loop here, to inline all those bytecode.
+
+00:14:59.223 --> 00:15:00.467
+And then, when Truffle
+
+00:15:00.468 --> 00:15:02.243
+compiles the code, it knows that:
+
+00:15:02.343 --> 00:15:05.233
+the first loop here does: x plus one,
+
+00:15:05.234 --> 00:15:07.723
+and the second does: return.
+
+00:15:07.823 --> 00:15:09.533
+And then it will compile all that into,
+
+00:15:09.534 --> 00:15:11.363
+return x plus 1,
+
+00:15:11.463 --> 00:15:14.067
+which is exactly what we would expect
+
+00:15:14.068 --> 00:15:17.683
+when compiling this pseudo code.
+
+00:15:17.783 --> 00:15:21.083
+Building on that, we can also easily implement speculation,
+
+00:15:21.183 --> 00:15:24.867
+by using this <i>transferToInterpreterAndInvalidate</i> function
+
+00:15:24.868 --> 00:15:26.123
+provided by Truffle.
+
+00:15:26.223 --> 00:15:28.533
+And Truffle will automatically turn that
+
+00:15:28.534 --> 00:15:30.683
+into deoptimization.
+
+00:15:30.783 --> 00:15:32.700
+Now, for example, when this add function
+
+00:15:32.701 --> 00:15:35.723
+is supplied with, two floating numbers.
+
+00:15:35.823 --> 00:15:38.243
+It will go through the slow path here,
+
+00:15:38.343 --> 00:15:40.960
+which might lead to a compiled slow path,
+
+00:15:40.961 --> 00:15:43.203
+or deoptimization.
+
+00:15:43.303 --> 00:15:45.733
+And going this deoptimization way,
+
+00:15:45.734 --> 00:15:48.223
+it can then update the runtime stats.
+
+00:15:48.323 --> 00:15:50.400
+And now, when the code is compiled again,
+
+00:15:50.401 --> 00:15:51.603
+Truffle will know,
+
+00:15:51.703 --> 00:15:54.100
+that these compilation stats, suggests that,
+
+00:15:54.101 --> 00:15:55.563
+we have floating numbers.
+
+00:15:55.663 --> 00:15:58.733
+And this floating point addition branch will
+
+00:15:58.734 --> 00:16:02.603
+then be incorporated into the fast path.
+
+00:16:02.703 --> 00:16:06.003
+To put it into Java code...
+
+00:16:06.103 --> 00:16:08.723
+Most operations are just as simple as this.
+
+00:16:08.823 --> 00:16:11.033
+And it supports fast paths for integers,
+
+00:16:11.034 --> 00:16:13.963
+floating numbers, and big integers.
+
+00:16:14.063 --> 00:16:17.133
+And the simplicity of this not only saves us work,
+
+00:16:17.134 --> 00:16:22.243
+but also enables Juicemacs to explore more things more rapidly.
+
+00:16:22.343 --> 00:16:26.483
+And actually, I have done some silly explorations.
+
+00:16:26.583 --> 00:16:30.203
+For example, I tried to constant-fold more things.
+
+00:16:30.303 --> 00:16:32.767
+Many of us have an Emacs config that stays
+
+00:16:32.768 --> 00:16:36.683
+largely unchanged, at least during one Emacs session.
+
+00:16:36.783 --> 00:16:39.667
+And that means many of the global variables
+
+00:16:39.668 --> 00:16:42.323
+in ELisp are constant.
+
+00:16:42.423 --> 00:16:44.600
+And with speculation, we can
+
+00:16:44.601 --> 00:16:46.683
+speculate about the stable ones,
+
+00:16:46.783 --> 00:16:49.563
+and try to inline them as constants.
+
+00:16:49.663 --> 00:16:51.733
+And this might improve performance,
+
+00:16:51.734 --> 00:16:53.083
+or maybe not?
+
+00:16:53.183 --> 00:16:55.367
+Because, we will need a full editor
+
+00:16:55.368 --> 00:16:58.123
+to get real world data.
+
+00:16:58.223 --> 00:17:01.733
+I also tried changing cons lists to be backed
+
+00:17:01.734 --> 00:17:05.243
+by some arrays, because, maybe arrays are faster, I guess?
+
+00:17:05.343 --> 00:17:09.033
+But in the end, <i>setcdr</i> requires some kind of indirection,
+
+00:17:09.034 --> 00:17:12.883
+and that actually makes the performance worse.
+
+00:17:12.983 --> 00:17:14.733
+And for regular expressions,
+
+00:17:14.734 --> 00:17:17.923
+I also tried borrowing techniques from PCRE JIT,
+
+00:17:18.023 --> 00:17:20.667
+which is quite fast in itself, but it is
+
+00:17:20.668 --> 00:17:24.163
+unfortunately unsupported by Java Truffle runtime.
+
+00:17:24.263 --> 00:17:27.333
+So, looking at these, well,
+
+00:17:27.334 --> 00:17:30.243
+explorations can fail, certainly.
+
+00:17:30.343 --> 00:17:32.800
+But, with Truffle and Java, these,
+
+00:17:32.801 --> 00:17:34.883
+for now, are not that hard to implement,
+
+00:17:34.983 --> 00:17:37.667
+and also very often, they teach us something
+
+00:17:37.668 --> 00:17:42.363
+in return, whether or not they fail.
+
+00:17:42.463 --> 00:17:45.333
+Finally, let's talk about some explorations
+
+00:17:45.334 --> 00:17:47.883
+that we might get into in the future.
+
+00:17:47.983 --> 00:17:49.683
+For the JIT engine, for example,
+
+00:17:49.783 --> 00:17:52.633
+currently I'm looking into the implementation of
+
+00:17:52.634 --> 00:17:56.883
+nativecomp to maybe reuse some of its optimizations.
+
+00:17:56.983 --> 00:18:01.323
+For the GUI, I'm very very slowly working on one.
+
+00:18:01.423 --> 00:18:03.733
+If it ever completes, I have one thing
+
+00:18:03.734 --> 00:18:06.603
+I'm really looking forward to implementing.
+
+00:18:06.703 --> 00:18:08.900
+That is, inlining widgets, or even
+
+00:18:08.901 --> 00:18:11.763
+other buffers, directly into a buffer.
+
+00:18:11.863 --> 00:18:13.967
+Well, it's because, people sometimes complain
+
+00:18:13.968 --> 00:18:16.003
+about Emacs's GUI capabilities,
+
+00:18:16.103 --> 00:18:19.767
+But I personally think that supporting inlining,
+
+00:18:19.768 --> 00:18:23.043
+like a whole buffer inside another buffer as a rectangle,
+
+00:18:23.143 --> 00:18:26.883
+could get us very far in layout abilities.
+
+00:18:26.983 --> 00:18:28.567
+And this approach should also
+
+00:18:28.568 --> 00:18:30.843
+be compatible with terminals.
+
+00:18:30.943 --> 00:18:32.933
+And I really want to see how this idea
+
+00:18:32.934 --> 00:18:36.003
+plays out with Juicemacs.
+
+00:18:36.103 --> 00:18:38.963
+And of course, there's Lisp concurrency.
+
+00:18:39.063 --> 00:18:42.167
+And currently i'm thinking of a JavaScript-like,
+
+00:18:42.168 --> 00:18:46.283
+transparent, single-thread model, using Java's virtual threads.
+
+00:18:46.383 --> 00:18:49.967
+But anyway, if you are interested in JIT compilation,
+
+00:18:49.968 --> 00:18:51.663
+Truffle, or anything above,
+
+00:18:51.763 --> 00:18:53.867
+or maybe you have your own ideas,
+
+00:18:53.868 --> 00:18:56.283
+you are very welcome to reach out!
+
+00:18:56.383 --> 00:19:00.033
+Juicemacs does need to implement many more built-in functions,
+
+00:19:00.034 --> 00:19:03.063
+and any help would be very appreciated.
+
+00:19:03.163 --> 00:19:05.800
+And I promise, it can be a very fun playground
+
+00:19:05.801 --> 00:19:08.343
+to learn about Emacs and do crazy things.
+
+00:19:08.443 --> 00:19:10.902
+Thank you!
diff --git a/2025/captions/emacsconf-2025-llm--emacs-editors-and-llm-driven-workflows--andrew-hyatt--main.vtt b/2025/captions/emacsconf-2025-llm--emacs-editors-and-llm-driven-workflows--andrew-hyatt--main.vtt
new file mode 100644
index 00000000..ea969e1e
--- /dev/null
+++ b/2025/captions/emacsconf-2025-llm--emacs-editors-and-llm-driven-workflows--andrew-hyatt--main.vtt
@@ -0,0 +1,1069 @@
+WEBVTT captioned by amitav
+
+NOTE Introduction
+
+00:00:01.040 --> 00:00:03.079
+Hi, I'm Andrew Hyatt.
+
+00:00:03.080 --> 00:00:09.399
+I'm going to talk to you today about Emacs and AI,
+
+00:00:09.400 --> 00:00:10.879
+and where things are right now
+
+00:00:10.880 --> 00:00:12.119
+in the world of Emacs and AI,
+
+00:00:12.120 --> 00:00:14.159
+via large language models,
+
+00:00:14.160 --> 00:00:16.999
+and where things might be going,
+
+00:00:17.000 --> 00:00:22.699
+and what it means for the future of Emacs.
+
+00:00:22.700 --> 00:00:27.279
+I think what we're seeing with Emacs is interesting.
+
+00:00:27.280 --> 00:00:29.399
+We've seen a lot of different things
+
+00:00:29.400 --> 00:00:31.559
+come around in the past year,
+
+00:00:31.560 --> 00:00:33.119
+in the past several years.
+
+00:00:33.120 --> 00:00:35.079
+There's lots of different solutions.
+
+00:00:35.080 --> 00:00:36.759
+But in the past year, things have been very interesting.
+
+00:00:36.760 --> 00:00:39.679
+I think there's new and interesting questions
+
+00:00:39.680 --> 00:00:43.279
+about what does it mean to use Emacs?
+
+00:00:43.280 --> 00:00:45.479
+What does it mean to use any editor?
+
+00:00:45.480 --> 00:00:47.279
+I'm going to be talking about Emacs,
+
+00:00:47.280 --> 00:00:50.359
+and I'm going to show you various Emacs packages
+
+00:00:50.360 --> 00:00:53.079
+as demonstrations of these ideas.
+
+00:00:53.080 --> 00:00:59.839
+But there's the general question of
+
+00:00:59.840 --> 00:01:03.719
+what does it mean to use any editor, not just Emacs?
+
+00:01:03.720 --> 00:01:06.239
+What does it mean to do work?
+
+00:01:06.240 --> 00:01:10.719
+And I think the industry in general is facing these challenges
+
+00:01:10.720 --> 00:01:13.279
+of we don't really know where things are going to end up,
+
+00:01:13.280 --> 00:01:16.919
+but we do know the direction they're going.
+
+00:01:16.920 --> 00:01:20.039
+Emacs is a reflection of that.
+
+00:01:20.040 --> 00:01:23.239
+I think the answer for Emacs might be
+
+00:01:23.240 --> 00:01:25.719
+a little bit different than everything else,
+
+00:01:25.720 --> 00:01:28.599
+but I do want to show you what's out there
+
+00:01:28.600 --> 00:01:33.319
+so we can explore what are the possibilities
+
+00:01:33.320 --> 00:01:41.119
+of Emacs, AI, and generally how we get things done.
+
+00:01:41.120 --> 00:01:44.719
+Thanks. Let's dive right into it.
+
+NOTE Copilot
+
+00:01:44.720 --> 00:01:48.079
+We're going to start by showing you
+
+00:01:48.080 --> 00:01:51.039
+some things that are pretty well integrated,
+
+00:01:51.040 --> 00:01:55.279
+that look a lot like what you see in Emacs
+
+00:01:55.280 --> 00:01:58.679
+and fit in with the kinds of editing
+
+00:01:58.680 --> 00:02:02.639
+that you normally do in Emacs.
+
+00:02:02.640 --> 00:02:06.579
+So this is just kind of like, it's well integrated.
+
+00:02:06.580 --> 00:02:08.779
+So we're going to talk about Copilot and Semext.
+
+00:02:08.780 --> 00:02:12.679
+Copilot is by Microsoft via GitHub,
+
+00:02:12.680 --> 00:02:14.759
+and Semext is just my personal demo,
+
+00:02:14.760 --> 00:02:18.039
+but they're both showing you, you know,
+
+00:02:18.040 --> 00:02:24.399
+this kind of thing. Let's start with Copilot.
+
+00:02:24.400 --> 00:02:31.919
+Let's try out Copilot on just a standard bit of Elisp.
+
+00:02:31.920 --> 00:02:38.439
+We're going to write a Fibonacci function.
+
+00:02:38.440 --> 00:02:43.079
+Let's try out Emacs on a standard bit of Elisp.
+
+00:02:43.080 --> 00:02:49.279
+We're going to write a Fibonacci function.
+
+00:02:49.280 --> 00:02:53.159
+And you can see like as soon as we even start typing it,
+
+00:02:53.160 --> 00:02:56.339
+we get everything as a completion.
+
+00:02:56.340 --> 00:02:59.879
+So you can just press Tab here,
+
+00:02:59.880 --> 00:03:02.159
+and you've just completed
+
+00:03:02.160 --> 00:03:06.799
+a significant bunch of Emacs Lisp code.
+
+00:03:06.800 --> 00:03:09.919
+It will do this no matter where you are.
+
+00:03:09.920 --> 00:03:14.799
+So, pretty useful. It will just keep suggesting things.
+
+00:03:14.800 --> 00:03:16.439
+Do you want to do this?
+
+00:03:16.440 --> 00:03:17.479
+I'm not sure.
+
+00:03:17.480 --> 00:03:22.839
+But it usually is offering pretty reasonable things.
+
+00:03:22.840 --> 00:03:29.299
+So you could do this with code,
+
+00:03:29.300 --> 00:03:32.119
+of course, any code.
+
+00:03:32.120 --> 00:03:33.919
+You don't really even have to have a mode for it, right?
+
+00:03:33.920 --> 00:03:36.679
+That's kind of the beauty of AI is that
+
+00:03:36.680 --> 00:03:38.519
+you don't need any Emacs functionality for this,
+
+00:03:38.520 --> 00:03:39.519
+except for Copilot.
+
+00:03:39.520 --> 00:03:41.679
+It doesn't need to know the structure of your code.
+
+00:03:41.680 --> 00:03:45.279
+It doesn't need anything except for the text itself
+
+00:03:45.280 --> 00:03:51.239
+and whatever AI integration that this is.
+
+00:03:51.240 --> 00:03:53.739
+We can look at, you can do the same thing with Org-mode.
+
+00:03:53.740 --> 00:03:57.999
+So we could say create, no,
+
+00:03:58.000 --> 00:04:02.919
+how about let's, let's do, you know, spring cleaning.
+
+00:04:02.920 --> 00:04:10.839
+It's actually the fall, but still we'll say spring cleaning.
+
+00:04:10.840 --> 00:04:12.767
+And it'll start suggesting things that, you know,
+
+00:04:12.768 --> 00:04:15.439
+maybe at first, it doesn't really know what to do to
+
+00:04:15.440 --> 00:04:16.433
+clean up all code.
+
+00:04:16.434 --> 00:04:18.400
+It thinks I need to clean up code, but no,
+
+00:04:18.401 --> 00:04:21.839
+this is going to be actual, you know,
+
+00:04:21.840 --> 00:04:31.567
+clean hood over range. Clean out pantry.
+
+00:04:31.568 --> 00:04:33.879
+These are all really reasonable suggestions.
+
+00:04:33.880 --> 00:04:38.319
+You just keep going here.
+
+NOTE Semext
+
+00:04:38.320 --> 00:04:40.559
+I'm going to demonstrate Semext,
+
+00:04:40.560 --> 00:04:43.879
+which is a package I have on GNU Elpa,
+
+00:04:43.880 --> 00:04:48.719
+that is designed to integrate AI in a very Emacs-like way.
+
+00:04:48.720 --> 00:04:50.999
+And so what you could do is you could do a
+
+00:04:51.000 --> 00:04:54.799
+semext-search-forward.
+
+00:04:54.800 --> 00:04:58.719
+The UI looks just like other Emacs commands,
+
+00:04:58.720 --> 00:05:02.379
+but you can search for anything.
+
+00:05:02.380 --> 00:05:06.279
+There's really no way to express what I'm about to,
+
+00:05:06.280 --> 00:05:08.679
+what I'm trying to demonstrate
+
+00:05:08.680 --> 00:05:12.359
+in Emacs's normal search commands.
+
+00:05:12.360 --> 00:05:15.399
+You could really ask for anything.
+
+00:05:15.400 --> 00:05:18.759
+And it takes a little while, which is not Emacs-like,
+
+00:05:18.760 --> 00:05:20.033
+but everything else is sort of like
+
+00:05:20.034 --> 00:05:21.719
+it's designed to be like Emacs,
+
+00:05:21.720 --> 00:05:23.519
+except way more powerful.
+
+00:05:23.520 --> 00:05:27.119
+You don't need any mode to be active for this.
+
+00:05:27.120 --> 00:05:32.039
+You just need the library
+
+00:05:32.040 --> 00:05:34.759
+and an AI provider of some sort, either locally
+
+00:05:34.760 --> 00:05:41.199
+or, you know, your favorite cloud provider.
+
+NOTE Integrated AI experiences: gptel, ellama, chatgpt-shell, etc.
+
+00:05:41.200 --> 00:05:43.679
+Now we're going to move on to a different way
+
+00:05:43.680 --> 00:05:46.399
+of interacting with AI and Emacs.
+
+00:05:46.400 --> 00:05:52.319
+This way is less like the normal editing experience.
+
+00:05:52.320 --> 00:05:56.999
+So you lose some familiarity. However, in exchange,
+
+00:05:57.000 --> 00:05:58.079
+it is a lot more powerful.
+
+00:05:58.080 --> 00:06:00.119
+And there's a whole suite of these tools.
+
+00:06:00.120 --> 00:06:02.479
+I'm going to demonstrate gptel,
+
+00:06:02.480 --> 00:06:05.779
+which is the most popular one.
+
+00:06:05.780 --> 00:06:06.399
+But there are many.
+
+00:06:06.400 --> 00:06:08.479
+And I think different people have
+
+00:06:08.480 --> 00:06:11.759
+their own preferences of what they like to use.
+
+00:06:11.760 --> 00:06:12.999
+We're going to try now something
+
+00:06:13.000 --> 00:06:15.079
+that is a step away from just editing.
+
+00:06:15.080 --> 00:06:19.839
+And we're going to, I'm actually using gptel.
+
+00:06:19.840 --> 00:06:22.799
+There are several packages that are going to be
+
+00:06:22.800 --> 00:06:25.959
+doing the same sort of thing as I'm going to show you.
+
+00:06:25.960 --> 00:06:29.999
+gptel has sort of become the most popular one.
+
+00:06:30.000 --> 00:06:32.199
+So that's why I'm showing that to you.
+
+00:06:32.200 --> 00:06:39.319
+But let's just highlight everything and say gptel rewrite.
+
+00:06:39.320 --> 00:06:42.399
+And gptel basically just has a few things.
+
+00:06:42.400 --> 00:06:45.119
+There's different ways of thinking about this.
+
+00:06:45.120 --> 00:06:49.999
+With just a few very configurable menus,
+
+00:06:50.000 --> 00:06:53.959
+you can do a large variety of things.
+
+00:06:53.960 --> 00:06:59.819
+So let's give rewrite instructions.
+
+00:06:59.820 --> 00:07:06.600
+"Turn this into an iterative program
+
+00:07:06.601 --> 00:07:12.199
+instead of a recursive program."
+
+00:07:12.200 --> 00:07:17.799
+In Elisp, you really should not be using recursion.
+
+00:07:17.800 --> 00:07:20.359
+So we could say "return to be ready".
+
+00:07:20.360 --> 00:07:21.119
+Do we accept it?
+
+00:07:21.120 --> 00:07:24.519
+Yes, we accept it. Or we could iterate and say, no, no,
+
+00:07:24.520 --> 00:07:26.799
+that's not what we meant. We meant something else.
+
+00:07:26.800 --> 00:07:29.159
+Or you did something a little something wrong.
+
+00:07:29.160 --> 00:07:29.879
+Please fix it.
+
+00:07:29.880 --> 00:07:31.879
+So this is all very powerful.
+
+00:07:31.880 --> 00:07:33.799
+Is this editing?
+
+00:07:33.800 --> 00:07:40.279
+Well, it's in the editor.
+
+00:07:40.280 --> 00:07:42.759
+You could do this while editing, while deleting,
+
+00:07:42.760 --> 00:07:44.959
+you could be doing some sort of traditional editing.
+
+00:07:44.960 --> 00:07:47.679
+And then this, which is editing
+
+00:07:47.680 --> 00:07:48.919
+in the sense that it's in your editor,
+
+00:07:48.920 --> 00:07:51.039
+you might have to highlight
+
+00:07:51.040 --> 00:07:52.799
+some parts of the file and do things,
+
+00:07:52.800 --> 00:07:54.719
+but generally you don't even need to,
+
+00:07:54.720 --> 00:07:59.879
+or you go to a spot and you say, put code at this spot.
+
+00:07:59.880 --> 00:08:01.959
+It's kind of like editing.
+
+00:08:01.960 --> 00:08:05.839
+I would say it's not exactly editing,
+
+00:08:05.840 --> 00:08:10.159
+but it's at least something that must happen in an editor
+
+00:08:10.160 --> 00:08:12.359
+and it's well integrated into Emacs.
+
+00:08:12.360 --> 00:08:14.759
+As you can tell, it used very sort of
+
+00:08:14.760 --> 00:08:18.239
+modern standard Emacs UI paradigms
+
+00:08:18.240 --> 00:08:20.759
+and it's all written in Elisp.
+
+00:08:20.760 --> 00:08:23.779
+Everything is happening in Elisp here.
+
+00:08:23.780 --> 00:08:25.959
+So this is just very much an Emacs experience.
+
+00:08:25.960 --> 00:08:27.679
+It's just not exactly editing
+
+00:08:27.680 --> 00:08:29.879
+because the thing doing the editing
+
+00:08:29.880 --> 00:08:32.519
+is the AI and not you.
+
+00:08:32.520 --> 00:08:36.039
+You're just kind of telling it what to do.
+
+NOTE Outside the editor
+
+00:08:36.040 --> 00:08:41.119
+Now we're going to go and look at a way of interaction
+
+00:08:41.120 --> 00:08:43.239
+that's even more powerful
+
+00:08:43.240 --> 00:08:46.279
+and even more disconnected from the normal editing experience.
+
+00:08:46.280 --> 00:08:47.919
+In fact, it's so disconnected
+
+00:08:47.920 --> 00:08:52.399
+that most people are using this without an editor.
+
+00:08:52.400 --> 00:08:57.879
+These are things like Claude Code
+
+00:08:57.880 --> 00:09:01.079
+or the sort of open source equivalent, Aider.
+
+00:09:01.080 --> 00:09:05.039
+There's a few other things that follow this pattern as well.
+
+00:09:05.040 --> 00:09:07.479
+But it's very interesting in the sense
+
+00:09:07.480 --> 00:09:09.839
+that while you can integrate these with the editors,
+
+00:09:09.840 --> 00:09:12.039
+and I'm going to show you an Emacs integration,
+
+00:09:12.040 --> 00:09:13.519
+you don't need to.
+
+00:09:13.520 --> 00:09:16.939
+And that's not the way most people are using them.
+
+00:09:16.940 --> 00:09:19.759
+And I find it very interesting that sort of
+
+00:09:19.760 --> 00:09:23.719
+we're going back kind of full circle where, you know,
+
+00:09:23.720 --> 00:09:31.959
+in the 1960s or 70s, we were using Ed from the terminal
+
+00:09:31.960 --> 00:09:35.639
+to edit files, but then we created editors,
+
+00:09:35.640 --> 00:09:37.959
+and that was a really good idea.
+
+00:09:37.960 --> 00:09:40.167
+It is a lot easier to edit files
+
+00:09:40.168 --> 00:09:42.499
+when you have an actual UI.
+
+00:09:42.500 --> 00:09:46.879
+But now it's 2025, and we're back in the terminal,
+
+00:09:46.880 --> 00:09:50.799
+and we're editing files through the terminal,
+
+00:09:50.800 --> 00:09:53.599
+and you know what, it's great,
+
+00:09:53.600 --> 00:09:56.899
+but I think it's even better with Emacs.
+
+00:09:56.900 --> 00:10:00.279
+On the other hand, it comes with some trade-offs,
+
+00:10:00.280 --> 00:10:04.733
+as you can see, as we will see.
+
+NOTE Outside Experiences: claude-code.el, aidermacs, eca
+
+00:10:04.734 --> 00:10:07.467
+Okay, we're going to look at
+
+00:10:07.468 --> 00:10:20.320
+[audio glitch] Claude Code IDE, aidermacs, ECA.
+
+00:10:20.321 --> 00:10:22.639
+Last time, I didn't show you all the variants.
+
+00:10:22.640 --> 00:10:26.839
+I do want to show you eca, which points to,
+
+00:10:26.840 --> 00:10:29.799
+it is a very similar tool in what it does,
+
+00:10:29.800 --> 00:10:32.739
+but does have a different
+
+00:10:32.740 --> 00:10:37.239
+and I think better type of Emacs integration.
+
+00:10:37.240 --> 00:10:42.599
+All right, we're going to demonstrate Claude Code IDE,
+
+00:10:42.600 --> 00:10:46.839
+which is one of three Claude Code packages.
+
+00:10:46.840 --> 00:10:47.719
+It's a bit confusing.
+
+00:10:47.720 --> 00:10:52.039
+One of them will be demoed by another presenter
+
+00:10:52.040 --> 00:10:54.639
+at the Emacs conference, so stay tuned for that.
+
+00:10:54.640 --> 00:10:56.439
+Here I'm just going to give you a little taste
+
+00:10:56.440 --> 00:10:58.759
+of what these packages look like.
+
+00:10:58.760 --> 00:11:03.339
+So if we say Claude Code IDE,
+
+00:11:03.340 --> 00:11:06.839
+it presents us with basically
+
+00:11:06.840 --> 00:11:09.039
+almost exactly what you would get
+
+00:11:09.040 --> 00:11:11.519
+when you're running this in the terminal.
+
+00:11:11.520 --> 00:11:13.933
+And essentially there's a terminal interface.
+
+00:11:13.934 --> 00:11:16.659
+You can see that there's a vterm.
+
+00:11:16.660 --> 00:11:20.699
+But here we're going to say, "In scratch.el"...
+
+00:11:20.700 --> 00:11:23.400
+let's say what we want to happen.
+
+00:11:23.401 --> 00:11:32.133
+[In scratch.el, there is a fibonacci function.
+
+00:11:32.134 --> 00:11:39.567
+Can you add all normal elisp headers
+
+00:11:39.568 --> 00:11:43.859
+and footers to this file?]
+
+00:11:43.860 --> 00:11:45.840
+So, we just say what's going to happen,
+
+00:11:45.841 --> 00:11:48.399
+and this is going to do things in the background.
+
+00:11:48.400 --> 00:11:50.979
+It's not going to do things through Emacs.
+
+00:11:50.980 --> 00:11:54.079
+That said, there is an integration with Emacs,
+
+00:11:54.080 --> 00:12:00.659
+so that it can do things like show you these nice ediffs.
+
+00:12:00.660 --> 00:12:03.199
+My screen is not really wide enough
+
+00:12:03.200 --> 00:12:04.699
+to show you a really great ediff here,
+
+00:12:04.700 --> 00:12:06.239
+but you can kind of see what it's doing,
+
+00:12:06.240 --> 00:12:09.079
+and you can see, yeah, that looks good,
+
+00:12:09.080 --> 00:12:14.120
+so you could say yes, yes, accept the changes,
+
+00:12:14.121 --> 00:12:25.299
+and if we... Just need to revert the buffer.
+
+00:12:25.300 --> 00:12:28.459
+We can quit the printout of this.
+
+00:12:28.460 --> 00:12:33.019
+We see that it just did everything I asked it to.
+
+00:12:33.020 --> 00:12:36.139
+Is everything exactly right?
+
+00:12:36.140 --> 00:12:39.159
+Probably not. It's reasonable for a start though.
+
+00:12:39.160 --> 00:12:40.959
+But you could ask it to do anything.
+
+00:12:40.960 --> 00:12:45.339
+You could say, write unit tests for this, and it will.
+
+00:12:45.340 --> 00:12:49.019
+You could say, write me a suite of functions
+
+00:12:49.020 --> 00:12:52.579
+like Fibonacci, and it'll probably do something reasonable.
+
+00:12:52.580 --> 00:12:54.900
+But you can see this is not editing.
+
+00:12:54.901 --> 00:12:58.659
+There's nothing editing-like about this.
+
+00:12:58.660 --> 00:13:07.159
+That said, there is something that is editing.
+
+00:13:07.160 --> 00:13:08.599
+You need to give it instructions.
+
+00:13:08.600 --> 00:13:10.959
+You need to tell it what to do.
+
+NOTE Org files
+
+00:13:10.960 --> 00:13:19.619
+And what you could do is... You could have a project.org,
+
+00:13:19.620 --> 00:13:23.899
+and what you could do is you could have functions.
+
+00:13:23.900 --> 00:13:26.659
+The way I've done things often is ....
+
+00:13:26.660 --> 00:13:28.439
+You could say something like,
+
+00:13:28.440 --> 00:13:36.199
+unit tests for Fibonacci. How do you spell Fibonacci?
+
+00:13:36.200 --> 00:13:40.479
+I don't remember. But then you could say that this is,
+
+00:13:40.480 --> 00:13:47.159
+you could clock it, basically. org-clock.
+
+00:13:47.160 --> 00:13:48.879
+What I've done is...
+
+00:13:48.880 --> 00:13:50.399
+You could add custom commands to Claude Code,
+
+00:13:50.400 --> 00:13:53.119
+and you could just say, look, here's my Org file,
+
+00:13:53.120 --> 00:13:57.879
+read it and do the thing that I'm clocked in as.
+
+00:13:57.880 --> 00:14:01.159
+And then you can write a bunch of instructions here, like,
+
+00:14:01.160 --> 00:14:07.039
+I like to use ert for tests. Tests should, like, whatever.
+
+00:14:07.040 --> 00:14:08.639
+You should just say... everything
+
+00:14:08.640 --> 00:14:10.999
+you need to kind of specify.
+
+00:14:11.000 --> 00:14:13.199
+As you get to more complicated tasks,
+
+00:14:13.200 --> 00:14:16.679
+it's harder and harder to give it all the context
+
+00:14:16.680 --> 00:14:17.799
+it needs for a task,
+
+00:14:17.800 --> 00:14:22.299
+and Org Mode is actually a pretty good way to do this.
+
+00:14:22.300 --> 00:14:24.079
+I find that this works pretty well,
+
+00:14:24.080 --> 00:14:26.699
+and you can even have it instruct Claude
+
+00:14:26.700 --> 00:14:29.333
+to just mark things done in your Org file
+
+00:14:29.334 --> 00:14:30.679
+when they're done.
+
+00:14:30.680 --> 00:14:32.867
+And it knows how to do this, of course.
+
+00:14:32.868 --> 00:14:37.959
+So, let's just clock out.
+
+00:14:37.960 --> 00:14:45.239
+That's one way to do things.
+
+NOTE ECA
+
+00:14:45.240 --> 00:14:49.499
+So one other thing I'd like to show you is eca,
+
+00:14:49.500 --> 00:14:52.879
+which, compared to Claude Code, ECA is open source.
+
+00:14:52.880 --> 00:14:54.239
+It's very nice in that respect.
+
+00:14:54.240 --> 00:14:57.839
+It doesn't have to use Anthropic's models.
+
+00:14:57.840 --> 00:15:00.279
+You can use local models,
+
+00:15:00.280 --> 00:15:07.619
+but it has the advantage of integrating very well with Emacs.
+
+00:15:07.620 --> 00:15:08.559
+I'm not going to demonstrate it,
+
+00:15:08.560 --> 00:15:11.159
+because it works essentially the same thing you could do
+
+00:15:11.160 --> 00:15:14.119
+approximately the same kinds of things
+
+00:15:14.120 --> 00:15:15.479
+you could do with Claude Code.
+
+00:15:15.480 --> 00:15:17.439
+You just write what you want to happen
+
+00:15:17.440 --> 00:15:18.639
+and it will make it happen.
+
+00:15:18.640 --> 00:15:21.879
+It again does not do this through Emacs,
+
+00:15:21.880 --> 00:15:23.039
+but what it does do is
+
+00:15:23.040 --> 00:15:25.119
+it gives you a much better Emacs interface
+
+00:15:25.120 --> 00:15:26.919
+that's not terminal-based,
+
+00:15:26.920 --> 00:15:29.639
+because you're not using it through the terminal,
+
+00:15:29.640 --> 00:15:31.239
+or not even through comint,
+
+00:15:31.240 --> 00:15:35.599
+you are using it through a backend
+
+00:15:35.600 --> 00:15:37.499
+that is exchanging structured information
+
+00:15:37.500 --> 00:15:40.999
+with this process that is doing all the work.
+
+00:15:41.000 --> 00:15:41.900
+But other than that,
+
+00:15:41.901 --> 00:15:44.519
+it's the same model as Claude Code
+
+00:15:44.520 --> 00:15:52.059
+and projects of that nature.
+
+NOTE Editing
+
+00:15:52.060 --> 00:15:56.159
+We've seen in the demos that I gave
+
+00:15:56.160 --> 00:15:58.639
+that there are AI experiences
+
+00:15:58.640 --> 00:16:01.279
+that are very natural in the world of editing.
+
+00:16:01.280 --> 00:16:05.339
+because they, like Copilot, just offers completion,
+
+00:16:05.340 --> 00:16:09.479
+it fits very well with what we all do in Emacs.
+
+00:16:09.480 --> 00:16:14.279
+And it's truly, yes, it's kind of a cheat in a sense
+
+00:16:14.280 --> 00:16:15.639
+for editing experiences,
+
+00:16:15.640 --> 00:16:20.159
+because it can do so much, but it's just editing.
+
+00:16:20.160 --> 00:16:25.259
+Whereas things like gptel and those kinds of tools,
+
+00:16:25.260 --> 00:16:29.799
+they are clearly in an editor and using editor,
+
+00:16:29.800 --> 00:16:35.319
+they're using Emacs, but they represent sort of like, well,
+
+00:16:35.320 --> 00:16:37.759
+you can edit for a while, then you could use these tools
+
+00:16:37.760 --> 00:16:39.479
+to do something that is not editing,
+
+00:16:39.480 --> 00:16:45.899
+this AI just changing the buffer for you. And that's fine.
+
+00:16:45.900 --> 00:16:48.399
+It's still... It may not be editing,
+
+00:16:48.400 --> 00:16:52.033
+but it's still clearly something that
+
+00:16:52.034 --> 00:16:55.567
+is useful to do in Emacs
+
+00:16:55.568 --> 00:16:57.039
+and belongs in Emacs.
+
+00:16:57.040 --> 00:17:01.859
+But the new tools like Claude Code and things like that
+
+00:17:01.860 --> 00:17:02.639
+are kind of different.
+
+00:17:02.640 --> 00:17:06.639
+Yes, they will get better integrated with Emacs,
+
+00:17:06.640 --> 00:17:11.639
+but it's not clear that they really need to.
+
+00:17:11.640 --> 00:17:15.479
+They can do a lot of things without editing.
+
+00:17:15.480 --> 00:17:19.239
+In a sense, editing is obsolete in some sense.
+
+00:17:19.240 --> 00:17:23.459
+For as many tasks, you don't need to edit anymore.
+
+00:17:23.460 --> 00:17:26.439
+And that's a nice thing.
+
+00:17:26.440 --> 00:17:30.579
+No one really knows when all this will end,
+
+00:17:30.580 --> 00:17:36.879
+how far things will go. It could be that in a decade or so,
+
+00:17:36.880 --> 00:17:41.039
+no one's really editing for work anymore.
+
+00:17:41.040 --> 00:17:43.159
+Maybe you're just writing instructions.
+
+00:17:43.160 --> 00:17:44.319
+You could do that with anything.
+
+00:17:44.320 --> 00:17:47.439
+You don't need Emacs or any special editor.
+
+00:17:47.440 --> 00:17:50.439
+We could all be using Notepad. That would be bad.
+
+00:17:50.440 --> 00:17:58.039
+But... I think it could go that far,
+
+00:17:58.040 --> 00:18:01.839
+but it could be that, well, for many specialized things,
+
+00:18:01.840 --> 00:18:04.359
+people are still using editing for certain tasks,
+
+00:18:04.360 --> 00:18:07.000
+but most tasks are getting fed to just...
+
+00:18:07.001 --> 00:18:08.839
+AI is just doing those things.
+
+00:18:08.840 --> 00:18:15.759
+In any case, I think it's clear that editing is diminishing,
+
+00:18:15.760 --> 00:18:17.959
+the need for editing itself is diminishing.
+
+00:18:17.960 --> 00:18:21.879
+And in such a world, It's interesting to think
+
+00:18:21.880 --> 00:18:24.799
+where Emacs is headed, especially in relation to
+
+00:18:24.800 --> 00:18:26.359
+all the other editors.
+
+00:18:26.360 --> 00:18:28.599
+I think people will use Emacs less.
+
+00:18:28.600 --> 00:18:31.639
+But I think other editors, like VS Code,
+
+00:18:31.640 --> 00:18:37.999
+may simply disappear or be a relatively fringe tool.
+
+00:18:38.000 --> 00:18:42.719
+And Emacs is going to follow its own path.
+
+00:18:42.720 --> 00:18:44.679
+It's very extensible. It could do anything.
+
+00:18:44.680 --> 00:18:47.919
+If there's one thing Emacs can do, it's adapt.
+
+00:18:47.920 --> 00:18:51.679
+Emacs has been around for a long time.
+
+00:18:51.680 --> 00:18:54.799
+It's pretty clear that Emacs will be around for a long time.
+
+00:18:54.800 --> 00:18:58.879
+It might be that in the future,
+
+00:18:58.880 --> 00:19:04.339
+editing is some sort of like an artisanal activity that we do.
+
+00:19:04.340 --> 00:19:05.599
+It's kind of weird to think about it.
+
+00:19:05.600 --> 00:19:07.679
+It's not like baking bread.
+
+00:19:07.680 --> 00:19:10.079
+But it is the sense that AI might be
+
+00:19:10.080 --> 00:19:12.399
+churning out code in the way, you know,
+
+00:19:12.400 --> 00:19:14.199
+the factories are turning out bread,
+
+00:19:14.200 --> 00:19:17.139
+but if you really want the good stuff,
+
+00:19:17.140 --> 00:19:20.999
+you'll have to do it yourself.
+
+00:19:21.000 --> 00:19:23.959
+I don't know if it'll be exactly like that,
+
+00:19:23.960 --> 00:19:29.519
+but it could be that Emacs survives and thrives
+
+00:19:29.520 --> 00:19:33.559
+in a very kind of specialized ecosystem of people
+
+00:19:33.560 --> 00:19:35.599
+who contribute and use it in the way
+
+00:19:35.600 --> 00:19:39.539
+it has survived and thrive right now.
+
+00:19:39.540 --> 00:19:46.139
+And I think that's a really nice way for all this to end up.
+
+00:19:46.140 --> 00:19:48.719
+There's the whole sense of how society will end up
+
+00:19:48.720 --> 00:19:50.759
+if all this happens. I don't know,
+
+00:19:50.760 --> 00:19:54.639
+but Emacs will be there for us when whatever happens.
+
+00:19:54.640 --> 00:20:00.079
+So thank you, and let's help make Emacs the best it can be
+
+00:20:00.080 --> 00:20:04.880
+to survive and thrive in the next decade.
diff --git a/2025/captions/emacsconf-2025-modern--some-problems-of-modernizing-emacs--eduardo-ochs--main.vtt b/2025/captions/emacsconf-2025-modern--some-problems-of-modernizing-emacs--eduardo-ochs--main.vtt
new file mode 100644
index 00000000..e461b1f1
--- /dev/null
+++ b/2025/captions/emacsconf-2025-modern--some-problems-of-modernizing-emacs--eduardo-ochs--main.vtt
@@ -0,0 +1,727 @@
+WEBVTT
+Kind: captions
+Language: en-GB
+
+00:00:54.000 --> 00:00:55.000
+
+
+00:00:55.000 --> 00:00:57.000
+Hi! My name is Eduardo Ochs. I'm the
+
+00:00:57.000 --> 00:01:00.000
+author of an Emacs package called eev and
+
+00:01:00.000 --> 00:01:03.000
+the title of this video is
+
+00:01:03.000 --> 00:01:05.000
+"Some problems of modernizing Emacs".
+
+00:01:05.000 --> 00:01:08.000
+Here is a summary of the main themes
+
+00:01:08.000 --> 00:01:10.000
+of this video. I'm going to talk mainly
+
+00:01:10.000 --> 00:01:12.000
+about these four things here. The first
+
+00:01:12.000 --> 00:01:15.000
+one is that Emacs has changed a lot in its
+
+00:01:15.000 --> 00:01:18.000
+recent versions, and now it has lots of
+
+00:01:18.000 --> 00:01:21.000
+types... so if we want to look under the
+
+00:01:21.000 --> 00:01:24.000
+hood and to understand what Emacs
+
+00:01:24.000 --> 00:01:27.000
+really does we are going to stumble on
+
+00:01:27.000 --> 00:01:30.000
+lots of types... and the
+
+00:01:30.000 --> 00:01:34.000
+current tree of classes and types
+
+00:01:34.000 --> 00:01:37.000
+looks like this... that is,
+
+00:01:37.000 --> 00:01:46.000
+is quite big.
+
+00:01:46.000 --> 00:01:49.000
+The second theme is that people used
+
+00:01:49.000 --> 00:01:53.000
+to say things like "Anyone can learn Lisp
+
+00:01:53.000 --> 00:01:56.000
+in one day"... I'm going to explain
+
+00:01:56.000 --> 00:02:01.000
+this quote, and I'm also going to show
+
+00:02:01.000 --> 00:02:04.000
+that now this is gone... anyway. This is a
+
+00:02:04.000 --> 00:02:08.000
+very short summary... details soon.
+
+00:02:08.000 --> 00:02:10.000
+I will also show how to display
+
+00:02:10.000 --> 00:02:13.000
+better "inner views" of Emacs objects...
+
+00:02:13.000 --> 00:02:16.000
+I'm going to Define what is an inner view,
+
+00:02:16.000 --> 00:02:18.000
+of course.
+
+00:02:18.000 --> 00:02:20.000
+The main trick is that we are going
+
+00:02:20.000 --> 00:02:24.000
+to use one of the ways of displaying
+
+00:02:24.000 --> 00:02:29.000
+internal objects, that is the `cl-print'
+
+00:02:29.000 --> 00:02:32.000
+family of functions, for example,
+
+00:02:32.000 --> 00:02:35.000
+`cl-prin1-to-string', and here are some
+
+00:02:35.000 --> 00:02:37.000
+examples of the kind of output that we
+
+00:02:37.000 --> 00:02:38.000
+are going to see...
+
+00:02:38.000 --> 00:02:44.000
+for example, if we run these two lines
+
+00:02:44.000 --> 00:02:47.000
+here the first line defines a function `foo'
+
+00:02:47.000 --> 00:02:52.000
+and the second line sets `o' to the
+
+00:02:52.000 --> 00:02:54.000
+internal view of the definition of `foo'.
+
+00:02:54.000 --> 00:02:59.000
+In older Emacses `o' would be just a
+
+00:02:59.000 --> 00:03:02.000
+list that looks... that would look very
+
+00:03:02.000 --> 00:03:05.000
+similar to this line here... but in newer
+
+00:03:05.000 --> 00:03:09.000
+Emacses the result of this - I mean, the
+
+00:03:09.000 --> 00:03:12.000
+the contents of `o' is this thing here,
+
+00:03:12.000 --> 00:03:15.000
+that looks quite different
+
+00:03:15.000 --> 00:03:18.000
+from this definition.
+
+00:03:18.000 --> 00:03:21.000
+So, in older Emacses
+
+00:03:21.000 --> 00:03:25.000
+the contents of the
+
+00:03:25.000 --> 00:03:28.000
+function cell of `o'...
+
+00:03:28.000 --> 00:03:30.000
+sorry, of the function cell of `foo',
+
+00:03:30.000 --> 00:03:32.000
+would be an "old-style lambda",
+
+00:03:32.000 --> 00:03:35.000
+that would be just a list like this...
+
+00:03:35.000 --> 00:03:39.000
+and in newer Emacses uh the contents of O would
+
+00:03:39.000 --> 00:03:42.000
+be a "vector-like lambda"... look for the
+
+00:03:42.000 --> 00:03:44.000
+square brackets here - this is a
+
+00:03:44.000 --> 00:03:47.000
+vector, but it is preceded by a hash sign.
+
+00:03:47.000 --> 00:03:49.000
+So this is what we call
+
+00:03:49.000 --> 00:03:51.000
+a "vector-like lambda",
+
+00:03:51.000 --> 00:03:53.000
+and vector-like lambas do not
+
+00:03:53.000 --> 00:03:55.000
+have a canonical printed representation -
+
+00:03:55.000 --> 00:03:57.000
+they have at least two semicanonical
+
+00:03:57.000 --> 00:03:59.000
+printed representations...
+
+00:03:59.000 --> 00:04:01.000
+The first semicanonical
+
+00:04:01.000 --> 00:04:04.000
+printed representation is this one, that is
+
+00:04:04.000 --> 00:04:07.000
+generated by a family of functions with
+
+00:04:07.000 --> 00:04:09.000
+names like `prin1'...
+
+00:04:09.000 --> 00:04:13.000
+and the second semicanonical printed
+
+00:04:13.000 --> 00:04:17.000
+representation is like this -
+
+00:04:17.000 --> 00:04:20.000
+it looks like a list...
+
+00:04:20.000 --> 00:04:23.000
+it looks somewhat like this definition
+
+00:04:23.000 --> 00:04:27.000
+of `foo' here, but it has this
+
+00:04:27.000 --> 00:04:29.000
+`:dynbind' symbol here...
+
+00:04:29.000 --> 00:04:32.000
+and it turns out that when we use
+
+00:04:32.000 --> 00:04:35.000
+the `cl-print' family of functions we can
+
+00:04:35.000 --> 00:04:37.000
+reconfigure how things are printed...
+
+00:04:37.000 --> 00:04:40.000
+and I'm going to show several interesting
+
+00:04:40.000 --> 00:04:47.000
+ways of reconfiguring how lambdas are printed,
+
+00:04:47.000 --> 00:04:49.000
+and one of the ways is going to
+
+00:04:49.000 --> 00:04:52.000
+be like this.
+
+00:04:52.000 --> 00:04:56.000
+We can also use the `cl-print'
+
+00:04:56.000 --> 00:04:59.000
+functions with my indentation tricks to
+
+00:04:59.000 --> 00:05:04.000
+to display how types, or classes, are
+
+00:05:04.000 --> 00:05:07.000
+viewed internally by Emacs, and this is a
+
+00:05:07.000 --> 00:05:10.000
+big example...
+
+00:05:10.000 --> 00:05:14.000
+This is what Emacs considers as being
+
+00:05:14.000 --> 00:05:16.000
+the definition of the type
+
+00:05:16.000 --> 00:05:18.000
+`cl-structure-class',
+
+00:05:18.000 --> 00:05:21.000
+class and it is this big thing here.
+
+00:05:21.000 --> 00:05:24.000
+I edited it very lightly...
+
+00:05:24.000 --> 00:05:30.000
+I just uh deleted some line breaks here.
+
+00:05:30.000 --> 00:05:33.000
+And another thing that I want to to
+
+00:05:33.000 --> 00:05:35.000
+explain is that Emacs
+
+00:05:35.000 --> 00:05:37.000
+has some help functions that
+
+00:05:37.000 --> 00:05:39.000
+I have never liked...
+
+00:05:39.000 --> 00:05:41.000
+for most people they are good enough,
+
+00:05:41.000 --> 00:05:44.000
+but for me they aren't... they...
+
+00:05:44.000 --> 00:05:48.000
+uh, well - I'm going to say
+
+00:05:48.000 --> 00:05:50.000
+more about this later...
+
+00:05:50.000 --> 00:05:52.000
+and, for example,
+
+00:05:52.000 --> 00:05:54.000
+if we want a description of what is
+
+00:05:54.000 --> 00:05:58.000
+this type here, that we just saw in
+
+00:05:58.000 --> 00:06:00.000
+its internal view here...
+
+00:06:00.000 --> 00:06:02.000
+we can run either `describe-type'
+
+00:06:02.000 --> 00:06:04.000
+or my variant of `describe-type',
+
+00:06:04.000 --> 00:06:07.000
+and we get a help buffer
+
+00:06:07.000 --> 00:06:10.000
+that looks like this, in which
+
+00:06:10.000 --> 00:06:13.000
+these blue things that are underlined
+
+00:06:13.000 --> 00:06:15.000
+are "buttons", in the classical sense...
+
+00:06:15.000 --> 00:06:17.000
+you can click on these buttons, or type
+
+00:06:17.000 --> 00:06:19.000
+RET on these buttons, and you will be
+
+00:06:19.000 --> 00:06:22.000
+taken to another help page, that is
+
+00:06:22.000 --> 00:06:24.000
+generated dynamically...
+
+00:06:24.000 --> 00:06:28.000
+and you can navigate back and forth...
+
+00:06:28.000 --> 00:06:30.000
+and well, whatever...
+
+00:06:30.000 --> 00:06:33.000
+and I'm going to explain my
+
+00:06:33.000 --> 00:06:35.000
+problems with these kinds of help buffers
+
+00:06:35.000 --> 00:06:37.000
+and what I'm trying to do to
+
+00:06:37.000 --> 00:06:41.000
+overcome these problems...
+
+00:06:41.000 --> 00:06:43.000
+One of my slogans in this video
+
+00:06:43.000 --> 00:06:43.000
+is going to be this one:
+
+00:06:43.000 --> 00:06:45.000
+"Anyone can learn Lisp in one day".
+
+00:06:45.000 --> 00:06:49.000
+this is a part of a bigger quote
+
+00:06:49.000 --> 00:06:51.000
+that I took from a keynote presentation
+
+00:06:51.000 --> 00:06:54.000
+by Abelson and Sussman, who
+
+00:06:54.000 --> 00:06:58.000
+are two dinosaurs of Computer Science...
+
+00:06:58.000 --> 00:07:00.000
+Here is the full quote:
+
+00:07:00.000 --> 00:07:04.000
+"Anyone can learn Lisp in one day -
+
+00:07:04.000 --> 00:07:06.000
+except that if they already know Fortran
+
+00:07:06.000 --> 00:07:11.000
+then it would take three days."
+
+00:07:11.000 --> 00:07:24.000
+This is a frame of the video...
+
+00:07:24.000 --> 00:07:28.000
+By the way I am going to to add
+
+00:07:28.000 --> 00:07:32.000
+this... "and if the person is starting
+
+00:07:32.000 --> 00:07:34.000
+with Doom Emacs then it would take 5 years."
+
+00:07:34.000 --> 00:07:39.000
+why? I'm going to explain why.
+
+00:07:39.000 --> 00:07:43.000
+This is how Emacs used to be.
+
+00:07:43.000 --> 00:07:46.000
+If we execute these two expressions here
+
+00:07:46.000 --> 00:07:51.000
+the first one... sorry, each symbol can
+
+00:07:51.000 --> 00:07:53.000
+have two "values",
+
+00:07:53.000 --> 00:07:54.000
+one is its "value as a variable"
+
+00:07:54.000 --> 00:07:58.000
+and another one is its "value as a function"...
+
+00:07:58.000 --> 00:08:02.000
+and if we run this we store 42
+
+00:08:02.000 --> 00:08:07.000
+in the "value cell" of the symbol `foo', and
+
+00:08:07.000 --> 00:08:11.000
+if we run this defun here it stores a
+
+00:08:11.000 --> 00:08:14.000
+certain anonymous function in the
+
+00:08:14.000 --> 00:08:18.000
+"function cell" of the symbol `foo'...
+
+00:08:18.000 --> 00:08:22.000
+and in Emacs, until some time ago
+
+00:08:22.000 --> 00:08:27.000
+if we did that and and if we ran
+
+00:08:27.000 --> 00:08:30.000
+this expression here the result
+
+00:08:30.000 --> 00:08:31.000
+would be 42,
+
+00:08:31.000 --> 00:08:35.000
+because of this line here, and if we
+
+00:08:35.000 --> 00:08:37.000
+ran this line here the result would be
+
+00:08:37.000 --> 00:08:40.000
+the anonymous function corresponding to
+
+00:08:40.000 --> 00:08:41.000
+this defun here...
+
+00:08:41.000 --> 00:08:45.000
+but now this has changed...
+
+00:08:45.000 --> 00:08:48.000
+the result of this thing here is this
+
+00:08:48.000 --> 00:08:51.000
+vector-like lambda here - but that doesn't
+
+00:08:51.000 --> 00:08:54.000
+matter much now...
+
+00:08:54.000 --> 00:08:56.000
+So, until some time ago
+
+00:08:56.000 --> 00:08:58.000
+if we did that and if we ran
+
+00:08:58.000 --> 00:09:01.000
+this expression here, (foo foo)...
+
+00:09:01.000 --> 00:09:04.000
+Emacs would do this: it would
+
+00:09:04.000 --> 00:09:06.000
+replace the first `foo' by this
+
+00:09:06.000 --> 00:09:09.000
+anonymous function here, it would replace
+
+00:09:09.000 --> 00:09:11.000
+the second `foo' by the value of `foo' as a
+
+00:09:11.000 --> 00:09:13.000
+variable, that is 42,
+
+00:09:13.000 --> 00:09:16.000
+and it would evaluate this, and the
+
+00:09:16.000 --> 00:09:20.000
+result would be 420.
+
+00:09:20.000 --> 00:09:23.000
+So, again, we used to have this slogan
+
+00:09:23.000 --> 00:09:26.000
+here, "anyone can learn Lisp in one day"...
+
+00:09:26.000 --> 00:09:28.000
+but now this is gone.
+
+00:09:28.000 --> 00:09:30.000
+Let me show... let me talk
+
+00:09:30.000 --> 00:09:34.000
+a bit more about why...
+
+00:09:34.000 --> 00:09:36.000
+the title of this slide is
+
+00:09:36.000 --> 00:09:38.000
+"Lambdas for beginners broken"...
+
+00:09:38.000 --> 00:09:41.000
+if we run this, as I've shown
+
+00:09:41.000 --> 00:09:43.000
+in the previous slide...
+
+00:09:43.000 --> 00:09:45.000
+in the old style, in old Emacses,
+
+00:09:45.000 --> 00:09:47.000
+the result of (symbol-function 'foo)
+
+00:09:47.000 --> 00:09:49.000
+would be this anonymous function here...
+
+00:09:49.000 --> 00:09:54.000
+and now we get this strange thing here.
+
+00:09:54.000 --> 00:09:58.000
+So, this is an "old-style lambda",
+
+00:09:58.000 --> 00:10:02.000
+this is a "vector-like lambda",
+
+00:10:02.000 --> 00:10:05.000
+and until the middle of 2024
+
+00:10:05.000 --> 00:10:08.000
+beginners could learn a lot of Lisp
+
+00:10:08.000 --> 00:10:11.000
+by thinking only in terms of
+
+00:10:11.000 --> 00:10:13.000
+objects like these...
+
+00:10:13.000 --> 00:10:15.000
+this is a function and this
+
+00:10:15.000 --> 00:10:17.000
+is an anonymous function, and
+
+00:10:17.000 --> 00:10:20.000
+they would learn how to draw cons cell
+
+00:10:20.000 --> 00:10:23.000
+diagrams like this thing here and this
+
+00:10:23.000 --> 00:10:25.000
+thing here...
+
+00:10:25.000 --> 00:10:27.000
+they would think on lists as
+
+00:10:27.000 --> 00:10:29.000
+being these trees here, and they
+
+00:10:29.000 --> 00:10:32.000
+would be able to understand a lot of
+
+00:10:32.000 --> 00:10:35.000
+Lisp just by thinking in these terms...
+
+00:10:35.000 --> 00:10:39.000
+and then vector-like lambdas started
+
+00:10:39.000 --> 00:10:43.000
+to appear in many places... and if we use
+
+00:10:43.000 --> 00:10:46.000
+"vector-like lambdas" in a wide sense,
+
+00:10:46.000 --> 00:10:50.000
+to mean all the new objects,
+
+00:10:50.000 --> 00:10:54.000
+these new objects, that are
+
+00:10:54.000 --> 00:10:56.000
+difficult to visualize... they also started
+
+00:10:56.000 --> 00:10:58.000
+to appear in many places.
+
+00:10:58.000 --> 00:11:01.000
+This is a continuation of the
+
+00:11:01.000 --> 00:11:04.000
+previous slide - this part here is a copy
+
+00:11:04.000 --> 00:11:06.000
+of things that were in the previous slide...
+
+00:11:06.000 --> 00:11:12.000
+before 2024 beginners could
+
+00:11:12.000 --> 00:11:17.000
+open black boxes like this...
+
+00:11:17.000 --> 00:11:20.000
+they could try to see what was in the
+
+00:11:20.000 --> 00:11:24.000
+function cell of the symbol `foo'...
+
+00:11:24.000 --> 00:11:27.000
+and they would see something elegant and
+
+00:11:27.000 --> 00:11:29.000
+mind-blowing... and they would start to love
+
+00:11:29.000 --> 00:11:31.000
+Lisp immediately.
+
+00:11:31.000 --> 00:11:33.000
+Now what they get - what they see -
+
+00:11:33.000 --> 00:11:35.000
+is a tiny part of a very complex structure
+
+00:11:35.000 --> 00:11:39.000
+that is very powerful but that is
+
+00:11:39.000 --> 00:11:41.000
+very difficult to understand...
+
+00:11:41.000 --> 00:11:44.000
+and now our beginners are overwhelmed
+
+00:11:44.000 --> 00:11:46.000
+instead of mind-blown.
+
+00:11:46.000 --> 00:11:48.000
+Note that I said "black box" here.
+
+00:11:48.000 --> 00:11:52.000
+Let me explain the term.
+
+00:11:52.000 --> 00:11:57.000
+We can open what's inside of `foo'...
+
+00:11:57.000 --> 00:11:59.000
+we can open `foo' to see the contents of
+
+00:11:59.000 --> 00:12:02.000
+the symbol `foo', and we can try to see
+
+00:12:02.000 --> 00:12:06.000
+what's in the function cell of the
+
+00:12:06.000 --> 00:12:08.000
+symbol `foo'...
+
+00:12:08.000 --> 00:12:10.000
+so we can open the box, but what we get
+
+00:12:10.000 --> 00:12:13.000
+is something very difficult to understand,
+
+00:12:13.000 --> 00:12:17.000
+and so I'm going to say that
+
+00:12:17.000 --> 00:12:21.000
+when this happens that box is black.
+
+00:12:21.000 --> 00:12:23.000
+It is not totally black - we can open open it -
+
+00:12:23.000 --> 00:12:26.000
+but we don't understand what is going on there,
+
+00:12:26.000 --> 00:12:30.000
+so we declare that that is black.
+
+00:12:30.000 --> 00:12:33.000
+And... when these things started to happen
+
+00:12:33.000 --> 00:12:38.000
+_I_ was overwhelmed -
+
+00:12:38.000 --> 00:12:40.000
+and in this video I'm going to pretend
+
+00:12:40.000 --> 00:12:44.000
+that I was not the only person
+
+00:12:44.000 --> 00:12:46.000
+that was overwhelmed
+
+00:12:46.000 --> 00:12:50.000
+by these new structures
+
+00:12:50.000 --> 00:12:52.000
+that are not so elegant
+
+00:12:52.000 --> 00:12:54.000
+as the ones that we had before.
+
+00:12:54.000 --> 00:12:56.000
+Anyway...
+
+00:12:56.000 --> 00:20:38.000
+
+
diff --git a/2025/captions/emacsconf-2025-org-babel--making-orgbabel-reactive--abhinav-tushar--main--chapters.vtt b/2025/captions/emacsconf-2025-org-babel--making-orgbabel-reactive--abhinav-tushar--main--chapters.vtt
new file mode 100644
index 00000000..fb1e557c
--- /dev/null
+++ b/2025/captions/emacsconf-2025-org-babel--making-orgbabel-reactive--abhinav-tushar--main--chapters.vtt
@@ -0,0 +1,26 @@
+WEBVTT
+
+
+00:00:01.120 --> 00:00:49.041
+What are reactive notebooks?
+
+00:00:49.042 --> 00:02:38.498
+Reactivity demo
+
+00:02:38.499 --> 00:03:21.079
+Org-Babel
+
+00:03:21.080 --> 00:03:51.900
+Running the whole buffer
+
+00:03:51.901 --> 00:04:21.660
+Caching
+
+00:04:21.760 --> 00:06:04.533
+Computation dependencies
+
+00:06:04.534 --> 00:07:29.965
+Making this even better
+
+00:07:29.966 --> 00:08:08.240
+Wrapping up
diff --git a/2025/captions/emacsconf-2025-org-babel--making-orgbabel-reactive--abhinav-tushar--main.vtt b/2025/captions/emacsconf-2025-org-babel--making-orgbabel-reactive--abhinav-tushar--main.vtt
new file mode 100644
index 00000000..22373ce6
--- /dev/null
+++ b/2025/captions/emacsconf-2025-org-babel--making-orgbabel-reactive--abhinav-tushar--main.vtt
@@ -0,0 +1,614 @@
+WEBVTT captioned by abhinav
+
+NOTE What are reactive notebooks?
+
+00:00:01.120 --> 00:00:03.033
+Hello, everyone. My name is Abhinav,
+
+00:00:03.034 --> 00:00:03.900
+and I'm going to talk about
+
+00:00:03.901 --> 00:00:07.140
+how to make Org Babel reactive. So reactivity here
+
+00:00:07.240 --> 00:00:10.000
+means reactivity in the sense of reactive notebooks.
+
+00:00:10.001 --> 00:00:11.600
+So if you used Org Babel,
+
+00:00:11.601 --> 00:00:13.933
+you might also have used Jupyter notebooks,
+
+00:00:13.934 --> 00:00:16.100
+which are basically notebooks primarily for
+
+00:00:16.200 --> 00:00:16.933
+Python programming,
+
+00:00:16.934 --> 00:00:20.100
+where you have these text and code blocks interleaved,
+
+00:00:20.101 --> 00:00:23.157
+and then you can execute every code block independently,
+
+00:00:23.158 --> 00:00:25.858
+and then you control the order of execution manually,
+
+00:00:25.859 --> 00:00:27.199
+or you can just run the code blocks
+
+00:00:27.200 --> 00:00:29.699
+from top to bottom. But with reactive notebooks,
+
+00:00:29.700 --> 00:00:32.927
+what happens is that there's another way of running
+
+00:00:32.928 --> 00:00:35.329
+which is basically by having all these
+
+00:00:35.330 --> 00:00:36.900
+dependent code blocks automatically get
+
+00:00:37.000 --> 00:00:38.900
+executed whenever you make a change.
+
+00:00:38.901 --> 00:00:40.774
+So for example, if you change a variable,
+
+00:00:40.775 --> 00:00:42.060
+everything else that's dependent on
+
+00:00:42.160 --> 00:00:44.433
+that variable will be executed automatically.
+
+00:00:44.434 --> 00:00:49.041
+I'll show you an example of what that looks like.
+
+NOTE Reactivity demo
+
+00:00:49.042 --> 00:00:51.762
+Right, here's an example reactive Notebook.
+
+00:00:51.763 --> 00:00:53.460
+So this is called Observable.
+
+00:00:53.560 --> 00:00:54.863
+Observable is this tool made by
+
+00:00:54.864 --> 00:00:57.679
+the creator of d3.js which is
+
+00:00:57.680 --> 00:01:01.499
+a famous JavaScript charting library. So here, the
+
+00:01:01.500 --> 00:01:03.667
+interface is very similar to Jupyter Notebook.
+
+00:01:03.668 --> 00:01:06.407
+You basically are having these cells
+
+00:01:06.408 --> 00:01:08.508
+and each cell could be a text cell, like here,
+
+00:01:08.509 --> 00:01:09.588
+this is a Markdown cell
+
+00:01:09.589 --> 00:01:11.609
+and then there are these code blocks.
+
+00:01:11.610 --> 00:01:15.250
+Now each code cell is basically defining a variable.
+
+00:01:15.251 --> 00:01:17.740
+This is important in reactive notebooks because
+
+00:01:17.840 --> 00:01:21.140
+each cell is connected to other cell via this variable
+
+00:01:21.240 --> 00:01:23.552
+usage. So here data is defined,
+
+00:01:23.553 --> 00:01:25.012
+then there is filtered which is defined
+
+00:01:25.013 --> 00:01:27.620
+which is dependent on data, and then this plot is
+
+00:01:27.720 --> 00:01:29.133
+dependent on filtered.
+
+00:01:29.134 --> 00:01:31.153
+So now, in a classical notebook, what I will do is
+
+00:01:31.154 --> 00:01:34.394
+if I change something here, let's say from 1 to 2,
+
+00:01:34.395 --> 00:01:34.854
+I will have to run this, and then run this plot block again
+
+00:01:34.855 --> 00:01:40.335
+to make the change be visible.
+
+00:01:40.336 --> 00:01:42.055
+But in a reactive notebook, what happens is
+
+00:01:42.056 --> 00:01:44.396
+I can just change this from some value
+
+00:01:44.397 --> 00:01:46.256
+to some value, and then execute,
+
+00:01:46.257 --> 00:01:48.817
+and then every descendant is also executed,
+
+00:01:48.818 --> 00:01:50.940
+because that's how the reactivity works.
+
+00:01:51.040 --> 00:01:51.937
+You change this variable,
+
+00:01:51.938 --> 00:01:53.080
+so this should also be changed,
+
+00:01:53.081 --> 00:01:55.238
+because this is dependent on this variable.
+
+00:01:55.239 --> 00:01:56.858
+Now this is really helpful
+
+00:01:56.859 --> 00:01:58.900
+if you have a very complex and messy notebook
+
+00:01:59.000 --> 00:02:01.199
+which is what actually happens in reality.
+
+00:02:01.200 --> 00:02:03.480
+You end up doing an exploratory analysis,
+
+00:02:03.481 --> 00:02:05.959
+and you have these code blocks lying here and there.
+
+00:02:05.960 --> 00:02:07.101
+Then you change something
+
+00:02:07.102 --> 00:02:09.281
+and then you have to keep something in your mind
+
+00:02:09.282 --> 00:02:11.362
+that if I change this, I need to run
+
+00:02:11.363 --> 00:02:13.023
+these five code blocks again
+
+00:02:13.024 --> 00:02:15.604
+to finally get to the result that I want to see.
+
+00:02:15.605 --> 00:02:20.467
+Stale state causes a lot of issues in Jupyter Notebooks.
+
+00:02:20.468 --> 00:02:23.788
+So this is really good for reactivity, sorry reproducibility,
+
+00:02:23.789 --> 00:02:26.630
+but this is also really good for
+
+00:02:26.631 --> 00:02:28.599
+just having this exploration
+
+00:02:28.600 --> 00:02:30.117
+that you're trying to do. For example,
+
+00:02:30.118 --> 00:02:31.761
+you're changing something and it's really easy
+
+00:02:31.762 --> 00:02:34.887
+to just see that change happening in real time
+
+00:02:34.888 --> 00:02:38.498
+in your outcome variables, right?
+
+NOTE Org-Babel
+
+00:02:38.499 --> 00:02:41.920
+So I was wondering how to introduce this reactivity in Org Mode.
+
+00:02:41.921 --> 00:02:43.200
+And here's how it will look like.
+
+00:02:43.201 --> 00:02:46.302
+So this is a demo Org Mode file.
+
+00:02:46.303 --> 00:02:48.603
+There are many Org Babel blocks here.
+
+00:02:48.604 --> 00:02:49.563
+So you start from here.
+
+00:02:49.564 --> 00:02:52.085
+Let's say this is a code block. It has a name.
+
+00:02:52.086 --> 00:02:53.665
+And then there's another code block,
+
+00:02:53.666 --> 00:02:55.426
+which is dependent on the previous one,
+
+00:02:55.427 --> 00:02:57.807
+as you can see here, and so on.
+
+00:02:57.808 --> 00:02:59.368
+And then finally, there's a plot here,
+
+00:02:59.369 --> 00:03:00.889
+which is a gnuplot code.
+
+00:03:00.890 --> 00:03:02.550
+And you can see the image here.
+
+00:03:02.551 --> 00:03:04.131
+Now, what happens usually is that
+
+00:03:04.132 --> 00:03:05.196
+if I change this value from,
+
+00:03:05.197 --> 00:03:09.199
+let's say, 113 to 112, nothing happens on its own right?
+
+00:03:09.200 --> 00:03:12.199
+There's an extra step of execution that I will have to do
+
+00:03:12.200 --> 00:03:15.079
+so I will do that, and then the value is changed.
+
+00:03:15.080 --> 00:03:17.699
+Now the problem is that only this value is changed and
+
+00:03:17.700 --> 00:03:21.079
+if I go down and see the image, nothing will have changed.
+
+NOTE Running the whole buffer
+
+00:03:21.080 --> 00:03:23.079
+So what I can do is basically,
+
+00:03:23.080 --> 00:03:24.818
+a really simple thing is that,
+
+00:03:24.819 --> 00:03:26.500
+a simple trick is to basically
+
+00:03:26.600 --> 00:03:29.445
+enable a hook, like, add a hook
+
+00:03:29.446 --> 00:03:30.525
+whenever you're saving the buffer,
+
+00:03:30.526 --> 00:03:31.866
+you just run the full buffer again,
+
+00:03:31.867 --> 00:03:34.287
+like run all the code blocks automatically.
+
+00:03:34.288 --> 00:03:36.849
+Now if you do that, you can basically make a change somewhere
+
+00:03:36.850 --> 00:03:37.889
+and then you can, you know,
+
+00:03:37.890 --> 00:03:41.071
+see how everything else is changing
+
+00:03:41.072 --> 00:03:42.712
+which gives you some sort of reactivity,
+
+00:03:42.713 --> 00:03:43.972
+but there's still a lot of computation
+
+00:03:43.973 --> 00:03:45.973
+that's being wasted.
+
+00:03:45.974 --> 00:03:49.595
+You might not want to change or run this code block again
+
+00:03:49.596 --> 00:03:51.900
+when something down there is changing.
+
+NOTE Caching
+
+00:03:51.901 --> 00:03:54.567
+So to counter that, you can actually add caching.
+
+00:03:54.568 --> 00:03:57.133
+So if you add caching to any code block,
+
+00:03:57.134 --> 00:03:59.800
+that code block will only be executed again
+
+00:03:59.801 --> 00:04:02.300
+if that code has changed or
+
+00:04:02.400 --> 00:04:04.755
+the input variables have changed.
+
+00:04:04.756 --> 00:04:06.336
+But the other problem is that
+
+00:04:06.337 --> 00:04:08.659
+you don't want caching to be enabled for a lot of cases
+
+00:04:08.660 --> 00:04:10.840
+where the code block is actually dependent on
+
+00:04:10.841 --> 00:04:12.722
+external state, like for example,
+
+00:04:12.723 --> 00:04:15.024
+some sort of randomness or time.
+
+00:04:15.025 --> 00:04:17.433
+So caching also is, you know, kind of,
+
+00:04:17.434 --> 00:04:18.967
+it's, like, an important thing to use,
+
+00:04:18.968 --> 00:04:21.660
+but it's probably not giving you the complete answer.
+
+NOTE Computation dependencies
+
+00:04:21.760 --> 00:04:25.973
+So what we can instead do is basically figure out
+
+00:04:25.974 --> 00:04:28.554
+the whole computation dependencies here.
+
+00:04:28.555 --> 00:04:31.275
+So let's say if I look at this buffer,
+
+00:04:31.276 --> 00:04:35.076
+here's how all the blocks are connected.
+
+00:04:35.077 --> 00:04:37.656
+So as you can see the plot code block
+
+00:04:37.657 --> 00:04:40.117
+is dependent on c and then legendpg,
+
+00:04:40.118 --> 00:04:43.918
+and they themselves are dependent on these other nodes.
+
+00:04:43.919 --> 00:04:47.279
+So when I make a change in b, I only want b to run
+
+00:04:47.280 --> 00:04:50.844
+and then c and then plot. I don't want anything else to run.
+
+00:04:50.845 --> 00:04:54.267
+So what I did was I wrote a small minor mode for Org Mode
+
+00:04:54.268 --> 00:04:55.368
+which does exactly this.
+
+00:04:55.369 --> 00:04:57.769
+So whenever you are in a code block
+
+00:04:57.770 --> 00:04:59.871
+and you are making a change and then you save it,
+
+00:04:59.872 --> 00:05:01.913
+it will just follow the trail from that code block
+
+00:05:01.914 --> 00:05:05.355
+to every other descendant which is going to be impacted,
+
+00:05:05.356 --> 00:05:09.719
+and it just runs all of them, and nothing else gets executed.
+
+00:05:09.720 --> 00:05:13.119
+So to see it in action, I will just enable that mode.
+
+00:05:13.120 --> 00:05:17.021
+Yeah, right. So now here, if I change this 113 to 112
+
+00:05:17.022 --> 00:05:21.243
+and I save, this code, this variable gets changed.
+
+00:05:21.244 --> 00:05:23.744
+It's the same value because I did not update it again.
+
+00:05:23.745 --> 00:05:25.719
+And you can also see b also got changed
+
+00:05:25.720 --> 00:05:29.667
+because it's just following all the execution order and so on.
+
+00:05:29.668 --> 00:05:31.727
+The plot also got updated.
+
+00:05:31.728 --> 00:05:34.068
+We will be able to see more clearly
+
+00:05:34.069 --> 00:05:36.402
+once I change something more substantial.
+
+00:05:36.402 --> 00:05:36.402
+So here's another variable.
+
+00:05:36.403 --> 00:05:41.332
+So I added a small toggle button here,
+
+00:05:41.333 --> 00:05:43.468
+which is again part of the minor mode.
+
+00:05:43.469 --> 00:05:45.209
+So since this is nil, if I toggle it,
+
+00:05:45.210 --> 00:05:49.300
+it will become true. And this variable dictates whether
+
+00:05:49.400 --> 00:05:51.174
+the plot will have the legend or not.
+
+00:05:51.175 --> 00:05:54.457
+So if I toggle it to be t, now it's t
+
+00:05:54.458 --> 00:05:57.900
+and you can see that the plot has legend that's visible.
+
+00:05:57.901 --> 00:06:03.139
+If I toggle it back again to nil, the legend is gone.
+
+00:06:03.140 --> 00:06:04.533
+Now this is nice, this...
+
+NOTE Making this even better
+
+00:06:04.534 --> 00:06:06.380
+This is already pretty helpful for me
+
+00:06:06.480 --> 00:06:10.179
+but what we can do is we can make it even better.
+
+00:06:10.180 --> 00:06:11.400
+So one of the nicer ideas
+
+00:06:11.401 --> 00:06:13.015
+from these reactive notebooks
+
+00:06:13.016 --> 00:06:16.078
+is this idea of having an infinite canvas
+
+00:06:16.079 --> 00:06:19.022
+where you don't look at the document model,
+
+00:06:19.023 --> 00:06:20.623
+you look at the whole document
+
+00:06:20.624 --> 00:06:25.008
+as a canvas of multiple connected documents.
+
+00:06:25.009 --> 00:06:26.589
+One good thing that happens there is that
+
+00:06:26.590 --> 00:06:29.550
+you can basically have a piece of code somewhere
+
+00:06:29.551 --> 00:06:30.410
+and then piece of code
+
+00:06:30.411 --> 00:06:32.499
+somewhere very different position in the document,
+
+00:06:32.500 --> 00:06:34.732
+but you can put them together in the canvas
+
+00:06:34.733 --> 00:06:36.933
+and then see them side by side.
+
+00:06:36.934 --> 00:06:38.294
+So here also, let's say
+
+00:06:38.295 --> 00:06:41.996
+if I want to just have this image shown up at the top,
+
+00:06:41.997 --> 00:06:45.857
+what I can do is like I can pop this out,
+
+00:06:45.858 --> 00:06:49.938
+which opens a child frame, and then I can just go here.
+
+00:06:49.939 --> 00:06:52.460
+This child frame is showing the same image.
+
+00:06:52.461 --> 00:06:55.502
+So there's no change. So if I toggle this variable here,
+
+00:06:55.503 --> 00:06:58.423
+you can see that the image is updated.
+
+00:06:58.424 --> 00:07:02.199
+If I toggle it back to nil, the image, the legend is gone.
+
+00:07:02.200 --> 00:07:03.367
+And you can obviously, you know,
+
+00:07:03.368 --> 00:07:08.690
+you can make a lot of things come up as child frames.
+
+00:07:08.691 --> 00:07:09.430
+This is the same image.
+
+00:07:09.431 --> 00:07:11.291
+So even if you go down to the document,
+
+00:07:11.292 --> 00:07:13.810
+you will see the same image.
+
+00:07:13.811 --> 00:07:18.174
+So yeah, this is what I have right now.
+
+00:07:18.175 --> 00:07:21.956
+I'm definitely looking forward to making it more useful,
+
+00:07:21.957 --> 00:07:25.599
+probably including more kinds of child frames,
+
+00:07:25.600 --> 00:07:29.965
+maybe like making the whole document an infinite canvas.
+
+NOTE Wrapping up
+
+00:07:29.966 --> 00:07:32.099
+Alright, so that's the talk.
+
+00:07:32.100 --> 00:07:33.346
+If you're interested in the codebase,
+
+00:07:33.347 --> 00:07:34.446
+here's the homepage
+
+00:07:34.447 --> 00:07:35.546
+for the project [https://dev.lepisma.xyz/git/ob-rx].
+
+00:07:35.547 --> 00:07:37.566
+So the next steps for me are basically
+
+00:07:37.567 --> 00:07:40.647
+making my workflow easier in matplotlib,
+
+00:07:40.648 --> 00:07:42.587
+which is a Python-based library,
+
+00:07:42.588 --> 00:07:45.348
+and d3.js, which is for JavaScript.
+
+00:07:45.349 --> 00:07:47.888
+For the JS thing, I might have to add
+
+00:07:47.889 --> 00:07:49.540
+the interactive JS child frames,
+
+00:07:49.640 --> 00:07:51.829
+and I am also looking forward to building something
+
+00:07:51.830 --> 00:07:53.969
+which can replicate the work
+
+00:07:53.970 --> 00:07:56.750
+of the Observable's infinite canvas,
+
+00:07:56.751 --> 00:07:57.490
+because that's something
+
+00:07:57.491 --> 00:08:00.619
+which I found really useful in my work with
+
+00:08:00.620 --> 00:08:02.240
+just JS visualizations.
+
+00:08:02.340 --> 00:08:05.540
+So yeah, happy to take questions on Etherpad
+
+00:08:05.560 --> 00:08:08.240
+and thank you for your time.
diff --git a/2025/captions/emacsconf-2025-python--interactive-python-programming-in-emacs--david-vujic--main.vtt b/2025/captions/emacsconf-2025-python--interactive-python-programming-in-emacs--david-vujic--main.vtt
new file mode 100644
index 00000000..d63a36c8
--- /dev/null
+++ b/2025/captions/emacsconf-2025-python--interactive-python-programming-in-emacs--david-vujic--main.vtt
@@ -0,0 +1,731 @@
+WEBVTT captioned by sachac
+
+00:00:00.000 --> 00:00:04.439
+Okay, so welcome to this session about interactive Python
+
+00:00:04.440 --> 00:00:09.679
+programming. My name is David Vujic and I live and work in
+
+00:00:09.680 --> 00:00:15.319
+Stockholm, Sweden. a developer and today I focus
+
+00:00:15.320 --> 00:00:20.439
+mainly on Python software development. So I do this at work
+
+00:00:20.440 --> 00:00:25.999
+and I also do this on my spare time in my open source projects.
+
+00:00:26.000 --> 00:00:30.479
+Before that, I've been part of the Lisp community. I've
+
+00:00:30.480 --> 00:00:33.700
+been a Clojure developer, and also, like, way back,
+
+00:00:33.701 --> 00:00:40.279
+I was in the Microsoft world and developed C# and .NET stuff.
+
+00:00:40.280 --> 00:00:45.999
+What I've been doing lately is to try to improve the
+
+00:00:46.000 --> 00:00:52.399
+developer experience when you write Python code. So what I
+
+00:00:52.400 --> 00:00:56.159
+want to talk about is this, but also I want to begin with
+
+00:00:56.160 --> 00:01:00.839
+feedback loops because I think it's very related to this
+
+00:01:00.840 --> 00:01:05.359
+interactive programming style, like having this nice
+
+00:01:05.360 --> 00:01:07.067
+feedback when you write code.
+
+00:01:07.068 --> 00:01:10.533
+So I'm going to begin with that.
+
+NOTE Feedback loops
+
+00:01:10.534 --> 00:01:14.199
+So this image, you know, this circle is supposed to be a
+
+00:01:14.200 --> 00:01:19.879
+visualization of a feedback loop. Let's say we write our
+
+00:01:19.880 --> 00:01:25.239
+code and then we deploy it to production. Then when it's
+
+00:01:25.240 --> 00:01:29.639
+running there, we can check if things work, or if maybe someone
+
+00:01:29.640 --> 00:01:35.319
+else will let us know. Maybe our customers will let us know.
+
+00:01:35.320 --> 00:01:39.639
+That's a pretty slow feedback loop with potential risks of
+
+00:01:39.640 --> 00:01:41.867
+damaging your business or whatever.
+
+00:01:41.868 --> 00:01:44.167
+This is obvious, of course.
+
+00:01:44.168 --> 00:01:50.000
+So a faster feedback loop probably is to have
+
+00:01:50.001 --> 00:01:54.066
+some kind of automation when you do commits
+
+00:01:54.067 --> 00:01:59.733
+or maybe you have this pull request things and even reviews.
+
+00:01:59.734 --> 00:02:02.933
+So maybe not always as fast as deploy,
+
+00:02:02.934 --> 00:02:05.839
+don't deploy directly to production, but
+
+00:02:05.840 --> 00:02:10.539
+it's probably safer and often you get this automated
+
+00:02:10.540 --> 00:02:16.199
+feedback faster anyway. But it's still kind of slow. You
+
+00:02:16.200 --> 00:02:20.239
+have to wait. You have to push things to GitHub maybe and
+
+00:02:20.240 --> 00:02:24.279
+wait. So there's faster ways for sure to get feedback.
+
+00:02:24.280 --> 00:02:27.967
+So a much faster way is to write code,
+
+00:02:27.968 --> 00:02:31.367
+and write some unit tests, and run those unit tests.
+
+00:02:31.368 --> 00:02:33.467
+So then you do everything on your local machine
+
+00:02:33.468 --> 00:02:39.039
+and you will fairly quickly learn if your code does
+
+00:02:39.040 --> 00:02:47.159
+what you think it does or if it doesn't. I want to zoom in to
+
+00:02:47.160 --> 00:02:55.999
+this test write code and test flow a bit. Let's do that.
+
+NOTE Test-driven development
+
+00:02:56.000 --> 00:02:59.759
+As a developer, I have used a thing called test-driven
+
+00:02:59.760 --> 00:03:05.999
+development for quite some time. I find that this way of
+
+00:03:06.000 --> 00:03:11.259
+working is very fast when it comes to getting feedback on
+
+00:03:11.260 --> 00:03:14.519
+what your code does and how you should continue the
+
+00:03:14.520 --> 00:03:19.980
+development. So, test-driven development,
+
+00:03:19.981 --> 00:03:24.220
+basically that you start writing a test for
+
+00:03:24.221 --> 00:03:27.020
+something that you want to develop, and then you continue
+
+00:03:27.021 --> 00:03:31.019
+developing that, and then you go back to the test, and modify
+
+00:03:31.020 --> 00:03:35.079
+and modify the code, and you go back and forth between the
+
+00:03:35.080 --> 00:03:36.959
+tests and the code.
+
+00:03:36.960 --> 00:03:44.419
+It's sort of like a ping-pong game. I find this very
+
+00:03:44.420 --> 00:03:50.519
+effective when you want to get feedback and to know how to
+
+00:03:50.520 --> 00:03:57.233
+continue the development. The most important thing
+
+00:03:57.234 --> 00:04:01.700
+that I feel is that you know what the code does.
+
+00:04:01.701 --> 00:04:05.559
+You learn very quickly.
+
+NOTE REPL-driven development
+
+00:04:05.560 --> 00:04:12.199
+Let's zoom into this TDD flow a little bit. The last couple of
+
+00:04:12.200 --> 00:04:17.379
+years, I've been doing a slightly different thing which is
+
+00:04:17.380 --> 00:04:21.979
+called REPL-driven development. REPL-driven
+
+00:04:21.980 --> 00:04:25.719
+development is very similar to test-driven development,
+
+00:04:25.720 --> 00:04:31.159
+but I find it even quicker. You get feedback even quicker
+
+00:04:31.160 --> 00:04:34.979
+than with a regular TDD setup. So REPL-driven development
+
+00:04:34.980 --> 00:04:41.199
+is about writing and evaluating code in a REPL basically.
+
+00:04:41.200 --> 00:04:46.839
+And you can do experiments and you can refactor and
+
+00:04:46.840 --> 00:04:51.699
+re-evaluate and you get instant feedback on what the code
+
+00:04:51.700 --> 00:04:54.799
+does and what you need to change. So I think that's even
+
+00:04:54.800 --> 00:04:59.519
+faster than test-driven development.
+
+00:04:59.520 --> 00:05:02.899
+Okay, REPL driven development. Let's go back. What's the
+
+00:05:02.900 --> 00:05:10.759
+REPL? Most of developers know what a REPL is. The most common
+
+00:05:10.760 --> 00:05:16.399
+setup is you open this shell and you use the REPL for your
+
+00:05:16.400 --> 00:05:19.359
+programming language. In this case I'm using the Python
+
+00:05:19.360 --> 00:05:25.619
+REPL or the IPython REPL which is an enhanced REPL for Python
+
+00:05:25.620 --> 00:05:30.679
+development. So what happens here is that we start a REPL
+
+00:05:30.680 --> 00:05:34.919
+session in isolation. So this session knows about the
+
+00:05:34.920 --> 00:05:38.119
+Python environment. So it knows about the Python language
+
+00:05:38.120 --> 00:05:42.359
+basically. So as soon as we start writing things, adding
+
+00:05:42.360 --> 00:05:47.359
+variables or creating writing functions or even doing
+
+00:05:47.360 --> 00:05:51.679
+imports. Then the session will be more and more aware of the
+
+00:05:51.680 --> 00:05:55.819
+code so we will add things to the to the session and then that
+
+00:05:55.820 --> 00:06:00.519
+means that we can run functions we can print out these
+
+00:06:00.520 --> 00:06:05.859
+variables and things like that. But with REPL driven
+
+00:06:05.860 --> 00:06:09.839
+development it's not really that well at least not what I
+
+00:06:09.840 --> 00:06:14.039
+mean with REPL driven development. So what I'm thinking of
+
+00:06:14.040 --> 00:06:19.639
+is that you are in your code editor where you have your
+
+00:06:19.640 --> 00:06:22.799
+autocomplete, and you have your syntax highlighting and
+
+00:06:22.800 --> 00:06:30.459
+your favorite theme, color theme, and all of those things. But
+
+00:06:30.460 --> 00:06:34.979
+instead, you have this running REPL in the background or in a
+
+00:06:34.980 --> 00:06:41.139
+smaller window or buffer. So that means that you write code
+
+00:06:41.140 --> 00:06:45.319
+and you can send that code to the running REPL, to the REPL
+
+00:06:45.320 --> 00:06:50.399
+session. You write and do everything as you would do when
+
+00:06:50.400 --> 00:06:55.219
+writing your code basically. In this case, in this
+
+00:06:55.220 --> 00:07:00.599
+example, I have evaluated these two functions. I've sent
+
+00:07:00.600 --> 00:07:05.819
+them to the REPL session so it's aware of these functions.
+
+00:07:05.820 --> 00:07:10.399
+Then I switched to a separate different module and
+
+00:07:10.400 --> 00:07:14.039
+evaluated that one. So the REPL session now knows about
+
+00:07:14.040 --> 00:07:19.039
+these two functions and also these two variables. That
+
+00:07:19.040 --> 00:07:23.999
+means that I can evaluate the state of those variables and
+
+00:07:24.000 --> 00:07:28.999
+change code and re-evaluate and things like that. So in this
+
+00:07:29.000 --> 00:07:33.639
+example if you look in the smaller area there you see that I
+
+00:07:33.640 --> 00:07:39.639
+have evaluated this res variable on line 6 and the output was
+
+00:07:39.640 --> 00:07:42.399
+that it's a dictionary with two keys and two values
+
+00:07:42.400 --> 00:07:51.219
+basically. So this setup works in basically any of your
+
+00:07:51.220 --> 00:07:54.079
+favorite code editors. So you can do this in Visual Studio
+
+00:07:54.080 --> 00:08:01.239
+Code, you can do this in PyCharm or Vim. But what I have done is
+
+00:08:01.240 --> 00:08:07.119
+that... More like what I have missed is that when I write code
+
+00:08:07.120 --> 00:08:10.239
+and do this evaluation, this is really cool, but then I need
+
+00:08:10.240 --> 00:08:15.459
+to switch context if I want to see the result. I have to switch
+
+00:08:15.460 --> 00:08:21.979
+context to this other window. I
+
+00:08:21.980 --> 00:08:25.759
+have my focus on the code and then I have to look in a different
+
+00:08:25.760 --> 00:08:31.799
+place to know the results. And if it's a larger output, then
+
+00:08:31.800 --> 00:08:37.479
+maybe I need to scroll. So I wanted to find out if it was
+
+00:08:37.480 --> 00:08:43.479
+possible to make this even smoother and faster, this
+
+00:08:43.480 --> 00:08:45.479
+feedback loop even faster, so I don't have to switch
+
+00:08:45.480 --> 00:08:52.119
+context. What I've done here is that... I can select a row or a
+
+00:08:52.120 --> 00:08:58.079
+region and I can evaluate and then an overlay, a small pop-up
+
+00:08:58.080 --> 00:09:03.119
+shows up with the evaluated result right next to it. So I can
+
+00:09:03.120 --> 00:09:07.519
+change code and re-evaluate and quickly see the result of it
+
+00:09:07.520 --> 00:09:12.640
+without doing this context switching. So the way I've done
+
+00:09:12.641 --> 00:09:20.679
+it is that I wanted to reuse the existing tooling that I
+
+00:09:20.680 --> 00:09:27.739
+already had. I know that my in-editor REPL, the IPython
+
+00:09:27.740 --> 00:09:31.559
+REPL, already does this evaluation. So I figured maybe I can
+
+00:09:31.560 --> 00:09:35.359
+extract the data and do this visualization as a separate
+
+00:09:35.360 --> 00:09:40.839
+thing. That's how I've done it. What I've done is that
+
+00:09:40.840 --> 00:09:47.199
+I've created this overlay and placed it where my cursor
+
+00:09:47.200 --> 00:09:50.859
+currently is, right next to the code. Then I've
+
+00:09:50.860 --> 00:09:55.719
+extracted the evaluated result and put it in this overlay.
+
+00:09:55.720 --> 00:10:01.039
+I also want this overlay to have this nice looking syntax,
+
+00:10:01.040 --> 00:10:04.759
+so I've set it to this Python mode, so we get this syntax
+
+00:10:04.760 --> 00:10:10.559
+highlighting. Make it look very readable. And as a nice
+
+00:10:10.560 --> 00:10:16.879
+developer experience thing,
+
+00:10:16.880 --> 00:10:20.379
+when you move the cursor, of course you don't want the
+
+00:10:20.380 --> 00:10:25.679
+overlay to be there. You want it to disappear. So those kinds
+
+00:10:25.680 --> 00:10:28.999
+of things I've added. So putting the overlay at the right
+
+00:10:29.000 --> 00:10:33.279
+place and feed it with the evaluated data and then make it
+
+00:10:33.280 --> 00:10:39.839
+disappear when it's not interesting to look at anymore.
+
+00:10:39.840 --> 00:10:44.639
+What I've described so far is something that I use on a
+
+00:10:44.640 --> 00:10:50.639
+daily basis, and it covers most of my needs while doing Python
+
+00:10:50.640 --> 00:10:56.119
+development. But one thing I still miss, and I miss it from my
+
+00:10:56.120 --> 00:11:03.479
+days as a Clojure developer, because over there we could
+
+00:11:03.480 --> 00:11:07.919
+have a running app on our local machine and we can have our
+
+00:11:07.920 --> 00:11:12.719
+editor, and the app and the editor were connected. So when I
+
+00:11:12.720 --> 00:11:17.199
+did some changes in the code, the app would change without
+
+00:11:17.200 --> 00:11:20.559
+any restarts or anything like that. And the same if I would
+
+00:11:20.560 --> 00:11:24.679
+change the state of the app, I can inspect the state from the
+
+00:11:24.680 --> 00:11:28.919
+code. So they were connected. They are connected. So I was
+
+00:11:28.920 --> 00:11:32.839
+thinking, hey, this would be really cool if we could have
+
+00:11:32.840 --> 00:11:39.199
+something like this in Python. And that reminded me of
+
+00:11:39.200 --> 00:11:43.839
+Jupyter and Jupyter notebooks because I think notebooks,
+
+00:11:43.840 --> 00:11:49.659
+the way you do things there, is very similar to what I was
+
+00:11:49.660 --> 00:11:56.879
+trying to achieve. So I was reading up a little bit on how this
+
+00:11:56.880 --> 00:12:00.919
+notebook thing works. It turns out that a notebook is a
+
+00:12:00.920 --> 00:12:05.279
+client that talks to a server, that communicates with a
+
+00:12:05.280 --> 00:12:08.799
+server. It's on the server that all this Python
+
+00:12:08.800 --> 00:12:14.159
+evaluation and all this thing happens. Then what I've
+
+00:12:14.160 --> 00:12:19.659
+done is that instead of starting up IPython in my editor, I
+
+00:12:19.660 --> 00:12:23.519
+start the Jupyter console instead. And then I can give it
+
+00:12:23.520 --> 00:12:27.159
+that unique ID and it will be connected to that running
+
+00:12:27.160 --> 00:12:30.919
+kernel.
+
+NOTE FastAPI CRUD
+
+00:12:30.920 --> 00:12:37.199
+In this example, I've created this FastAPI CRUD app that
+
+00:12:37.200 --> 00:12:41.919
+has this create, read, update, and delete endpoints. It
+
+00:12:41.920 --> 00:12:46.399
+has this, it's locally running, it has this database where
+
+00:12:46.400 --> 00:12:51.639
+you can do all these things. I'm running this FastAPI app
+
+00:12:51.640 --> 00:12:58.059
+in the kernel and then I've connected to, I've connected to
+
+00:12:58.060 --> 00:13:03.239
+the kernel in my editor too. Both of them are connected to
+
+00:13:03.240 --> 00:13:09.719
+the kernel. What I do now is that I want to initially create
+
+00:13:09.720 --> 00:13:15.239
+some data. I'm going to add this, creating this message.
+
+00:13:15.240 --> 00:13:19.899
+What I get back is a message ID. I want to experiment in
+
+00:13:19.900 --> 00:13:24.359
+my browser. What do I get with that message ID? I'm
+
+00:13:24.360 --> 00:13:30.239
+evaluating the read function. I instantly get this
+
+00:13:30.240 --> 00:13:34.779
+evaluated result, which was this hello world text. So what
+
+00:13:34.780 --> 00:13:39.919
+happens if I do some changes in this app? I'm going to grab
+
+00:13:39.920 --> 00:13:49.659
+this message ID and write something else.
+
+00:13:49.660 --> 00:13:53.759
+Now I can evaluate the same thing again, and you can see that
+
+00:13:53.760 --> 00:14:02.399
+the content has changed to this new value. My editor isn't
+
+00:14:02.400 --> 00:14:07.719
+in any debug mode or something like that. It doesn't know
+
+00:14:07.720 --> 00:14:11.239
+what database it is. It doesn't have any environment
+
+00:14:11.240 --> 00:14:14.479
+variables set up or something like that. It is only
+
+00:14:14.480 --> 00:14:17.599
+connected to the kernel, and the kernel is aware of that. It's
+
+00:14:17.600 --> 00:14:20.479
+running the app. It has the connection strings and
+
+00:14:20.480 --> 00:14:28.799
+everything that is needed. So that's how this thing works.
+
+00:14:28.800 --> 00:14:34.199
+Now I want to do some inline hacking because I want to store
+
+00:14:34.200 --> 00:14:37.799
+this input that is sent from this app because I want to work
+
+00:14:37.800 --> 00:14:42.039
+with it afterwards. I can add this dictionary that stores
+
+00:14:42.040 --> 00:14:48.759
+this message. I'm updating the source code of this app, and
+
+00:14:48.760 --> 00:15:03.079
+when I run any of these endpoints again, you will see that
+
+00:15:03.080 --> 00:15:08.759
+the state changes, and the new inputs, I can grab and I can use
+
+00:15:08.760 --> 00:15:14.399
+them for quick evaluation or testing. This example is
+
+00:15:14.400 --> 00:15:18.519
+really simple. It was just an integer. For example, if you
+
+00:15:18.520 --> 00:15:23.519
+are sending a more complex object, maybe a pydantic schema
+
+00:15:23.520 --> 00:15:28.199
+or something, and you want to inspect what's coming in, and if
+
+00:15:28.200 --> 00:15:34.199
+you have some sort of validation that you want to test out.
+
+00:15:34.200 --> 00:15:38.399
+The configuration or the code that I wrote to make this work
+
+00:15:38.400 --> 00:15:44.159
+is a little bit different than just adding an overlay. I'm
+
+00:15:44.160 --> 00:15:50.999
+using this overlay just like with the IPython example, but in
+
+00:15:51.000 --> 00:15:57.839
+this case, when I change code, I have to think about where that
+
+00:15:57.840 --> 00:16:02.159
+code lives, because it's the app that runs the code. So it's
+
+00:16:02.160 --> 00:16:07.039
+in the app context I need to manipulate with the data. If you
+
+00:16:07.040 --> 00:16:11.919
+have started the app from maybe a main function and that
+
+00:16:11.920 --> 00:16:17.879
+module imports namespaces, then you need to, if you want to
+
+00:16:17.880 --> 00:16:22.359
+update a function or something like that, you need to update
+
+00:16:22.360 --> 00:16:26.679
+it in the correct namespace. What I did before in IPython
+
+00:16:26.680 --> 00:16:29.919
+by adding and changing things, everything ends up in the
+
+00:16:29.920 --> 00:16:34.439
+global namespace. But here, if you want the app to actually
+
+00:16:34.440 --> 00:16:38.479
+react to the changes, you need to put it in the right
+
+00:16:38.480 --> 00:16:43.479
+namespace. So that's what I do here. I do some lookups, where
+
+00:16:43.480 --> 00:16:49.139
+is this function, and then I do this reload of this function or
+
+00:16:49.140 --> 00:16:54.799
+module. And when I was developing this, I was thinking, hey,
+
+00:16:54.800 --> 00:16:59.319
+this is really ugly. I'm in this REPL and do some
+
+00:16:59.320 --> 00:17:03.559
+manipulation of the imports and things like that. That
+
+00:17:03.560 --> 00:17:09.759
+didn't feel good. Then I was reminded of the IPython. And
+
+00:17:09.760 --> 00:17:15.519
+IPython has this feature to reload any updated
+
+00:17:15.520 --> 00:17:19.119
+submodules. I was curious how do they do it. I looked in the
+
+00:17:19.120 --> 00:17:24.079
+IPython source code and saw that they also use importlib and
+
+00:17:24.080 --> 00:17:28.359
+reloading of this module. Once I've learned that, then I
+
+00:17:28.360 --> 00:17:32.599
+stopped thinking that my code was hacky. I thought it was
+
+00:17:32.600 --> 00:17:37.159
+good enough at least.
+
+NOTE Testing with an LLM
+
+00:17:37.160 --> 00:17:45.059
+But one thing that has bothered me for a long time is I quite
+
+00:17:45.060 --> 00:17:50.199
+often want to test out and evaluate individual rows that
+
+00:17:50.200 --> 00:17:58.559
+lives in a function. Quite often, this code uses the input
+
+00:17:58.560 --> 00:18:02.639
+to that function like the input parameters. To be able to
+
+00:18:02.640 --> 00:18:07.719
+do that, I need to manually type some fake data and set it to
+
+00:18:07.720 --> 00:18:12.279
+this variable, and then I can evaluate the code. But I think
+
+00:18:12.280 --> 00:18:17.779
+that takes... That slows me down. I was thinking, maybe I can
+
+00:18:17.780 --> 00:18:23.439
+do this in a quicker way, so I have this quicker feedback, so I
+
+00:18:23.440 --> 00:18:27.933
+can run this or evaluate this code much quicker.
+
+00:18:27.934 --> 00:18:29.439
+So my idea was maybe I
+
+00:18:29.440 --> 00:18:35.239
+can use an LLM for this. If I give it the parameters, maybe it
+
+00:18:35.240 --> 00:18:41.119
+can return some random data so I don't have to write it
+
+00:18:41.120 --> 00:18:44.119
+myself. I ended up doing that. I have this source code.
+
+00:18:44.120 --> 00:18:50.399
+I'm loading the REPL with the code. Then I select this
+
+00:18:50.400 --> 00:18:56.719
+function name and the parameters with its data type. I
+
+00:18:56.720 --> 00:19:02.839
+have this prompt that instructs the LLM to come up with fake
+
+00:19:02.840 --> 00:19:06.239
+data based on the tag name and on the data type. And then I can
+
+00:19:06.240 --> 00:19:10.099
+send that to the REPL. I do that with a key command. Then
+
+00:19:10.100 --> 00:19:16.019
+I can proceed by running the code within the function that
+
+00:19:16.020 --> 00:19:21.719
+uses these inputs. This works for all the data types. If
+
+00:19:21.720 --> 00:19:26.279
+there's a custom data type, you need to give the LLM extra
+
+00:19:26.280 --> 00:19:30.399
+context. So that's something to think about. Once it knows
+
+00:19:30.400 --> 00:19:35.679
+the context, it can generate this fake data that very often is
+
+00:19:35.680 --> 00:19:39.839
+good enough just to test out, you know, like I've done here, like
+
+00:19:39.840 --> 00:19:45.399
+string... sorry, list destructuring and parsing and things
+
+00:19:45.400 --> 00:19:51.879
+like that. I think that was all I had, and thank you for
+
+00:19:51.880 --> 00:19:52.920
+listening!
diff --git a/2025/captions/emacsconf-2025-reader--an-introduction-to-the-emacs-reader--divy--main--chapters.vtt b/2025/captions/emacsconf-2025-reader--an-introduction-to-the-emacs-reader--divy--main--chapters.vtt
new file mode 100644
index 00000000..d5b51235
--- /dev/null
+++ b/2025/captions/emacsconf-2025-reader--an-introduction-to-the-emacs-reader--divy--main--chapters.vtt
@@ -0,0 +1,47 @@
+WEBVTT
+
+
+00:00:00.720 --> 00:00:44.759
+An introduction to the Emacs reader
+
+00:00:44.760 --> 00:02:05.759
+Yet another document viewer in Emacs?
+
+00:02:05.760 --> 00:06:00.279
+Architecture of Emacs Reader
+
+00:06:00.280 --> 00:07:39.559
+A word on dynamic modules
+
+00:07:39.560 --> 00:07:56.759
+Features of Emacs Reader
+
+00:07:56.760 --> 00:11:18.719
+Memory efficiency
+
+00:11:18.720 --> 00:14:23.679
+Performance and speed
+
+00:14:23.680 --> 00:17:08.959
+Scanned PDFs
+
+00:17:08.960 --> 00:23:44.239
+System-level multi-threading
+
+00:23:44.240 --> 00:25:10.339
+Native Emacs integrations
+
+00:25:10.340 --> 00:26:01.139
+(Naive) dark mode
+
+00:26:01.140 --> 00:29:14.271
+Challenges and further improvements
+
+00:29:14.272 --> 00:32:32.299
+What Emacs can learn?
+
+00:32:32.300 --> 00:33:35.519
+Contributing to the development
+
+00:33:35.520 --> 00:34:37.280
+Acknowledgements
diff --git a/2025/captions/emacsconf-2025-reader--an-introduction-to-the-emacs-reader--divy--main.vtt b/2025/captions/emacsconf-2025-reader--an-introduction-to-the-emacs-reader--divy--main.vtt
new file mode 100644
index 00000000..2f83bc19
--- /dev/null
+++ b/2025/captions/emacsconf-2025-reader--an-introduction-to-the-emacs-reader--divy--main.vtt
@@ -0,0 +1,2431 @@
+WEBVTT captioned by jay_bird and sachac
+
+NOTE An introduction to the Emacs reader
+
+00:00:00.720 --> 00:00:02.879
+Hello EmacsConf!
+
+00:00:02.880 --> 00:00:06.639
+Today I'm here to introduce you to the Emacs Reader.
+
+00:00:06.640 --> 00:00:08.759
+It is a general-purpose document viewer
+
+00:00:08.760 --> 00:00:12.319
+that lives inside our beloved Emacs.
+
+00:00:12.320 --> 00:00:14.159
+It tries to prioritize memory
+
+00:00:14.160 --> 00:00:17.159
+and performance efficiency as much as possible
+
+00:00:17.160 --> 00:00:20.519
+even when you're using a lower-end hardware.
+
+00:00:20.520 --> 00:00:22.119
+And, most importantly,
+
+00:00:22.120 --> 00:00:25.439
+it tries to do things in an Emacs manner.
+
+00:00:25.440 --> 00:00:26.999
+That is, it tries to integrate
+
+00:00:27.000 --> 00:00:29.719
+with existing packages as much as possible
+
+00:00:29.720 --> 00:00:32.239
+instead of reinventing the wheel.
+
+00:00:32.240 --> 00:00:36.119
+And architecturally, it tries to take the advantage
+
+00:00:36.120 --> 00:00:38.479
+of dynamic or native modules
+
+00:00:38.480 --> 00:00:44.759
+which were introduced back in 2015 into Emacs.
+
+NOTE Yet another document viewer in Emacs?
+
+00:00:44.760 --> 00:00:46.759
+You would ask, why exactly do we need
+
+00:00:46.760 --> 00:00:49.199
+another document viewer in Emacs?
+
+00:00:49.200 --> 00:00:51.839
+Don't we already have the built-in DocView
+
+00:00:51.840 --> 00:00:55.199
+and the notorious pdf-tools?
+
+00:00:55.200 --> 00:00:59.439
+Well, the built-in DocView has unusable latency,
+
+00:00:59.440 --> 00:01:01.399
+and I'm going to show you this later
+
+00:01:01.400 --> 00:01:04.599
+when I compare this with Emacs Reader.
+
+00:01:04.600 --> 00:01:08.079
+The famous pdf-tools has actually multiple issues.
+
+00:01:08.080 --> 00:01:10.639
+One, it is extremely memory-hungry
+
+00:01:10.640 --> 00:01:14.399
+regardless of what kind of PDFs you're reading.
+
+00:01:14.400 --> 00:01:17.939
+And, well, it can only read PDFs.
+
+00:01:17.940 --> 00:01:22.199
+Poppler, the library which pdf-tools uses,
+
+00:01:22.200 --> 00:01:23.879
+is actually sub-optimal,
+
+00:01:23.880 --> 00:01:25.799
+especially relative to MuPDF,
+
+00:01:25.800 --> 00:01:28.559
+which is what Emacs Reader is based on.
+
+00:01:28.560 --> 00:01:31.919
+pdf-tools is also extremely painful to install.
+
+00:01:31.920 --> 00:01:34.279
+If you've ever installed pdf-tools,
+
+00:01:34.280 --> 00:01:38.479
+you know that it has a bunch of dependencies,
+
+00:01:38.480 --> 00:01:42.319
+including a server that is supposedly packaged.
+
+00:01:42.320 --> 00:01:45.061
+across package managers, system package managers.
+
+00:01:45.062 --> 00:01:47.737
+It's extremely difficult to install
+
+00:01:47.738 --> 00:01:50.279
+and painful to install.
+
+00:01:50.280 --> 00:01:52.839
+And of course, pdf-tools
+
+00:01:52.840 --> 00:01:54.559
+since the last couple of years
+
+00:01:54.560 --> 00:01:56.559
+has not been maintained as much.
+
+00:01:56.560 --> 00:02:05.759
+There's huge PRs that have been unnoticed and unmerged.
+
+NOTE Architecture of Emacs Reader
+
+00:02:05.760 --> 00:02:08.999
+Architecturally, Emacs Reader takes a distance
+
+00:02:09.000 --> 00:02:12.559
+from both DocView and pdf-tools.
+
+00:02:12.560 --> 00:02:15.399
+So how DocView works is that
+
+00:02:15.400 --> 00:02:18.679
+it basically wraps around
+
+00:02:18.680 --> 00:02:20.879
+a tool called mutool.
+
+00:02:20.880 --> 00:02:22.319
+mutool is actually
+
+00:02:22.320 --> 00:02:26.119
+a command line tool from MuPDF itself.
+
+00:02:26.120 --> 00:02:28.199
+It relies on mutool and a bunch
+
+00:02:28.200 --> 00:02:30.579
+of other similar command line tools,
+
+00:02:30.580 --> 00:02:34.199
+and basically makes process calls
+
+00:02:34.200 --> 00:02:36.519
+from Elisp to the CLI tools.
+
+00:02:36.520 --> 00:02:38.639
+That's how DocView works,
+
+00:02:38.640 --> 00:02:41.319
+and that's why it sort of has latency issues
+
+00:02:41.320 --> 00:02:42.519
+because that's the best you can do
+
+00:02:42.520 --> 00:02:45.019
+by literally calling CLI tools
+
+00:02:45.020 --> 00:02:50.679
+and outputting the images into Emacs.
+
+00:02:50.680 --> 00:02:55.039
+How pdf-tools works is that it tries
+
+00:02:55.040 --> 00:02:57.479
+to have a server-client model.
+
+00:02:57.480 --> 00:02:58.999
+So the client is Emacs
+
+00:02:59.000 --> 00:03:00.559
+and the server is basically
+
+00:03:00.560 --> 00:03:02.999
+something they call epdfinfo.
+
+00:03:03.000 --> 00:03:07.240
+It's supposed to render the images using Poppler
+
+00:03:07.241 --> 00:03:10.919
+and then send the images to Emacs
+
+00:03:10.920 --> 00:03:13.279
+which then tries to display.
+
+00:03:13.280 --> 00:03:16.279
+I think the server client model is terrible.
+
+00:03:16.280 --> 00:03:18.079
+One, for latency purposes,
+
+00:03:18.080 --> 00:03:19.839
+and two, it makes things
+
+00:03:19.840 --> 00:03:21.799
+unnecessarily more complicated.
+
+00:03:21.800 --> 00:03:24.199
+Here is where we come
+
+00:03:24.200 --> 00:03:26.679
+and introduce dynamic modules.
+
+00:03:26.680 --> 00:03:30.579
+So Emacs Reader is based on
+
+00:03:30.580 --> 00:03:32.279
+the concept of dynamic modules
+
+00:03:32.280 --> 00:03:34.279
+which I'm going to talk about in a bit.
+
+00:03:34.280 --> 00:03:37.159
+But how it works is that we have C modules.
+
+00:03:37.160 --> 00:03:39.039
+So we have the emacs-module.h,
+
+00:03:39.040 --> 00:03:40.679
+that's the dynamic module header
+
+00:03:40.680 --> 00:03:43.159
+which every dynamic module package must have.
+
+00:03:43.160 --> 00:03:45.479
+And then we have our C files.
+
+00:03:45.480 --> 00:03:52.579
+And these C files essentially define functions
+
+00:03:52.580 --> 00:03:56.439
+that are going to be used in Emacs but in C.
+
+00:03:56.440 --> 00:03:59.319
+We then load these C modules
+
+00:03:59.320 --> 00:04:03.799
+using simple (require ...) in our Elisp modules.
+
+00:04:03.800 --> 00:04:05.079
+And then whenever we call
+
+00:04:05.080 --> 00:04:07.119
+something in the Emacs runtime,
+
+00:04:07.120 --> 00:04:09.159
+say I'm going to open
+
+00:04:09.160 --> 00:04:13.559
+PDF files in (find-file) or (reader-open-doc),
+
+00:04:13.560 --> 00:04:15.799
+what it does is that
+
+00:04:15.800 --> 00:04:19.039
+it tries to use one of the functions
+
+00:04:19.040 --> 00:04:20.999
+that is wrapped in Elisp,
+
+00:04:21.000 --> 00:04:24.839
+but actually tries to call a function in C.
+
+00:04:24.840 --> 00:04:26.839
+And then the C module is actually
+
+00:04:26.840 --> 00:04:29.279
+going to make calls to the MuPDF.
+
+00:04:29.280 --> 00:04:31.599
+Here the MuPDF system package,
+
+00:04:31.600 --> 00:04:33.399
+this is actually a system package
+
+00:04:33.400 --> 00:04:35.839
+that is dynamically linked to the C modules.
+
+00:04:35.840 --> 00:04:36.919
+So we're basically
+
+00:04:36.920 --> 00:04:39.799
+just using it as a shared library.
+
+00:04:39.800 --> 00:04:43.359
+So you have the fz_load_page, for example,
+
+00:04:43.360 --> 00:04:44.839
+it's a MuPDF function
+
+00:04:44.840 --> 00:04:47.399
+that we're going to be using in the C modules.
+
+00:04:47.400 --> 00:04:50.079
+So it's going to make
+
+00:04:50.080 --> 00:04:53.279
+a shared dynamic call to MuPDF
+
+00:04:53.280 --> 00:04:55.119
+and then render the page
+
+00:04:55.120 --> 00:04:59.179
+and then show this to Emacs.
+
+00:04:59.180 --> 00:05:01.839
+This pipeline, I argue,
+
+00:05:01.840 --> 00:05:05.599
+is much better and leaner and efficient
+
+00:05:05.600 --> 00:05:07.639
+than a server-client model.
+
+00:05:07.640 --> 00:05:09.479
+One, because we don't really need
+
+00:05:09.480 --> 00:05:10.839
+the server-client model.
+
+00:05:10.840 --> 00:05:12.359
+So back when Politza
+
+00:05:12.360 --> 00:05:14.759
+first introduced pdf-tools,
+
+00:05:14.760 --> 00:05:19.759
+that was like 10 years ago in 2015,
+
+00:05:19.760 --> 00:05:21.240
+the concept of dynamic modules
+
+00:05:21.241 --> 00:05:23.279
+were not integrated into Emacs.
+
+00:05:23.280 --> 00:05:24.359
+I think they came around
+
+00:05:24.360 --> 00:05:28.079
+like one or two years late, 2017.
+
+00:05:28.080 --> 00:05:31.219
+So that's the best he could go with.
+
+00:05:31.220 --> 00:05:33.079
+We don't really have to, today,
+
+00:05:33.080 --> 00:05:35.719
+because, since we can use MuPDF
+
+00:05:35.720 --> 00:05:36.999
+as a shared library
+
+00:05:37.000 --> 00:05:39.479
+which can render things in real-time
+
+00:05:39.480 --> 00:05:41.759
+and just give us the rendered images
+
+00:05:41.760 --> 00:05:43.599
+which we can then display,
+
+00:05:43.600 --> 00:05:49.659
+there's no reason for a server to do things for us.
+
+00:05:49.660 --> 00:05:53.359
+So that's the main architectural difference
+
+00:05:53.360 --> 00:05:55.479
+that Emacs Reader introduces
+
+00:05:55.480 --> 00:06:00.279
+compared to pdf-tools and DocView.
+
+NOTE A word on dynamic modules
+
+00:06:00.280 --> 00:06:02.479
+What exactly are dynamic modules?
+
+00:06:02.480 --> 00:06:04.119
+Well, I can't really give you
+
+00:06:04.120 --> 00:06:06.199
+a full-fledged explanation,
+
+00:06:06.200 --> 00:06:08.639
+but essentially dynamic modules
+
+00:06:08.640 --> 00:06:10.519
+let you evaluate
+
+00:06:10.520 --> 00:06:12.039
+native compiled code
+
+00:06:12.040 --> 00:06:15.119
+in other languages like C, C++, Rust
+
+00:06:15.120 --> 00:06:18.519
+that behaves like regular Emacs Lisp.
+
+00:06:18.520 --> 00:06:23.639
+So when our Emacs C modules,
+
+00:06:23.640 --> 00:06:26.039
+the render-core.c or render-theme.c,
+
+00:06:26.040 --> 00:06:28.299
+when all of these are compiled,
+
+00:06:28.300 --> 00:06:30.839
+and they're called from the Elisp modules.
+
+00:06:30.840 --> 00:06:34.439
+They behave like Elisp even though
+
+00:06:34.440 --> 00:06:37.039
+they're as fast as a C function
+
+00:06:37.040 --> 00:06:39.359
+because they're compiled C code.
+
+00:06:39.360 --> 00:06:41.399
+But you essentially call them
+
+00:06:41.400 --> 00:06:42.759
+just like Elisp functions.
+
+00:06:42.760 --> 00:06:47.819
+You can find them using C-h f and so on.
+
+00:06:47.820 --> 00:06:49.679
+So you can call any function
+
+00:06:49.680 --> 00:06:51.719
+from any language that supports
+
+00:06:51.720 --> 00:06:53.519
+the C ABI, which is virtually everything,
+
+00:06:53.520 --> 00:06:54.919
+without leaving Emacs
+
+00:06:54.920 --> 00:06:56.759
+and without losing any performance.
+
+00:06:56.760 --> 00:06:58.479
+This is extremely helpful
+
+00:06:58.480 --> 00:06:59.919
+when you want to use
+
+00:06:59.920 --> 00:07:02.119
+existing libraries like MuPDF
+
+00:07:02.120 --> 00:07:04.079
+or any other cryptographic library
+
+00:07:04.080 --> 00:07:06.039
+that is written in C
+
+00:07:06.040 --> 00:07:07.037
+and you don't want to rewrite
+
+00:07:07.038 --> 00:07:08.537
+the entire thing in Elisp,
+
+00:07:08.538 --> 00:07:11.739
+but you can just use it as a native library.
+
+00:07:11.740 --> 00:07:13.039
+You can read more
+
+00:07:13.040 --> 00:07:14.679
+on how dynamic modules work
+
+00:07:14.680 --> 00:07:17.759
+and how you can write one in this blog.
+
+00:07:17.760 --> 00:07:19.479
+This is something that I wrote myself
+
+00:07:19.480 --> 00:07:22.239
+just after starting this package
+
+00:07:22.240 --> 00:07:25.439
+and it will give you a bit more guidance
+
+00:07:25.440 --> 00:07:27.519
+on how to use dynamic modules more efficiently.
+
+00:07:27.520 --> 00:07:28.679
+I think dynamic modules
+
+00:07:28.680 --> 00:07:32.299
+should be used more and more in Emacs
+
+00:07:32.300 --> 00:07:34.519
+and I think their advantages
+
+00:07:34.520 --> 00:07:36.079
+have not been exploited
+
+00:07:36.080 --> 00:07:39.559
+as much as they should.
+
+NOTE Features of Emacs Reader
+
+00:07:39.560 --> 00:07:42.319
+Now we're going to talk a bit about
+
+00:07:42.320 --> 00:07:46.719
+the core features of Emacs Reader.
+
+00:07:46.720 --> 00:07:48.879
+And these are the following features
+
+00:07:48.880 --> 00:07:50.399
+that we're going to talk about.
+
+00:07:50.400 --> 00:07:51.959
+And finally, to talk about
+
+00:07:51.960 --> 00:07:56.759
+some challenges that we faced.
+
+NOTE Memory efficiency
+
+00:07:56.760 --> 00:07:58.519
+First is memory efficiency.
+
+00:07:58.520 --> 00:08:00.819
+I already told you that
+
+00:08:00.820 --> 00:08:03.239
+Emacs Reader's first priority
+
+00:08:03.240 --> 00:08:06.439
+is to make sure that we are not slow
+
+00:08:06.440 --> 00:08:07.959
+and we are not taking
+
+00:08:07.960 --> 00:08:10.319
+a bunch of memory unnecessarily.
+
+00:08:10.320 --> 00:08:14.439
+So here's a graph of the heap memory size
+
+00:08:14.440 --> 00:08:17.919
+as it grows for DocView.
+
+00:08:17.920 --> 00:08:20.637
+So this is again in emacs -Q.
+
+00:08:20.638 --> 00:08:22.399
+So this is a fresh Emacs session
+
+00:08:22.400 --> 00:08:25.279
+with just DocView.
+
+00:08:25.280 --> 00:08:27.819
+It grows up to 900MB
+
+00:08:27.820 --> 00:08:31.559
+for a very small PDF that is a LaTeX PDF.
+
+00:08:31.560 --> 00:08:36.779
+No scanned huge PDF. It's a 2MB PDF.
+
+00:08:36.780 --> 00:08:39.679
+But when I scrolled from the beginning
+
+00:08:39.680 --> 00:08:41.619
+of the PDF to the end,
+
+00:08:41.620 --> 00:08:43.639
+it went up to 900MB.
+
+00:08:43.640 --> 00:08:46.819
+That's the memory heap size.
+
+00:08:46.820 --> 00:08:49.699
+Does pdf-tools make this any better?
+
+00:08:49.700 --> 00:08:51.919
+It actually doesn't.
+
+00:08:51.920 --> 00:08:55.039
+So, pdf-tools pretty much
+
+00:08:55.040 --> 00:08:57.219
+does the same thing.
+
+00:08:57.220 --> 00:08:58.439
+if you look at it here
+
+00:08:58.440 --> 00:09:01.359
+just so if you're going to ask me
+
+00:09:01.360 --> 00:09:02.939
+are they two different graphs,
+
+00:09:02.940 --> 00:09:04.839
+or are you just showing me the same graph,
+
+00:09:04.840 --> 00:09:06.119
+they're actually two different graphs,
+
+00:09:06.120 --> 00:09:08.779
+because if you look at the DocView graph
+
+00:09:08.780 --> 00:09:11.559
+it uses cairo and it uses librsvg
+
+00:09:11.560 --> 00:09:13.439
+because docview by default
+
+00:09:13.440 --> 00:09:16.119
+converts the images into SVG.
+
+00:09:16.120 --> 00:09:17.999
+The rendered images are SVGs.
+
+00:09:18.000 --> 00:09:20.559
+pdf-tools doesn't, so you don't see
+
+00:09:20.560 --> 00:09:24.039
+any librsvg calls here or anything
+
+00:09:24.040 --> 00:09:25.439
+So this is pdf-tools
+
+00:09:25.440 --> 00:09:27.079
+and it basically takes up
+
+00:09:27.080 --> 00:09:29.079
+the same amount of memory, 900MB,
+
+00:09:29.080 --> 00:09:30.919
+and exactly the same operation,
+
+00:09:30.920 --> 00:09:32.479
+exactly the same PDF,
+
+00:09:32.480 --> 00:09:36.139
+exactly scrolling from first to the last.
+
+00:09:36.140 --> 00:09:37.719
+Where do we stand?
+
+00:09:37.720 --> 00:09:40.559
+Well, we actually do much better.
+
+00:09:40.560 --> 00:09:42.599
+So let me zoom in this.
+
+00:09:42.600 --> 00:09:46.319
+So if you see, we stand within
+
+00:09:46.320 --> 00:09:49.259
+at a peak of 72MB.
+
+00:09:49.260 --> 00:09:51.279
+Exactly the same PDF,
+
+00:09:51.280 --> 00:09:53.039
+exactly the same operation
+
+00:09:53.040 --> 00:09:54.559
+from the beginning to the end,
+
+00:09:54.560 --> 00:09:57.599
+around 285 pages scrolled.
+
+00:09:57.600 --> 00:10:03.239
+We take much less than 80 MB.
+
+00:10:03.240 --> 00:10:05.071
+And actually, to be very frank,
+
+00:10:05.072 --> 00:10:09.204
+the only memory that we're storing in Emacs,
+
+00:10:09.205 --> 00:10:12.439
+oh, sorry, not in Emacs,
+
+00:10:12.440 --> 00:10:16.599
+in the MuPDF heap is just about 30 MB.
+
+00:10:16.600 --> 00:10:19.119
+It's this dark red one.
+
+00:10:19.120 --> 00:10:22.559
+That's the cache that we're storing.
+
+00:10:22.560 --> 00:10:24.759
+That's the memory that we're interacting with
+
+00:10:24.760 --> 00:10:25.479
+in real time.
+
+00:10:25.480 --> 00:10:29.199
+This is stuff that Emacs adds on top of it
+
+00:10:29.200 --> 00:10:32.919
+and a bit of libmupdf.
+
+00:10:32.920 --> 00:10:35.199
+So you can see, in terms of memory,
+
+00:10:35.200 --> 00:10:37.239
+we're saving...
+
+00:10:37.240 --> 00:10:41.119
+we're literally down,
+
+00:10:41.120 --> 00:10:45.359
+what, a fraction of 10!
+
+00:10:45.360 --> 00:10:48.519
+This was a priority for us
+
+00:10:48.520 --> 00:10:49.279
+since the beginning,
+
+00:10:49.280 --> 00:10:51.999
+because when I was starting to use pdf-tools,
+
+00:10:52.000 --> 00:10:53.359
+it was unusable for me
+
+00:10:53.360 --> 00:10:55.159
+because I was on a lower-end hardware
+
+00:10:55.160 --> 00:10:57.599
+and I thought it should not be
+
+00:10:57.600 --> 00:10:58.959
+really that difficult
+
+00:10:58.960 --> 00:11:00.879
+for a document reader
+
+00:11:00.880 --> 00:11:04.099
+to not take a gigabyte of memory.
+
+00:11:04.100 --> 00:11:05.919
+It really shouldn't because
+
+00:11:05.920 --> 00:11:07.359
+you're not really doing that much,
+
+00:11:07.360 --> 00:11:10.919
+you're just displaying images.
+
+00:11:10.920 --> 00:11:12.239
+So that's how efficient
+
+00:11:12.240 --> 00:11:13.639
+we are in terms of memory.
+
+00:11:13.640 --> 00:11:15.371
+Let's see how efficient
+
+00:11:15.372 --> 00:11:18.719
+we are in terms of speed.
+
+NOTE Performance and speed
+
+00:11:18.720 --> 00:11:21.099
+So Emacs Reader is actually
+
+00:11:21.100 --> 00:11:23.119
+as fast as pdf-tools,
+
+00:11:23.120 --> 00:11:24.079
+and it is actually
+
+00:11:24.080 --> 00:11:27.239
+way more faster than DocView.
+
+00:11:27.240 --> 00:11:28.559
+In some cases,
+
+00:11:28.560 --> 00:11:31.679
+it actually beats existing
+
+00:11:31.680 --> 00:11:34.859
+standalone document readers and browsers.
+
+00:11:34.860 --> 00:11:41.119
+So let's actually see this in action.
+
+00:11:41.120 --> 00:11:42.319
+So here we are with
+
+00:11:42.320 --> 00:11:46.039
+a few emacs -Q sessions.
+
+00:11:46.040 --> 00:11:50.719
+I'm using emacs -Q so as to give you...
+
+00:11:50.720 --> 00:11:52.159
+that this is actually
+
+00:11:52.160 --> 00:11:55.139
+as less overhead possible.
+
+00:11:55.140 --> 00:11:57.359
+So we have first DocView.
+
+00:11:57.360 --> 00:12:01.137
+All of these tests
+
+00:12:01.138 --> 00:12:03.039
+are going to be done on the same PDF.
+
+00:12:03.040 --> 00:12:07.199
+It's the documentation manual from MuPDF.
+
+00:12:07.200 --> 00:12:10.559
+So if I scroll, this is fine.
+
+00:12:10.560 --> 00:12:12.859
+I'm just pressing n
+
+00:12:12.860 --> 00:12:15.159
+and it seems to work fine.
+
+00:12:15.160 --> 00:12:19.519
+If I press and hold n,
+
+00:12:19.520 --> 00:12:21.799
+I have pressed n and I'm holding.
+
+00:12:21.800 --> 00:12:26.419
+And Emacs is stuck.
+
+00:12:26.420 --> 00:12:27.559
+And it's going to stay stuck
+
+00:12:27.560 --> 00:12:28.799
+because it's making calls
+
+00:12:28.800 --> 00:12:31.279
+to the CLI tool that I said, mutool.
+
+00:12:31.280 --> 00:12:35.519
+And after it's done getting stuck,
+
+00:12:35.520 --> 00:12:40.179
+it is going to get back.
+
+00:12:40.180 --> 00:12:43.039
+As you can see, if you go back,
+
+00:12:43.040 --> 00:12:45.079
+you're able to go back fine.
+
+00:12:45.080 --> 00:12:46.199
+It does not get stuck
+
+00:12:46.200 --> 00:12:48.439
+because what Emacs does
+
+00:12:48.440 --> 00:12:51.519
+is it basically calls mutool,
+
+00:12:51.520 --> 00:12:53.239
+like fetches a bunch of pages,
+
+00:12:53.240 --> 00:12:54.919
+essentially all the pages
+
+00:12:54.920 --> 00:12:56.199
+that you asked for it,
+
+00:12:56.200 --> 00:12:59.159
+and it puts them into the memory.
+
+00:12:59.160 --> 00:12:59.879
+And that's it.
+
+00:12:59.880 --> 00:13:01.199
+It puts them into the memory
+
+00:13:01.200 --> 00:13:03.139
+and then scrolls through it.
+
+00:13:03.140 --> 00:13:05.839
+So going back, you will most likely
+
+00:13:05.840 --> 00:13:07.239
+not have any stuck issues.
+
+00:13:07.240 --> 00:13:07.839
+Sometimes you do
+
+00:13:07.840 --> 00:13:10.919
+because some images do get GC'd.
+
+00:13:10.920 --> 00:13:13.599
+But that's the idea.
+
+00:13:13.600 --> 00:13:16.639
+Whenever there's no image in memory,
+
+00:13:16.640 --> 00:13:18.739
+it gets stuck.
+
+00:13:18.740 --> 00:13:21.239
+And it gets stuck good.
+
+00:13:21.240 --> 00:13:23.579
+That's DocView.
+
+00:13:23.580 --> 00:13:25.199
+pdf-tools is actually
+
+00:13:25.200 --> 00:13:27.359
+not problematic here.
+
+00:13:27.360 --> 00:13:29.039
+pdf-tools is extremely efficient
+
+00:13:29.040 --> 00:13:30.199
+and extremely fast.
+
+00:13:30.200 --> 00:13:32.839
+So we can go through the pages
+
+00:13:32.840 --> 00:13:34.479
+without any issues.
+
+00:13:34.480 --> 00:13:37.159
+We can zoom.
+
+00:13:37.160 --> 00:13:39.879
+The zoom did get stuck a bit,
+
+00:13:39.880 --> 00:13:44.039
+but that's relatively fine.
+
+00:13:44.040 --> 00:13:46.959
+Emacs Reader is exactly as fast
+
+00:13:46.960 --> 00:13:49.199
+as pdf-tools here.
+
+00:13:49.200 --> 00:13:50.279
+So this is pdf-view,
+
+00:13:50.280 --> 00:13:51.279
+this is Emacs Reader.
+
+00:13:51.860 --> 00:13:55.759
+Let's scroll through the pages.
+
+00:13:55.760 --> 00:13:59.159
+As you can see, nothing is getting stuck
+
+00:13:59.160 --> 00:14:00.919
+because we're not really waiting
+
+00:14:00.920 --> 00:14:06.359
+for any tool to send us any images.
+
+00:14:06.360 --> 00:14:08.299
+We just have a little cache
+
+00:14:08.300 --> 00:14:09.399
+and we're scrolling through them
+
+00:14:09.400 --> 00:14:13.959
+and rendering images in real time.
+
+00:14:13.960 --> 00:14:17.279
+Zooming also works fine.
+
+00:14:17.280 --> 00:14:19.519
+So, with regards to this,
+
+00:14:19.520 --> 00:14:23.679
+we're in parity with pdf-tools.
+
+NOTE Scanned PDFs
+
+00:14:23.680 --> 00:14:26.319
+Now, where pdf-tools and actually
+
+00:14:26.320 --> 00:14:28.079
+a lot of readers have issues
+
+00:14:28.080 --> 00:14:32.499
+is when they're dealing with scanned PDF.
+
+00:14:32.500 --> 00:14:36.839
+So, we have this PDF which is notorious
+
+00:14:36.840 --> 00:14:40.599
+for being really difficult to render
+
+00:14:40.600 --> 00:14:42.599
+because this is entirely built
+
+00:14:42.600 --> 00:14:43.479
+with scanned images.
+
+00:14:43.480 --> 00:14:44.619
+This is the kind of PDF
+
+00:14:44.620 --> 00:14:46.519
+that you get from Internet Archive.
+
+00:14:46.520 --> 00:14:47.839
+This is essentially someone
+
+00:14:47.840 --> 00:14:50.919
+took photos of the book in a camera
+
+00:14:50.920 --> 00:14:56.659
+and literally turned them into a PDF.
+
+00:14:56.660 --> 00:14:58.719
+Emacs Reader actually does not have
+
+00:14:58.720 --> 00:15:01.079
+any issues rendering this.
+
+00:15:01.080 --> 00:15:05.119
+As you can see, it renders it smoothly
+
+00:15:05.120 --> 00:15:09.679
+and fine without any halts.
+
+00:15:09.680 --> 00:15:13.959
+I can change Emacs even while it's doing so,
+
+00:15:13.960 --> 00:15:17.139
+and it does not have any issues.
+
+00:15:17.140 --> 00:15:20.071
+pdf-tools are the same.
+
+00:15:20.072 --> 00:15:21.759
+PDF also does not have any issues.
+
+00:15:21.760 --> 00:15:26.579
+Sorry. Click pdf-view-mode.
+
+00:15:26.580 --> 00:15:29.859
+pdf-view (pdf-tools) is a bit slower
+
+00:15:29.860 --> 00:15:35.619
+but does not have any issues. It works.
+
+00:15:35.620 --> 00:15:40.700
+Here, actually, pdf-tools and Emacs Reader
+
+00:15:40.701 --> 00:15:46.099
+are more efficient than even browsers.
+
+00:15:46.100 --> 00:15:47.199
+So, if I try to open
+
+00:15:47.200 --> 00:15:50.839
+the same page in a browser,
+
+00:15:50.840 --> 00:15:52.919
+I'm trying to scroll.
+
+00:15:52.920 --> 00:15:54.919
+And after I've scrolled and I leave,
+
+00:15:54.920 --> 00:15:58.119
+scrolling is going to load
+
+00:15:58.120 --> 00:15:59.839
+for a bunch of seconds
+
+00:15:59.840 --> 00:16:03.139
+to give me the page.
+
+00:16:03.140 --> 00:16:04.679
+It's more than five seconds,
+
+00:16:04.680 --> 00:16:05.479
+as you can see,
+
+00:16:05.480 --> 00:16:08.639
+and this is actually totally not usable.
+
+00:16:08.640 --> 00:16:10.199
+If you're going to read this book,
+
+00:16:10.200 --> 00:16:11.999
+an electromagnetics book,
+
+00:16:12.000 --> 00:16:13.599
+you're going to have a terrible time
+
+00:16:13.600 --> 00:16:14.759
+reading this in a browser,
+
+00:16:14.760 --> 00:16:15.479
+which is supposed to be
+
+00:16:15.480 --> 00:16:17.159
+the fastest thing alive.
+
+00:16:17.160 --> 00:16:19.119
+You sort of have the same experience
+
+00:16:19.120 --> 00:16:20.559
+in Okular. So this is Okular.
+
+00:16:20.560 --> 00:16:22.439
+If I try to scroll through this,
+
+00:16:22.440 --> 00:16:25.419
+it will do the same thing.
+
+00:16:25.420 --> 00:16:28.519
+And while it is better than the browser,
+
+00:16:28.520 --> 00:16:31.119
+it still takes a while
+
+00:16:31.120 --> 00:16:34.119
+and it still has, like, if you zoom,
+
+00:16:34.120 --> 00:16:36.799
+you're going to have a bit of a delay.
+
+00:16:36.800 --> 00:16:41.579
+You don't really face that in Emacs Reader.
+
+00:16:41.580 --> 00:16:45.259
+We zoom in and out just fine.
+
+00:16:45.260 --> 00:16:47.239
+And even with using mouse,
+
+00:16:47.240 --> 00:16:51.839
+you can zoom in and out just fine.
+
+00:16:51.840 --> 00:16:54.799
+So this is how Emacs Reader performs
+
+00:16:54.800 --> 00:17:01.119
+in terms of speed with these other tools.
+
+00:17:01.120 --> 00:17:08.959
+Now we will go back to the original presentation.
+
+NOTE System-level multi-threading
+
+00:17:08.960 --> 00:17:11.919
+Now, how exactly is Emacs Reader
+
+00:17:11.920 --> 00:17:14.079
+able to do a lot of this?
+
+00:17:14.080 --> 00:17:17.839
+I wish I could sort of spend
+
+00:17:17.840 --> 00:17:18.999
+an entire session
+
+00:17:19.000 --> 00:17:21.239
+just talking about this, but I can't.
+
+00:17:21.240 --> 00:17:22.919
+So I'm just going to make this short.
+
+00:17:22.920 --> 00:17:24.799
+When you load Emacs Reader,
+
+00:17:24.800 --> 00:17:26.319
+in the standard output,
+
+00:17:26.320 --> 00:17:27.439
+it's going to say this:
+
+00:17:27.440 --> 00:17:29.279
+that eight threads have been initialized.
+
+00:17:29.280 --> 00:17:32.679
+Now, what we did with Emacs here
+
+00:17:32.680 --> 00:17:33.799
+is that we enabled
+
+00:17:33.800 --> 00:17:35.039
+system-level multithreading.
+
+00:17:35.040 --> 00:17:36.639
+Now, Emacs is not multithreaded.
+
+00:17:36.640 --> 00:17:38.199
+We all know that notoriously.
+
+00:17:38.200 --> 00:17:39.519
+It is single-threaded.
+
+00:17:39.520 --> 00:17:41.479
+But we don't really
+
+00:17:41.480 --> 00:17:43.819
+need Emacs to be multithreaded, though.
+
+00:17:43.820 --> 00:17:45.759
+Emacs does not need to be multithreaded.
+
+00:17:45.760 --> 00:17:47.199
+What needs to be multithreaded
+
+00:17:47.200 --> 00:17:48.519
+is the rendering part
+
+00:17:48.520 --> 00:17:50.759
+because that's the most expensive part.
+
+00:17:50.760 --> 00:17:53.519
+In Emacs, we're only just displaying images.
+
+00:17:53.520 --> 00:17:56.479
+Emacs itself does not have a PDF engine
+
+00:17:56.480 --> 00:17:57.919
+that is rendering stuff.
+
+00:17:57.920 --> 00:18:00.559
+MuPDF is supposed to take care of that.
+
+00:18:00.560 --> 00:18:03.199
+So if I can do multithreading
+
+00:18:03.200 --> 00:18:05.079
+in the rendering pipeline,
+
+00:18:05.080 --> 00:18:07.119
+that is when I'm rendering pages
+
+00:18:07.120 --> 00:18:08.719
+instead of displaying them,
+
+00:18:08.720 --> 00:18:10.279
+that's fine for me because
+
+00:18:10.280 --> 00:18:11.679
+the rendering part most of the time,
+
+00:18:11.680 --> 00:18:12.959
+especially in scanned PDFs,
+
+00:18:12.960 --> 00:18:14.679
+is the most expensive part.
+
+00:18:14.680 --> 00:18:16.439
+So if you look at this graph,
+
+00:18:16.440 --> 00:18:17.959
+we have two parts here.
+
+00:18:17.960 --> 00:18:19.679
+We have the display pipeline
+
+00:18:19.680 --> 00:18:22.279
+and we have the rendering pipeline.
+
+00:18:22.280 --> 00:18:23.639
+In the display pipeline,
+
+00:18:23.640 --> 00:18:26.519
+we have just the Emacs session
+
+00:18:26.520 --> 00:18:29.359
+which has the reader loaded
+
+00:18:29.360 --> 00:18:31.579
+and that's the main thread.
+
+00:18:31.580 --> 00:18:33.319
+Then we have the rendering pipeline
+
+00:18:33.320 --> 00:18:35.559
+which has the MuPDF system package
+
+00:18:35.560 --> 00:18:38.459
+dynamically linked.
+
+00:18:38.460 --> 00:18:40.399
+So when you load Emacs Reader,
+
+00:18:40.400 --> 00:18:45.159
+we initialize a thread pool with eight threads.
+
+00:18:45.160 --> 00:18:48.759
+Now what you do is let's say we are at page 50.
+
+00:18:48.760 --> 00:18:51.759
+At page 50, the Emacs Reader
+
+00:18:51.760 --> 00:18:53.999
+maintains a cache.
+
+00:18:54.000 --> 00:18:56.519
+It's like a stack of pages
+
+00:18:56.520 --> 00:18:58.479
+that we keep in memory all the time.
+
+00:18:58.480 --> 00:19:02.519
+This cache is entirely outside of Emacs.
+
+00:19:02.520 --> 00:19:04.559
+It is not inside Emacs environment.
+
+00:19:04.560 --> 00:19:07.570
+It is in the C memory heap,
+
+00:19:07.571 --> 00:19:09.119
+in the MuPDF memory heap
+
+00:19:09.120 --> 00:19:11.119
+that is outside of Emacs environment.
+
+00:19:11.120 --> 00:19:13.839
+It does not make any calls to Emacs anything.
+
+00:19:13.840 --> 00:19:15.799
+It does not have a single Elisp line.
+
+00:19:15.800 --> 00:19:20.119
+So this cache is stored outside.
+
+00:19:20.120 --> 00:19:22.079
+Now when I want to retrieve
+
+00:19:22.080 --> 00:19:23.439
+anything from this cache,
+
+00:19:23.440 --> 00:19:26.199
+let's say, so I have cached
+
+00:19:26.200 --> 00:19:29.359
+up until 55, from 45 to 55.
+
+00:19:29.360 --> 00:19:31.079
+So what happens is that
+
+00:19:31.080 --> 00:19:32.759
+when you're at page 50,
+
+00:19:32.760 --> 00:19:34.359
+you always have a cache
+
+00:19:34.360 --> 00:19:36.719
+that's n + 5 and n - 5.
+
+00:19:36.720 --> 00:19:39.719
+So you have cache of 5 pages forward
+
+00:19:39.720 --> 00:19:41.959
+and 5 pages backward.
+
+00:19:41.960 --> 00:19:44.399
+But let's say I want to go to page 56.
+
+00:19:45.140 --> 00:19:50.079
+So I will ask an Emacs render page 56.
+
+00:19:50.080 --> 00:19:51.399
+And I'm not going to ask it
+
+00:19:51.400 --> 00:19:53.079
+to MuPDF directly.
+
+00:19:53.080 --> 00:19:54.399
+I'm going to ask it
+
+00:19:54.400 --> 00:19:56.719
+to the thread pool that do this job.
+
+00:19:56.720 --> 00:19:58.119
+And thread pool is going to
+
+00:19:58.120 --> 00:19:59.719
+assign one thread to it.
+
+00:19:59.720 --> 00:20:00.959
+Let's say the thread 1
+
+00:20:00.960 --> 00:20:03.239
+which is going to render page 56.
+
+00:20:03.240 --> 00:20:06.559
+So this thread is going to make calls to MuPDF
+
+00:20:06.560 --> 00:20:08.919
+through our code dynamic module.
+
+00:20:08.920 --> 00:20:11.839
+And MuPDF after rendering it
+
+00:20:11.840 --> 00:20:13.439
+is going to store it in the cache.
+
+00:20:13.440 --> 00:20:18.059
+So we're going to add another 56 page to this.
+
+00:20:18.060 --> 00:20:21.759
+Now, while this is happening,
+
+00:20:21.760 --> 00:20:24.679
+Emacs Reader does not, like Emacs itself,
+
+00:20:24.680 --> 00:20:27.379
+the session is not going to be stuck
+
+00:20:27.380 --> 00:20:30.239
+because we just made a call to the thread.
+
+00:20:30.240 --> 00:20:32.279
+We just asked the thread.
+
+00:20:32.280 --> 00:20:35.359
+So like this, this call, like it's done.
+
+00:20:35.360 --> 00:20:38.159
+So you just assign something to a thread
+
+00:20:38.160 --> 00:20:40.959
+and then this is fine.
+
+00:20:40.960 --> 00:20:42.479
+Like, you're not waiting for the thread
+
+00:20:42.480 --> 00:20:43.719
+to complete or anything.
+
+00:20:43.720 --> 00:20:46.519
+Emacs is not waiting for the thread to complete.
+
+00:20:46.520 --> 00:20:48.519
+The dynamic module or the C side
+
+00:20:48.520 --> 00:20:49.479
+might wait to complete
+
+00:20:49.480 --> 00:20:51.279
+but that is entirely different from
+
+00:20:51.280 --> 00:20:52.159
+the Emacs session.
+
+00:20:52.160 --> 00:20:54.839
+So Emacs viewer can continue to
+
+00:20:54.840 --> 00:20:56.279
+display the page 50
+
+00:20:56.280 --> 00:20:58.599
+while the rendering pipeline
+
+00:20:58.600 --> 00:21:01.979
+is still rendering the 56th page.
+
+00:21:01.980 --> 00:21:05.759
+And when Emacs asks to display page 56,
+
+00:21:05.760 --> 00:21:09.619
+it's going to ask it to a thread pool.
+
+00:21:09.620 --> 00:21:11.536
+Then thread pool is going to assign
+
+00:21:11.537 --> 00:21:13.319
+another thread, let's say this one,
+
+00:21:13.320 --> 00:21:16.999
+to retrieve page 56 from the memory cache.
+
+00:21:17.000 --> 00:21:20.039
+And then the 56 page is going to be sent
+
+00:21:20.040 --> 00:21:24.559
+to the Emacs to be displayed.
+
+00:21:24.560 --> 00:21:26.039
+Again, the retrieval part
+
+00:21:26.040 --> 00:21:28.519
+is entirely independent of Emacs.
+
+00:21:28.520 --> 00:21:30.159
+Emacs does not have to wait for it.
+
+00:21:30.160 --> 00:21:34.719
+Emacs only needs to wait to display it.
+
+00:21:34.720 --> 00:21:36.619
+So, the displaying part
+
+00:21:36.620 --> 00:21:37.919
+and the rendering pipeline
+
+00:21:37.920 --> 00:21:41.559
+are entirely asynchronous, so to speak.
+
+00:21:41.560 --> 00:21:43.639
+And in the diagram, if you see,
+
+00:21:43.640 --> 00:21:46.399
+all the arrows that are
+
+00:21:46.400 --> 00:21:48.839
+magenta in color,
+
+00:21:48.840 --> 00:21:51.639
+they are native to the Emacs runtime.
+
+00:21:51.640 --> 00:21:53.959
+That is, they are single-threaded.
+
+00:21:53.960 --> 00:21:55.679
+They are connected to Emacs.
+
+00:21:55.680 --> 00:21:58.759
+And all the arrows that are red in color,
+
+00:21:58.760 --> 00:22:01.859
+they are totally asynchronous.
+
+00:22:01.860 --> 00:22:03.519
+They can be multi-threaded if you want.
+
+00:22:03.520 --> 00:22:05.759
+They are multi-threaded by default
+
+00:22:05.760 --> 00:22:07.679
+because they interact
+
+00:22:07.680 --> 00:22:09.519
+only with the MuPDF shared library
+
+00:22:09.520 --> 00:22:11.399
+and the C heap.
+
+00:22:11.400 --> 00:22:12.719
+They do not touch anything
+
+00:22:12.720 --> 00:22:14.639
+in the Emacs runtime.
+
+00:22:14.640 --> 00:22:18.959
+This is how we're able to switch quickly
+
+00:22:18.960 --> 00:22:22.519
+between these huge scanned PDFs
+
+00:22:22.520 --> 00:22:23.959
+that have huge images
+
+00:22:23.960 --> 00:22:25.359
+in each of their pages
+
+00:22:25.360 --> 00:22:28.079
+because we don't really wait for
+
+00:22:28.080 --> 00:22:31.379
+each page to be rendered.
+
+00:22:31.380 --> 00:22:35.359
+And Emacs does not wait for that.
+
+00:22:35.360 --> 00:22:39.239
+So that's another architectural feature
+
+00:22:39.240 --> 00:22:40.319
+of Emacs Reader
+
+00:22:40.320 --> 00:22:43.199
+that we are system-level multithreaded.
+
+00:22:43.200 --> 00:22:47.399
+Now Emacs viewer also supports
+
+00:22:47.400 --> 00:22:49.319
+almost all document formats.
+
+00:22:49.320 --> 00:22:54.759
+It supports PDF, EPUB, MOBI, XPS, CPZ comics,
+
+00:22:54.760 --> 00:22:56.439
+and it even supports
+
+00:22:56.440 --> 00:22:59.970
+other non-ebook formats
+
+00:22:59.971 --> 00:23:00.839
+like document format,
+
+00:23:00.840 --> 00:23:01.839
+so you can open
+
+00:23:01.840 --> 00:23:04.799
+LibreOffice documents in it,
+
+00:23:04.800 --> 00:23:07.079
+and even stuff like PPT and Excel in it,
+
+00:23:07.080 --> 00:23:08.759
+even though they're not going to be
+
+00:23:08.760 --> 00:23:13.859
+supported in a as nice manner.
+
+00:23:13.860 --> 00:23:16.239
+And we can do that because MuPDF does this.
+
+00:23:16.240 --> 00:23:18.079
+MuPDF has support for all of this
+
+00:23:18.080 --> 00:23:22.679
+and it treats them just as it treats PDF.
+
+00:23:22.680 --> 00:23:24.539
+Nothing special.
+
+00:23:24.540 --> 00:23:26.519
+The only thing that we don't support right now
+
+00:23:26.520 --> 00:23:30.159
+is DejaVu, so that is not supported right now.
+
+00:23:30.160 --> 00:23:33.319
+I'm going to work on making it supported
+
+00:23:33.320 --> 00:23:35.079
+at the upstream MuPDF.
+
+00:23:36.020 --> 00:23:38.439
+That's going to take a long time,
+
+00:23:38.440 --> 00:23:44.239
+but it's in the plans.
+
+NOTE Native Emacs integrations
+
+00:23:44.240 --> 00:23:45.439
+Now with Emacs Reader,
+
+00:23:45.440 --> 00:23:46.679
+we also integrate
+
+00:23:46.680 --> 00:23:48.619
+with existing Emacs packages
+
+00:23:48.620 --> 00:23:50.039
+as much as possible.
+
+00:23:50.040 --> 00:23:52.999
+So bookmarks, C-x r b,
+
+00:23:53.000 --> 00:23:54.359
+you can do it natively.
+
+00:23:54.360 --> 00:23:57.559
+So you can save a page as a bookmark
+
+00:23:57.560 --> 00:23:59.639
+just as you save anything else in Emacs
+
+00:23:59.640 --> 00:24:00.519
+as a bookmark.
+
+00:24:00.520 --> 00:24:02.599
+There's also saveplace integration.
+
+00:24:02.600 --> 00:24:06.159
+So you can scroll a PDF, close it,
+
+00:24:06.160 --> 00:24:07.599
+and then come back to it
+
+00:24:07.600 --> 00:24:10.159
+at the same page that you saved it at.
+
+00:24:10.160 --> 00:24:12.879
+Sorry, that you closed it at.
+
+00:24:12.880 --> 00:24:14.919
+And it's going to work just out of the box
+
+00:24:14.920 --> 00:24:16.399
+because of the saveplace
+
+00:24:16.400 --> 00:24:18.999
+package in Emacs that is built in.
+
+00:24:19.000 --> 00:24:20.919
+We also have imenu integration
+
+00:24:20.920 --> 00:24:22.479
+for table of contents.
+
+00:24:22.480 --> 00:24:26.719
+So if you see this, this is imenu
+
+00:24:26.720 --> 00:24:28.679
+and you can scroll through the contents
+
+00:24:28.680 --> 00:24:30.559
+just like you scroll through any imenu.
+
+00:24:30.560 --> 00:24:39.499
+You can also do it in the menu bar by clicking.
+
+00:24:39.500 --> 00:24:40.679
+It works just as nice.
+
+00:24:40.680 --> 00:24:42.739
+We also have something like
+
+00:24:42.740 --> 00:24:44.799
+the outline mode that pdf-tools has.
+
+00:24:44.800 --> 00:24:48.039
+So if you press O in a document,
+
+00:24:48.040 --> 00:24:49.959
+it's going to give you this outline.
+
+00:24:49.960 --> 00:24:53.399
+And these are buttons that are clickable.
+
+00:24:53.400 --> 00:24:54.439
+You can click them.
+
+00:24:54.440 --> 00:24:56.519
+You can press Enter at them.
+
+00:24:56.520 --> 00:25:00.359
+And this is the menu bar item that I was looking at.
+
+00:25:00.360 --> 00:25:01.999
+If you click here, index,
+
+00:25:02.000 --> 00:25:03.279
+it's going to show you
+
+00:25:03.280 --> 00:25:05.339
+the exact same thing
+
+00:25:05.340 --> 00:25:10.339
+but in a different interface.
+
+NOTE (Naive) dark mode
+
+00:25:10.340 --> 00:25:15.259
+We also have a naive dark mode,
+
+00:25:15.260 --> 00:25:17.799
+which is not really as nice as
+
+00:25:17.800 --> 00:25:18.599
+we would like it to be,
+
+00:25:18.600 --> 00:25:20.799
+and dark mode fanatics
+
+00:25:20.800 --> 00:25:22.199
+I'm sure will have issues with it,
+
+00:25:22.200 --> 00:25:24.199
+but we're going to improve it in time.
+
+00:25:24.200 --> 00:25:27.379
+For now, this is what we have.
+
+00:25:27.380 --> 00:25:30.359
+And it can be enabled per document,
+
+00:25:30.360 --> 00:25:33.099
+so you can have one, like,
+
+00:25:33.100 --> 00:25:34.879
+one document that is in dark mode,
+
+00:25:34.880 --> 00:25:36.439
+but another one that is not.
+
+00:25:36.440 --> 00:25:39.279
+That is nice to have.
+
+00:25:39.280 --> 00:25:42.679
+Eventually we're going to work on more themes.
+
+00:25:42.680 --> 00:25:46.479
+You should be able to actually integrate it
+
+00:25:46.480 --> 00:25:49.439
+with Emacs themes as much as possible.
+
+00:25:49.440 --> 00:25:52.679
+You can make it default so that
+
+00:25:52.680 --> 00:25:54.839
+it inherits colors from the Emacs theme.
+
+00:25:54.840 --> 00:25:56.359
+That is one of the things
+
+00:25:56.360 --> 00:26:01.139
+that we also have planned.
+
+NOTE Challenges and further improvements
+
+00:26:01.140 --> 00:26:03.439
+We did face a bunch of challenges
+
+00:26:03.440 --> 00:26:05.519
+while trying to implement these features.
+
+00:26:05.520 --> 00:26:07.519
+One of the initial challenges was that
+
+00:26:07.520 --> 00:26:09.319
+SVGs were actually a bad idea.
+
+00:26:09.320 --> 00:26:12.159
+They're huge, especially in scanned PDFs,
+
+00:26:12.160 --> 00:26:14.679
+and they make things much slower.
+
+00:26:14.680 --> 00:26:18.119
+So we chose to actually have PPMs,
+
+00:26:18.120 --> 00:26:24.099
+which is the simplest image format ever possible.
+
+00:26:24.100 --> 00:26:26.439
+Now, it was also very difficult
+
+00:26:26.440 --> 00:26:29.559
+to make reader-mode be window-specific.
+
+00:26:29.560 --> 00:26:31.559
+So, you know, while you're scrolling
+
+00:26:31.560 --> 00:26:34.279
+the same document in one window,
+
+00:26:34.280 --> 00:26:36.199
+the other window with the same document
+
+00:26:36.200 --> 00:26:37.039
+should not change.
+
+00:26:37.040 --> 00:26:39.079
+We should be able to have multiple pages
+
+00:26:39.080 --> 00:26:42.319
+in different windows of the same document.
+
+00:26:42.320 --> 00:26:44.679
+That was very difficult
+
+00:26:44.680 --> 00:26:46.679
+because as I told you about the cache,
+
+00:26:46.680 --> 00:26:50.599
+the cache works in an idiosyncratic manner
+
+00:26:50.600 --> 00:26:54.079
+and we needed to make it so that each window
+
+00:26:54.080 --> 00:26:56.559
+will have its own cache
+
+00:26:56.560 --> 00:27:01.199
+instead of having a global cache for each file.
+
+00:27:01.200 --> 00:27:03.799
+That took some rewrite.
+
+00:27:03.800 --> 00:27:06.879
+And now, because we needed to do
+
+00:27:06.880 --> 00:27:07.799
+this sort of multithreading,
+
+00:27:07.800 --> 00:27:08.999
+system-level multithreading,
+
+00:27:09.000 --> 00:27:10.919
+we needed to use
+
+00:27:10.920 --> 00:27:13.039
+a specific package of MuPDF
+
+00:27:13.040 --> 00:27:16.439
+that had a bug for this which got fixed.
+
+00:27:16.440 --> 00:27:20.719
+And that's 1.26.0.
+
+00:27:20.720 --> 00:27:23.336
+Because we did that,
+
+00:27:23.337 --> 00:27:26.462
+a lot of the GNU/Linux distributions did not
+
+00:27:26.463 --> 00:27:28.871
+really have this latest package.
+
+00:27:28.872 --> 00:27:30.771
+So we had to actually
+
+00:27:30.772 --> 00:27:33.804
+package it in-tree.
+
+00:27:33.805 --> 00:27:36.971
+as a git sub-module.
+
+00:27:36.972 --> 00:27:40.737
+That was a horror! But eventually... now
+
+00:27:40.738 --> 00:27:43.604
+I think most GNU/Linux distributions
+
+00:27:43.605 --> 00:27:46.340
+already have this [version].
+
+00:27:46.341 --> 00:27:48.639
+The upcoming features that we have planned
+
+00:27:48.640 --> 00:27:52.799
+are the first one is that we need to rewrite
+
+00:27:52.800 --> 00:27:55.359
+the display mechanism entirely from scratch
+
+00:27:55.360 --> 00:27:57.559
+to use a tiled rendering approach.
+
+00:27:57.560 --> 00:27:59.999
+So right now we just take an image
+
+00:28:00.000 --> 00:28:02.959
+and display it inside an Emacs buffer
+
+00:28:02.960 --> 00:28:03.959
+just like that.
+
+00:28:03.960 --> 00:28:08.759
+But it will be changed so that the image
+
+00:28:08.760 --> 00:28:10.759
+will be displayed in the tiled manner
+
+00:28:10.760 --> 00:28:12.479
+so there will be multiple tiles
+
+00:28:12.480 --> 00:28:14.719
+but it'll be pixel perfect
+
+00:28:14.720 --> 00:28:16.399
+so you won't really see a difference.
+
+00:28:16.400 --> 00:28:19.839
+The reason to do this is to implement features
+
+00:28:19.840 --> 00:28:20.999
+for text selection, actually.
+
+00:28:21.000 --> 00:28:24.239
+So we can't really do text selection
+
+00:28:24.240 --> 00:28:27.079
+without running into a bunch of memory
+
+00:28:27.080 --> 00:28:29.999
+and other issues latency issues
+
+00:28:30.000 --> 00:28:33.019
+if we don't do tiling.
+
+00:28:33.020 --> 00:28:35.679
+So we need to do those two things,
+
+00:28:35.680 --> 00:28:38.879
+they are at the highest priority right now.
+
+00:28:38.880 --> 00:28:40.279
+And then, once we're done with that,
+
+00:28:40.280 --> 00:28:42.279
+we're going to support annotations,
+
+00:28:42.280 --> 00:28:45.439
+highlighting, everything that you're used to
+
+00:28:45.440 --> 00:28:47.319
+in pdf-tools and org-noter.
+
+00:28:47.320 --> 00:28:50.119
+And once we're done with that,
+
+00:28:50.120 --> 00:28:55.019
+we're going to also integrate with AucTeX and SyncTeX.
+
+00:28:55.020 --> 00:28:58.519
+Because right now, when a PDF gets updated,
+
+00:28:58.520 --> 00:29:00.239
+especially a LaTeX PDF,
+
+00:29:00.240 --> 00:29:03.437
+since there is no SyncTeX integration,
+
+00:29:03.438 --> 00:29:05.771
+it can't really do it nicely
+
+00:29:05.772 --> 00:29:08.660
+and it sometimes even crashes Emacs.
+
+00:29:08.661 --> 00:29:11.537
+So that's something that
+
+00:29:11.538 --> 00:29:14.271
+we will be planning to implement.
+
+NOTE What Emacs can learn?
+
+00:29:14.272 --> 00:29:16.159
+Now, from this experiment,
+
+00:29:16.160 --> 00:29:17.919
+what exactly can Emacs,
+
+00:29:17.920 --> 00:29:20.519
+the Emacs core devs and others
+
+00:29:20.520 --> 00:29:22.399
+who are building packages can learn?
+
+00:29:22.400 --> 00:29:24.919
+Well, the first thing is that all of this
+
+00:29:24.920 --> 00:29:27.159
+should not be really this difficult
+
+00:29:27.160 --> 00:29:30.359
+because all we're asking from Emacs
+
+00:29:30.360 --> 00:29:32.439
+is to display images in real-time
+
+00:29:32.440 --> 00:29:36.279
+and update them in real-time.
+
+00:29:36.280 --> 00:29:37.759
+That should not be that difficult
+
+00:29:37.760 --> 00:29:40.279
+of a thing to do, but apparently it is.
+
+00:29:40.280 --> 00:29:43.279
+And that's why Emacs's graphical interface
+
+00:29:43.280 --> 00:29:47.959
+needs to be more modular, more composable,
+
+00:29:47.960 --> 00:29:50.999
+and flexible for real-time graphics.
+
+00:29:51.000 --> 00:29:54.219
+If it is supposed to have things like,
+
+00:29:54.220 --> 00:29:56.179
+again, a document reader,
+
+00:29:56.180 --> 00:29:57.279
+something like a video editor,
+
+00:29:57.280 --> 00:29:58.239
+and something like that,
+
+00:29:58.980 --> 00:30:00.479
+Emacs's graphical interface
+
+00:30:00.480 --> 00:30:05.239
+needs to grow and be more mature.
+
+00:30:05.240 --> 00:30:06.239
+One of the things
+
+00:30:06.240 --> 00:30:08.079
+that's stopping it from doing that
+
+00:30:08.080 --> 00:30:10.319
+is actually Emacs's overlay functionality.
+
+00:30:10.320 --> 00:30:13.939
+So right now, the way we display
+
+00:30:13.940 --> 00:30:16.519
+an image in a buffer
+
+00:30:16.520 --> 00:30:18.900
+is using an overlay,
+
+00:30:18.901 --> 00:30:22.019
+actually multiple overlays.
+
+00:30:22.020 --> 00:30:25.839
+Overlays are static in the sense that
+
+00:30:25.840 --> 00:30:29.739
+if I attach to one image to one overlay,
+
+00:30:29.740 --> 00:30:34.039
+I need to have an entirely different image
+
+00:30:34.040 --> 00:30:37.199
+updated for that overlay.
+
+00:30:37.200 --> 00:30:39.639
+So I need to create another different image,
+
+00:30:39.640 --> 00:30:41.179
+change it in the memory,
+
+00:30:41.180 --> 00:30:43.639
+and then display it to update it.
+
+00:30:43.640 --> 00:30:46.639
+I can't change the image data
+
+00:30:46.640 --> 00:30:49.239
+in real time of the overlay.
+
+00:30:49.240 --> 00:30:53.999
+And that is a big issue.
+
+00:30:54.000 --> 00:30:56.259
+I've actually made an emacs-devel
+
+00:30:56.260 --> 00:30:58.279
+mailing list thread about it.
+
+00:30:58.280 --> 00:31:01.119
+I talked to Eli about it as well.
+
+00:31:01.120 --> 00:31:04.639
+And he said there's a possibility
+
+00:31:04.640 --> 00:31:05.359
+that this can be changed,
+
+00:31:05.360 --> 00:31:06.959
+but it's going to take
+
+00:31:06.960 --> 00:31:09.919
+a certain amount of rewrite.
+
+00:31:09.920 --> 00:31:12.319
+There's also issues with Emacs GC.
+
+00:31:12.320 --> 00:31:14.639
+Emacs GC sometimes leaks memory
+
+00:31:14.640 --> 00:31:16.439
+when you update images too quickly.
+
+00:31:16.440 --> 00:31:18.599
+That is, when you have a bunch of images
+
+00:31:18.600 --> 00:31:21.359
+that are getting churned out too quickly,
+
+00:31:21.360 --> 00:31:23.039
+Emacs GC starts leaking
+
+00:31:23.040 --> 00:31:25.159
+and it just goes up to
+
+00:31:25.160 --> 00:31:29.679
+a huge number of gigabytes in RAM.
+
+00:31:29.680 --> 00:31:32.399
+That's also a huge problem.
+
+00:31:32.400 --> 00:31:33.759
+The dynamic module API,
+
+00:31:33.760 --> 00:31:37.139
+the emacs-module.h header,
+
+00:31:37.140 --> 00:31:38.799
+needs to have more helpers.
+
+00:31:38.800 --> 00:31:41.719
+It's really bare bones,
+
+00:31:41.720 --> 00:31:43.439
+and I like that it is bare bones
+
+00:31:43.440 --> 00:31:44.999
+so that other languages can use it,
+
+00:31:45.000 --> 00:31:46.959
+but at the same time, I think
+
+00:31:46.960 --> 00:31:47.879
+it'll be really good
+
+00:31:47.880 --> 00:31:49.839
+if we can have some helpers
+
+00:31:49.840 --> 00:31:53.879
+that can do better memory interaction,
+
+00:31:53.880 --> 00:31:57.259
+like strings and so on,
+
+00:31:57.260 --> 00:32:00.379
+which we also faced some issues with.
+
+00:32:00.380 --> 00:32:02.319
+Emacs's fractional scaling system
+
+00:32:02.320 --> 00:32:05.359
+seems to be broken across different toolkits.
+
+00:32:05.360 --> 00:32:10.999
+We have bug reports that say in pgtk in Wayland,
+
+00:32:11.000 --> 00:32:13.559
+something seems to render differently
+
+00:32:13.560 --> 00:32:17.259
+because they have fractional scaling enabled.
+
+00:32:17.260 --> 00:32:18.439
+So that's something
+
+00:32:18.440 --> 00:32:21.239
+that I think Emacs, overall,
+
+00:32:21.240 --> 00:32:24.359
+I think Emacs needs to focus on improving
+
+00:32:24.360 --> 00:32:28.239
+the graphical interface pipeline
+
+00:32:28.240 --> 00:32:32.299
+to be a much more mature one.
+
+NOTE Contributing to the development
+
+00:32:32.300 --> 00:32:34.239
+And finally, how can you contribute
+
+00:32:34.240 --> 00:32:35.799
+to the development of Emacs Reader?
+
+00:32:35.800 --> 00:32:37.359
+Well, we are on Codeberg.
+
+00:32:37.360 --> 00:32:40.279
+We are not on GitHub, sorry.
+
+00:32:40.280 --> 00:32:41.639
+You can go there,
+
+00:32:41.640 --> 00:32:43.079
+you can look through the issues
+
+00:32:43.080 --> 00:32:45.279
+and send us a PR if you're interested.
+
+00:32:45.280 --> 00:32:46.879
+The next major release
+
+00:32:46.880 --> 00:32:49.839
+is going to go to GNU ELPA.
+
+00:32:49.840 --> 00:32:52.259
+Finally, we are not yet at GNU ELPA,
+
+00:32:52.260 --> 00:32:54.439
+so you can't really do M-x package-install
+
+00:32:54.440 --> 00:32:56.119
+and install our package.
+
+00:32:56.120 --> 00:32:58.199
+you would need to install it
+
+00:32:58.200 --> 00:33:04.939
+through use-package :vc.
+
+00:33:04.940 --> 00:33:07.499
+And since we're going to go to GNU ELPA,
+
+00:33:07.500 --> 00:33:09.119
+we request you to assign
+
+00:33:09.120 --> 00:33:10.519
+your copyright to Emacs
+
+00:33:10.520 --> 00:33:13.959
+because GNU ELPA is essentially part of GNU Emacs.
+
+00:33:13.960 --> 00:33:16.719
+So you would need to do copyright assignment
+
+00:33:16.720 --> 00:33:20.579
+if you make non-trivial contribution.
+
+00:33:20.580 --> 00:33:22.479
+You can join us at IRC
+
+00:33:22.480 --> 00:33:24.359
+at #phi-mu-lambda.
+
+00:33:24.360 --> 00:33:27.199
+And I also stream the development
+
+00:33:27.200 --> 00:33:28.039
+of this package
+
+00:33:28.040 --> 00:33:29.839
+bi-weekly on Sundays
+
+00:33:29.840 --> 00:33:31.639
+at PeerTube at the following channel.
+
+00:33:31.640 --> 00:33:35.519
+Feel free to join us.
+
+NOTE Acknowledgements
+
+00:33:35.520 --> 00:33:38.499
+Finally, I want to thank Tushar,
+
+00:33:38.500 --> 00:33:40.639
+who has been persistently contributing
+
+00:33:40.640 --> 00:33:42.839
+to the project since 0.1.0,
+
+00:33:42.840 --> 00:33:46.519
+and I'm very, very thankful for him,
+
+00:33:46.520 --> 00:33:47.759
+for his suggestions,
+
+00:33:47.760 --> 00:33:50.879
+and for his code contributions as well.
+
+00:33:50.880 --> 00:33:53.319
+I would also like to thank Prom,
+
+00:33:53.320 --> 00:33:55.799
+who fixed a major bug
+
+00:33:55.800 --> 00:33:56.859
+in the Windows build,
+
+00:33:56.860 --> 00:33:58.839
+since I don't really use Windows anymore,
+
+00:33:58.840 --> 00:33:59.919
+so that was really nice,
+
+00:33:59.920 --> 00:34:05.459
+and for Teeoius, for fixing a pthread bug.
+
+00:34:05.460 --> 00:34:06.919
+I would also like to thank others
+
+00:34:06.920 --> 00:34:09.559
+who helped fix little things,
+
+00:34:09.560 --> 00:34:13.179
+who come to the stream to chat,
+
+00:34:13.180 --> 00:34:16.599
+who sort of see me bang my head
+
+00:34:16.600 --> 00:34:19.239
+across these C memory bugs.
+
+00:34:19.240 --> 00:34:21.599
+So thank you to all of those.
+
+00:34:21.600 --> 00:34:24.399
+And thank you finally to the viewers
+
+00:34:24.400 --> 00:34:28.079
+and to EmacsConf organizers as well.
+
+00:34:28.080 --> 00:34:31.939
+This is a splendid opportunity.
+
+00:34:31.940 --> 00:34:37.280
+Thank you.
diff --git a/2025/captions/emacsconf-2025-reference--emacs-as-a-fullyfledged-reference-manager--vidianos-giannitsis--main--chapters.vtt b/2025/captions/emacsconf-2025-reference--emacs-as-a-fullyfledged-reference-manager--vidianos-giannitsis--main--chapters.vtt
new file mode 100644
index 00000000..dbd303e8
--- /dev/null
+++ b/2025/captions/emacsconf-2025-reference--emacs-as-a-fullyfledged-reference-manager--vidianos-giannitsis--main--chapters.vtt
@@ -0,0 +1,32 @@
+WEBVTT
+
+
+00:00:00.820 --> 00:01:43.599
+Introduction
+
+00:01:43.600 --> 00:04:00.919
+Capture
+
+00:04:00.920 --> 00:05:03.478
+Organizing
+
+00:05:03.479 --> 00:07:55.479
+Ebib
+
+00:07:55.480 --> 00:09:36.178
+Filters
+
+00:09:36.179 --> 00:12:50.539
+Dependent databases
+
+00:12:50.540 --> 00:15:02.439
+Reading lists
+
+00:15:02.440 --> 00:18:05.639
+Special org-roam-node-find
+
+00:18:05.640 --> 00:19:21.819
+Annotations
+
+00:19:21.820 --> 00:20:14.000
+Wrapping up
diff --git a/2025/captions/emacsconf-2025-reference--emacs-as-a-fullyfledged-reference-manager--vidianos-giannitsis--main.vtt b/2025/captions/emacsconf-2025-reference--emacs-as-a-fullyfledged-reference-manager--vidianos-giannitsis--main.vtt
new file mode 100644
index 00000000..33a06efa
--- /dev/null
+++ b/2025/captions/emacsconf-2025-reference--emacs-as-a-fullyfledged-reference-manager--vidianos-giannitsis--main.vtt
@@ -0,0 +1,1035 @@
+WEBVTT captioned by vidianos
+
+NOTE Introduction
+
+00:00:00.820 --> 00:00:03.079
+So, hello everyone, welcome to EmacsConf.
+
+00:00:03.080 --> 00:00:06.519
+My name is Vidianos, and I'm a PhD student in KU Leuven,
+
+00:00:06.520 --> 00:00:08.279
+and today I'm going to be showing you
+
+00:00:08.280 --> 00:00:12.679
+how I managed to use Emacs as a reference manager,
+
+00:00:12.680 --> 00:00:17.219
+replacing what was for me Zotero,
+
+00:00:17.220 --> 00:00:24.439
+to a fully fledged approach inside Emacs.
+
+00:00:24.440 --> 00:00:26.639
+So, what is my typical reference workflow?
+
+00:00:26.640 --> 00:00:28.479
+First I need to find literature,
+
+00:00:28.480 --> 00:00:30.439
+then I need to collect and organize it,
+
+00:00:30.440 --> 00:00:32.599
+which I originally did with Zotero,
+
+00:00:32.600 --> 00:00:36.611
+but now with Emacs centered tools
+
+00:00:36.612 --> 00:00:39.879
+such as zotra and ebib.
+
+00:00:39.880 --> 00:00:41.279
+Then I create a reading list.
+
+00:00:41.280 --> 00:00:43.439
+This is a new addition to my workflow
+
+00:00:43.440 --> 00:00:47.679
+I started doing after moving this approach to Emacs
+
+00:00:47.680 --> 00:00:50.119
+because now everything is well integrated.
+
+00:00:50.120 --> 00:00:53.839
+I have made a very nice reading list implementation
+
+00:00:53.840 --> 00:00:57.759
+inside org-roam which I am going to be showing today.
+
+00:00:57.760 --> 00:01:01.199
+Then obviously I need to read the literature, take notes,
+
+00:01:01.200 --> 00:01:04.239
+organize the notes, and ensure I am actually learning
+
+00:01:04.240 --> 00:01:06.539
+from what I am reading. This is then done through packages
+
+00:01:06.540 --> 00:01:09.159
+such as org-noter and org-roam
+
+00:01:09.160 --> 00:01:11.359
+and is not going to be the focus of this talk.
+
+00:01:11.360 --> 00:01:14.239
+I already gave a talk about this part of my workflow,
+
+00:01:14.240 --> 00:01:17.959
+which I've been doing for many years now.
+
+00:01:17.960 --> 00:01:20.439
+You can find that
+
+00:01:20.440 --> 00:01:23.239
+or you can find many other people's approaches
+
+00:01:23.240 --> 00:01:25.999
+to reading literature and taking notes
+
+00:01:26.000 --> 00:01:31.039
+as it is quite a popular topic in the Emacs community.
+
+00:01:31.040 --> 00:01:32.759
+Lastly, I will have a short section
+
+00:01:32.760 --> 00:01:37.039
+about how I ensure that I can recall the knowledge
+
+00:01:37.040 --> 00:01:39.679
+from this literature very easily
+
+00:01:39.680 --> 00:01:43.599
+through this reference management system.
+
+NOTE Capture
+
+00:01:43.600 --> 00:01:48.199
+So, how can we capture an article in Emacs?
+
+00:01:48.200 --> 00:01:52.099
+One of the most commonly known packages is doi-utils
+
+00:01:52.100 --> 00:01:58.879
+where doi-utils has a lot of useful things to do
+
+00:01:58.880 --> 00:02:03.519
+and one of them is to capture a paper,
+
+00:02:03.520 --> 00:02:06.459
+but you need a DOI, and for me, that is a bit inconvenient,
+
+00:02:06.460 --> 00:02:08.879
+because what I want to do is that
+
+00:02:08.880 --> 00:02:11.999
+I have a URL here of a paper,
+
+00:02:12.000 --> 00:02:16.519
+I want to just copy this URL, not copy the DOI,
+
+00:02:16.520 --> 00:02:23.199
+and be able to save it immediately to my bib file.
+
+00:02:23.200 --> 00:02:24.311
+And that can now be done
+
+00:02:24.312 --> 00:02:27.719
+through this function zotra-add-entry.
+
+00:02:27.720 --> 00:02:28.679
+And as you can see here,
+
+00:02:28.680 --> 00:02:31.079
+there is also a zotra-download-attachment
+
+00:02:31.080 --> 00:02:34.159
+that sometimes works, but not always.
+
+00:02:34.160 --> 00:02:35.879
+I don't personally recommend it.
+
+00:02:35.880 --> 00:02:39.599
+But the problem is that due to articles being
+
+00:02:39.600 --> 00:02:42.639
+locked behind paywalls in many cases,
+
+00:02:42.640 --> 00:02:45.639
+downloading attachments doesn't work
+
+00:02:45.640 --> 00:02:47.479
+through Emacs. Sometimes it doesn't work
+
+00:02:47.480 --> 00:02:51.119
+through Zotero. Sometimes you just need to go to the browser,
+
+00:02:51.120 --> 00:02:54.259
+say download PDF, and that's the only solution
+
+00:02:54.260 --> 00:02:58.399
+that will properly work.
+
+00:02:58.400 --> 00:03:01.519
+So how do I then add this to the paper?
+
+00:03:01.520 --> 00:03:04.711
+I need to find this paper that is here
+
+00:03:04.712 --> 00:03:05.879
+through ivy-bibtex.
+
+00:03:05.880 --> 00:03:10.239
+This is the bib file manager I use.
+
+00:03:10.240 --> 00:03:11.759
+There is also others like citar.
+
+00:03:11.760 --> 00:03:15.559
+I think citar has much better coding and integration
+
+00:03:15.560 --> 00:03:18.159
+with other packages, but I haven't really bothered
+
+00:03:18.160 --> 00:03:19.639
+to move from ivy-bibtex
+
+00:03:19.640 --> 00:03:24.439
+because it does basically everything I want perfectly.
+
+00:03:24.440 --> 00:03:28.279
+So I go here, say add pdf to library.
+
+00:03:28.280 --> 00:03:31.719
+I find where I saved it,
+
+00:03:31.720 --> 00:03:35.399
+and it will suggest to automatically name it something
+
+00:03:35.400 --> 00:03:37.445
+which is in full integration
+
+00:03:37.446 --> 00:03:40.919
+with the rest of my Emacs packages,
+
+00:03:40.920 --> 00:03:43.839
+and all the literature management stuff
+
+00:03:43.840 --> 00:03:46.799
+knows to find it with this exact name.
+
+00:03:46.800 --> 00:03:49.045
+So it iss saved and now
+
+00:03:49.046 --> 00:03:53.319
+when I try to create a file from this,
+
+00:03:53.320 --> 00:03:55.199
+which I will show later,
+
+00:03:55.200 --> 00:04:00.919
+you will see that the file will already appear there.
+
+NOTE Organizing
+
+00:04:00.920 --> 00:04:06.519
+So now let's go to organizing.
+
+00:04:06.520 --> 00:04:09.119
+Organizing in Zotero is typically done through a
+
+00:04:09.120 --> 00:04:10.519
+hierarchical folder structure.
+
+00:04:10.520 --> 00:04:14.999
+This is very familiar to most people and generally works,
+
+00:04:15.000 --> 00:04:19.519
+but being someone that takes notes using the Zettelkasten method,
+
+00:04:19.520 --> 00:04:24.319
+which has a fully flat hierarchy, nothing goes in folders,
+
+00:04:24.320 --> 00:04:27.959
+everything is in the same folder,
+
+00:04:27.960 --> 00:04:31.959
+and you find everything because it's connected to other things.
+
+00:04:31.960 --> 00:04:34.839
+We have some basic indexes,
+
+00:04:34.840 --> 00:04:37.799
+from where you can jump to different points.
+
+00:04:37.800 --> 00:04:41.359
+I love this structure, so I also wanted to include it
+
+00:04:41.360 --> 00:04:42.919
+in my bibliography management,
+
+00:04:42.920 --> 00:04:45.579
+because with folders you have problems like,
+
+00:04:45.580 --> 00:04:48.359
+this article can go in that folder, can go in that folder,
+
+00:04:48.360 --> 00:04:51.079
+can go in that folder. Where do I actually put it?
+
+00:04:51.080 --> 00:04:54.439
+Do I put copies of it in different folders?
+
+00:04:54.440 --> 00:04:59.279
+It's just confusing and not really practical in my opinion.
+
+00:04:59.280 --> 00:05:03.478
+So I tried to do this approach inside Emacs.
+
+NOTE Ebib
+
+00:05:03.479 --> 00:05:08.239
+And how? With Ebib.
+
+00:05:08.240 --> 00:05:11.719
+Ebib is an amazing software built inside Emacs.
+
+00:05:11.720 --> 00:05:15.679
+It's a reference manager and it works absolutely amazing
+
+00:05:15.680 --> 00:05:18.199
+if you configure it to your liking.
+
+00:05:18.200 --> 00:05:21.119
+So let's open ebib first.
+
+00:05:21.120 --> 00:05:23.519
+This is the interface you will see when opening.
+
+00:05:23.520 --> 00:05:27.159
+Actually, by default you will not see anything,
+
+00:05:27.160 --> 00:05:30.799
+but I have open three bib files.
+
+00:05:30.800 --> 00:05:36.119
+These are opened by default on boot of ebib for me.
+
+00:05:36.120 --> 00:05:39.839
+These are my three main master bib files.
+
+00:05:39.840 --> 00:05:41.719
+This is the Zotero master bib file,
+
+00:05:41.720 --> 00:05:44.599
+which only Zotero can touch. If I change it,
+
+00:05:44.600 --> 00:05:47.959
+it will be overwritten. This is my new master bib,
+
+00:05:47.960 --> 00:05:53.759
+where I save all the files that I have now started using
+
+00:05:53.760 --> 00:05:55.599
+after switching to this approach.
+
+00:05:55.600 --> 00:05:59.119
+And then this is the master bib file
+
+00:05:59.120 --> 00:06:02.519
+for literature related to my PhD
+
+00:06:02.520 --> 00:06:07.479
+and things that I have already read.
+
+00:06:07.480 --> 00:06:09.759
+It's a very convenient interface.
+
+00:06:09.760 --> 00:06:14.140
+There is also search. There is one searching tool,
+
+00:06:14.141 --> 00:06:16.519
+the jump to entry, ebib-jump-to-entry,
+
+00:06:16.520 --> 00:06:23.039
+which searches through all open bib files for the title.
+
+00:06:23.040 --> 00:06:29.319
+So for example, I can search for membrane fabrication,
+
+00:06:29.320 --> 00:06:35.839
+because that's something I am currently doing,
+
+00:06:35.840 --> 00:06:41.919
+and go to this. There is another searching tool,
+
+00:06:41.920 --> 00:06:45.639
+the ebib-search, which searches through the database
+
+00:06:45.640 --> 00:06:48.359
+that you're on right now
+
+00:06:48.360 --> 00:06:50.399
+and it does a full text search,
+
+00:06:50.400 --> 00:06:53.459
+not only in the titles, but everywhere.
+
+00:06:53.460 --> 00:06:57.039
+So, for example, I see that in this paper
+
+00:06:57.040 --> 00:07:04.759
+if I go to the abstract and search for the word FTIR,
+
+00:07:04.760 --> 00:07:06.879
+which is a chemical analysis,
+
+00:07:06.880 --> 00:07:09.879
+it will tell me that it's here.
+
+00:07:09.880 --> 00:07:16.539
+Can it find it anywhere else? It cannot. That's okay.
+
+00:07:16.540 --> 00:07:18.111
+Let's search for something
+
+00:07:18.112 --> 00:07:21.679
+that we'll be able to find more easily,
+
+00:07:21.680 --> 00:07:24.799
+like, for example, membrane crystallization
+
+00:07:24.800 --> 00:07:27.539
+which is a main focus of my PhD.
+
+00:07:27.540 --> 00:07:30.319
+Then it will be able to find it many times,
+
+00:07:30.320 --> 00:07:35.159
+many, many times.
+
+00:07:35.160 --> 00:07:40.299
+I can also search on the next database
+
+00:07:40.300 --> 00:07:49.479
+or on this database and see where is everything that I want.
+
+00:07:49.480 --> 00:07:55.479
+So this is different searching tools which are very useful.
+
+NOTE Filters
+
+00:07:55.480 --> 00:08:01.700
+Then there's also another tool, that is, filters.
+
+00:08:01.701 --> 00:08:06.199
+So I can filter on any field.
+
+00:08:06.200 --> 00:08:09.739
+Like, for example, let's say on any field,
+
+00:08:09.740 --> 00:08:13.159
+and let's say I'm looking now again
+
+00:08:13.160 --> 00:08:16.279
+for membrane crystallization.
+
+00:08:16.280 --> 00:08:19.879
+This will now filter to all entries.
+
+00:08:19.880 --> 00:08:22.119
+You can see right now there's 18 entries here
+
+00:08:22.120 --> 00:08:28.019
+that mention these two words together in any field.
+
+00:08:28.020 --> 00:08:31.759
+Sometimes this is easier, because this is permanent.
+
+00:08:31.760 --> 00:08:33.699
+It's not like the search that we find one
+
+00:08:33.700 --> 00:08:35.218
+and then if you move, you've lost it,
+
+00:08:35.219 --> 00:08:37.885
+and you need to find it again.
+
+00:08:37.886 --> 00:08:39.679
+This is permanent until I say,
+
+00:08:39.680 --> 00:08:41.799
+okay, cancel the filter.
+
+00:08:41.800 --> 00:08:43.479
+I mostly work with filters,
+
+00:08:43.480 --> 00:08:47.059
+I think they're the most convenient.
+
+00:08:47.060 --> 00:08:49.679
+Then there's also the ebib-list-recent
+
+00:08:49.680 --> 00:08:51.479
+which is another very useful command.
+
+00:08:51.480 --> 00:08:53.359
+It asks you for a number of days
+
+00:08:53.360 --> 00:08:56.559
+and it will show you the files that were added
+
+00:08:56.560 --> 00:08:58.479
+in the most recent.
+
+00:08:58.480 --> 00:09:02.159
+So for example, show me the literature files
+
+00:09:02.160 --> 00:09:05.839
+that were added to this bib file in the last month.
+
+00:09:05.840 --> 00:09:09.799
+I will see five files in this case,
+
+00:09:09.800 --> 00:09:12.699
+because in this bib file, I have mostly entries
+
+00:09:12.700 --> 00:09:15.239
+that I have read, these are the files
+
+00:09:15.240 --> 00:09:18.959
+I have most recently read and added here.
+
+00:09:18.960 --> 00:09:21.599
+While if I go for example here and say that,
+
+00:09:21.600 --> 00:09:25.799
+these are files that maybe I haven't read yet,
+
+00:09:25.800 --> 00:09:31.099
+but I was planning to read. So this is something useful.
+
+00:09:31.100 --> 00:09:32.999
+Although for things I'm planning to read,
+
+00:09:33.000 --> 00:09:34.439
+I mostly use the reading list
+
+00:09:34.440 --> 00:09:36.178
+that I'm going to show next.
+
+NOTE Dependent databases
+
+00:09:36.179 --> 00:09:37.399
+But before that,
+
+00:09:37.400 --> 00:09:41.759
+a few more neat things that you can do in Ebib.
+
+00:09:41.760 --> 00:09:45.019
+So I have a list of dependent databases.
+
+00:09:45.020 --> 00:09:48.819
+For ease, I have already opened them here.
+
+00:09:48.820 --> 00:09:52.599
+These, as you can see, have two brackets here,
+
+00:09:52.600 --> 00:09:59.439
+indicating that they're dependent on phd_literature_1.bib,
+
+00:09:59.440 --> 00:10:06.378
+and these, in my case, act as the sort of index file,
+
+00:10:06.379 --> 00:10:10.911
+where I am tagging things based on the structure
+
+00:10:10.912 --> 00:10:14.651
+that I wanted to have for the organization.
+
+00:10:14.652 --> 00:10:16.478
+So all the organization is flat,
+
+00:10:16.479 --> 00:10:20.145
+all the literature is in phd_literature_1,
+
+00:10:20.146 --> 00:10:23.419
+however, I have this file
+
+00:10:23.420 --> 00:10:25.839
+that has 14 entries.
+
+00:10:25.840 --> 00:10:32.899
+I have another file here that has 20 entries.
+
+00:10:32.900 --> 00:10:35.719
+And these are smaller indexes
+
+00:10:35.720 --> 00:10:38.519
+where I can find things easier,
+
+00:10:38.520 --> 00:10:41.159
+but things are not limited to one of these.
+
+00:10:41.160 --> 00:10:45.599
+Things can be in all of these, or probably not all of these,
+
+00:10:45.600 --> 00:10:50.479
+but can be in three or four of these very easily.
+
+00:10:50.480 --> 00:10:55.219
+And how you add things is that I go here,
+
+00:10:55.220 --> 00:11:00.079
+and I say not r, it's... M for the dependent databases,
+
+00:11:00.080 --> 00:11:02.079
+and I add entry, and it will tell me
+
+00:11:02.080 --> 00:11:03.159
+"Where do you want to add this?"
+
+00:11:03.160 --> 00:11:05.159
+So when I read a new paper,
+
+00:11:05.160 --> 00:11:09.839
+I can say okay, this is related to these three tags,
+
+00:11:09.840 --> 00:11:11.239
+and this is sort of like, again,
+
+00:11:11.240 --> 00:11:13.185
+it's tagging it and it's putting it
+
+00:11:13.186 --> 00:11:15.059
+there, there, and there.
+
+00:11:15.060 --> 00:11:17.599
+And then this creates a flat structure
+
+00:11:17.600 --> 00:11:21.619
+that however has a great organization,
+
+00:11:21.620 --> 00:11:23.799
+similar to how Zettelkasten works
+
+00:11:23.800 --> 00:11:27.879
+and I really like working with something like this,
+
+00:11:27.880 --> 00:11:33.719
+with dependent databases.
+
+00:11:33.720 --> 00:11:36.539
+Another feature that I really like,
+
+00:11:36.540 --> 00:11:41.919
+another feature that exists by default... But if I tag,
+
+00:11:41.920 --> 00:11:45.279
+this tagging is done through "m",
+
+00:11:45.280 --> 00:11:49.019
+and then I can tag different files here,
+
+00:11:49.020 --> 00:11:52.159
+and this is to do different actions with these together,
+
+00:11:52.160 --> 00:11:53.585
+such as, for example,
+
+00:11:53.586 --> 00:11:55.585
+copy them to a different file,
+
+00:11:55.586 --> 00:11:59.459
+with "x" I can export the entries somewhere else,
+
+00:11:59.460 --> 00:12:00.685
+there are many things that you can do
+
+00:12:00.686 --> 00:12:01.439
+when you mark them.
+
+00:12:01.440 --> 00:12:05.319
+By the way, one of them is this function,
+
+00:12:05.320 --> 00:12:08.939
+which sees everything that I have marked
+
+00:12:08.940 --> 00:12:14.785
+and shows me an org-roam-node-find entry
+
+00:12:14.786 --> 00:12:18.052
+that is filtered to just these files.
+
+00:12:18.053 --> 00:12:20.885
+I can select one and it will take me
+
+00:12:20.886 --> 00:12:24.399
+to my notes on this specific paper.
+
+00:12:24.400 --> 00:12:25.719
+I find this very useful,
+
+00:12:25.720 --> 00:12:27.159
+because I can be looking for something
+
+00:12:27.160 --> 00:12:30.018
+and I can say, okay I remember,
+
+00:12:30.019 --> 00:12:31.399
+or I did some filtering,
+
+00:12:31.400 --> 00:12:34.099
+and I know it's in one of these files
+
+00:12:34.100 --> 00:12:37.239
+and now I want to see my in-depth notes on each one
+
+00:12:37.240 --> 00:12:41.079
+to remember where exactly I found it.
+
+00:12:41.080 --> 00:12:43.419
+So I find this kind of filtering,
+
+00:12:43.420 --> 00:12:50.539
+this org-roam related filtering, to be also very effective.
+
+NOTE Reading lists
+
+00:12:50.540 --> 00:12:54.079
+So now let's finally move to reading list.
+
+00:12:54.080 --> 00:12:55.399
+The reading list in ebib
+
+00:12:55.400 --> 00:13:00.259
+reminds me a lot of the philosophy that Emacs uses.
+
+00:13:00.260 --> 00:13:05.119
+By default, it is extremely bare bones, not very usable,
+
+00:13:05.120 --> 00:13:10.719
+but it is so customizable, to where you can do
+
+00:13:10.720 --> 00:13:13.019
+anything that you can imagine through it
+
+00:13:13.020 --> 00:13:16.479
+because the limit truly is your imagination.
+
+00:13:16.480 --> 00:13:21.039
+It's how much you can code into this
+
+00:13:21.040 --> 00:13:22.519
+that actually makes sense
+
+00:13:22.520 --> 00:13:25.479
+and you can actually imagine it working.
+
+00:13:25.480 --> 00:13:31.699
+Besides that, you can do anything really.
+
+00:13:31.700 --> 00:13:36.799
+So we can open ebib and try to find this paper
+
+00:13:36.800 --> 00:13:42.699
+that I just added here.
+
+00:13:42.700 --> 00:13:48.679
+Then we can create a reading list entry from it.
+
+00:13:48.680 --> 00:13:51.999
+Here, my reading list prompts me
+
+00:13:52.000 --> 00:13:53.418
+for a priority for this.
+
+00:13:53.419 --> 00:13:57.239
+How urgent it is for me to read this.
+
+00:13:57.240 --> 00:14:02.219
+It adds a TO-READ, which is a todo entry,
+
+00:14:02.220 --> 00:14:04.479
+which helps with organizing my reading list,
+
+00:14:04.480 --> 00:14:08.679
+because as you may also be able to see, this has an ID,
+
+00:14:08.680 --> 00:14:11.579
+because this is an org-roam node,
+
+00:14:11.580 --> 00:14:16.839
+so the TO-READ allows me to organize it inside org-roam.
+
+00:14:16.840 --> 00:14:21.839
+It saves the citekey, the link to the paper,
+
+00:14:21.840 --> 00:14:25.979
+and also tags it with the parent file node
+
+00:14:25.980 --> 00:14:30.379
+because I don't like having orphan nodes in my Zettelkasten.
+
+00:14:30.380 --> 00:14:33.839
+I like everything to be linked to at least one thing.
+
+00:14:33.840 --> 00:14:35.799
+So everything in the reading list
+
+00:14:35.800 --> 00:14:39.299
+is linked to the parent file.
+
+00:14:39.300 --> 00:14:47.519
+And now I can find this in the org-roam-node-find menu,
+
+00:14:47.520 --> 00:14:53.719
+here. However, that's not very interesting.
+
+00:14:53.720 --> 00:14:56.239
+In practice, my typical org-roam-node-find
+
+00:14:56.240 --> 00:14:59.759
+does not even include these reading list files
+
+00:14:59.760 --> 00:15:02.439
+because I don't really care to have them there.
+
+NOTE Special org-roam-node-find
+
+00:15:02.440 --> 00:15:06.159
+I have a special org-roam-node-find
+
+00:15:06.160 --> 00:15:13.439
+that is designed to find these in particular.
+
+00:15:13.440 --> 00:15:16.459
+And here these have 22. These are the amount of files
+
+00:15:16.460 --> 00:15:21.679
+that are currently in my reading list.
+
+00:15:21.680 --> 00:15:29.899
+So for example, let's try and press here.
+
+00:15:29.900 --> 00:15:33.479
+And magically, this prompts me to select a capture template,
+
+00:15:33.480 --> 00:15:39.119
+because what it's doing is that I selected this,
+
+00:15:39.120 --> 00:15:42.119
+and because of the citekey, it knows
+
+00:15:42.120 --> 00:15:46.539
+that it wants to create a new node for that.
+
+00:15:46.540 --> 00:15:47.959
+So I select the capture template.
+
+00:15:47.960 --> 00:15:56.099
+It knows that it wants to create this new node for this.
+
+00:15:56.100 --> 00:16:01.359
+And now, if I for a second close the reading list,
+
+00:16:01.360 --> 00:16:07.119
+now I can already go ahead and take notes on this.
+
+00:16:07.120 --> 00:16:09.759
+This is org-noter, in particular,
+
+00:16:09.760 --> 00:16:11.599
+and it makes it all very easy
+
+00:16:11.600 --> 00:16:15.719
+because it's all integrated in one place.
+
+00:16:15.720 --> 00:16:22.539
+If I then close this and open a new Emacs,
+
+00:16:22.540 --> 00:16:27.939
+we have this, and the reading list allows me to very quickly
+
+00:16:27.940 --> 00:16:32.539
+go from this being reading this item to initializing it.
+
+00:16:32.540 --> 00:16:35.039
+Another thing that is very useful is that
+
+00:16:35.040 --> 00:16:38.739
+everything is sorted by priority.
+
+00:16:38.740 --> 00:16:41.359
+So I need to increase the font size again
+
+00:16:41.360 --> 00:16:48.899
+because I closed the previous Emacs.
+
+00:16:48.900 --> 00:16:52.319
+So here, I can select what is high priority,
+
+00:16:52.320 --> 00:16:56.399
+what is low priority. I can also change the priority
+
+00:16:56.400 --> 00:16:58.799
+without needing to be in this file.
+
+00:16:58.800 --> 00:17:05.479
+Let's leave this file. I can say, okay, I decided
+
+00:17:05.480 --> 00:17:08.639
+that this file is priority B. It needs to be A,
+
+00:17:08.640 --> 00:17:11.899
+which is more urgent.
+
+00:17:11.900 --> 00:17:16.079
+In my system, there's five different priority levels.
+
+00:17:16.080 --> 00:17:17.999
+You can get away with less
+
+00:17:18.000 --> 00:17:20.959
+but I like to have the very much low ones
+
+00:17:20.960 --> 00:17:22.999
+as this is not urgent at all
+
+00:17:23.000 --> 00:17:27.159
+but I want to keep it somewhere. A is very urgent
+
+00:17:27.160 --> 00:17:31.779
+and B is urgent but just below A.
+
+00:17:31.780 --> 00:17:34.619
+And then the C in the middle is just
+
+00:17:34.620 --> 00:17:35.999
+I will eventually read this
+
+00:17:36.000 --> 00:17:41.919
+but not something I want to focus my attention on right now.
+
+00:17:41.920 --> 00:17:45.439
+So this is mostly about reading list.
+
+00:17:45.440 --> 00:17:46.639
+I can also show, for example,
+
+00:17:46.640 --> 00:17:50.679
+I have this if I finalize something,
+
+00:17:50.680 --> 00:17:56.799
+if I read it. For example, I created a note for this new thing.
+
+00:17:56.800 --> 00:17:59.079
+Let's say I finished reading it.
+
+00:17:59.080 --> 00:18:02.179
+I want to remove from my reading list.
+
+00:18:02.180 --> 00:18:05.639
+It's also just one command and it's done.
+
+NOTE Annotations
+
+00:18:05.640 --> 00:18:08.739
+If we now return to the presentation,
+
+00:18:08.740 --> 00:18:11.699
+the last thing I want to show is annotations.
+
+00:18:11.700 --> 00:18:17.119
+So for annotations, it's the idea that sometimes
+
+00:18:17.120 --> 00:18:23.139
+you just need to find something in Ebib quickly.
+
+00:18:23.140 --> 00:18:26.679
+So I'm here and I'm looking for something.
+
+00:18:26.680 --> 00:18:30.999
+I said I'm here and I'm looking for something.
+
+00:18:31.000 --> 00:18:35.199
+And as you can see, there's the annote file everywhere,
+
+00:18:35.200 --> 00:18:40.839
+the annote entry, which is a very very small description
+
+00:18:40.840 --> 00:18:43.799
+of things that I want to remember for this paper.
+
+00:18:43.800 --> 00:18:48.039
+So I can be scrolling here or scrolling
+
+00:18:48.040 --> 00:18:51.811
+in one of the smaller files
+
+00:18:51.812 --> 00:18:56.859
+and saying this was in this subsection,
+
+00:18:56.860 --> 00:18:59.519
+and which paper was it, and I can scroll,
+
+00:18:59.520 --> 00:19:01.711
+read all these annotes.
+
+00:19:01.712 --> 00:19:04.919
+Each annote takes like 15 seconds to read,
+
+00:19:04.920 --> 00:19:07.359
+and really decide, okay,
+
+00:19:07.360 --> 00:19:09.799
+it was this paper that I wanted, good.
+
+00:19:09.800 --> 00:19:21.819
+Now I can open the note for it, go there, and it's very easy.
+
+NOTE Wrapping up
+
+00:19:21.820 --> 00:19:25.719
+So I think that's all. I would like to thank you for your time.
+
+00:19:25.720 --> 00:19:29.319
+I would love to see your questions either in IRC,
+
+00:19:29.320 --> 00:19:32.199
+I will be, maybe I've already answered
+
+00:19:32.200 --> 00:19:35.039
+some of your questions there in the Etherpad,
+
+00:19:35.040 --> 00:19:37.599
+or right now, we're going to the live Q&A
+
+00:19:37.600 --> 00:19:42.159
+where I'd love to interact with everyone and have a discussion.
+
+00:19:42.160 --> 00:19:44.479
+However, if you don't have any questions right now,
+
+00:19:44.480 --> 00:19:48.559
+but you have a question later on, feel free to send me an email.
+
+00:19:48.560 --> 00:19:51.739
+My mail is also on the site.
+
+00:19:51.740 --> 00:19:54.599
+And if you're curious how all this "magic" worked,
+
+00:19:54.600 --> 00:20:00.839
+feel free to go to my Github and see the ebib section
+
+00:20:00.840 --> 00:20:04.039
+here that will also be linked in the doc page,
+
+00:20:04.040 --> 00:20:06.279
+where you can see all the configuration
+
+00:20:06.280 --> 00:20:10.919
+that I have done in Ebib for everything to work.
+
+00:20:10.920 --> 00:20:14.000
+Thank you again and have a wonderful EmacsConf!
diff --git a/2025/captions/emacsconf-2025-sat-open--saturday-opening-remarks--main--chapters.vtt b/2025/captions/emacsconf-2025-sat-open--saturday-opening-remarks--main--chapters.vtt
new file mode 100644
index 00000000..af2b588c
--- /dev/null
+++ b/2025/captions/emacsconf-2025-sat-open--saturday-opening-remarks--main--chapters.vtt
@@ -0,0 +1,41 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:00:15.999
+Tracks
+
+00:00:16.000 --> 00:01:00.606
+Watching and participating
+
+00:01:00.607 --> 00:01:10.600
+Other schedule formats
+
+00:01:10.601 --> 00:01:46.035
+BigBlueButton
+
+00:01:46.036 --> 00:02:03.216
+On and off the stream
+
+00:02:03.217 --> 00:02:25.455
+Etherpad and IRC
+
+00:02:25.456 --> 00:02:59.439
+Etherpad
+
+00:02:59.440 --> 00:03:32.777
+IRC
+
+00:03:32.778 --> 00:03:55.237
+Captions
+
+00:03:55.238 --> 00:04:07.281
+status.emacsconf.org
+
+00:04:07.282 --> 00:04:16.019
+Guidelines for conduct
+
+00:04:16.020 --> 00:04:26.775
+Videos
+
+00:04:26.776 --> 00:04:49.323
+Let's get started!
diff --git a/2025/captions/emacsconf-2025-sat-open--saturday-opening-remarks--main.vtt b/2025/captions/emacsconf-2025-sat-open--saturday-opening-remarks--main.vtt
new file mode 100644
index 00000000..d6a7d98c
--- /dev/null
+++ b/2025/captions/emacsconf-2025-sat-open--saturday-opening-remarks--main.vtt
@@ -0,0 +1,376 @@
+WEBVTT
+
+
+NOTE Tracks
+
+00:00:00.000 --> 00:00:02.246
+Welcome to EmacsConf, where we have fun
+
+00:00:02.247 --> 00:00:05.484
+exploring just how much we can do with a text editor.
+
+00:00:05.485 --> 00:00:07.924
+There's a General track and a Development track,
+
+00:00:07.925 --> 00:00:09.483
+but really, you'll probably find
+
+00:00:09.484 --> 00:00:11.078
+interesting things on both tracks
+
+00:00:11.079 --> 00:00:13.215
+no matter what your level of experience is,
+
+00:00:13.216 --> 00:00:15.999
+so don't feel limited to one or the other.
+
+NOTE Watching and participating
+
+00:00:16.000 --> 00:00:19.392
+The best parts of EmacsConf are the conversations.
+
+00:00:19.393 --> 00:00:22.485
+The wiki has a page on how to watch and participate,
+
+00:00:22.486 --> 00:00:24.909
+and I'll give you a quick overview as well.
+
+00:00:24.910 --> 00:00:28.884
+You can watch both streams at live.emacsconf.org
+
+00:00:28.885 --> 00:00:31.185
+using free and open source software.
+
+00:00:31.186 --> 00:00:34.387
+Using a streaming media player like mpv
+
+00:00:34.388 --> 00:00:37.274
+seems to be the best way to watch in terms of performance
+
+00:00:37.275 --> 00:00:39.240
+but there are also web-based players
+
+00:00:39.241 --> 00:00:41.377
+just in case that's all you've got.
+
+00:00:41.378 --> 00:00:44.063
+The schedule shows the General track on top
+
+00:00:44.064 --> 00:00:45.602
+and the Development track on the bottom,
+
+00:00:45.603 --> 00:00:47.819
+so you can see what else is going on.
+
+00:00:47.820 --> 00:00:49.818
+As you're watching the talks,
+
+00:00:49.819 --> 00:00:52.354
+you can refer to the schedule in another window.
+
+00:00:52.355 --> 00:00:55.600
+Hover over the boxes to see the times and titles,
+
+00:00:55.601 --> 00:00:57.613
+and click on the boxes in the schedule
+
+00:00:57.614 --> 00:01:00.606
+to jump to the talk's page for more details.
+
+NOTE Other schedule formats
+
+00:01:00.607 --> 00:01:03.586
+You can also get the schedule as an iCalendar file
+
+00:01:03.587 --> 00:01:05.620
+or as an Org file in different time zones.
+
+00:01:05.621 --> 00:01:08.254
+The Org file has some links to talk resources
+
+00:01:08.255 --> 00:01:10.600
+and might be handy as a starting point for your notes.
+
+NOTE BigBlueButton
+
+00:01:10.601 --> 00:01:12.144
+Many talks will be followed by
+
+00:01:12.145 --> 00:01:14.571
+live Q&A web conferences with the speaker,
+
+00:01:14.572 --> 00:01:17.733
+which will be done in BigBlueButton or BBB.
+
+00:01:17.734 --> 00:01:20.818
+These are indicated with a solid border on the schedule
+
+00:01:20.819 --> 00:01:24.000
+and by Q&A: BBB on the schedule page.
+
+00:01:24.001 --> 00:01:25.900
+You can join the web conference room
+
+00:01:25.901 --> 00:01:27.466
+by clicking on the BBB link
+
+00:01:27.467 --> 00:01:30.175
+on the schedule page or the talk's webpage.
+
+00:01:30.176 --> 00:01:34.214
+Then you can ask your questions yourself when the Q&A starts.
+
+00:01:34.215 --> 00:01:37.210
+To improve performance, please keep your webcam off
+
+00:01:37.211 --> 00:01:39.889
+and stay muted until it's your turn to talk.
+
+00:01:39.890 --> 00:01:41.691
+If you don't like Javascript,
+
+00:01:41.692 --> 00:01:43.642
+you can still ask questions via IRC
+
+00:01:43.643 --> 00:01:46.035
+and the hosts can read them out for you.
+
+NOTE On and off the stream
+
+00:01:46.036 --> 00:01:47.894
+We're probably going to automatically switch
+
+00:01:47.895 --> 00:01:49.482
+between talks and Q&A sessions,
+
+00:01:49.483 --> 00:01:52.896
+so the transitions on the stream might be a little sudden.
+
+00:01:52.897 --> 00:01:54.438
+People in the BigBlueButton room
+
+00:01:54.439 --> 00:01:55.861
+can continue the conversation
+
+00:01:55.862 --> 00:01:58.219
+even after the talk moves off-stream,
+
+00:01:58.220 --> 00:02:00.270
+and you can also reach out to the speakers
+
+00:02:00.271 --> 00:02:03.216
+using the contact information on the talk page.
+
+NOTE Etherpad and IRC
+
+00:02:03.217 --> 00:02:06.301
+Other talks will have Q&A via Etherpad or IRC,
+
+00:02:06.302 --> 00:02:08.541
+depending on what the speakers prefer.
+
+00:02:08.542 --> 00:02:11.379
+This is indicated in the schedule with a dashed border
+
+00:02:11.380 --> 00:02:13.509
+and on the schedule page as well.
+
+00:02:13.510 --> 00:02:16.542
+The schedule pages have quick shortcuts so that you can
+
+00:02:16.543 --> 00:02:19.052
+find out more about talks, open the Etherpads,
+
+00:02:19.053 --> 00:02:21.203
+and join the Q&A sessions.
+
+00:02:21.204 --> 00:02:23.365
+The watch page has more tips
+
+00:02:23.366 --> 00:02:25.455
+on how to make the most of Q&A.
+
+NOTE Etherpad
+
+00:02:25.456 --> 00:02:28.329
+If you can, please add notes and ask questions
+
+00:02:28.330 --> 00:02:30.132
+in the Etherpad for the talk.
+
+00:02:30.133 --> 00:02:31.597
+That makes it easier
+
+00:02:31.598 --> 00:02:33.129
+for everyone to share their notes,
+
+00:02:33.130 --> 00:02:36.354
+and speakers and hosts can read the questions from there.
+
+00:02:36.355 --> 00:02:39.621
+We'll copy the notes to the talk pages afterwards.
+
+00:02:39.622 --> 00:02:41.496
+We have one pad for each talk,
+
+00:02:41.497 --> 00:02:43.772
+so you can follow the links to get to the next one
+
+00:02:43.773 --> 00:02:46.827
+or go back to the schedule and get the link from there.
+
+00:02:46.828 --> 00:02:48.422
+If you have general feedback about
+
+00:02:48.423 --> 00:02:50.667
+the conference itself, please put it in
+
+00:02:50.668 --> 00:02:54.592
+pad.emacsconf.org/emacsconf.
+
+00:02:54.593 --> 00:02:57.549
+You can also use this as a community message board
+
+00:02:57.550 --> 00:02:59.439
+for things like Help Wanted.
+
+NOTE IRC
+
+00:02:59.440 --> 00:03:02.799
+Internet Relay Chat or IRC can be another great way
+
+00:03:02.800 --> 00:03:05.175
+to be part of lots of conversations.
+
+00:03:05.176 --> 00:03:09.450
+You can use chat.emacsconf.org to join the IRC channels
+
+00:03:09.451 --> 00:03:11.045
+through your web browser.
+
+00:03:11.046 --> 00:03:12.856
+The tabs on the left can help you
+
+00:03:12.857 --> 00:03:14.891
+switch between the different channels.
+
+00:03:14.892 --> 00:03:17.610
+There's #emacsconf-gen for the General track
+
+00:03:17.611 --> 00:03:20.489
+and #emacsconf-dev for the Development track.
+
+00:03:20.490 --> 00:03:23.956
+If you need to reach us, you can join #emacsconf-org
+
+00:03:23.957 --> 00:03:29.474
+or e-mail emacsconf-org-private@gnu.org.
+
+00:03:29.475 --> 00:03:32.777
+You can use #emacsconf for hallway conversations.
+
+NOTE Captions
+
+00:03:32.778 --> 00:03:35.587
+Once again, we're going to be streaming with open captions
+
+00:03:35.588 --> 00:03:38.479
+for most of the talks this year, thanks to our speakers and
+
+00:03:38.480 --> 00:03:39.895
+captioning volunteers.
+
+00:03:39.896 --> 00:03:42.522
+The captioned talks are indicated on the schedule,
+
+00:03:42.523 --> 00:03:44.312
+and with any luck, we'll be posting
+
+00:03:44.313 --> 00:03:46.123
+videos and transcripts on talk pages
+
+00:03:46.124 --> 00:03:47.883
+shortly after the talks start.
+
+00:03:47.884 --> 00:03:51.069
+If you need additional accommodations, please let us know
+
+00:03:51.070 --> 00:03:54.016
+in #emacsconf-org and we'll see
+
+00:03:54.017 --> 00:03:55.237
+if we can make things happen.
+
+NOTE status.emacsconf.org
+
+00:03:55.238 --> 00:03:59.917
+If something goes down, we'll update status.emacsconf.org.
+
+00:03:59.918 --> 00:04:01.743
+If it doesn't look like we've noticed yet,
+
+00:04:01.744 --> 00:04:05.262
+please let us know in the #emacsconf-org IRC channel,
+
+00:04:05.263 --> 00:04:07.281
+where we will be quietly panicking.
+
+NOTE Guidelines for conduct
+
+00:04:07.282 --> 00:04:09.704
+In all of these conversations, please keep in mind
+
+00:04:09.705 --> 00:04:11.238
+our guidelines for conduct.
+
+00:04:11.239 --> 00:04:12.619
+You can find them on the wiki,
+
+00:04:12.620 --> 00:04:16.019
+and they basically boil down to: please be nice. Thank you!
+
+NOTE Videos
+
+00:04:16.020 --> 00:04:18.891
+If all goes well, the prerecorded talks and transcripts
+
+00:04:18.892 --> 00:04:20.537
+should be available from the talk pages
+
+00:04:20.538 --> 00:04:22.038
+shortly after they start playing,
+
+00:04:22.039 --> 00:04:24.143
+and we'll post the recordings of live talks
+
+00:04:24.144 --> 00:04:26.775
+and Q&A sessions within the next few weeks.
+
+NOTE Let's get started!
+
+00:04:26.776 --> 00:04:28.247
+All right, let's get going.
+
+00:04:28.248 --> 00:04:31.214
+You might see Leo Vivier, Corwin Brust,
+
+00:04:31.215 --> 00:04:33.953
+and Amin Bandali hosting the various tracks.
+
+00:04:33.954 --> 00:04:35.767
+I will run around mostly backstage,
+
+00:04:35.768 --> 00:04:37.793
+and you'll probably meet us in the closing remarks.
+
+00:04:37.794 --> 00:04:39.243
+That's also where we get to thank
+
+00:04:39.244 --> 00:04:40.659
+all the people and organizations
+
+00:04:40.660 --> 00:04:42.549
+who make EmacsConf possible.
+
+00:04:42.550 --> 00:04:44.462
+Let's have fun at EmacsConf!
diff --git a/2025/captions/emacsconf-2025-schemacs--one-year-progress-update-schemacs-formerly-gypsum--ramin-honary--main--chapters.vtt b/2025/captions/emacsconf-2025-schemacs--one-year-progress-update-schemacs-formerly-gypsum--ramin-honary--main--chapters.vtt
new file mode 100644
index 00000000..d266d618
--- /dev/null
+++ b/2025/captions/emacsconf-2025-schemacs--one-year-progress-update-schemacs-formerly-gypsum--ramin-honary--main--chapters.vtt
@@ -0,0 +1,29 @@
+WEBVTT
+
+
+00:02:07.200 --> 00:04:24.759
+The scope of the project
+
+00:04:24.760 --> 00:05:49.719
+Difference with Robin Templeton's project (Guile-Emacs)
+
+00:05:49.720 --> 00:07:28.039
+Progress made since last year
+
+00:07:28.040 --> 00:09:06.039
+Portable React-like GUI
+
+00:09:06.040 --> 00:11:48.699
+Demo
+
+00:11:48.700 --> 00:14:12.019
+Additional changes
+
+00:14:12.020 --> 00:17:06.199
+Other Scheme implementations
+
+00:17:06.200 --> 00:21:51.519
+GUI framework
+
+00:21:51.520 --> 00:23:14.113
+Wrapping up
diff --git a/2025/captions/emacsconf-2025-schemacs--one-year-progress-update-schemacs-formerly-gypsum--ramin-honary--main.vtt b/2025/captions/emacsconf-2025-schemacs--one-year-progress-update-schemacs-formerly-gypsum--ramin-honary--main.vtt
new file mode 100644
index 00000000..ed301c1c
--- /dev/null
+++ b/2025/captions/emacsconf-2025-schemacs--one-year-progress-update-schemacs-formerly-gypsum--ramin-honary--main.vtt
@@ -0,0 +1,1183 @@
+WEBVTT captioned by sachac
+
+00:00:01.060 --> 00:00:05.639
+Hi, EmacsConf 2025. My name is Ramin Honary,
+
+00:00:05.640 --> 00:00:07.559
+and I'd like to talk to you today
+
+00:00:07.560 --> 00:00:10.399
+about my project called Schemacs
+
+00:00:10.400 --> 00:00:12.079
+which I presented last year.
+
+00:00:12.080 --> 00:00:13.879
+Back then it was called "Gypsum"
+
+00:00:13.880 --> 00:00:18.319
+and the name has since changed.
+
+00:00:18.320 --> 00:00:20.239
+So my name is Ramin Honary.
+
+00:00:20.240 --> 00:00:24.999
+I'm an Emacs enthusiast, have been since 2017 or so.
+
+00:00:25.000 --> 00:00:27.759
+I'm a full stack software developer.
+
+00:00:27.760 --> 00:00:29.300
+I love Haskell, Scheme,
+
+00:00:29.301 --> 00:00:31.433
+anything functional programming related,
+
+00:00:31.434 --> 00:00:32.959
+and of course Emacs.
+
+00:00:32.960 --> 00:00:36.199
+I started learning Scheme about three years ago,
+
+00:00:36.200 --> 00:00:37.999
+and this is my third time presenting
+
+00:00:38.000 --> 00:00:40.799
+at EmacsConf.
+
+00:00:40.800 --> 00:00:46.479
+So the Schemacs project that I'm talking to,
+
+00:00:46.480 --> 00:00:48.159
+I'm talking about to you today,
+
+00:00:48.160 --> 00:00:50.279
+was originally called "Gypsum".
+
+00:00:50.280 --> 00:00:53.359
+The reason I did not call it "Schemacs"
+
+00:00:53.360 --> 00:00:58.119
+was that the name "Schemacs" was taken on GitHub.
+
+00:00:58.120 --> 00:00:59.567
+But in the past year,
+
+00:00:59.568 --> 00:01:02.119
+I was able to get the permission
+
+00:01:02.120 --> 00:01:04.479
+of the author of GitHub's Schemacs
+
+00:01:04.480 --> 00:01:08.840
+project to name my project the same thing,
+
+00:01:08.841 --> 00:01:11.320
+even though it's a very similar project.
+
+00:01:11.321 --> 00:01:14.719
+So I changed the name.
+
+00:01:14.720 --> 00:01:19.700
+Let me see if I can quickly show the screen.
+
+00:01:19.701 --> 00:01:24.959
+So yeah, I have archived the old project.
+
+00:01:24.960 --> 00:01:27.719
+It's still there, but there's an explanation in
+
+00:01:27.720 --> 00:01:30.167
+the readme file and a screen grab
+
+00:01:30.168 --> 00:01:31.599
+of the conversation I had
+
+00:01:31.600 --> 00:01:36.119
+with the original author of GitHub Schemacs.
+
+00:01:36.120 --> 00:01:38.679
+My Schemacs is not on GitHub at all.
+
+00:01:38.680 --> 00:01:43.879
+It's only on Codeberg. So please don't get confused.
+
+00:01:43.880 --> 00:01:45.999
+But yes, I received permission
+
+00:01:46.000 --> 00:01:50.199
+to change the name and so I did.
+
+00:01:50.200 --> 00:01:52.839
+And I would like to give a quick shout-out to
+
+00:01:52.840 --> 00:01:57.239
+user "Tusharhero" for helping me with that.
+
+00:01:57.240 --> 00:02:02.639
+This person really helped make that name change happen.
+
+00:02:02.640 --> 00:02:07.199
+So back to the slides.
+
+NOTE The scope of the project
+
+00:02:07.200 --> 00:02:11.319
+And so now I'd like to clarify the scope of the project.
+
+00:02:11.320 --> 00:02:13.000
+I don't think I quite made it clear
+
+00:02:13.001 --> 00:02:14.919
+well enough last year,
+
+00:02:14.920 --> 00:02:18.400
+but... Although I'm definitely cloning
+
+00:02:18.401 --> 00:02:20.167
+the Emacs Lisp programming language,
+
+00:02:20.168 --> 00:02:25.267
+the actual scope of the Schemacs project
+
+00:02:25.268 --> 00:02:29.759
+is to make an Emacs-like app platform for Scheme.
+
+00:02:29.760 --> 00:02:32.959
+I don't consider Emacs to be a text editor.
+
+00:02:32.960 --> 00:02:38.199
+I consider Emacs to be a Lisp app platform.
+
+00:02:38.200 --> 00:02:39.839
+So it's similar to something like the
+
+00:02:39.840 --> 00:02:48.539
+World Wide Web, or Microsoft's .NET app platform, or Java.
+
+00:02:48.540 --> 00:02:52.559
+These are all examples of app platforms.
+
+00:02:52.560 --> 00:02:55.119
+I would like Schemacs to make it easy
+
+00:02:55.120 --> 00:02:59.399
+for not only people to use it for
+
+00:02:59.400 --> 00:03:03.479
+things like editing text or, you know, for
+
+00:03:03.480 --> 00:03:06.439
+using your computer through a command line
+
+00:03:06.440 --> 00:03:10.599
+or manipulating your Git repository.
+
+00:03:10.600 --> 00:03:13.159
+I'd also like you to be able to create simple
+
+00:03:13.160 --> 00:03:16.119
+GUIs or TUIs using Scheme.
+
+00:03:16.120 --> 00:03:19.319
+So that's also one of the goals of this project.
+
+00:03:19.320 --> 00:03:23.079
+It will of course have an Emacs-like text editor,
+
+00:03:23.080 --> 00:03:24.999
+and I will clone Emacs Lisp.
+
+00:03:25.000 --> 00:03:29.879
+So hopefully GNU Emacs users
+
+00:03:29.880 --> 00:03:32.779
+will feel comfortable moving over to Schemacs
+
+00:03:32.780 --> 00:03:35.679
+because they'll be able to use your init.
+
+00:03:35.680 --> 00:03:40.399
+You'll be able to use your init.el file.
+
+00:03:40.400 --> 00:03:43.239
+So configuring and scripting Schemacs
+
+00:03:43.240 --> 00:03:44.479
+should be done in Scheme.
+
+00:03:44.480 --> 00:03:47.679
+I'd like to encourage scripting in Scheme
+
+00:03:47.680 --> 00:03:51.199
+and creating new workflows and macros in Scheme.
+
+00:03:51.200 --> 00:03:54.267
+It will support Emacs Lisp depending on
+
+00:03:54.268 --> 00:03:59.319
+how much of the Emacs Lisp interpreter I can clone.
+
+00:03:59.320 --> 00:04:03.039
+That will be supported but not encouraged.
+
+00:04:03.040 --> 00:04:06.319
+But you should still be able to run your init.el.
+
+00:04:06.320 --> 00:04:08.839
+And I would like it to be good enough,
+
+00:04:08.840 --> 00:04:09.999
+this Emacs Lisp interpreter
+
+00:04:10.000 --> 00:04:12.999
+should be good enough to run packages from ELPA.
+
+00:04:13.000 --> 00:04:15.879
+Although it will probably be some time
+
+00:04:15.880 --> 00:04:17.559
+before it will be able to run
+
+00:04:17.560 --> 00:04:24.759
+something as large as Org Mode or Magit.
+
+NOTE Difference with Robin Templeton's project (Guile-Emacs)
+
+00:04:24.760 --> 00:04:27.439
+It is slightly different from the Guile-Emacs project.
+
+00:04:27.440 --> 00:04:30.333
+This is the work of Robin Templeton
+
+00:04:30.334 --> 00:04:32.219
+who presented last year.
+
+00:04:32.220 --> 00:04:36.033
+Guile-Emacs links the Guile runtime
+
+00:04:36.034 --> 00:04:38.500
+into the Emacs executable.
+
+00:04:38.501 --> 00:04:41.580
+It's not a Scheme application. Emacs,
+
+00:04:41.581 --> 00:04:44.200
+the core of Emacs is written in C.
+
+00:04:44.201 --> 00:04:48.120
+Guile, the core of Guile is written in C.
+
+00:04:48.121 --> 00:04:53.700
+What Robin Templeton has done is, at the C level, linked
+
+00:04:53.701 --> 00:04:56.833
+"libguile.so" into Emacs and then provided
+
+00:04:56.834 --> 00:04:59.500
+a programming layer where you can
+
+00:04:59.501 --> 00:05:04.759
+call the Scheme interpreter from Emacs Lisp
+
+00:05:04.760 --> 00:05:11.279
+so that you can run Scheme programs from within Emacs
+
+00:05:11.280 --> 00:05:13.919
+without having to launch a separate process
+
+00:05:13.920 --> 00:05:18.039
+and communicate over a channel such as a socket.
+
+00:05:18.040 --> 00:05:19.839
+You won't need "SLIME" or anything.
+
+00:05:19.840 --> 00:05:23.419
+The Guile interpreter is just right there inside of Emacs.
+
+00:05:23.420 --> 00:05:25.999
+But my project is not like this at all.
+
+00:05:26.000 --> 00:05:28.879
+Schemacs is written completely from the ground up
+
+00:05:28.880 --> 00:05:34.999
+in R7RS-compliant Scheme. And because it's R7RS-compliant,
+
+00:05:35.000 --> 00:05:37.999
+it's not bound to any one particular Scheme implementation,
+
+00:05:38.000 --> 00:05:39.879
+although Guile is the reference implementation.
+
+00:05:39.880 --> 00:05:42.359
+One goal of this project is to be able to run
+
+00:05:42.360 --> 00:05:49.719
+Schemacs on any R7RS-compliant Scheme implementation.
+
+NOTE Progress made since last year
+
+00:05:49.720 --> 00:05:56.259
+The work that I've done this past year mostly is internal.
+
+00:05:56.260 --> 00:06:00.939
+There's not much that you can see on the surface.
+
+00:06:00.940 --> 00:06:04.519
+But the most... One of the most important things that I
+
+00:06:04.520 --> 00:06:06.839
+did was I rewrote the parser in R7RS Scheme,
+
+00:06:06.840 --> 00:06:07.919
+so it no longer depends on
+
+00:06:07.920 --> 00:06:11.999
+the Guile regular expressions library.
+
+00:06:12.000 --> 00:06:14.959
+The parser now also provides source locations,
+
+00:06:14.960 --> 00:06:18.939
+so if an error occurs in Emacs Lisp,
+
+00:06:18.940 --> 00:06:20.567
+there will be a stack trace
+
+00:06:20.568 --> 00:06:23.633
+and it will show you where in the source code
+
+00:06:23.634 --> 00:06:28.319
+the error occured. This was not possible last year.
+
+00:06:28.320 --> 00:06:30.860
+And because it no longer depends on Guile,
+
+00:06:30.861 --> 00:06:34.520
+I can make it work on multiple Scheme implementations.
+
+00:06:34.521 --> 00:06:36.820
+So far, I've been able to get it to run on
+
+00:06:36.821 --> 00:06:38.920
+the Chibi Scheme interpreter
+
+00:06:38.921 --> 00:06:41.280
+and the Gauche Scheme interpreter, as well as
+
+00:06:41.281 --> 00:06:44.279
+Guile, which is the reference implementation.
+
+00:06:44.280 --> 00:06:48.559
+For a short time, it did work also on Chez Scheme,
+
+00:06:48.560 --> 00:06:53.179
+the Chez Scheme compiler, using Gwen Weinholt's "Akku,"
+
+00:06:53.180 --> 00:06:59.299
+which is a program that translates R7RS Scheme to R6RS Scheme.
+
+00:06:59.300 --> 00:07:04.519
+And with that translation, because Chez Scheme
+
+00:07:04.520 --> 00:07:07.319
+is pretty strictly an R6RS compiler,
+
+00:07:07.320 --> 00:07:11.519
+the translation allows you to run R7RS programs.
+
+00:07:11.520 --> 00:07:15.219
+But due to some change, I'm not sure where,
+
+00:07:15.220 --> 00:07:17.119
+it may have been changed in the Schemacs source code,
+
+00:07:17.120 --> 00:07:19.639
+or it may have been a change to Akku,
+
+00:07:19.640 --> 00:07:21.239
+but it no longer builds on Chez.
+
+00:07:21.240 --> 00:07:28.039
+It did at one point. I'd like to try to fix that.
+
+NOTE Portable React-like GUI
+
+00:07:28.040 --> 00:07:30.719
+The second most important thing that I've worked on is a
+
+00:07:30.720 --> 00:07:36.439
+portable React-like GUI. And so React,
+
+00:07:36.440 --> 00:07:40.999
+for anyone who has done web programming,
+
+00:07:41.000 --> 00:07:46.839
+is a very popular framework for programming web applications.
+
+00:07:46.840 --> 00:07:48.233
+And I've provided something
+
+00:07:48.234 --> 00:07:49.599
+very similar to that in Scheme now.
+
+00:07:49.600 --> 00:07:54.679
+So it works. I have constructed a DOM data structure
+
+00:07:54.680 --> 00:07:59.079
+in Scheme. It's just an ordinary Scheme data structure.
+
+00:07:59.080 --> 00:08:01.519
+It works like the web's "Document Object Model"
+
+00:08:01.520 --> 00:08:03.960
+or the "DOM" data structure.
+
+00:08:03.961 --> 00:08:09.999
+And then this Scheme DOM data structure can be rendered
+
+00:08:10.000 --> 00:08:13.059
+using any GUI framework that is convenient
+
+00:08:13.060 --> 00:08:16.239
+for the Scheme implementation that you're targeting.
+
+00:08:16.240 --> 00:08:18.879
+And you should be able to implement
+
+00:08:18.880 --> 00:08:22.919
+also rendering to a CLI as well.
+
+00:08:22.920 --> 00:08:24.600
+The current reference implementation
+
+00:08:24.601 --> 00:08:27.759
+is using a framework called Guile-GI.
+
+00:08:27.760 --> 00:08:30.639
+This is the "GObject Introspection" framework.
+
+00:08:30.640 --> 00:08:31.967
+It's a very simple
+
+00:08:31.968 --> 00:08:36.119
+GObject Introspection framework for Guile,
+
+00:08:36.120 --> 00:08:40.979
+and it binds to GTK3 on Linux.
+
+00:08:40.980 --> 00:08:42.919
+There's a similar framework called G-Golf
+
+00:08:42.920 --> 00:08:48.359
+which I'd like to begin using as well, also for Guile.
+
+00:08:48.360 --> 00:08:53.739
+G-Golf seems to be a bit more well-maintained, a bit...
+
+00:08:53.740 --> 00:08:57.799
+It has better features. G-Golf may be a
+
+00:08:57.800 --> 00:09:00.039
+better rendering backend for the reference
+
+00:09:00.040 --> 00:09:06.039
+implementation, but I would like to provide both.
+
+NOTE Demo
+
+00:09:06.040 --> 00:09:07.933
+I will give a demo of this now.
+
+00:09:07.934 --> 00:09:12.999
+Unfortunately not a whole lot
+
+00:09:13.000 --> 00:09:18.139
+to see compared to last year.
+
+00:09:18.140 --> 00:09:20.639
+First thing I'd like to show is
+
+00:09:20.640 --> 00:09:24.279
+that I now have a Makefile. You can look inside
+
+00:09:24.280 --> 00:09:28.400
+this Makefile and if you're able to read a Makefile,
+
+00:09:28.401 --> 00:09:31.967
+you can see that I have several targets now available.
+
+00:09:31.968 --> 00:09:35.000
+You can build Schemacs for Guile,
+
+00:09:35.001 --> 00:09:36.667
+you can build Schemacs for Gambit,
+
+00:09:36.668 --> 00:09:40.333
+or Stklos, or Chicken, or Chez,
+
+00:09:40.334 --> 00:09:42.900
+although none of these (except for Guile)
+
+00:09:42.901 --> 00:09:51.167
+currently works. These targets will actually
+
+00:09:51.168 --> 00:09:56.000
+build the source code, but then you would have to
+
+00:09:56.001 --> 00:09:59.433
+load it into the REPL separately.
+
+00:09:59.434 --> 00:10:02.467
+There are targets for launching
+
+00:10:02.468 --> 00:10:06.467
+a Gauche REPL and a Chibi REPL.
+
+00:10:06.468 --> 00:10:10.867
+You can also run the Emacs Lisp tests
+
+00:10:10.868 --> 00:10:13.067
+in Gauche and Chibi.
+
+00:10:13.068 --> 00:10:19.079
+You can also start a Guile REPL through this Makefile.
+
+00:10:19.080 --> 00:10:27.499
+So I will do that right now in the shell.
+
+00:10:27.500 --> 00:10:31.833
+(...make the text larger...there we go...)
+
+00:10:31.834 --> 00:10:38.479
+OK, so we have this directory of the source code.
+
+00:10:38.480 --> 00:10:44.559
+Let's just begin by running "guile.sh".
+
+00:10:44.560 --> 00:10:52.600
+This will launch a REPL and you can load "main-guile".
+
+00:10:52.601 --> 00:10:59.719
+This will launch the GUI. This is the basic
+
+00:10:59.720 --> 00:11:04.800
+proof of concept GUI that uses Guile-GI.
+
+00:11:04.801 --> 00:11:10.519
+So it may be hard to see.
+
+00:11:10.520 --> 00:11:14.559
+I cannot change the size of the text yet.
+
+00:11:14.560 --> 00:11:17.333
+I've implemented the M-: feature
+
+00:11:17.334 --> 00:11:24.067
+where you can eval in a minibuffer some Scheme code.
+
+00:11:24.068 --> 00:11:34.439
+(string-append "hello" ...)
+
+00:11:34.440 --> 00:11:38.279
+It outputs the result in the buffer.
+
+00:11:38.280 --> 00:11:40.959
+This is basically the "*Messages*" buffer.
+
+00:11:40.960 --> 00:11:42.619
+And that's all the more that I have.
+
+00:11:42.620 --> 00:11:45.479
+This is the same state it was in last year.
+
+00:11:45.480 --> 00:11:48.699
+It hasn't changed a whole lot since back then.
+
+NOTE Additional changes
+
+00:11:48.700 --> 00:11:52.819
+But I have made additional changes.
+
+00:11:52.820 --> 00:12:05.379
+So first of all, you can run
+
+00:12:05.380 --> 00:12:10.200
+(let me just go back into the Guile)... you can
+
+00:12:10.201 --> 00:12:16.619
+run the Emacs Lisp interpreter tests, so "elisp-tests".
+
+00:12:16.620 --> 00:12:18.919
+As you can see, it gives you a stack trace.
+
+00:12:18.920 --> 00:12:22.039
+So this is an error that I've been able to reproduce.
+
+00:12:22.040 --> 00:12:24.599
+I know exactly what the cause of this error is.
+
+00:12:24.600 --> 00:12:27.599
+It is not finding a variable
+
+00:12:27.600 --> 00:12:30.319
+because the closure is not correctly
+
+00:12:30.320 --> 00:12:35.199
+capturing its environment. So there should be a variable
+
+00:12:35.200 --> 00:12:38.719
+in the closure, but that variable has not been captured
+
+00:12:38.720 --> 00:12:43.459
+and so it is causing an error.
+
+00:12:43.460 --> 00:12:48.080
+It is currently loading "byte-run.el".
+
+00:12:48.081 --> 00:12:49.820
+Let me show you what code that is here.
+
+00:12:49.821 --> 00:12:53.500
+So I've copied into the source repository
+
+00:12:53.501 --> 00:12:58.760
+for Schemacs some of the Elisp code from GNU Emacs.
+
+00:12:58.761 --> 00:13:04.420
+So I have this "subr.el".
+
+00:13:04.421 --> 00:13:09.860
+This declares most of the core of Emacs Lisp
+
+00:13:09.861 --> 00:13:12.860
+that's not written in C.
+
+00:13:12.861 --> 00:13:18.999
+There's also "byte-run.el". Schemacs Emacs Lisp can now
+
+00:13:19.000 --> 00:13:24.379
+evaluate this. This is where functions like "defun" are
+
+00:13:24.380 --> 00:13:28.359
+defined, and "defmacro". So as you can see,
+
+00:13:28.360 --> 00:13:30.799
+defun itself is a defmacro defined right here.
+
+00:13:30.800 --> 00:13:34.859
+It's written in Emacs Lisp itself,
+
+00:13:34.860 --> 00:13:37.719
+defined in terms of defalias.
+
+00:13:37.720 --> 00:13:40.239
+So I can evaluate "byte-run",
+
+00:13:40.240 --> 00:13:42.739
+I can evaluate "macroexp",
+
+00:13:42.740 --> 00:13:46.019
+and the failure occurs somewhere in "subr.el".
+
+00:13:46.020 --> 00:13:48.959
+Although if you look at the stack trace,
+
+00:13:48.960 --> 00:13:51.159
+it doesn't provide all the necessary information.
+
+00:13:51.160 --> 00:13:56.439
+So it appears to be happening in byte-run.el.
+
+00:13:56.440 --> 00:14:00.619
+Really, it's an error that's occurring inside of a macro,
+
+00:14:00.620 --> 00:14:05.799
+and the macro call site is somewhere in subr.el.
+
+00:14:05.800 --> 00:14:08.639
+Anyway, take note of this stack trace.
+
+00:14:08.640 --> 00:14:12.019
+This was run from within Guile.
+
+NOTE Other Scheme implementations
+
+00:14:12.020 --> 00:14:14.199
+Now what I've done this past year
+
+00:14:14.200 --> 00:14:19.479
+is make it work on other Scheme implementations.
+
+00:14:19.480 --> 00:14:23.833
+Use "make" to launch a Gauche REPL.
+
+00:14:23.834 --> 00:14:25.999
+Now I'm inside of Gauche.
+
+00:14:26.000 --> 00:14:27.233
+This is the command that
+
+00:14:27.234 --> 00:14:30.079
+you would use to launch a Gauche REPL.
+
+00:14:30.080 --> 00:14:38.199
+And I can load the same program (load "elisp-tests.scm").
+
+00:14:38.200 --> 00:14:42.759
+You get the exact same result as Guile.
+
+00:14:42.760 --> 00:14:45.799
+So we have two different Scheme implementations
+
+00:14:45.800 --> 00:14:46.799
+producing the same result.
+
+00:14:46.800 --> 00:14:53.079
+Let's try "make" a Chibi REPL. This is Chibi Scheme.
+
+00:14:53.080 --> 00:15:00.219
+And you can (load "elisp-tests.scm").
+
+00:15:00.220 --> 00:15:04.080
+Chibi is a bit slower, but you get the exact same result.
+
+00:15:04.081 --> 00:15:07.400
+So we have three different Scheme implementations
+
+00:15:07.401 --> 00:15:11.539
+all running Emacs Lisp,
+
+00:15:11.540 --> 00:15:14.039
+and all producing the same result.
+
+00:15:14.040 --> 00:15:14.767
+I think that's...
+
+00:15:14.768 --> 00:15:17.099
+I'm fairly proud of that accomplishment.
+
+00:15:17.100 --> 00:15:21.200
+I was able to get the code written to the point
+
+00:15:21.201 --> 00:15:24.879
+where it actually runs on multiple implementations.
+
+00:15:24.880 --> 00:15:30.599
+You can also try making it for other Scheme compilers
+
+00:15:30.600 --> 00:15:35.959
+like "schemacs-mitscheme" for example,
+
+00:15:35.960 --> 00:15:40.019
+but this will fail.
+
+00:15:40.020 --> 00:15:46.679
+You can try building it for "schemacs-chez",
+
+00:15:46.680 --> 00:15:51.800
+Let's try Chez... there we go.
+
+00:15:51.801 --> 00:15:54.233
+And it will use Akku,
+
+00:15:54.234 --> 00:15:58.000
+and it will fetch the necessary dependencies.
+
+00:15:58.001 --> 00:16:03.433
+But it fails, and I haven't been able to
+
+00:16:03.434 --> 00:16:05.959
+debug that quite yet.
+
+00:16:05.960 --> 00:16:13.139
+Stklos fails for a similar reason.
+
+00:16:13.140 --> 00:16:21.699
+Gambit... Chicken still doesn't build all the way yet.
+
+00:16:21.700 --> 00:16:27.120
+The Makefile at least has places for it.
+
+00:16:27.121 --> 00:16:30.967
+If anyone can help me out and get Schemacs to compile
+
+00:16:30.968 --> 00:16:32.733
+on these other Scheme implementations,
+
+00:16:32.734 --> 00:16:34.000
+I'd appreciate it.
+
+00:16:34.001 --> 00:16:35.467
+I can probably figure it out myself,
+
+00:16:35.468 --> 00:16:37.000
+but that will take more time.
+
+00:16:37.001 --> 00:16:40.120
+And let me just show you quickly
+
+00:16:40.121 --> 00:16:41.720
+the test program.
+
+00:16:41.721 --> 00:16:44.500
+Basically this is the Emacs Lisp test program
+
+00:16:44.501 --> 00:16:48.580
+that I was just running, and it produces an error.
+
+00:16:48.581 --> 00:16:53.220
+All it does is it loads these files here in this order,
+
+00:16:53.221 --> 00:16:55.180
+and it fails right around here.
+
+00:16:55.181 --> 00:16:58.319
+So it's able to load these two.
+
+00:16:58.320 --> 00:17:01.360
+And yeah, that's what I've accomplished
+
+00:17:01.361 --> 00:17:06.199
+on the Emacs Lisp side of things.
+
+NOTE GUI framework
+
+00:17:06.200 --> 00:17:09.119
+The next thing I want to show you is the GUI framework
+
+00:17:09.120 --> 00:17:13.199
+that I've written, which I'm fairly proud of so far.
+
+00:17:13.200 --> 00:17:15.833
+So this is the GUI framework
+
+00:17:15.834 --> 00:17:19.919
+(oops, I better launch it again, OK...)
+
+00:17:19.920 --> 00:17:22.600
+and let me show you the tests.
+
+00:17:22.601 --> 00:17:25.700
+So here in the tests, you can start to see
+
+00:17:25.701 --> 00:17:29.067
+some examples of how you use it.
+
+00:17:29.068 --> 00:17:31.833
+So here is a "counter" test, and this is kind of like
+
+00:17:31.834 --> 00:17:35.940
+the "hello world" of reactive programming frameworks,
+
+00:17:35.941 --> 00:17:38.000
+where you have a state variable,
+
+00:17:38.200 --> 00:17:41.659
+sometimes called an "observable."
+
+00:17:41.660 --> 00:17:43.439
+I'm calling it "number",
+
+00:17:43.440 --> 00:17:47.838
+and it uses "=" to check if the state has updated.
+
+00:17:49.000 --> 00:17:52.820
+If an update occurs and the new value is different
+
+00:17:52.821 --> 00:17:55.032
+from the old value according to the "=" function,
+
+00:17:55.033 --> 00:17:59.232
+then trigger a state update in the GUI as well.
+
+00:17:59.233 --> 00:18:03.099
+Initialize to 0, bound to "number".
+
+00:18:03.100 --> 00:18:06.132
+I have a "button" function which creates a simple button.
+
+00:18:06.133 --> 00:18:07.832
+It takes a label and an action.
+
+00:18:07.833 --> 00:18:10.865
+Right here you see the "div" command.
+
+00:18:10.866 --> 00:18:13.039
+This is what creates a "div".
+
+00:18:13.040 --> 00:18:18.999
+Using the properties, I describe that this div is a
+
+00:18:19.000 --> 00:18:22.599
+push-button and the "on-button-push" is an action.
+
+00:18:22.600 --> 00:18:25.265
+The action is to update the variable "number"
+
+00:18:25.266 --> 00:18:30.399
+using whatever function or lambda was provided to it.
+
+00:18:30.400 --> 00:18:31.965
+And then the content that you see on screen,
+
+00:18:31.966 --> 00:18:34.033
+that you will see on screen when it runs,
+
+00:18:34.034 --> 00:18:38.667
+is here. You create a "div-pack cut-vertical".
+
+00:18:38.668 --> 00:18:43.233
+You declare two buttons and then you declare
+
+00:18:43.234 --> 00:18:46.800
+this "use-vars" which will take the content
+
+00:18:46.801 --> 00:18:48.833
+of this variable here, this observable,
+
+00:18:48.834 --> 00:18:51.733
+and place it into the GUI next to the buttons here.
+
+00:18:51.734 --> 00:18:54.233
+So what you will see on screen is
+
+00:18:54.234 --> 00:18:57.067
+a "plus" button which increments,
+
+00:18:57.068 --> 00:18:59.320
+here is the "increment" function,
+
+00:18:59.321 --> 00:19:02.779
+a "minus" button which decrements,
+
+00:19:02.780 --> 00:19:05.479
+and then the content of the variable that is
+
+00:19:05.480 --> 00:19:09.699
+being incremented and decremented.
+
+00:19:09.700 --> 00:19:11.865
+The advantage of these reactive frameworks is that
+
+00:19:11.866 --> 00:19:13.065
+with very few lines of code
+
+00:19:13.066 --> 00:19:16.032
+you can create fairly complex interfaces.
+
+00:19:16.033 --> 00:19:18.599
+The less code you have to write,
+
+00:19:18.600 --> 00:19:21.232
+the fewer chances you have to make mistakes.
+
+00:19:21.233 --> 00:19:23.967
+So let's just run this program.
+
+00:19:23.968 --> 00:19:33.292
+This was the "counter-test."
+
+00:19:33.293 --> 00:19:35.199
+And that is the debug window. Here's the "counter."
+
+00:19:35.200 --> 00:19:38.452
+I'm sorry it's not much larger than this.
+
+00:19:38.453 --> 00:19:41.132
+But here's the "plus" button, the "minus" button,
+
+00:19:41.133 --> 00:19:43.919
+and here's the "number", 0.
+
+00:19:43.920 --> 00:19:49.792
+And I can increment or decrement as much as I like.
+
+00:19:49.793 --> 00:19:51.100
+So yeah, that's kind of the hello world
+
+00:19:51.101 --> 00:19:55.239
+of reactive programming. (I'll reboot the REPL...)
+
+00:19:55.240 --> 00:19:58.599
+The next thing I want to show you is this layout test.
+
+00:19:58.600 --> 00:20:02.192
+And I'll just run the test first.
+
+00:20:02.193 --> 00:20:05.019
+So here we have basically
+
+00:20:05.020 --> 00:20:08.539
+a tiling window manager kind of thing,
+
+00:20:08.540 --> 00:20:11.279
+where you can resize the tiles
+
+00:20:11.280 --> 00:20:12.933
+and then by clicking on these buttons here,
+
+00:20:12.934 --> 00:20:16.939
+you can change the layout.
+
+00:20:16.940 --> 00:20:20.167
+So you can do two on the right,
+
+00:20:20.168 --> 00:20:27.100
+two up above, or three up above. So, yeah.
+
+00:20:27.101 --> 00:20:30.267
+Those tiling windows, as you can see,
+
+00:20:30.268 --> 00:20:33.000
+once I work this branch into the main branch of Schemacs,
+
+00:20:33.001 --> 00:20:35.273
+I can use that to implement
+
+00:20:35.274 --> 00:20:38.265
+the split window functionality for Schemacs,
+
+00:20:38.266 --> 00:20:42.466
+the editor. So here's what this split...
+
+00:20:42.466 --> 00:20:44.865
+Here's the layout test that you just saw.
+
+00:20:44.866 --> 00:20:46.732
+Let me make it a bit smaller
+
+00:20:46.733 --> 00:20:48.199
+so that it all fits on one screen.
+
+00:20:48.200 --> 00:20:51.365
+So basically we have the "button" command again,
+
+00:20:51.366 --> 00:20:54.132
+and then these are the button actions
+
+00:20:54.133 --> 00:20:56.999
+which basically just changes the layout,
+
+00:20:57.000 --> 00:21:01.459
+and then I have the layout. So this layout is a "div."
+
+00:21:01.460 --> 00:21:04.919
+The first div just places three buttons in a row.
+
+00:21:04.920 --> 00:21:07.532
+The next layout is a div within a div.
+
+00:21:07.533 --> 00:21:12.999
+So we have one div which places the button
+
+00:21:13.000 --> 00:21:18.632
+called "two right" buttons, and the div above it,
+
+00:21:18.633 --> 00:21:21.492
+which places the "three in a row" button
+
+00:21:21.493 --> 00:21:22.660
+or the "two above" buttons.
+
+00:21:22.661 --> 00:21:26.000
+And here's the next... So there's three different
+
+00:21:26.001 --> 00:21:30.600
+layouts, and clicking on one of their associated buttons
+
+00:21:30.601 --> 00:21:32.100
+will just change the layout.
+
+00:21:32.101 --> 00:21:33.433
+As you can see, very little code
+
+00:21:33.434 --> 00:21:38.500
+to create a somewhat complex user interface.
+
+00:21:38.501 --> 00:21:42.867
+That's the advantage of using reactive or declarative
+
+00:21:42.868 --> 00:21:44.233
+UI programming paradigms.
+
+00:21:44.234 --> 00:21:47.232
+So yeah, this has not been merged into Schemacs
+
+00:21:47.233 --> 00:21:48.700
+at the time of this recording,
+
+00:21:48.701 --> 00:21:51.519
+but will be soon hopefully.
+
+NOTE Wrapping up
+
+00:21:51.520 --> 00:21:55.165
+So yeah, I think I've already gone on for 20 minutes.
+
+00:21:55.166 --> 00:21:59.139
+So I guess I'll just end my presentation here.
+
+00:21:59.140 --> 00:22:00.465
+I have lots more to talk about.
+
+00:22:00.466 --> 00:22:03.979
+I guess I will say one last thing before I go:
+
+00:22:03.980 --> 00:22:07.065
+that I would very much like for others
+
+00:22:07.066 --> 00:22:09.199
+to try and contribute to this project.
+
+00:22:09.200 --> 00:22:14.232
+I will do my best to try and help teach anybody
+
+00:22:14.233 --> 00:22:16.832
+or work with anybody, especially even
+
+00:22:16.833 --> 00:22:18.599
+if you don't have much experience with Scheme.
+
+00:22:18.600 --> 00:22:22.759
+I'd like to help everybody try to contribute.
+
+00:22:22.760 --> 00:22:26.239
+Basically I want to get this proof of concept working.
+
+00:22:26.240 --> 00:22:30.673
+I want to get a stable user interface up and running,
+
+00:22:30.674 --> 00:22:33.065
+and then we can start working on
+
+00:22:33.066 --> 00:22:36.699
+improving the Emacs Lisp interpreter all together.
+
+00:22:36.700 --> 00:22:41.065
+There are close to 1,400 built-in functions
+
+00:22:41.066 --> 00:22:43.659
+which need to be implemented.
+
+00:22:43.660 --> 00:22:44.965
+We don't need to get all of them
+
+00:22:44.966 --> 00:22:48.465
+in order to be able to run probably most of ELPA,
+
+00:22:48.466 --> 00:22:50.865
+but as much as possible.
+
+00:22:50.866 --> 00:22:54.799
+We would like to clone Emacs Lisp and I need help.
+
+00:22:54.800 --> 00:23:02.579
+So get a hold of me. My project is on Codeberg.
+
+00:23:02.580 --> 00:23:06.919
+Well, (oh, I can't show this here),
+
+00:23:06.920 --> 00:23:14.113
+but I will end it there. Thank you for listening.
diff --git a/2025/captions/emacsconf-2025-sun-open--sunday-opening-remarks--main--chapters.vtt b/2025/captions/emacsconf-2025-sun-open--sunday-opening-remarks--main--chapters.vtt
new file mode 100644
index 00000000..af2b588c
--- /dev/null
+++ b/2025/captions/emacsconf-2025-sun-open--sunday-opening-remarks--main--chapters.vtt
@@ -0,0 +1,41 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:00:15.999
+Tracks
+
+00:00:16.000 --> 00:01:00.606
+Watching and participating
+
+00:01:00.607 --> 00:01:10.600
+Other schedule formats
+
+00:01:10.601 --> 00:01:46.035
+BigBlueButton
+
+00:01:46.036 --> 00:02:03.216
+On and off the stream
+
+00:02:03.217 --> 00:02:25.455
+Etherpad and IRC
+
+00:02:25.456 --> 00:02:59.439
+Etherpad
+
+00:02:59.440 --> 00:03:32.777
+IRC
+
+00:03:32.778 --> 00:03:55.237
+Captions
+
+00:03:55.238 --> 00:04:07.281
+status.emacsconf.org
+
+00:04:07.282 --> 00:04:16.019
+Guidelines for conduct
+
+00:04:16.020 --> 00:04:26.775
+Videos
+
+00:04:26.776 --> 00:04:49.323
+Let's get started!
diff --git a/2025/captions/emacsconf-2025-sun-open--sunday-opening-remarks--main.vtt b/2025/captions/emacsconf-2025-sun-open--sunday-opening-remarks--main.vtt
new file mode 100644
index 00000000..d6a7d98c
--- /dev/null
+++ b/2025/captions/emacsconf-2025-sun-open--sunday-opening-remarks--main.vtt
@@ -0,0 +1,376 @@
+WEBVTT
+
+
+NOTE Tracks
+
+00:00:00.000 --> 00:00:02.246
+Welcome to EmacsConf, where we have fun
+
+00:00:02.247 --> 00:00:05.484
+exploring just how much we can do with a text editor.
+
+00:00:05.485 --> 00:00:07.924
+There's a General track and a Development track,
+
+00:00:07.925 --> 00:00:09.483
+but really, you'll probably find
+
+00:00:09.484 --> 00:00:11.078
+interesting things on both tracks
+
+00:00:11.079 --> 00:00:13.215
+no matter what your level of experience is,
+
+00:00:13.216 --> 00:00:15.999
+so don't feel limited to one or the other.
+
+NOTE Watching and participating
+
+00:00:16.000 --> 00:00:19.392
+The best parts of EmacsConf are the conversations.
+
+00:00:19.393 --> 00:00:22.485
+The wiki has a page on how to watch and participate,
+
+00:00:22.486 --> 00:00:24.909
+and I'll give you a quick overview as well.
+
+00:00:24.910 --> 00:00:28.884
+You can watch both streams at live.emacsconf.org
+
+00:00:28.885 --> 00:00:31.185
+using free and open source software.
+
+00:00:31.186 --> 00:00:34.387
+Using a streaming media player like mpv
+
+00:00:34.388 --> 00:00:37.274
+seems to be the best way to watch in terms of performance
+
+00:00:37.275 --> 00:00:39.240
+but there are also web-based players
+
+00:00:39.241 --> 00:00:41.377
+just in case that's all you've got.
+
+00:00:41.378 --> 00:00:44.063
+The schedule shows the General track on top
+
+00:00:44.064 --> 00:00:45.602
+and the Development track on the bottom,
+
+00:00:45.603 --> 00:00:47.819
+so you can see what else is going on.
+
+00:00:47.820 --> 00:00:49.818
+As you're watching the talks,
+
+00:00:49.819 --> 00:00:52.354
+you can refer to the schedule in another window.
+
+00:00:52.355 --> 00:00:55.600
+Hover over the boxes to see the times and titles,
+
+00:00:55.601 --> 00:00:57.613
+and click on the boxes in the schedule
+
+00:00:57.614 --> 00:01:00.606
+to jump to the talk's page for more details.
+
+NOTE Other schedule formats
+
+00:01:00.607 --> 00:01:03.586
+You can also get the schedule as an iCalendar file
+
+00:01:03.587 --> 00:01:05.620
+or as an Org file in different time zones.
+
+00:01:05.621 --> 00:01:08.254
+The Org file has some links to talk resources
+
+00:01:08.255 --> 00:01:10.600
+and might be handy as a starting point for your notes.
+
+NOTE BigBlueButton
+
+00:01:10.601 --> 00:01:12.144
+Many talks will be followed by
+
+00:01:12.145 --> 00:01:14.571
+live Q&A web conferences with the speaker,
+
+00:01:14.572 --> 00:01:17.733
+which will be done in BigBlueButton or BBB.
+
+00:01:17.734 --> 00:01:20.818
+These are indicated with a solid border on the schedule
+
+00:01:20.819 --> 00:01:24.000
+and by Q&A: BBB on the schedule page.
+
+00:01:24.001 --> 00:01:25.900
+You can join the web conference room
+
+00:01:25.901 --> 00:01:27.466
+by clicking on the BBB link
+
+00:01:27.467 --> 00:01:30.175
+on the schedule page or the talk's webpage.
+
+00:01:30.176 --> 00:01:34.214
+Then you can ask your questions yourself when the Q&A starts.
+
+00:01:34.215 --> 00:01:37.210
+To improve performance, please keep your webcam off
+
+00:01:37.211 --> 00:01:39.889
+and stay muted until it's your turn to talk.
+
+00:01:39.890 --> 00:01:41.691
+If you don't like Javascript,
+
+00:01:41.692 --> 00:01:43.642
+you can still ask questions via IRC
+
+00:01:43.643 --> 00:01:46.035
+and the hosts can read them out for you.
+
+NOTE On and off the stream
+
+00:01:46.036 --> 00:01:47.894
+We're probably going to automatically switch
+
+00:01:47.895 --> 00:01:49.482
+between talks and Q&A sessions,
+
+00:01:49.483 --> 00:01:52.896
+so the transitions on the stream might be a little sudden.
+
+00:01:52.897 --> 00:01:54.438
+People in the BigBlueButton room
+
+00:01:54.439 --> 00:01:55.861
+can continue the conversation
+
+00:01:55.862 --> 00:01:58.219
+even after the talk moves off-stream,
+
+00:01:58.220 --> 00:02:00.270
+and you can also reach out to the speakers
+
+00:02:00.271 --> 00:02:03.216
+using the contact information on the talk page.
+
+NOTE Etherpad and IRC
+
+00:02:03.217 --> 00:02:06.301
+Other talks will have Q&A via Etherpad or IRC,
+
+00:02:06.302 --> 00:02:08.541
+depending on what the speakers prefer.
+
+00:02:08.542 --> 00:02:11.379
+This is indicated in the schedule with a dashed border
+
+00:02:11.380 --> 00:02:13.509
+and on the schedule page as well.
+
+00:02:13.510 --> 00:02:16.542
+The schedule pages have quick shortcuts so that you can
+
+00:02:16.543 --> 00:02:19.052
+find out more about talks, open the Etherpads,
+
+00:02:19.053 --> 00:02:21.203
+and join the Q&A sessions.
+
+00:02:21.204 --> 00:02:23.365
+The watch page has more tips
+
+00:02:23.366 --> 00:02:25.455
+on how to make the most of Q&A.
+
+NOTE Etherpad
+
+00:02:25.456 --> 00:02:28.329
+If you can, please add notes and ask questions
+
+00:02:28.330 --> 00:02:30.132
+in the Etherpad for the talk.
+
+00:02:30.133 --> 00:02:31.597
+That makes it easier
+
+00:02:31.598 --> 00:02:33.129
+for everyone to share their notes,
+
+00:02:33.130 --> 00:02:36.354
+and speakers and hosts can read the questions from there.
+
+00:02:36.355 --> 00:02:39.621
+We'll copy the notes to the talk pages afterwards.
+
+00:02:39.622 --> 00:02:41.496
+We have one pad for each talk,
+
+00:02:41.497 --> 00:02:43.772
+so you can follow the links to get to the next one
+
+00:02:43.773 --> 00:02:46.827
+or go back to the schedule and get the link from there.
+
+00:02:46.828 --> 00:02:48.422
+If you have general feedback about
+
+00:02:48.423 --> 00:02:50.667
+the conference itself, please put it in
+
+00:02:50.668 --> 00:02:54.592
+pad.emacsconf.org/emacsconf.
+
+00:02:54.593 --> 00:02:57.549
+You can also use this as a community message board
+
+00:02:57.550 --> 00:02:59.439
+for things like Help Wanted.
+
+NOTE IRC
+
+00:02:59.440 --> 00:03:02.799
+Internet Relay Chat or IRC can be another great way
+
+00:03:02.800 --> 00:03:05.175
+to be part of lots of conversations.
+
+00:03:05.176 --> 00:03:09.450
+You can use chat.emacsconf.org to join the IRC channels
+
+00:03:09.451 --> 00:03:11.045
+through your web browser.
+
+00:03:11.046 --> 00:03:12.856
+The tabs on the left can help you
+
+00:03:12.857 --> 00:03:14.891
+switch between the different channels.
+
+00:03:14.892 --> 00:03:17.610
+There's #emacsconf-gen for the General track
+
+00:03:17.611 --> 00:03:20.489
+and #emacsconf-dev for the Development track.
+
+00:03:20.490 --> 00:03:23.956
+If you need to reach us, you can join #emacsconf-org
+
+00:03:23.957 --> 00:03:29.474
+or e-mail emacsconf-org-private@gnu.org.
+
+00:03:29.475 --> 00:03:32.777
+You can use #emacsconf for hallway conversations.
+
+NOTE Captions
+
+00:03:32.778 --> 00:03:35.587
+Once again, we're going to be streaming with open captions
+
+00:03:35.588 --> 00:03:38.479
+for most of the talks this year, thanks to our speakers and
+
+00:03:38.480 --> 00:03:39.895
+captioning volunteers.
+
+00:03:39.896 --> 00:03:42.522
+The captioned talks are indicated on the schedule,
+
+00:03:42.523 --> 00:03:44.312
+and with any luck, we'll be posting
+
+00:03:44.313 --> 00:03:46.123
+videos and transcripts on talk pages
+
+00:03:46.124 --> 00:03:47.883
+shortly after the talks start.
+
+00:03:47.884 --> 00:03:51.069
+If you need additional accommodations, please let us know
+
+00:03:51.070 --> 00:03:54.016
+in #emacsconf-org and we'll see
+
+00:03:54.017 --> 00:03:55.237
+if we can make things happen.
+
+NOTE status.emacsconf.org
+
+00:03:55.238 --> 00:03:59.917
+If something goes down, we'll update status.emacsconf.org.
+
+00:03:59.918 --> 00:04:01.743
+If it doesn't look like we've noticed yet,
+
+00:04:01.744 --> 00:04:05.262
+please let us know in the #emacsconf-org IRC channel,
+
+00:04:05.263 --> 00:04:07.281
+where we will be quietly panicking.
+
+NOTE Guidelines for conduct
+
+00:04:07.282 --> 00:04:09.704
+In all of these conversations, please keep in mind
+
+00:04:09.705 --> 00:04:11.238
+our guidelines for conduct.
+
+00:04:11.239 --> 00:04:12.619
+You can find them on the wiki,
+
+00:04:12.620 --> 00:04:16.019
+and they basically boil down to: please be nice. Thank you!
+
+NOTE Videos
+
+00:04:16.020 --> 00:04:18.891
+If all goes well, the prerecorded talks and transcripts
+
+00:04:18.892 --> 00:04:20.537
+should be available from the talk pages
+
+00:04:20.538 --> 00:04:22.038
+shortly after they start playing,
+
+00:04:22.039 --> 00:04:24.143
+and we'll post the recordings of live talks
+
+00:04:24.144 --> 00:04:26.775
+and Q&A sessions within the next few weeks.
+
+NOTE Let's get started!
+
+00:04:26.776 --> 00:04:28.247
+All right, let's get going.
+
+00:04:28.248 --> 00:04:31.214
+You might see Leo Vivier, Corwin Brust,
+
+00:04:31.215 --> 00:04:33.953
+and Amin Bandali hosting the various tracks.
+
+00:04:33.954 --> 00:04:35.767
+I will run around mostly backstage,
+
+00:04:35.768 --> 00:04:37.793
+and you'll probably meet us in the closing remarks.
+
+00:04:37.794 --> 00:04:39.243
+That's also where we get to thank
+
+00:04:39.244 --> 00:04:40.659
+all the people and organizations
+
+00:04:40.660 --> 00:04:42.549
+who make EmacsConf possible.
+
+00:04:42.550 --> 00:04:44.462
+Let's have fun at EmacsConf!
diff --git a/2025/captions/emacsconf-2025-swanky--swanky-python-interactive-development-for-python--scott-zimmermann--main.vtt b/2025/captions/emacsconf-2025-swanky--swanky-python-interactive-development-for-python--scott-zimmermann--main.vtt
new file mode 100644
index 00000000..35eb7ce7
--- /dev/null
+++ b/2025/captions/emacsconf-2025-swanky--swanky-python-interactive-development-for-python--scott-zimmermann--main.vtt
@@ -0,0 +1,1108 @@
+WEBVTT captioned by sachac
+
+00:00:00.880 --> 00:00:02.439
+Hello everyone, I'm Scott
+
+00:00:02.440 --> 00:00:04.239
+and I'll be talking about Swanky Python,
+
+00:00:04.240 --> 00:00:06.199
+which is a development environment for Python
+
+00:00:06.200 --> 00:00:08.319
+based on Emacs' Slime package.
+
+00:00:08.320 --> 00:00:11.679
+So what is that and why might you find it interesting?
+
+00:00:11.680 --> 00:00:15.279
+SLIME is the Superior Lisp Interaction Mode for Emacs.
+
+00:00:15.280 --> 00:00:17.999
+It's an Emacs package for developing Common Lisp,
+
+00:00:18.000 --> 00:00:20.679
+and it's a bit different from the way we develop most languages
+
+00:00:20.680 --> 00:00:22.599
+in that you're always connected
+
+00:00:22.600 --> 00:00:25.399
+to a running instance of your application,
+
+00:00:25.400 --> 00:00:27.959
+and you kind of build up your application, piece by piece,
+
+00:00:27.960 --> 00:00:30.399
+modifying one expression at a time
+
+00:00:30.400 --> 00:00:34.559
+without ever having to restart your application.
+
+00:00:34.560 --> 00:00:36.679
+So why might you want to develop this way?
+
+00:00:36.680 --> 00:00:40.039
+One advantage is that you can get a faster feedback loop.
+
+00:00:40.040 --> 00:00:42.599
+For some kinds of software, it doesn't make a big difference.
+
+00:00:42.600 --> 00:00:43.919
+Like, if you're developing a web backend
+
+00:00:43.920 --> 00:00:48.039
+where all state is stored externally in a database,
+
+00:00:48.040 --> 00:00:50.279
+then you can have a file watcher
+
+00:00:50.280 --> 00:00:52.799
+that just restarts the whole Python process
+
+00:00:52.800 --> 00:00:54.639
+whenever you make any edit,
+
+00:00:54.640 --> 00:00:56.159
+and you're not really losing anything,
+
+00:00:56.160 --> 00:00:59.679
+because all the state is stored outside the Python process
+
+00:00:59.680 --> 00:01:01.719
+in a database. So it works great.
+
+00:01:01.720 --> 00:01:03.559
+But for other kinds of software, like
+
+00:01:03.560 --> 00:01:05.559
+let's say you're developing an Emacs package
+
+00:01:05.560 --> 00:01:07.279
+or a video game,
+
+00:01:07.280 --> 00:01:10.319
+then it can be a real pain to restart the application
+
+00:01:10.320 --> 00:01:12.679
+and recreate the state it was in before
+
+00:01:12.680 --> 00:01:17.279
+just to test the effect of each edit you want to make.
+
+00:01:17.280 --> 00:01:21.359
+Another advantage is the runtime introspection you have available.
+
+00:01:21.360 --> 00:01:22.679
+So since you're always connected
+
+00:01:22.680 --> 00:01:24.999
+to a running instance of your application,
+
+00:01:25.000 --> 00:01:27.799
+you can inspect the values of variables,
+
+00:01:27.800 --> 00:01:30.959
+you can trace functions, and all sorts of other information
+
+00:01:30.960 --> 00:01:36.279
+to help you understand your application better.
+
+00:01:36.280 --> 00:01:39.919
+And lastly, it's just a lot of fun to develop this way,
+
+00:01:39.920 --> 00:01:43.519
+or at least I find it fun developing with SLIME,
+
+00:01:43.520 --> 00:01:45.759
+so I wrote a SLIME backend for Python
+
+00:01:45.760 --> 00:01:48.799
+so I could have more fun when I'm coding in Python.
+
+00:01:48.800 --> 00:01:52.599
+As for the name swanky-python, within SLIME,
+
+00:01:52.600 --> 00:01:56.279
+swank is the name of the Common Lisp backend
+
+00:01:56.280 --> 00:01:59.199
+that runs within your Common Lisp application
+
+00:01:59.200 --> 00:02:02.919
+and connects to Emacs. So I'm not too creative.
+
+00:02:02.920 --> 00:02:07.999
+swanky-python is just a swank implementation in Python.
+
+NOTE Demo
+
+00:02:08.000 --> 00:02:15.279
+So let's see it in action. So we started up with M-x slime.
+
+00:02:15.280 --> 00:02:19.639
+And what that does is it starts a Python process,
+
+00:02:19.640 --> 00:02:25.039
+starts swanky-python within it, and connects to it from Emacs.
+
+00:02:25.040 --> 00:02:29.039
+And you can configure how exactly it runs Python.
+
+00:02:29.040 --> 00:02:32.479
+Or you can start swanky python manually
+
+00:02:32.480 --> 00:02:35.119
+within a Python application running on a remote server
+
+00:02:35.120 --> 00:02:36.313
+and forward the port locally
+
+00:02:36.614 --> 00:02:40.919
+and connect to it in Emacs, from Emacs remotely.
+
+00:02:40.920 --> 00:02:43.239
+Within the README, there's more documentation
+
+00:02:43.240 --> 00:02:45.519
+on other ways to start it.
+
+00:02:45.520 --> 00:02:52.159
+But just M-x slime is the basic way that works most of the time.
+
+00:02:52.160 --> 00:02:55.759
+So within the REPL, the first thing you'll notice is that
+
+00:02:55.760 --> 00:02:58.839
+REPL outputs are clickable buttons,
+
+00:02:58.840 --> 00:03:02.119
+what SLIME calls presentations.
+
+00:03:02.120 --> 00:03:04.759
+So you can do things like inspect them.
+
+00:03:04.760 --> 00:03:09.759
+And for each presentation, in the Python backend,
+
+00:03:09.760 --> 00:03:12.479
+it holds on to the reference to the object.
+
+00:03:12.480 --> 00:03:14.559
+So for an int, it's not too interesting,
+
+00:03:14.560 --> 00:03:20.239
+but let's do a more complex object like a file.
+
+00:03:20.240 --> 00:03:22.519
+Then we can inspect the file.
+
+00:03:22.520 --> 00:03:26.599
+We can describe it, which will bring up documentation
+
+00:03:26.600 --> 00:03:33.759
+on that class. We can use it in further expressions
+
+00:03:33.760 --> 00:03:39.431
+like if we copy it, it will use the actual Python object
+
+00:03:39.432 --> 00:03:43.399
+in this expression.
+
+00:03:43.400 --> 00:03:48.319
+We can assign it to a variable.
+
+00:03:48.320 --> 00:03:50.999
+SLIME uses presentations everywhere
+
+00:03:51.000 --> 00:03:53.239
+that a Python object would be displayed.
+
+00:03:53.240 --> 00:03:56.559
+So instead of just their string representation,
+
+00:03:56.560 --> 00:04:00.239
+when you have a backtrace on an exception,
+
+00:04:00.240 --> 00:04:03.965
+or you... within the inspector or anywhere else really,
+
+00:04:03.966 --> 00:04:06.019
+anywhere that the string representation
+
+00:04:06.020 --> 00:04:07.940
+of an object would be displayed,
+
+00:04:07.941 --> 00:04:10.740
+it displays a presentation that you can go on to
+
+00:04:10.741 --> 00:04:14.960
+inspect, reuse, or send to the REPL and so on.
+
+00:04:14.961 --> 00:04:23.039
+One useful utility function is pp for print presentation.
+
+00:04:23.040 --> 00:04:25.119
+We haven't imported it yet.
+
+00:04:25.120 --> 00:04:29.159
+So when we get a name error exception
+
+00:04:29.160 --> 00:04:33.879
+and SLIME sees that that name is available for import somewhere,
+
+00:04:33.880 --> 00:04:38.279
+it'll give us the option of importing it.
+
+00:04:38.280 --> 00:04:40.599
+Since it's available for import from multiple modules,
+
+00:04:40.600 --> 00:04:43.919
+it'll prompt us for which one we want to import it from.
+
+00:04:43.920 --> 00:04:45.519
+We want to import it from swanky-python,
+
+00:04:45.520 --> 00:04:48.479
+not from the standard library.
+
+00:04:48.480 --> 00:04:52.599
+Then it will print a presentation of that object.
+
+00:04:52.600 --> 00:04:55.559
+Within the REPL, this is not really useful
+
+00:04:55.560 --> 00:04:58.919
+because all REPL outputs are already presentations.
+
+00:04:58.920 --> 00:05:02.799
+But I use this now whenever I would use print debugging,
+
+00:05:02.800 --> 00:05:05.639
+just whenever I would use insert print statements in my program
+
+00:05:05.640 --> 00:05:08.399
+to see what's going on, I have it print a presentation
+
+00:05:08.400 --> 00:05:11.199
+because that way I can go back and inspect it later,
+
+00:05:11.200 --> 00:05:16.599
+copy it to the REPL and further manipulate it and so on.
+
+NOTE Inspector
+
+00:05:16.600 --> 00:05:20.119
+Next up, let's look at the inspector more.
+
+00:05:20.120 --> 00:05:25.579
+If we go back and inspect the file object,
+
+00:05:25.580 --> 00:05:27.239
+you can write custom inspector views
+
+00:05:27.240 --> 00:05:28.839
+for different kinds of objects.
+
+00:05:28.840 --> 00:05:32.519
+So far, I just have a couple. One for sequences,
+
+00:05:32.520 --> 00:05:36.919
+one for mappings, and one for every other kind of object.
+
+00:05:36.920 --> 00:05:45.979
+Like if we inspect a mapping, there's a shortcut
+
+00:05:45.980 --> 00:05:48.639
+inspect last result, which is what I normally use
+
+00:05:48.640 --> 00:05:52.379
+to open the inspector. Then we see the values,
+
+00:05:52.380 --> 00:05:56.319
+and each value in the inspector is a presentation
+
+00:05:56.320 --> 00:05:58.419
+that we can go on to inspect, and so on.
+
+00:05:58.420 --> 00:06:03.979
+Let's go back to inspecting the file object.
+
+00:06:03.980 --> 00:06:06.039
+Again, we can inspect each of the values,
+
+00:06:06.040 --> 00:06:10.239
+we can copy them back to the REPL and so on.
+
+00:06:10.240 --> 00:06:13.839
+It just displays all the attributes for the class
+
+00:06:13.840 --> 00:06:15.399
+and their values.
+
+00:06:15.400 --> 00:06:18.119
+We can configure what attributes we want to show.
+
+00:06:18.120 --> 00:06:21.119
+There's a transient menu where we can toggle
+
+00:06:21.120 --> 00:06:23.359
+if we want to show private attributes, dunder attributes,
+
+00:06:23.360 --> 00:06:26.439
+doc strings, so on, or everything,
+
+00:06:26.440 --> 00:06:28.519
+which is a bit much to show by default.
+
+00:06:28.520 --> 00:06:33.719
+So we'll reset it to the default.
+
+00:06:33.720 --> 00:06:37.839
+In the future, I want to add graphical inspector views
+
+00:06:37.840 --> 00:06:40.679
+for different kinds of objects, and also support
+
+00:06:40.680 --> 00:06:42.999
+showing plots in both the inspector and the REPL,
+
+00:06:43.000 --> 00:06:47.719
+but that's future work I haven't started on yet.
+
+NOTE Evaluating Python
+
+00:06:47.720 --> 00:06:51.999
+Let's look at the different options for evaluating Python.
+
+00:06:52.000 --> 00:06:59.099
+So we can evaluate a whole file.
+
+00:06:59.100 --> 00:07:00.639
+We can evaluate just a class.
+
+00:07:00.640 --> 00:07:03.479
+We can evaluate just the method we're working on.
+
+00:07:03.480 --> 00:07:06.359
+We can evaluate a Python statement,
+
+00:07:06.360 --> 00:07:11.839
+and it will show the result in an overlay next to the cursor.
+
+00:07:11.840 --> 00:07:17.919
+We can select some code and just evaluate the highlighted region.
+
+00:07:17.920 --> 00:07:24.799
+We can sync the REPL to the active file.
+
+00:07:24.800 --> 00:07:27.319
+So now everything we evaluate in the REPL will be in the
+
+00:07:27.320 --> 00:07:29.639
+context of the eval_demo module.
+
+00:07:29.640 --> 00:07:35.399
+We can also set the module that the REPL is in.
+
+00:07:35.400 --> 00:07:38.279
+We can go back to main.
+
+00:07:38.280 --> 00:07:43.679
+But let's go back to the eval_demo module for now.
+
+NOTE Updating
+
+00:07:43.680 --> 00:07:49.799
+One useful thing is when you update a class or a function,
+
+00:07:49.800 --> 00:07:54.539
+it updates old instances of that class or function.
+
+00:07:54.540 --> 00:07:58.479
+So right now, f.bar is foobar.
+
+00:07:58.480 --> 00:08:03.719
+But if we edit that class, it will actually edit the code
+
+00:08:03.720 --> 00:08:05.239
+for the old instance of that class.
+
+00:08:05.240 --> 00:08:07.599
+And that's provided by code I copied
+
+00:08:07.600 --> 00:08:12.079
+from IPython's autoreload extension.
+
+00:08:12.080 --> 00:08:14.639
+It helps when you're trying to develop in Python
+
+00:08:14.640 --> 00:08:16.498
+without having to restart the Python process
+
+00:08:16.499 --> 00:08:20.039
+whenever you make a change.
+
+00:08:20.040 --> 00:08:22.599
+Auto reload in Python is a big topic
+
+00:08:22.600 --> 00:08:26.519
+that I don't really have time to go into here,
+
+00:08:26.520 --> 00:08:29.479
+but right now it is more limited
+
+00:08:29.480 --> 00:08:32.559
+than what is done in Common Lisp.
+
+00:08:32.560 --> 00:08:35.759
+Like for example, if you have a data class in Python
+
+00:08:35.760 --> 00:08:37.619
+and you add a new field to the data class,
+
+00:08:37.620 --> 00:08:41.039
+it won't automatically update old instances
+
+00:08:41.040 --> 00:08:43.399
+of the data class with a new field.
+
+00:08:43.400 --> 00:08:46.599
+So there's more that needs to be done with that,
+
+00:08:46.600 --> 00:08:50.359
+but I am perhaps naively optimistic
+
+00:08:50.360 --> 00:08:54.279
+that Python's runtime is quite dynamic and flexible,
+
+00:08:54.280 --> 00:08:59.799
+and that I can fully implement autoreload in Python,
+
+00:08:59.800 --> 00:09:02.119
+but there's still work to be done,
+
+00:09:02.120 --> 00:09:05.419
+and it's a big topic to go into.
+
+00:09:05.420 --> 00:09:08.959
+Next up, let's look at the backtrace buffer.
+
+00:09:08.960 --> 00:09:12.839
+But as it is right now, autoreload is actually useful.
+
+00:09:12.840 --> 00:09:16.959
+I mostly develop in Python without having to restart the process
+
+00:09:16.960 --> 00:09:19.599
+and without running into issues from old state
+
+00:09:19.600 --> 00:09:22.899
+that hasn't been updated properly.
+
+NOTE Backtraces
+
+00:09:22.900 --> 00:09:25.999
+So if we go on to look at the backtrace buffer,
+
+00:09:26.000 --> 00:09:32.819
+whenever we get an exception in Python...
+
+00:09:32.820 --> 00:09:37.079
+Let's go back to it.
+
+00:09:37.080 --> 00:09:41.419
+Whenever we get an exception, it will...
+
+00:09:41.420 --> 00:09:43.698
+let's change the code so that it actually
+
+00:09:43.699 --> 00:09:49.965
+gets an exception...
+
+00:09:49.966 --> 00:09:52.519
+we will get an interactive backtrace buffer
+
+00:09:52.520 --> 00:09:57.599
+where we can browse the source code for the different stack frames
+
+00:09:57.600 --> 00:10:00.199
+and the local variables within the stack frames,
+
+00:10:00.200 --> 00:10:03.439
+which are all presentations that we can inspect and so on.
+
+00:10:04.340 --> 00:10:10.619
+We can also open a REPL in the context of any stack frame.
+
+00:10:10.620 --> 00:10:16.439
+Or we can, when we go to the source for a given stack frame,
+
+00:10:16.440 --> 00:10:20.359
+we can select some Python code and evaluate it
+
+00:10:20.360 --> 00:10:25.959
+within the context of that stack frame.
+
+00:10:25.960 --> 00:10:30.699
+One major limitation compared to SLIME for Common Lisp
+
+00:10:30.700 --> 00:10:33.759
+is that in Common Lisp, you have the option to
+
+00:10:33.760 --> 00:10:38.159
+restart or resume execution from a given stack frame
+
+00:10:38.160 --> 00:10:42.439
+after an exception happens, where in Python,
+
+00:10:42.440 --> 00:10:45.799
+what we have right now is pretty much equivalent to
+
+00:10:45.800 --> 00:10:47.159
+the postmortem debugger.
+
+00:10:47.160 --> 00:10:50.839
+You can view the state that the call stack was in
+
+00:10:50.840 --> 00:10:51.959
+at the time of the exception,
+
+00:10:51.960 --> 00:10:55.659
+but you can't actually resume execution,
+
+00:10:55.660 --> 00:10:57.559
+which you often might want to do,
+
+00:10:57.560 --> 00:10:59.919
+because when you're coding in a dynamic language,
+
+00:10:59.920 --> 00:11:01.479
+you're going to get runtime errors.
+
+00:11:01.480 --> 00:11:04.119
+So if you're writing a script that does like some sort of
+
+00:11:04.120 --> 00:11:07.999
+long-running computation or processes a ton of files
+
+00:11:08.000 --> 00:11:11.939
+and gets an exception parsing one file halfway through,
+
+00:11:11.940 --> 00:11:16.919
+normally you'd have to fix the script, and then rerun it
+
+00:11:16.920 --> 00:11:19.759
+and have it process all the same files all over again,
+
+00:11:19.760 --> 00:11:23.839
+and lose a bunch of time for every bug you run into
+
+00:11:23.840 --> 00:11:24.879
+and fix you have to make.
+
+00:11:24.880 --> 00:11:28.679
+So right now we've got a kind of mediocre workaround
+
+00:11:28.680 --> 00:11:34.019
+which is you can add the restart decorator to a function
+
+00:11:34.020 --> 00:11:37.239
+and then... where in the case of a script
+
+00:11:37.240 --> 00:11:38.879
+processing a bunch of files,
+
+00:11:38.880 --> 00:11:41.799
+you would add the restart decorator to the function
+
+00:11:41.800 --> 00:11:43.599
+that processes a single file.
+
+00:11:43.600 --> 00:11:45.439
+You'd add it to the function
+
+00:11:45.440 --> 00:11:47.879
+that represents kind of the smallest unit of work
+
+00:11:47.880 --> 00:11:50.219
+that might fail with an exception,
+
+00:11:50.220 --> 00:11:54.359
+Then, when you get an exception,
+
+00:11:54.360 --> 00:11:57.479
+you can actually edit the function.
+
+00:11:57.480 --> 00:12:01.019
+Like, if we edit it so it doesn't throw an error,
+
+00:12:01.020 --> 00:12:07.199
+and then we can resume execution,
+
+00:12:07.200 --> 00:12:12.799
+then it will return from foo using the
+
+00:12:12.800 --> 00:12:15.040
+the new version of baz,
+
+00:12:15.041 --> 00:12:18.559
+without having to run the script from the beginning again.
+
+00:12:18.560 --> 00:12:22.379
+So in the example of a script that processes a bunch of files,
+
+00:12:22.380 --> 00:12:24.299
+that would let you,
+
+00:12:24.300 --> 00:12:27.619
+as you run into files that cause an exception,
+
+00:12:27.620 --> 00:12:29.079
+fix your code to deal with it
+
+00:12:29.080 --> 00:12:31.880
+and resume execution without having to restart the script
+
+00:12:31.881 --> 00:12:33.080
+from the beginning.
+
+00:12:33.081 --> 00:12:36.120
+But this is obviously a pretty terrible hack,
+
+00:12:36.121 --> 00:12:38.840
+having to add the restart decorator to the function.
+
+00:12:38.841 --> 00:12:46.739
+I would like it to be able to restart from any function.
+
+00:12:46.740 --> 00:12:49.631
+without needing the decorator, as you can in Common Lisp,
+
+00:12:49.632 --> 00:12:54.031
+but I think that will require patching CPython
+
+00:12:54.032 --> 00:12:56.579
+and I really have no idea how to do that.
+
+00:12:56.580 --> 00:13:00.531
+So if you do know anything about CPython internals
+
+00:13:00.532 --> 00:13:03.720
+and are interested in helping, please reach out.
+
+NOTE pydumpling
+
+00:13:03.721 --> 00:13:07.119
+Another feature we have with the backtrace buffer is
+
+00:13:07.120 --> 00:13:09.079
+there's this library called PyDumpling
+
+00:13:09.080 --> 00:13:14.659
+which can serialize a traceback and store it to a file.
+
+00:13:14.660 --> 00:13:17.859
+So you can use PyDumpling with your applications running in
+
+00:13:17.860 --> 00:13:21.239
+production to serialize a traceback
+
+00:13:21.240 --> 00:13:24.899
+whenever they have an exception and save it to a file.
+
+00:13:24.900 --> 00:13:28.599
+Then you can transfer the file locally
+
+00:13:28.600 --> 00:13:38.859
+and load it into your local Emacs with slime-py-load-pydumpling.
+
+00:13:38.860 --> 00:13:41.839
+This will load the same backtrace buffer,
+
+00:13:41.840 --> 00:13:44.559
+and you see all the same local variables
+
+00:13:44.560 --> 00:13:45.759
+at the time of the exception.
+
+00:13:45.760 --> 00:13:48.199
+You can inspect them and get a REPL
+
+00:13:48.200 --> 00:13:50.999
+in the context of the stack frame.
+
+00:13:51.000 --> 00:13:54.199
+Well, this will only work for variables
+
+00:13:54.200 --> 00:13:57.619
+that can be serialized with pickle.
+
+00:13:57.620 --> 00:13:59.519
+Or actually, the library uses dill,
+
+00:13:59.520 --> 00:14:03.039
+which can serialize a bit more than pickle can.
+
+00:14:03.040 --> 00:14:10.200
+But yeah so this can help you inspect and debug errors
+
+00:14:10.201 --> 00:14:12.880
+for applications running in production remotely
+
+00:14:12.881 --> 00:14:20.059
+that you don't want to have SLIME connected to 24-7.
+
+NOTE Documentation browser
+
+00:14:20.060 --> 00:14:24.859
+Next up, let's look at the documentation browser.
+
+00:14:24.860 --> 00:14:29.919
+We can bring up documentation for any module,
+
+00:14:29.920 --> 00:14:33.079
+and all this information is generated
+
+00:14:33.080 --> 00:14:34.999
+from runtime introspection,
+
+00:14:35.000 --> 00:14:37.079
+from the doc strings for the module
+
+00:14:37.080 --> 00:14:39.159
+and the classes and so on.
+
+00:14:39.160 --> 00:14:41.879
+So you won't see documentation for libraries
+
+00:14:41.880 --> 00:14:43.159
+that you don't have actually loaded
+
+00:14:43.160 --> 00:14:45.939
+into your running Python process.
+
+00:14:45.940 --> 00:14:50.119
+Then you can go browse to classes.
+
+00:14:50.120 --> 00:14:54.719
+It'll show all the attributes, their methods, and so on.
+
+00:14:54.720 --> 00:14:57.239
+By each method to the right, it will show
+
+00:14:57.240 --> 00:15:02.599
+the base class where the method was originally inherited from.
+
+00:15:02.600 --> 00:15:09.079
+You can also bring up a screen with all the Python packages
+
+00:15:09.080 --> 00:15:14.439
+that are installed, and browse that with imenu,
+
+00:15:14.440 --> 00:15:20.359
+and bring up information on any package and so on.
+
+NOTE Thread view
+
+00:15:20.360 --> 00:15:28.499
+Next up, let's take a look at the thread view.
+
+00:15:28.500 --> 00:15:31.839
+So let's run this and then bring up the thread view
+
+00:15:31.840 --> 00:15:35.559
+and this will show information on all running threads.
+
+00:15:35.560 --> 00:15:38.799
+You can configure it to refresh after a given interval,
+
+00:15:38.800 --> 00:15:41.959
+like every second, but I don't have that set up right now,
+
+00:15:41.960 --> 00:15:45.659
+so I have to manually refresh it.
+
+00:15:45.660 --> 00:15:47.639
+Probably the most useful thing is that
+
+00:15:47.640 --> 00:15:49.739
+you can bring up a backtrace for any thread
+
+00:15:49.740 --> 00:15:51.759
+which won't pause the thread or anything,
+
+00:15:51.760 --> 00:15:53.879
+but will just give you the call stack
+
+00:15:53.880 --> 00:15:55.879
+at the time you requested the backtrace.
+
+00:15:55.880 --> 00:15:59.199
+You can again view the stack frames, local variables,
+
+00:15:59.200 --> 00:16:04.139
+open a REPL in the context of the thread, and so on.
+
+00:16:04.140 --> 00:16:07.839
+There's also a viewer for async tasks,
+
+00:16:07.840 --> 00:16:09.999
+but I'm not going to demo that right now,
+
+00:16:10.000 --> 00:16:14.159
+because for that to work, you have to start swanky-python
+
+00:16:14.160 --> 00:16:16.599
+after the async event loop has started,
+
+00:16:16.600 --> 00:16:18.519
+from within the same thread.
+
+00:16:18.520 --> 00:16:20.279
+If you go to the project readme,
+
+00:16:20.280 --> 00:16:23.919
+there's a demo of how to use the async task viewer
+
+00:16:23.920 --> 00:16:27.439
+with a fastapi project.
+
+NOTE Tracing functions
+
+00:16:27.440 --> 00:16:33.879
+Next up, let's look at tracing functions.
+
+00:16:33.880 --> 00:16:36.279
+So here we got some random error,
+
+00:16:36.280 --> 00:16:39.879
+because this is still very much a work in progress.
+
+00:16:39.880 --> 00:16:42.359
+But it looks like it executed
+
+00:16:42.360 --> 00:16:43.199
+correctly this time.
+
+00:16:43.200 --> 00:16:47.565
+So now let's mark the fibonacci function
+
+00:16:47.566 --> 00:16:50.239
+for tracing and execute it.
+
+00:16:50.240 --> 00:16:56.079
+We can see, every time the function is called,
+
+00:16:56.080 --> 00:16:58.239
+all its arguments and return values.
+
+00:16:58.240 --> 00:17:02.899
+Again, there are presentations that we can inspect and so on.
+
+00:17:02.900 --> 00:17:06.079
+But let's inspect a more complex object, like a file object.
+
+00:17:06.080 --> 00:17:11.339
+If we trace the count_lines function and run that code,
+
+00:17:11.340 --> 00:17:15.319
+then we can inspect the file it was passed, or the file object.
+
+00:17:15.320 --> 00:17:21.039
+One pitfall is that in Python, objects are mutable.
+
+00:17:21.040 --> 00:17:25.559
+So in the trace buffer, the string representation
+
+00:17:25.560 --> 00:17:27.879
+that's printed is the string representation
+
+00:17:27.880 --> 00:17:31.219
+at the time it was passed to the function.
+
+00:17:31.220 --> 00:17:32.639
+But when we go to inspect it,
+
+00:17:32.640 --> 00:17:34.919
+we're inspecting the object as it is right now,
+
+00:17:34.920 --> 00:17:37.639
+which can be different than it was at the time
+
+00:17:37.640 --> 00:17:41.559
+the function saw it. So for this file object, for example,
+
+00:17:41.560 --> 00:17:44.279
+it's closed now, when it was open at the time
+
+00:17:44.280 --> 00:17:47.799
+the function used it.
+
+NOTE AI integrations
+
+00:17:47.800 --> 00:17:50.479
+Next up, let's look at AI integrations.
+
+00:17:50.480 --> 00:17:54.519
+So if you're used to SLIME with Common Lisp,
+
+00:17:54.520 --> 00:18:09.479
+Emacs actually has a built-in AI that can help with the transition.
+
+00:18:09.480 --> 00:18:14.559
+So it's just a joke, I actually really like Python.
+
+00:18:14.560 --> 00:18:18.119
+And for more serious AI integrations,
+
+00:18:18.120 --> 00:18:19.959
+I have some ideas for the future
+
+00:18:19.960 --> 00:18:21.919
+but I haven't implemented anything yet.
+
+00:18:21.920 --> 00:18:27.319
+I think right now, people are mostly passing source code to LLMs
+
+00:18:27.320 --> 00:18:32.679
+but since we're embedded in the Python process at runtime,
+
+00:18:32.680 --> 00:18:35.639
+we have a lot of more information available,
+
+00:18:35.640 --> 00:18:39.439
+like maybe we can trace all calls to functions,
+
+00:18:39.440 --> 00:18:41.799
+and when we have a bug,
+
+00:18:41.800 --> 00:18:46.479
+we can feed the trace to the LLM,
+
+00:18:46.480 --> 00:18:48.719
+and the LLM can point out maybe
+
+00:18:48.720 --> 00:18:51.959
+when this function was called with these arguments,
+
+00:18:51.960 --> 00:18:53.879
+its return value doesn't make sense,
+
+00:18:53.880 --> 00:18:55.679
+so maybe that's the root cause of your bug.
+
+00:18:55.680 --> 00:19:02.359
+If you have any ideas of potential LLM or AI integrations,
+
+00:19:02.360 --> 00:19:05.999
+let me know. I'm happy to discuss.
+
+NOTE LSP-type features
+
+00:19:06.000 --> 00:19:09.919
+Next up, let's look at standard LSP-type features.
+
+00:19:09.920 --> 00:19:14.439
+So we've got completions. It's fuzzy completions right now,
+
+00:19:14.440 --> 00:19:16.319
+so it's showing everything with a PR in the name.
+
+00:19:16.320 --> 00:19:21.779
+We can bring up documentation for each one.
+
+00:19:21.780 --> 00:19:26.759
+When we start calling a method in the minibuffer at the bottom
+
+00:19:26.760 --> 00:19:28.859
+it'll show the signature.
+
+00:19:28.860 --> 00:19:33.719
+There's some refactoring available.
+
+00:19:33.720 --> 00:19:37.399
+We can extract a function or variable,
+
+00:19:37.400 --> 00:19:39.499
+or rename something,
+
+00:19:39.500 --> 00:19:42.919
+like, let's rename fib to fib2,
+
+00:19:42.920 --> 00:19:47.479
+and it will rename all the uses of it.
+
+00:19:47.480 --> 00:19:49.759
+All these features are based on Jedi,
+
+00:19:49.760 --> 00:19:55.399
+which is the Python library used by IPython.
+
+00:19:55.400 --> 00:19:56.999
+But as it is right now,
+
+00:19:57.000 --> 00:20:02.039
+if you want the most complete Python development experience
+
+00:20:02.040 --> 00:20:05.579
+in Emacs, I'd probably recommend using LSP
+
+00:20:05.580 --> 00:20:10.439
+for everything LSP can do, and then just using swanky-python
+
+00:20:10.440 --> 00:20:13.679
+for the object inspector and backtrace buffer,
+
+00:20:13.680 --> 00:20:15.359
+and the interactive features it has
+
+00:20:15.360 --> 00:20:18.031
+that an LSP can't provide.
+
+NOTE Wrapping up
+
+00:20:18.032 --> 00:20:23.339
+And that's it really.
+
+00:20:23.340 --> 00:20:25.865
+Shortly we'll have questions and answers
+
+00:20:25.866 --> 00:20:28.799
+as part of EmacsConf, and later on,
+
+00:20:28.800 --> 00:20:31.199
+if you have any questions, ideas, or issues
+
+00:20:31.200 --> 00:20:34.639
+feel free to reach out over email
+
+00:20:34.640 --> 00:20:37.999
+or create an issue on the repository.
+
+00:20:38.000 --> 00:20:39.331
+I should probably warn you,
+
+00:20:39.332 --> 00:20:41.119
+if you want to try out the project:
+
+00:20:41.120 --> 00:20:45.279
+so far I'm probably the only user of it
+
+00:20:45.280 --> 00:20:48.279
+and I've only tested it on my own Emacs setup,
+
+00:20:48.280 --> 00:20:50.839
+so it's quite likely you'll run into issues
+
+00:20:50.840 --> 00:20:53.479
+trying to get it installed and working.
+
+00:20:53.480 --> 00:20:56.119
+But if you do run into problems, please reach out,
+
+00:20:56.120 --> 00:20:59.279
+let me know. I'm happy to help and try and fix them.
+
+00:20:59.280 --> 00:21:03.640
+So that's it. Thanks for listening.
diff --git a/2025/captions/emacsconf-2025-zettelkasten--zettelkasten-for-regular-emacs-hackers--christian-tietze--main--chapters.vtt b/2025/captions/emacsconf-2025-zettelkasten--zettelkasten-for-regular-emacs-hackers--christian-tietze--main--chapters.vtt
new file mode 100644
index 00000000..6c0f7fed
--- /dev/null
+++ b/2025/captions/emacsconf-2025-zettelkasten--zettelkasten-for-regular-emacs-hackers--christian-tietze--main--chapters.vtt
@@ -0,0 +1,47 @@
+WEBVTT
+
+
+00:00:01.400 --> 00:01:25.533
+Introduction
+
+00:01:25.534 --> 00:02:29.679
+Advocating Freedoms
+
+00:02:29.680 --> 00:04:36.533
+What Is This About?
+
+00:04:36.534 --> 00:05:09.600
+Write - Essential Mechanic
+
+00:05:09.601 --> 00:05:34.267
+Connect - Essential Mechanic
+
+00:05:34.268 --> 00:06:49.433
+Correct - Essential Habit
+
+00:06:49.434 --> 00:07:43.919
+Design for Use - Habit
+
+00:07:43.920 --> 00:08:47.967
+Create Structure - Mechanic
+
+00:08:47.968 --> 00:09:32.400
+Start in the Zettelkasten - Mechanic
+
+00:09:32.401 --> 00:09:54.567
+Start with a Link - Mechanic
+
+00:09:54.568 --> 00:13:22.033
+Recap
+
+00:13:22.034 --> 00:14:46.139
+Facilitate Growth
+
+00:14:46.140 --> 00:20:39.067
+Emacs demo
+
+00:20:39.068 --> 00:22:45.296
+Learn, Share, Grow
+
+00:22:45.297 --> 00:23:18.360
+Outro
diff --git a/2025/captions/emacsconf-2025-zettelkasten--zettelkasten-for-regular-emacs-hackers--christian-tietze--main.vtt b/2025/captions/emacsconf-2025-zettelkasten--zettelkasten-for-regular-emacs-hackers--christian-tietze--main.vtt
new file mode 100644
index 00000000..c90596e8
--- /dev/null
+++ b/2025/captions/emacsconf-2025-zettelkasten--zettelkasten-for-regular-emacs-hackers--christian-tietze--main.vtt
@@ -0,0 +1,1492 @@
+WEBVTT captioned by sachac
+
+NOTE Introduction
+
+00:00:01.400 --> 00:00:03.938
+Hello there, fellow basement dwellers.
+
+00:00:03.939 --> 00:00:05.958
+I'm Christian and you are watching "
+
+00:00:05.959 --> 00:00:08.519
+Zettelkasten for Regular Emacs Hackers,"
+
+00:00:08.520 --> 00:00:12.920
+my Emacs Conference 2025 talk submission.
+
+00:00:12.921 --> 00:00:14.000
+In this presentation,
+
+00:00:14.001 --> 00:00:15.700
+I'll be showing you a couple of things
+
+00:00:15.701 --> 00:00:18.701
+about Zettelkasten, very basic mechanics and habits
+
+00:00:18.702 --> 00:00:21.622
+that you can pick up and implement in Emacs,
+
+00:00:21.623 --> 00:00:24.442
+the most malleable of all environments,
+
+00:00:24.443 --> 00:00:27.823
+to make a thinking environment happen in your life
+
+00:00:27.824 --> 00:00:32.434
+that stays with you potentially forever.
+
+00:00:32.435 --> 00:00:36.055
+The subtitle "For Regular Emacs Hackers" implies at least
+
+00:00:36.056 --> 00:00:38.356
+the possibility of irregular Emacs hackers
+
+00:00:38.357 --> 00:00:42.498
+and regular Emacs non-hackers, so the target audience here
+
+00:00:42.499 --> 00:00:45.119
+is people who are comfortable tweaking their setup
+
+00:00:45.120 --> 00:00:47.980
+when they run into issues and use Emacs to write,
+
+00:00:47.981 --> 00:00:49.980
+no matter if it's prose or code.
+
+00:00:49.981 --> 00:00:53.631
+So that's regular Emacs hacking.
+
+00:00:53.632 --> 00:00:55.614
+You don't need to be an irregular Emacs hacker,
+
+00:00:55.615 --> 00:00:58.759
+for example, being a core maintainer or whatever.
+
+00:00:58.760 --> 00:01:01.243
+You just need to be a normal user
+
+00:01:01.244 --> 00:01:06.679
+who also modifies the setup.
+
+00:01:06.680 --> 00:01:10.301
+However, you should probably not be an Emacs non-hacker.
+
+00:01:10.302 --> 00:01:12.781
+Or maybe you shouldn't stay an Emacs non-hacker,
+
+00:01:12.782 --> 00:01:16.002
+someone who is not tweaking their setup ever.
+
+00:01:16.003 --> 00:01:18.820
+So, if you just open your application
+
+00:01:18.821 --> 00:01:20.240
+to write with a double click,
+
+00:01:20.241 --> 00:01:23.283
+and it happens to be Emacs, this may not be for you,
+
+00:01:23.284 --> 00:01:25.533
+but you ultimately be the judge there.
+
+NOTE Advocating Freedoms
+
+00:01:25.534 --> 00:01:28.744
+It is my sacred duty to, of course,
+
+00:01:28.745 --> 00:01:32.665
+advocate all the essential freedoms during this presentation.
+
+00:01:32.666 --> 00:01:34.507
+These are the following.
+
+00:01:34.508 --> 00:01:37.389
+You shall not be shackled by a proprietary tool.
+
+00:01:37.390 --> 00:01:40.791
+(You shall be shackled by Emacs. (Which is free software.))
+
+00:01:40.792 --> 00:01:44.114
+You shall also not be shackled by an esoteric method
+
+00:01:44.115 --> 00:01:45.275
+that turns out to be a grift
+
+00:01:45.276 --> 00:01:47.897
+where you need to visit annual workshops, walk on broken glass
+
+00:01:47.898 --> 00:01:50.399
+and stuff to be a true ""knower"".
+
+00:01:50.400 --> 00:01:52.880
+You shall be empowered to do great things
+
+00:01:52.881 --> 00:01:55.883
+for the rest of your life after this session alone.
+
+00:01:55.884 --> 00:01:58.870
+This is not a sales pitch.
+
+00:01:58.871 --> 00:02:00.651
+Finally, you should also not be shackled
+
+00:02:00.652 --> 00:02:05.039
+by whichever sources of information you rely on in the future.
+
+00:02:05.040 --> 00:02:07.853
+You shall be free to think and explore new ideas,
+
+00:02:07.854 --> 00:02:12.175
+ideally forever, in an environment you built to your liking,
+
+00:02:12.176 --> 00:02:15.796
+without the degrading web searches and the dead internet
+
+00:02:15.797 --> 00:02:18.857
+getting in your way. No libraries, no dead trees.
+
+00:02:18.858 --> 00:02:21.538
+It's you and your knowledge base
+
+00:02:21.539 --> 00:02:29.679
+that can truly produce magnificent things.
+
+NOTE What Is This About?
+
+00:02:29.680 --> 00:02:33.586
+So what is this about? In the teaser text for this session,
+
+00:02:33.587 --> 00:02:36.148
+I brought up that when people talk about Emacs
+
+00:02:36.149 --> 00:02:38.931
+pulling in everything that people do on their computer,
+
+00:02:38.932 --> 00:02:42.614
+it's usually things they used other software for in the past.
+
+00:02:42.615 --> 00:02:46.057
+Like email, chat, playing music, browsing the web,
+
+00:02:46.058 --> 00:02:48.819
+managing tasks, you know, stuff like that.
+
+00:02:48.820 --> 00:02:51.761
+We don't have a good blueprint for thinking environments though.
+
+00:02:51.762 --> 00:02:53.263
+So it's not a trivial task,
+
+00:02:53.264 --> 00:02:54.744
+just port this or that to Emacs
+
+00:02:54.745 --> 00:02:56.705
+and then you'll be happy and productive.
+
+00:02:56.706 --> 00:02:58.199
+That's different from doing your emails
+
+00:02:58.200 --> 00:03:00.328
+or task management or writing in Emacs,
+
+00:03:00.329 --> 00:03:02.950
+where we have a lot of experience with existing software
+
+00:03:02.951 --> 00:03:06.413
+to adapt and deviate from, where we can essentially
+
+00:03:06.414 --> 00:03:09.855
+port the task to Emacs. We can practice to think,
+
+00:03:09.856 --> 00:03:12.998
+purposefully and productively, on complex things
+
+00:03:12.999 --> 00:03:14.459
+over long periods of time
+
+00:03:14.460 --> 00:03:19.059
+when we create bespoke environments that help with that.
+
+00:03:19.060 --> 00:03:20.467
+The first assumption is this:
+
+00:03:20.468 --> 00:03:24.058
+Writing is very important to form complex thought.
+
+00:03:24.059 --> 00:03:26.279
+Without writing, you won't be able to cross
+
+00:03:26.280 --> 00:03:28.760
+a certain complexity threshold.
+
+00:03:28.761 --> 00:03:31.921
+Thinking in your head alone without any externalization
+
+00:03:31.922 --> 00:03:34.261
+makes you prone to loops, repetitions,
+
+00:03:34.262 --> 00:03:36.142
+and worst of all: jumps.
+
+00:03:36.143 --> 00:03:38.562
+Jumps that get you to a point,
+
+00:03:38.563 --> 00:03:40.723
+but not backed by reason or argument.
+
+00:03:40.724 --> 00:03:46.501
+So you and your future and others cannot follow.
+
+00:03:46.502 --> 00:03:48.362
+Written words direct thought.
+
+00:03:48.363 --> 00:03:51.984
+The linearization or sequence-making of thoughts
+
+00:03:51.985 --> 00:03:55.306
+frames your next idea. That's the same for reading,
+
+00:03:55.307 --> 00:03:57.307
+which enables you to pick up existing ideas
+
+00:03:57.308 --> 00:04:00.249
+and continue to write about them later.
+
+00:04:00.250 --> 00:04:02.810
+So for "good thinking", writing, reading,
+
+00:04:02.811 --> 00:04:05.072
+and writing is mandatory.
+
+00:04:05.073 --> 00:04:07.193
+Emacs is good at showing text to read.
+
+00:04:07.194 --> 00:04:09.634
+It's good at processing keyboard inputs to write.
+
+00:04:09.635 --> 00:04:13.176
+So let's go. Let's set up an environment within Emacs
+
+00:04:13.177 --> 00:04:16.319
+to make this thinking thing happen.
+
+00:04:16.320 --> 00:04:18.059
+I'll walk you through some mechanics
+
+00:04:18.060 --> 00:04:20.881
+of the Zettelkasten machine and habits for you,
+
+00:04:20.882 --> 00:04:22.900
+dear thinker and regular Emacs hacker.
+
+00:04:22.901 --> 00:04:25.885
+And for your reference, highlight these things
+
+00:04:25.886 --> 00:04:30.468
+as I present them in the bottom left corner of the screen.
+
+00:04:30.469 --> 00:04:33.190
+So working with Zettelkasten as a thinking environment
+
+00:04:33.191 --> 00:04:36.533
+only requires very simple mechanics.
+
+NOTE Write - Essential Mechanic
+
+00:04:36.534 --> 00:04:39.639
+First one is to write. I mentioned this.
+
+00:04:39.640 --> 00:04:42.488
+It could be one large text file, could be many small ones.
+
+00:04:42.489 --> 00:04:46.359
+We use the power of Emacs and small files because Emacs is cool,
+
+00:04:46.360 --> 00:04:49.354
+and individual files put boundaries around ideas
+
+00:04:49.355 --> 00:04:52.662
+that force you to decide what goes where.
+
+00:04:52.663 --> 00:04:55.686
+Most importantly though, write like you mean it.
+
+00:04:55.687 --> 00:04:58.510
+The principle of "garbage in and garbage out" holds.
+
+00:04:58.511 --> 00:05:01.374
+You don't need to use your novelist voice when taking notes,
+
+00:05:01.375 --> 00:05:04.137
+but it also shouldn't be shorthand only,
+
+00:05:04.138 --> 00:05:06.794
+so that your future you has an easy time
+
+00:05:06.795 --> 00:05:09.600
+reading and digesting what you wrote.
+
+NOTE Connect - Essential Mechanic
+
+00:05:09.601 --> 00:05:13.524
+Next mechanic, which is also essential, is to connect.
+
+00:05:13.525 --> 00:05:14.999
+We think in associations.
+
+00:05:15.000 --> 00:05:18.639
+Connect notes to capture the associations that come to mind
+
+00:05:18.640 --> 00:05:20.916
+and that you want the reader, which is the future you,
+
+00:05:20.917 --> 00:05:24.074
+to make. Traveling a path of connections
+
+00:05:24.075 --> 00:05:25.835
+indirectly via tags or keywords
+
+00:05:25.836 --> 00:05:27.096
+and directly with links
+
+00:05:27.097 --> 00:05:30.720
+can feel like reading an essay you make up as you go.
+
+00:05:30.721 --> 00:05:34.267
+That's where connections show their power.
+
+NOTE Correct - Essential Habit
+
+00:05:34.268 --> 00:05:38.260
+The next essential habit is to read and correct
+
+00:05:38.261 --> 00:05:40.180
+and reconnect as you go.
+
+00:05:40.181 --> 00:05:42.311
+You spend time and effort at the writing stage,
+
+00:05:42.312 --> 00:05:43.792
+you are the primary audience,
+
+00:05:43.793 --> 00:05:46.895
+so do your past self a favor and read what you wrote.
+
+00:05:46.896 --> 00:05:50.478
+And then as you read it, make it better.
+
+00:05:50.479 --> 00:05:52.340
+Make it better, continuously make things better
+
+00:05:52.341 --> 00:05:55.222
+and capture new ideas as they come up as you read.
+
+00:05:55.223 --> 00:05:57.784
+And things you can only now remember
+
+00:05:57.785 --> 00:06:00.927
+because you learned about things in the meantime.
+
+00:06:00.928 --> 00:06:03.429
+You'll also get better at this whole thing with practice.
+
+00:06:03.430 --> 00:06:05.866
+So improve old notes when you find them lacking in detail,
+
+00:06:05.867 --> 00:06:08.575
+their tone pretentious, their mere existence
+
+00:06:08.576 --> 00:06:10.895
+an insult to your intelligence.
+
+00:06:10.896 --> 00:06:11.735
+Pay [knocks on table] attention [knocks again]
+
+00:06:11.736 --> 00:06:13.639
+to pain points in using notes.
+
+00:06:13.640 --> 00:06:16.559
+Yes, I knocked on my desk to emphasize.
+
+00:06:16.560 --> 00:06:18.601
+And fix things on the fly.
+
+00:06:18.602 --> 00:06:19.802
+From this principle follows
+
+00:06:19.803 --> 00:06:22.063
+a lot of common practices and tips.
+
+00:06:22.064 --> 00:06:24.125
+This principle truly is essential.
+
+00:06:24.126 --> 00:06:25.546
+Too long and you didn't read it?
+
+00:06:25.547 --> 00:06:27.227
+Add a summary at the beginning.
+
+00:06:27.228 --> 00:06:30.089
+You can't understand what you wrote a year ago?
+
+00:06:30.090 --> 00:06:32.511
+Do your best to rewrite it in your own words.
+
+00:06:32.512 --> 00:06:35.099
+It only gets worse if you wait longer.
+
+00:06:35.100 --> 00:06:37.115
+Can't find anything in the mess?
+
+00:06:37.116 --> 00:06:39.137
+Collect links to what you could find
+
+00:06:39.138 --> 00:06:41.659
+in a new "meta" note so next time,
+
+00:06:41.660 --> 00:06:43.240
+you have a navigational help.
+
+00:06:43.241 --> 00:06:44.861
+This practice will form the basis
+
+00:06:44.862 --> 00:06:46.733
+for structure notes, maps, and overviews,
+
+00:06:46.734 --> 00:06:49.433
+which we will come to later.
+
+NOTE Design for Use - Habit
+
+00:06:49.434 --> 00:06:52.071
+The next habit, non-essential though,
+
+00:06:52.072 --> 00:06:55.332
+is to create notes with intent to use them.
+
+00:06:55.333 --> 00:06:58.133
+It's one thing to write about facts, capture information,
+
+00:06:58.134 --> 00:07:01.354
+but all this is just collecting stuff.
+
+00:07:01.355 --> 00:07:03.615
+It's another thing altogether to write about
+
+00:07:03.616 --> 00:07:06.556
+a train of thought, about an argument you found compelling,
+
+00:07:06.557 --> 00:07:09.858
+about a model to understand the world, or yourself,
+
+00:07:09.859 --> 00:07:12.899
+in a better way. So collect to remember,
+
+00:07:12.900 --> 00:07:16.260
+but work in your Zettelkasten to think.
+
+00:07:16.261 --> 00:07:18.221
+What does that even mean, though?
+
+00:07:18.222 --> 00:07:19.822
+Recreate how intriguing books
+
+00:07:19.823 --> 00:07:21.803
+lay out their premises and arguments, for example.
+
+00:07:21.804 --> 00:07:24.885
+First this, then that, also that supports the premise,
+
+00:07:24.886 --> 00:07:27.407
+and so on. That's the structure of an argument.
+
+00:07:27.408 --> 00:07:30.549
+You can recreate it in list form, as a graph,
+
+00:07:30.550 --> 00:07:33.500
+you can draw and import the image, whatever.
+
+00:07:33.501 --> 00:07:36.112
+The structure of that argument is one thing,
+
+00:07:36.113 --> 00:07:38.333
+and the details, like the evidence for each claim,
+
+00:07:38.334 --> 00:07:39.999
+can be separate things.
+
+00:07:40.000 --> 00:07:43.919
+These can become their own sub-networks over time.
+
+NOTE Create Structure - Mechanic
+
+00:07:43.920 --> 00:07:45.470
+To facilitate all that,
+
+00:07:45.471 --> 00:07:47.931
+you will be needing to create structures.
+
+00:07:47.932 --> 00:07:50.612
+You've connected notes, so links already leave trails
+
+00:07:50.613 --> 00:07:52.519
+to traverse between your notes.
+
+00:07:52.520 --> 00:07:55.929
+Structures can emerge from these with a sheer volume,
+
+00:07:55.930 --> 00:07:58.616
+but they also can be designed by you to be
+
+00:07:58.617 --> 00:08:02.258
+navigational hubs of similar shape and form over time.
+
+00:08:02.259 --> 00:08:04.240
+Patterns like that reduce confusion
+
+00:08:04.241 --> 00:08:05.800
+and improve feeling at home
+
+00:08:05.801 --> 00:08:09.222
+and finding your way around, so that's worth investing in.
+
+00:08:09.223 --> 00:08:13.404
+For example, use outlines for complex topics.
+
+00:08:13.405 --> 00:08:15.247
+Tables of contents of a book, for example,
+
+00:08:15.248 --> 00:08:17.319
+that you love and processed in great detail.
+
+00:08:17.320 --> 00:08:19.492
+Just recreate the table of contents,
+
+00:08:19.493 --> 00:08:23.037
+the nested structure of it, in your notes,
+
+00:08:23.038 --> 00:08:28.196
+and then you have something to hang your future thoughts onto.
+
+00:08:28.197 --> 00:08:31.517
+Another example is a pro/contra table or list
+
+00:08:31.518 --> 00:08:35.478
+to discuss opposing facets and perspective of a thing.
+
+00:08:35.479 --> 00:08:37.830
+Another example would be models or metaphors
+
+00:08:37.831 --> 00:08:39.060
+like the iceberg model
+
+00:08:39.061 --> 00:08:42.181
+where you point out something has a hidden depth to it
+
+00:08:42.182 --> 00:08:44.381
+or the metaphor of a tree to model a thing
+
+00:08:44.382 --> 00:08:47.967
+as a branching and growing idea.
+
+NOTE Start in the Zettelkasten - Mechanic
+
+00:08:47.968 --> 00:08:50.434
+Another habit which is also not essential
+
+00:08:50.435 --> 00:08:52.454
+is to start in your Zettelkasten.
+
+00:08:52.455 --> 00:08:55.255
+Starting in your Zettelkasten removes the cost of deciding
+
+00:08:55.256 --> 00:08:57.516
+what goes in there and what doesn't.
+
+00:08:57.517 --> 00:08:59.636
+It gets you moving and up to speed
+
+00:08:59.637 --> 00:09:03.277
+with the method and the tool much easier.
+
+00:09:03.278 --> 00:09:05.078
+Importing stuff later into the Zettelkasten
+
+00:09:05.079 --> 00:09:06.198
+can feel like a chore,
+
+00:09:06.199 --> 00:09:09.259
+but starting the work you need to do anyway in it?
+
+00:09:09.260 --> 00:09:11.560
+That reduces the mental hurdle.
+
+00:09:11.561 --> 00:09:12.921
+As a regular Emacs hacker,
+
+00:09:12.922 --> 00:09:14.582
+you'll eventually develop your own tools
+
+00:09:14.583 --> 00:09:17.303
+to make initial exploration smoother over time,
+
+00:09:17.304 --> 00:09:19.544
+like do you start in a particular place
+
+00:09:19.545 --> 00:09:22.519
+or just create a new note from scratch somewhere.
+
+00:09:22.520 --> 00:09:25.026
+You won't know this until you experience this stuff
+
+00:09:25.027 --> 00:09:26.867
+for a while and try different things.
+
+00:09:26.868 --> 00:09:32.400
+So don't worry and be open for change.
+
+NOTE Start with a Link - Mechanic
+
+00:09:32.401 --> 00:09:36.369
+The final habit, also non-essential, is to start with a link
+
+00:09:36.370 --> 00:09:38.451
+and not with the creation of a new file.
+
+00:09:38.452 --> 00:09:40.512
+Start with a link, create the file later.
+
+00:09:40.513 --> 00:09:42.473
+This avoids orphaned notes.
+
+00:09:42.474 --> 00:09:45.896
+Orphaned notes are those no others are linking to.
+
+00:09:45.897 --> 00:09:48.457
+To these you can only get with a full-text search
+
+00:09:48.458 --> 00:09:51.299
+or maybe by accident when you browse your notes,
+
+00:09:51.300 --> 00:09:54.567
+but there is no orderly way to get to them.
+
+NOTE Recap
+
+00:09:54.568 --> 00:09:58.533
+To recap: Write. Don't be sloppy.
+
+00:09:58.534 --> 00:10:00.600
+Put in effort early to get faster at this.
+
+00:10:00.601 --> 00:10:04.159
+This is essential, because without putting effort
+
+00:10:04.160 --> 00:10:08.133
+into writing, you won't have anything to use.
+
+00:10:08.134 --> 00:10:10.500
+Connect and leave trails to navigate.
+
+00:10:10.501 --> 00:10:13.619
+That can tell a story when you traverse the trail later.
+
+00:10:13.620 --> 00:10:16.540
+This is essential because without connection,
+
+00:10:16.541 --> 00:10:18.600
+you will not get anywhere.
+
+00:10:18.601 --> 00:10:20.300
+Correct and improve things as you go.
+
+00:10:20.301 --> 00:10:21.839
+The last essential thing: well,
+
+00:10:21.840 --> 00:10:24.141
+don't worry about perfection, and then,
+
+00:10:24.142 --> 00:10:25.802
+be gentle to your past self.
+
+00:10:25.803 --> 00:10:27.976
+Adapt to what you learn along the way.
+
+00:10:27.977 --> 00:10:31.124
+It's essential, because without this attitude,
+
+00:10:31.125 --> 00:10:33.745
+you can easily get stuck in analysis paralysis,
+
+00:10:33.746 --> 00:10:35.039
+like where do I need to put this,
+
+00:10:35.040 --> 00:10:37.367
+or what would be the perfect way to phrase this.
+
+00:10:37.368 --> 00:10:40.733
+Design for use. This helps both finding your voice,
+
+00:10:40.734 --> 00:10:42.819
+and to have criteria for selecting
+
+00:10:42.820 --> 00:10:45.233
+what to spend time and effort on in the first place.
+
+00:10:45.234 --> 00:10:47.349
+It takes into account the opportunity cost
+
+00:10:47.350 --> 00:10:50.250
+of high quality work from writing and connecting.
+
+00:10:50.251 --> 00:10:53.333
+Create structures. You won't be able to scale
+
+00:10:53.334 --> 00:10:55.876
+and stay organized and find your way around
+
+00:10:55.877 --> 00:10:58.539
+without structures. You can practice this early
+
+00:10:58.540 --> 00:11:00.599
+and design structures deliberately,
+
+00:11:00.600 --> 00:11:03.984
+but it's also okay to ignore this for a while and wing it.
+
+00:11:03.985 --> 00:11:05.746
+So it's not marked essential,
+
+00:11:05.747 --> 00:11:08.939
+although it may hurt you sooner than later.
+
+00:11:08.940 --> 00:11:10.891
+The habit to start in the Zettelkasten?
+
+00:11:10.892 --> 00:11:13.793
+Well, do the work you need to do in a place
+
+00:11:13.794 --> 00:11:15.479
+that can pay back dividends
+
+00:11:15.480 --> 00:11:16.715
+on the effort you put in.
+
+00:11:16.716 --> 00:11:19.257
+That's powerful, but also not essential.
+
+00:11:19.258 --> 00:11:21.619
+You could just as well continue to write and think
+
+00:11:21.620 --> 00:11:23.460
+and scribble somewhere else,
+
+00:11:23.461 --> 00:11:27.423
+and then do the Zettelkasten importing stuff later.
+
+00:11:27.424 --> 00:11:28.439
+Start with a link.
+
+00:11:28.440 --> 00:11:30.245
+That's really useful practice,
+
+00:11:30.246 --> 00:11:33.206
+but more like a lifehack and not an essential habit.
+
+00:11:33.207 --> 00:11:35.347
+So you can also create new files from scratch
+
+00:11:35.348 --> 00:11:38.049
+for ideas that come up as they come up
+
+00:11:38.050 --> 00:11:39.610
+and then try to connect them later.
+
+00:11:39.611 --> 00:11:42.731
+Well, that's better than not writing at all, right?
+
+00:11:42.732 --> 00:11:44.747
+So if you look at this, you may ask yourself,
+
+00:11:44.748 --> 00:11:48.319
+why is this create structure thing a mechanic and not a habit?
+
+00:11:48.320 --> 00:11:50.876
+What's the difference? It seems kind of random.
+
+00:11:50.877 --> 00:11:53.918
+Well, do create structures as an imperative
+
+00:11:53.919 --> 00:11:55.279
+is a good habit, yes.
+
+00:11:55.280 --> 00:11:57.981
+Structures facilitate growth of the Zettelkasten
+
+00:11:57.982 --> 00:11:59.562
+and help you discover useful patterns
+
+00:11:59.563 --> 00:12:00.679
+and the things you care about.
+
+00:12:00.680 --> 00:12:03.444
+Patterns that work for you personally,
+
+00:12:03.445 --> 00:12:04.724
+which make navigation easier
+
+00:12:04.725 --> 00:12:07.605
+because they fit your personal expectations
+
+00:12:07.606 --> 00:12:10.586
+for what is and what is not.
+
+00:12:10.587 --> 00:12:13.847
+That's something for you to do. That's a process.
+
+00:12:13.848 --> 00:12:18.148
+But from the perspective of the Zettelkasten as a system,
+
+00:12:18.149 --> 00:12:20.609
+that's a mechanic or rather dynamic,
+
+00:12:20.610 --> 00:12:23.149
+the Zettelkasten grows organically.
+
+00:12:23.150 --> 00:12:25.310
+Thanks to your constant intervention and usage of course.
+
+00:12:25.311 --> 00:12:27.631
+That's how time passes in your Zettelkasten.
+
+00:12:27.632 --> 00:12:32.272
+That's how a process of transformation enters the system.
+
+00:12:32.273 --> 00:12:34.800
+The transformation affects the network.
+
+00:12:34.801 --> 00:12:36.255
+Every new or updated note,
+
+00:12:36.256 --> 00:12:38.557
+every new connection changes the network.
+
+00:12:38.558 --> 00:12:40.718
+The existing network then imposes demands
+
+00:12:40.719 --> 00:12:43.679
+for new stuff to fit in, slowly solidifying
+
+00:12:43.680 --> 00:12:47.363
+how things are organized to be perceived as orderly.
+
+00:12:47.364 --> 00:12:49.084
+This is calcifying.
+
+00:12:49.085 --> 00:12:52.326
+That's emergent creation of structure from use.
+
+00:12:52.327 --> 00:12:56.268
+Structure here is expectation for what could come next.
+
+00:12:56.269 --> 00:12:58.649
+On top of this interplay of emergent structure
+
+00:12:58.650 --> 00:13:00.190
+in your notes and processes
+
+00:13:00.191 --> 00:13:01.871
+that operate these constraints,
+
+00:13:01.872 --> 00:13:04.372
+you can design and influence and architect
+
+00:13:04.373 --> 00:13:06.873
+and have explicit structures and patterns,
+
+00:13:06.874 --> 00:13:09.633
+and therefore you can influence what is expected,
+
+00:13:09.634 --> 00:13:11.836
+what is unexpected and what fits
+
+00:13:11.837 --> 00:13:14.257
+and what needs to change to fit in.
+
+00:13:14.258 --> 00:13:18.139
+So the time you spend designing these things
+
+00:13:18.140 --> 00:13:20.300
+will influence how the Zettelkasten
+
+00:13:20.301 --> 00:13:22.033
+will behave in the future.
+
+NOTE Facilitate Growth
+
+00:13:22.034 --> 00:13:24.061
+To prepare for growth
+
+00:13:24.062 --> 00:13:27.533
+you will probably encounter thresholds along your journey.
+
+00:13:27.534 --> 00:13:29.267
+Like 1-10 notes, well,
+
+00:13:29.268 --> 00:13:31.300
+you can easily remember all of them.
+
+00:13:31.301 --> 00:13:34.333
+10-100, you will have forgotten some details,
+
+00:13:34.334 --> 00:13:37.067
+but will probably remember writing most of these notes
+
+00:13:37.068 --> 00:13:40.239
+in some way. 100-1000?
+
+00:13:40.240 --> 00:13:42.919
+Bad luck, you will have a hard time going through everything
+
+00:13:42.920 --> 00:13:46.439
+one by one to find what you have. You will have to rely on
+
+00:13:46.440 --> 00:13:50.087
+filtering results. For example, with a full text search,
+
+00:13:50.088 --> 00:13:53.492
+you will crave to use tags and keywords more
+
+00:13:53.493 --> 00:14:02.039
+to group notes into more manageable departments or collections.
+
+00:14:02.040 --> 00:14:05.879
+By this mark, search results produce way too many results.
+
+00:14:05.880 --> 00:14:07.967
+Popular tags become overcrowded,
+
+00:14:07.968 --> 00:14:10.069
+and you have the same problem you had in the last stage,
+
+00:14:10.070 --> 00:14:12.519
+but for each of these tags.
+
+00:14:12.520 --> 00:14:15.779
+So manual structures will take you through this.
+
+00:14:15.780 --> 00:14:18.919
+Anticipate growth pains by starting from structures.
+
+00:14:18.920 --> 00:14:22.119
+That's the recommendation here. Design your entry points
+
+00:14:22.120 --> 00:14:24.167
+into your current projects and research topics
+
+00:14:24.168 --> 00:14:28.159
+and interests as 'departments' of your Zettelkasten.
+
+00:14:28.160 --> 00:14:31.161
+Keep a list of, for example, 12 darlings,
+
+00:14:31.162 --> 00:14:34.124
+like Feynman did: a list of 12 things
+
+00:14:34.125 --> 00:14:35.485
+that you can check mechanically
+
+00:14:35.486 --> 00:14:36.926
+where you capture something new,
+
+00:14:36.927 --> 00:14:39.889
+and then you can see whether the newfound knowledge
+
+00:14:39.890 --> 00:14:46.139
+can also push one of your darling projects forward.
+
+NOTE Emacs demo
+
+00:14:46.140 --> 00:14:50.222
+Now, finally, let's get to the demonstration in Emacs.
+
+00:14:50.223 --> 00:14:52.334
+Here is a very minimal init file.
+
+00:14:52.335 --> 00:14:55.738
+I will share it with you in the show notes.
+
+00:14:55.739 --> 00:14:59.539
+And this is the Denote default configuration.
+
+00:14:59.540 --> 00:15:02.439
+Here I'm using the shortcut to create a new note
+
+00:15:02.440 --> 00:15:08.594
+immediately for this talk. And there you see.
+
+00:15:08.595 --> 00:15:10.496
+That's an empty new note. Here,
+
+00:15:10.497 --> 00:15:16.420
+sped up like two or three times the normal typing speed of me,
+
+00:15:16.421 --> 00:15:21.785
+is how I would process this very Emacs conference talk.
+
+00:15:21.786 --> 00:15:25.668
+The essential mechanics and habits, additional habits,
+
+00:15:25.669 --> 00:15:30.111
+mechanics, and then from there after I capture everything.
+
+00:15:30.112 --> 00:15:32.053
+Make sure that I have a reference.
+
+00:15:32.054 --> 00:15:36.136
+This is not a thought-out implementation in Emacs,
+
+00:15:36.137 --> 00:15:39.039
+so this is just plain text. Christian Tietze,
+
+00:15:39.040 --> 00:15:42.146
+Zettelkasten for Regular Emacs Hackers at the bottom.
+
+00:15:42.147 --> 00:15:46.585
+You can use reference management systems that you like,
+
+00:15:46.586 --> 00:15:49.233
+but I don't want to get into these details.
+
+00:15:49.234 --> 00:15:54.367
+Here I'm creating a note with the denote shortcut.
+
+00:15:54.368 --> 00:15:56.399
+Based on the selected text,
+
+00:15:56.400 --> 00:16:01.099
+I'm starting a link. This link is creating the note for me.
+
+00:16:01.100 --> 00:16:04.640
+It's also default Denote functionality
+
+00:16:04.641 --> 00:16:05.720
+and garbage in garbage out.
+
+00:16:05.721 --> 00:16:08.022
+I needed to edit the title because the selected text
+
+00:16:08.023 --> 00:16:10.043
+became the note title. Didn't want that.
+
+00:16:10.044 --> 00:16:13.335
+That was the abbreviation.
+
+00:16:13.336 --> 00:16:16.220
+Notice that the default configuration does not in fact
+
+00:16:16.221 --> 00:16:20.527
+include auto-fill-mode, so the lines get infinitely long.
+
+00:16:20.528 --> 00:16:23.653
+Looks a bit weird. Just garbage in, garbage out.
+
+00:16:23.654 --> 00:16:27.920
+Processing this from Wikipedia.
+
+00:16:27.921 --> 00:16:31.863
+So we have a detail note from this overview.
+
+00:16:31.864 --> 00:16:34.265
+So that's an overview with one link already.
+
+00:16:34.266 --> 00:16:38.668
+Starting from here, now I want to write more about my talk.
+
+00:16:38.669 --> 00:16:43.772
+And next we create structure, types of structures, etc.
+
+00:16:43.773 --> 00:16:46.835
+It creates a weird link, but I can edit this easily
+
+00:16:46.836 --> 00:16:51.922
+thanks to Emacs being so nice to work with.
+
+00:16:51.923 --> 00:16:55.323
+A couple of examples. I mentioned some of these
+
+00:16:55.324 --> 00:16:58.604
+in previous minutes of this conference talk,
+
+00:16:58.605 --> 00:17:00.584
+like position pair, one note for the pair,
+
+00:17:00.585 --> 00:17:03.921
+one note per pro and contra, table of contents,
+
+00:17:03.922 --> 00:17:06.405
+like lists of things you like,
+
+00:17:06.406 --> 00:17:10.607
+to talk about recreating a book's content,
+
+00:17:10.608 --> 00:17:14.308
+table of contents so you can process the book in detail,
+
+00:17:14.309 --> 00:17:16.839
+argument structures, I believe I mentioned these.
+
+00:17:16.840 --> 00:17:19.370
+Look at this up if you're not into arguments,
+
+00:17:19.371 --> 00:17:22.912
+but arguments are very well structured, usually.
+
+00:17:22.913 --> 00:17:26.133
+A table of things like two-dimensional table or grid.
+
+00:17:26.134 --> 00:17:28.334
+Graphics. You can also include graphics, images,
+
+00:17:28.335 --> 00:17:31.636
+and then write about these. And then there are metaphors.
+
+00:17:31.637 --> 00:17:33.797
+And into one metaphor that I'm presenting here,
+
+00:17:33.798 --> 00:17:37.538
+iceberg, black box, and then atom, molecule, and organism,
+
+00:17:37.539 --> 00:17:40.400
+I want to get into this. Atom, molecule, organism.
+
+00:17:40.401 --> 00:17:43.923
+That's a composition and recursion
+
+00:17:43.924 --> 00:17:47.799
+because I have Big Ideas there. Atom, smallest part;
+
+00:17:47.800 --> 00:17:49.567
+molecule, comprised of atoms;
+
+00:17:49.568 --> 00:17:51.968
+and organism is comprised of molecules.
+
+00:17:51.969 --> 00:17:56.432
+Different level of analysis. Because this is irreducible.
+
+00:17:56.433 --> 00:17:59.154
+In fact, if you have no clue about reducibility,
+
+00:17:59.155 --> 00:18:02.196
+irreducibility -- that doesn't mean much to you? --
+
+00:18:02.197 --> 00:18:05.978
+but look this up. You can go very deep
+
+00:18:05.979 --> 00:18:10.617
+with this kind of stuff. It's basically that if you
+
+00:18:10.618 --> 00:18:12.522
+decompose organs into atoms,
+
+00:18:12.523 --> 00:18:14.125
+you cannot get back to the organs.
+
+00:18:14.126 --> 00:18:17.072
+You just have a bunch of atoms. There's information loss,
+
+00:18:17.073 --> 00:18:19.879
+more or less.
+
+00:18:19.880 --> 00:18:24.246
+Here you see that I create a new thing at the end
+
+00:18:24.247 --> 00:18:26.949
+so that I can write about Denote. The tool doesn't matter,
+
+00:18:26.950 --> 00:18:31.834
+but when you use Emacs, use Denote because, well, why?
+
+00:18:31.835 --> 00:18:35.457
+Let's get into this. Fix the link.
+
+00:18:35.458 --> 00:18:37.279
+These are good reasons to use Denote.
+
+00:18:37.280 --> 00:18:44.379
+Denote is very simple. Denote has a couple of sane defaults.
+
+00:18:44.380 --> 00:18:47.078
+That makes life easier. Backlinks.
+
+00:18:47.079 --> 00:18:51.140
+We will see a backlink view at the end.
+
+00:18:51.141 --> 00:18:52.397
+I have to create a couple of things.
+
+00:18:52.398 --> 00:18:55.964
+I'm copying the source code there, the Elisp source,
+
+00:18:55.965 --> 00:19:01.667
+so that you can see, hey, this is just an Org Mode file.
+
+00:19:01.668 --> 00:19:03.629
+You can style it to your liking
+
+00:19:03.630 --> 00:19:06.751
+and then you can even execute the code if you want.
+
+00:19:06.752 --> 00:19:13.294
+Very powerful. Create notes as links first to avoid orphans.
+
+00:19:13.295 --> 00:19:14.675
+Forward link again.
+
+00:19:14.676 --> 00:19:16.015
+At least I wanted to create a forward link.
+
+00:19:16.016 --> 00:19:17.036
+I pressed the wrong shortcut.
+
+00:19:17.037 --> 00:19:19.737
+But anyway, I can fix this easily.
+
+00:19:19.738 --> 00:19:23.479
+You see, there's no link. Dammit.
+
+00:19:23.480 --> 00:19:26.761
+Now I need to create the link after the fact.
+
+00:19:26.762 --> 00:19:33.279
+Here's a list of shortcuts. The denote keymap.
+
+00:19:33.280 --> 00:19:35.165
+It's a recommended practice by me,
+
+00:19:35.166 --> 00:19:36.766
+starting your note with a link.
+
+00:19:36.767 --> 00:19:40.639
+You've heard this all just a couple of minutes ago.
+
+00:19:40.640 --> 00:19:42.854
+It reduces orphans and supposedly teaches you
+
+00:19:42.855 --> 00:19:45.574
+about thinking in connections early.
+
+00:19:45.575 --> 00:19:53.099
+It's a good practice to practice.
+
+00:19:53.100 --> 00:19:55.938
+So with that note, trying to switch back.
+
+00:19:55.939 --> 00:20:00.119
+Denote note switching, that wasn't as smooth,
+
+00:20:00.120 --> 00:20:01.319
+but inserting links is.
+
+00:20:01.320 --> 00:20:10.179
+And there you go. Here's a backlink view. And that's it.
+
+00:20:10.180 --> 00:20:12.651
+In a somewhat self-documenting way,
+
+00:20:12.652 --> 00:20:14.867
+here you see a structure note
+
+00:20:14.868 --> 00:20:17.682
+which is an overview that represents the gist
+
+00:20:17.683 --> 00:20:19.563
+of this Emacs conference talk,
+
+00:20:19.564 --> 00:20:21.839
+with a couple of links to details.
+
+00:20:21.840 --> 00:20:24.107
+From these details, as you've seen,
+
+00:20:24.108 --> 00:20:27.891
+you can go into even more detail. That's all there is to it.
+
+00:20:27.892 --> 00:20:30.133
+Repeat this for infinity,
+
+00:20:30.134 --> 00:20:32.875
+and you get really really complex networks
+
+00:20:32.876 --> 00:20:35.858
+and can do a lot of amazing things in parallel
+
+00:20:35.859 --> 00:20:39.067
+without interference.
+
+NOTE Learn, Share, Grow
+
+00:20:39.068 --> 00:20:42.439
+I just want to stress that the Zettelkasten
+
+00:20:42.440 --> 00:20:47.032
+can help you to learn when you publish, when you share,
+
+00:20:47.033 --> 00:20:51.181
+and when you grow it and yourself in the process.
+
+00:20:51.182 --> 00:20:54.083
+Again, design the Zettelkasten to be used.
+
+00:20:54.084 --> 00:20:58.159
+Publish something, write a blog, share stuff with co-workers.
+
+00:20:58.160 --> 00:21:00.485
+That's powerful and that's so rewarding.
+
+00:21:00.486 --> 00:21:04.039
+This can in turn influence how you do it
+
+00:21:04.040 --> 00:21:06.033
+the next time in your Zettelkasten,
+
+00:21:06.034 --> 00:21:09.380
+because now you can anticipate these kinds of arguments,
+
+00:21:09.381 --> 00:21:11.979
+maybe I can do this early on,
+
+00:21:11.980 --> 00:21:15.133
+and then you're prepared even more for the future
+
+00:21:15.134 --> 00:21:17.479
+to share what you learn.
+
+00:21:17.480 --> 00:21:20.159
+You are also invited very warmly to our
+
+00:21:20.160 --> 00:21:23.319
+community of practice in the Zettelkasten forums.
+
+00:21:23.320 --> 00:21:26.155
+Just share your journey, write about your projects,
+
+00:21:26.156 --> 00:21:29.793
+ask questions. Everyone's welcome, newbie to pro.
+
+00:21:29.794 --> 00:21:32.674
+Just get in touch with people, talk about the processes,
+
+00:21:32.675 --> 00:21:35.361
+improve them, and eventually you'll figure out, well,
+
+00:21:35.362 --> 00:21:39.979
+reaching enlightenment in that regard may not be that hard after all,
+
+00:21:39.980 --> 00:21:42.953
+and then you're fine and good to go for the next projects
+
+00:21:42.954 --> 00:21:48.559
+that you tackle. Most importantly is to make this thing your own.
+
+00:21:48.560 --> 00:21:50.746
+The Zettelkasten, the method, the environment.
+
+00:21:50.747 --> 00:21:53.474
+Create a thinking environment for you.
+
+00:21:53.475 --> 00:21:56.877
+Create your own tools to think with.
+
+00:21:56.878 --> 00:21:59.378
+This goes back to the meme of Shuhari,
+
+00:21:59.379 --> 00:22:02.800
+which is basically imitate and then deviate and innovate.
+
+00:22:02.801 --> 00:22:07.123
+And this invitation here is to imitate what I just laid out.
+
+00:22:07.124 --> 00:22:10.586
+Imitate for a couple of years. One, two, three years.
+
+00:22:10.587 --> 00:22:12.927
+The time goes by faster [snaps fingers] than you think.
+
+00:22:12.928 --> 00:22:16.448
+And then figure out ways to deviate from the doctrine,
+
+00:22:16.449 --> 00:22:18.909
+to figure out ways to improve
+
+00:22:18.910 --> 00:22:22.030
+and change the processes to fit you better.
+
+00:22:22.031 --> 00:22:24.451
+But you need to try to manifest
+
+00:22:24.452 --> 00:22:26.652
+the best practices in your life first,
+
+00:22:26.653 --> 00:22:28.833
+for a while, to then figure out, well,
+
+00:22:28.834 --> 00:22:30.853
+they are not that best after all
+
+00:22:30.854 --> 00:22:33.054
+and I need to change some of them.
+
+00:22:33.055 --> 00:22:37.064
+But you wouldn't know if you didn't try. So do try.
+
+00:22:37.065 --> 00:22:38.639
+Yeah, and with that I want to thank you.
+
+00:22:38.640 --> 00:22:40.249
+Thank you so much for watching. That's it.
+
+00:22:40.250 --> 00:22:41.531
+That was the conference talk,
+
+00:22:41.532 --> 00:22:45.296
+my short introduction to the Zettelkasten mechanics and habits.
+
+NOTE Outro
+
+00:22:45.297 --> 00:22:46.678
+I want to thank you so much for watching
+
+00:22:46.679 --> 00:22:48.380
+and spending time with me on this topic,
+
+00:22:48.381 --> 00:22:50.143
+on these two topics actually,
+
+00:22:50.144 --> 00:22:52.546
+that are very near and dear to my heart.
+
+00:22:52.547 --> 00:22:55.399
+Do share questions, ask questions in the etherpad.
+
+00:22:55.400 --> 00:22:57.608
+And if you watch this after the conference
+
+00:22:57.609 --> 00:23:01.190
+and all the live participation is long over,
+
+00:23:01.191 --> 00:23:04.632
+step into the forums and ask around there.
+
+00:23:04.633 --> 00:23:09.234
+Thanks also to Sacha and team for organizing EmacsConf 2025,
+
+00:23:09.235 --> 00:23:11.595
+for having me. Well, I'm looking forward to hearing from
+
+00:23:11.596 --> 00:23:14.256
+every one of you. So that's it.
+
+00:23:14.257 --> 00:23:18.360
+Peace out and see you in the next one.
diff --git a/2025/cfp.md b/2025/cfp.md
new file mode 100644
index 00000000..5d3b6d6f
--- /dev/null
+++ b/2025/cfp.md
@@ -0,0 +1,80 @@
+[[!meta title="Call for Participation"]]
+[[!meta copyright="Copyright &copy; 2020 Amin Bandali, Sacha Chua,
+David Bremner<br />
+Copyright &copy; 2021 Amin Bandali, Sacha Chua, Leo Vivier,
+Sebastian Crane<br />
+Copyright &copy; 2022, 2024 Amin Bandali<br />
+Copyright &copy; 2023-2025 Sacha Chua"]]
+[[!tag blog]]
+[[!date "2025-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 2025 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 2025](https://emacsconf.org/2025/) will be a virtual conference on **December 6 and 7, 2025 (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 19, 2025.****
+
+If there are similar proposals, we'll work with people so that the talks can cover different facets.
+
+
+# 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/2025/submit/) as soon as you can, so that you can have more time
+to work on your talk. (Proposal deadline: ****Friday, September 19, 2025****)
+
+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`
+using [your favourite IRC client](ircs://irc.libera.chat:6697/emacsconf), or by visiting [chat.emacsconf.org](https://chat.emacsconf.org) in
+your web browser.
+
+
+# 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 2025 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 2025 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/2025/cfp.org b/2025/cfp.org
new file mode 100644
index 00000000..85cb7283
--- /dev/null
+++ b/2025/cfp.org
@@ -0,0 +1,149 @@
+# [[elisp:(org-md-export-to-markdown)][Export this file to Markdown]]
+# [[elisp:(org-ascii-export-as-ascii)][Export this file to ASCII]]
+#+title: EmacsConf 2025 Call for Participation
+#+subtitle: Online Conference
+#+date: December 6 and 7, 2025
+#+options: author:nil toc:nil
+
+#+begin_export md
+[[!meta title="Call for Participation"]]
+[[!meta copyright="Copyright &copy; 2020 Amin Bandali, Sacha Chua,
+David Bremner<br />
+Copyright &copy; 2021 Amin Bandali, Sacha Chua, Leo Vivier,
+Sebastian Crane<br />
+Copyright &copy; 2022, 2024 Amin Bandali<br />
+Copyright &copy; 2023-2025 Sacha Chua"]]
+[[!tag blog]]
+[[!date "2025-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 2025 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/2025/][EmacsConf 2025]] will be a virtual conference on *December 6 and 7, 2025 (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 19, 2025.**
+
+If there are similar proposals, we'll work with people so that the talks can cover different facets.
+
+* 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/2025/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 19, 2025**)
+
+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=
+using [[ircs://irc.libera.chat:6697/emacsconf][your favourite IRC client]], or by visiting [[https://chat.emacsconf.org][chat.emacsconf.org]] in
+your web browser.
+
+* 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 2025 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 2025 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, 2024 Amin Bandali
+Copyright (c) 2023-2025 Sacha Chua
+
+The EmacsConf 2025 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/2025/draft-schedule.md b/2025/draft-schedule.md
new file mode 100644
index 00000000..69990b20
--- /dev/null
+++ b/2025/draft-schedule.md
@@ -0,0 +1,48 @@
+[[!sidebar content=""]]
+
+This is a *DRAFT* schedule.
+Jump to: <a href="#date-2025-12-06">Sat Dec 6</a> - <a href="#date-2025-12-07">Sun Dec 7</a><a name="date-2025-12-06"></a>
+# Saturday Dec 6, 2025
+[[!inline pages="internal(2025/schedule-2025-12-06)" raw="yes"]]
+
+<div class="schedule" data-start="2025-12-06T14:00:00+0000" data-end="2025-12-06T22:30:00+0000" data-tracks="General,Development">
+[[!template id=sched time="""10""" q-and-a="""<a href="https://pad.emacsconf.org/2025-sat-open">Etherpad</a>""" startutc="""2025-12-06T14:00:00+0000""" endutc="""2025-12-06T14:10:00+0000""" start="""9:00""" end="""9:10""" title="""Saturday opening remarks""" url="""/2025/talks/sat-open""" track="""General""" watch="""https://emacsconf.org/2025/watch/gen""" slug="""sat-open""" note=""""""]]
+[[!template id=sched time="""10""" q-and-a="""<a href="https://pad.emacsconf.org/2025-org-babel">Etherpad</a>""" startutc="""2025-12-06T14:10:00+0000""" endutc="""2025-12-06T14:20:00+0000""" start="""9:10""" end="""9:20""" title="""Making Org-Babel reactive""" url="""/2025/talks/org-babel""" speakers="""Abhinav Tushar""" track="""General""" watch="""https://emacsconf.org/2025/watch/gen""" slug="""org-babel""" note=""""""]]
+[[!template id=sched time="""15""" q-and-a="""<a href="https://media.emacsconf.org/2025/current/bbb-schemacs.html">BBB</a>""" startutc="""2025-12-06T14:30:00+0000""" endutc="""2025-12-06T14:45:00+0000""" start="""9:30""" end="""9:45""" title="""One year progress update Schemacs (formerly Gypsum)""" url="""/2025/talks/schemacs""" speakers="""Ramin Honary""" track="""Development""" watch="""https://emacsconf.org/2025/watch/dev""" slug="""schemacs""" note=""""""]]
+[[!template id=sched time="""20""" q-and-a="""<a href="https://media.emacsconf.org/2025/current/bbb-reference.html">BBB</a>""" startutc="""2025-12-06T14:30:00+0000""" endutc="""2025-12-06T14:50:00+0000""" start="""9:30""" end="""9:50""" title="""Emacs as a fully-fledged reference manager""" url="""/2025/talks/reference""" speakers="""Vidianos Giannitsis""" track="""General""" watch="""https://emacsconf.org/2025/watch/gen""" slug="""reference""" note=""""""]]
+[[!template id=sched time="""20""" q-and-a="""<a href="https://pad.emacsconf.org/2025-juicemacs">Etherpad</a>""" startutc="""2025-12-06T15:05:00+0000""" endutc="""2025-12-06T15:25:00+0000""" start="""10:05""" end="""10:25""" title="""Juicemacs: Exploring Speculative JIT Compilation for ELisp in Java""" url="""/2025/talks/juicemacs""" speakers="""Kana""" track="""Development""" watch="""https://emacsconf.org/2025/watch/dev""" slug="""juicemacs""" note=""""""]]
+[[!template id=sched time="""20""" q-and-a="""<a href="https://pad.emacsconf.org/2025-gmail">Etherpad</a>""" startutc="""2025-12-06T15:10:00+0000""" endutc="""2025-12-06T15:30:00+0000""" start="""10:10""" end="""10:30""" title="""org-gmail: A deep integration of Gmail into your Org Mode""" url="""/2025/talks/gmail""" speakers="""Bala Ramadurai""" track="""General""" watch="""https://emacsconf.org/2025/watch/gen""" slug="""gmail""" note=""""""]]
+[[!template id=sched time="""20""" q-and-a="""none""" startutc="""2025-12-06T15:35:00+0000""" endutc="""2025-12-06T15:55:00+0000""" start="""10:35""" end="""10:55""" title="""Swanky Python: Interactive development for Python""" url="""/2025/talks/swanky""" speakers="""Scott Zimmermann""" track="""Development""" watch="""https://emacsconf.org/2025/watch/dev""" slug="""swanky""" note=""""""]]
+[[!template id=sched time="""10""" q-and-a="""<a href="https://media.emacsconf.org/2025/current/bbb-languages.html">BBB</a>""" startutc="""2025-12-06T15:40:00+0000""" endutc="""2025-12-06T15:50:00+0000""" start="""10:40""" end="""10:50""" title="""Studying foreign languages with Emacs, Org Mode and gptel""" url="""/2025/talks/languages""" speakers="""Marek""" track="""General""" watch="""https://emacsconf.org/2025/watch/gen""" slug="""languages""" note=""""""]]
+[[!template id=sched time="""20""" q-and-a="""<a href="https://media.emacsconf.org/2025/current/bbb-python.html">BBB</a>""" startutc="""2025-12-06T16:05:00+0000""" endutc="""2025-12-06T16:25:00+0000""" start="""11:05""" end="""11:25""" title="""Interactive Python development in Emacs""" url="""/2025/talks/python""" speakers="""David Vujic""" track="""Development""" watch="""https://emacsconf.org/2025/watch/dev""" slug="""python""" note=""""""]]
+[[!template id=sched time="""20""" q-and-a="""<a href="https://media.emacsconf.org/2025/current/bbb-latex.html">BBB</a>""" startutc="""2025-12-06T16:10:00+0000""" endutc="""2025-12-06T16:30:00+0000""" start="""11:10""" end="""11:30""" title="""LaTeX export in org-mode: the overhaul""" url="""/2025/talks/latex""" speakers="""Pedro A. Aranda Gutiérrez""" track="""General""" watch="""https://emacsconf.org/2025/watch/gen""" slug="""latex""" note=""""""]]
+[[!template id=sched time="""20""" q-and-a="""<a href="https://media.emacsconf.org/2025/current/bbb-llm.html">BBB</a>""" startutc="""2025-12-06T18:00:00+0000""" endutc="""2025-12-06T18:20:00+0000""" start="""1:00""" end="""1:20""" title="""Emacs, editors, and LLM driven workflows""" url="""/2025/talks/llm""" speakers="""Andrew Hyatt""" track="""Development""" watch="""https://emacsconf.org/2025/watch/dev""" slug="""llm""" note="""video: 20:04"""]]
+[[!template id=sched time="""20""" q-and-a="""<a href="https://media.emacsconf.org/2025/current/bbb-bibliography.html">BBB</a>""" startutc="""2025-12-06T18:00:00+0000""" endutc="""2025-12-06T18:20:00+0000""" start="""1:00""" end="""1:20""" title="""An enhanced bibliography in org-mode for scientific research and self-directed learning""" url="""/2025/talks/bibliography""" speakers="""Blaine Mooers""" track="""General""" watch="""https://emacsconf.org/2025/watch/gen""" slug="""bibliography""" note=""""""]]
+[[!template id=sched time="""10""" q-and-a="""<a href="https://chat.emacsconf.org/?join=emacsconf">#emacsconf, speaker nick: lispmacs or lispmacs[work]</a>""" startutc="""2025-12-06T18:40:00+0000""" endutc="""2025-12-06T18:50:00+0000""" start="""1:40""" end="""1:50""" title="""Basic Calc functionality for engineering or electronics""" url="""/2025/talks/calc""" speakers="""Christopher Howard""" track="""General""" watch="""https://emacsconf.org/2025/watch/gen""" slug="""calc""" note=""""""]]
+[[!template id=sched time="""20""" q-and-a="""none""" startutc="""2025-12-06T18:40:00+0000""" endutc="""2025-12-06T19:00:00+0000""" start="""1:40""" end="""2:00""" title="""emacs-claude-code: Intelligent Claude Integration for Emacs""" url="""/2025/talks/claude-code""" speakers="""Yusuke Watanabe""" track="""Development""" watch="""https://emacsconf.org/2025/watch/dev""" slug="""claude-code""" note=""""""]]
+[[!template id=sched time="""10""" q-and-a="""<a href="https://media.emacsconf.org/2025/current/bbb-authoring.html">BBB</a>""" startutc="""2025-12-06T19:00:00+0000""" endutc="""2025-12-06T19:10:00+0000""" start="""2:00""" end="""2:10""" title="""How Emacs became my authoring playground—no Lisp required""" url="""/2025/talks/authoring""" speakers="""Uli""" track="""General""" watch="""https://emacsconf.org/2025/watch/gen""" slug="""authoring""" note=""""""]]
+[[!template id=sched time="""20""" q-and-a="""<a href="https://media.emacsconf.org/2025/current/bbb-private-ai.html">BBB</a>""" startutc="""2025-12-06T19:10:00+0000""" endutc="""2025-12-06T19:30:00+0000""" start="""2:10""" end="""2:30""" title="""Emacs and private AI: a great match""" url="""/2025/talks/private-ai""" speakers="""Aaron Grothe""" track="""Development""" watch="""https://emacsconf.org/2025/watch/dev""" slug="""private-ai""" note=""""""]]
+[[!template id=sched time="""20""" q-and-a="""<a href="https://media.emacsconf.org/2025/current/bbb-blee-lcnt.html">BBB</a>""" startutc="""2025-12-06T19:30:00+0000""" endutc="""2025-12-06T19:50:00+0000""" start="""2:30""" end="""2:50""" title="""Blee-LCNT: An Emacs-centered content production and self-publication framework""" url="""/2025/talks/blee-lcnt""" speakers="""Mohsen BANAN""" track="""General""" watch="""https://emacsconf.org/2025/watch/gen""" slug="""blee-lcnt""" note=""""""]]
+[[!template id=sched time="""20""" q-and-a="""<a href="https://chat.emacsconf.org/?join=emacsconf">#emacsconf, speaker nick: screwlisp</a>""" startutc="""2025-12-06T19:50:00+0000""" endutc="""2025-12-06T20:10:00+0000""" start="""2:50""" end="""3:10""" title="""Common Lisp images communicating like-a-human through shared Emacs slime and eev""" url="""/2025/talks/commonlisp""" speakers="""screwlisp""" track="""Development""" watch="""https://emacsconf.org/2025/watch/dev""" slug="""commonlisp""" note=""""""]]
+[[!template id=sched time="""10""" q-and-a="""<a href="https://chat.emacsconf.org/?join=emacsconf">#emacsconf, speaker nick: kreptocracy</a>""" note="""This talk will be narrated by a text-to-speech engine because of a request from the speaker.""" startutc="""2025-12-06T20:10:00+0000""" endutc="""2025-12-06T20:20:00+0000""" start="""3:10""" end="""3:20""" title="""GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence""" url="""/2025/talks/greader""" speakers="""Yuval Langer""" track="""General""" watch="""https://emacsconf.org/2025/watch/gen""" slug="""greader""" note=""""""]]
+[[!template id=sched time="""10""" q-and-a="""<a href="https://media.emacsconf.org/2025/current/bbb-n-angulator.html">BBB</a>""" startutc="""2025-12-06T20:30:00+0000""" endutc="""2025-12-06T20:40:00+0000""" start="""3:30""" end="""3:40""" title="""Org-mode GTD vs N-angulator GTD""" url="""/2025/talks/n-angulator""" speakers="""Kevin Haddock""" track="""General""" watch="""https://emacsconf.org/2025/watch/gen""" slug="""n-angulator""" note=""""""]]
+[[!template id=sched time="""10""" q-and-a="""<a href="https://pad.emacsconf.org/2025-sat-close">Etherpad</a>""" startutc="""2025-12-06T21:00:00+0000""" endutc="""2025-12-06T21:10:00+0000""" start="""4:00""" end="""4:10""" title="""Saturday closing remarks""" url="""/2025/talks/sat-close""" track="""General""" watch="""https://emacsconf.org/2025/watch/gen""" slug="""sat-close""" note=""""""]]</div>
+
+Jump to: <a href="#date-2025-12-06">Sat Dec 6</a> - <a href="#date-2025-12-07">Sun Dec 7</a><a name="date-2025-12-07"></a>
+# Sunday Dec 7, 2025
+[[!inline pages="internal(2025/schedule-2025-12-07)" raw="yes"]]
+
+<div class="schedule" data-start="2025-12-07T14:00:00+0000" data-end="2025-12-07T22:30:00+0000" data-tracks="General,Development">
+[[!template id=sched time="""10""" q-and-a="""<a href="https://pad.emacsconf.org/2025-sun-open">Etherpad</a>""" startutc="""2025-12-07T14:00:00+0000""" endutc="""2025-12-07T14:10:00+0000""" start="""9:00""" end="""9:10""" title="""Sunday opening remarks""" url="""/2025/talks/sun-open""" track="""General""" watch="""https://emacsconf.org/2025/watch/gen""" slug="""sun-open""" note=""""""]]
+[[!template id=sched time="""10""" q-and-a="""<a href="https://media.emacsconf.org/2025/current/bbb-weights.html">BBB</a>""" startutc="""2025-12-07T14:10:00+0000""" endutc="""2025-12-07T14:20:00+0000""" start="""9:10""" end="""9:20""" title="""Weightlifting tracking with Emacs on Android""" url="""/2025/talks/weights""" speakers="""Zachary Romero""" track="""General""" watch="""https://emacsconf.org/2025/watch/gen""" slug="""weights""" note=""""""]]
+[[!template id=sched time="""20""" q-and-a="""<a href="https://chat.emacsconf.org/?join=emacsconf">#emacsconf, speaker nick: edrx</a>""" startutc="""2025-12-07T14:40:00+0000""" endutc="""2025-12-07T15:00:00+0000""" start="""9:40""" end="""10:00""" title="""Some problems of modernizing Emacs""" url="""/2025/talks/modern""" speakers="""Eduardo Ochs""" track="""General""" watch="""https://emacsconf.org/2025/watch/gen""" slug="""modern""" note=""""""]]
+[[!template id=sched time="""20""" q-and-a="""<a href="https://media.emacsconf.org/2025/current/bbb-reader.html">BBB</a>""" startutc="""2025-12-07T15:10:00+0000""" endutc="""2025-12-07T15:30:00+0000""" start="""10:10""" end="""10:30""" title="""An introduction to the Emacs Reader""" url="""/2025/talks/reader""" speakers="""Divyá""" track="""General""" watch="""https://emacsconf.org/2025/watch/gen""" slug="""reader""" note=""""""]]
+[[!template id=sched time="""20""" q-and-a="""<a href="https://media.emacsconf.org/2025/current/bbb-life.html">BBB</a>""" startutc="""2025-12-07T15:50:00+0000""" endutc="""2025-12-07T16:10:00+0000""" start="""10:50""" end="""11:10""" title="""From FRDCSA to FLP2: Building AI-Powered Life Planning Systems in Emacs - A Journey from Research to Real-World Impact""" url="""/2025/talks/life""" speakers="""Andrew John Dougherty""" track="""General""" watch="""https://emacsconf.org/2025/watch/gen""" slug="""life""" note=""""""]]
+[[!template id=sched time="""20""" q-and-a="""<a href="https://media.emacsconf.org/2025/current/bbb-completion.html">BBB</a>""" startutc="""2025-12-07T16:30:00+0000""" endutc="""2025-12-07T16:50:00+0000""" start="""11:30""" end="""11:50""" title="""corfu+yasnippet: Easier than I thought""" url="""/2025/talks/completion""" speakers="""Pedro A. Aranda Gutiérrez""" track="""General""" watch="""https://emacsconf.org/2025/watch/gen""" slug="""completion""" note=""""""]]
+[[!template id=sched time="""20""" q-and-a="""<a href="https://media.emacsconf.org/2025/current/bbb-zettelkasten.html">BBB</a>""" startutc="""2025-12-07T18:00:00+0000""" endutc="""2025-12-07T18:20:00+0000""" start="""1:00""" end="""1:20""" title="""Zettelkasten for regular Emacs hackers""" url="""/2025/talks/zettelkasten""" speakers="""Christian Tietze""" track="""General""" watch="""https://emacsconf.org/2025/watch/gen""" slug="""zettelkasten""" note=""""""]]
+[[!template id=sched time="""30""" q-and-a="""<a href="https://media.emacsconf.org/2025/current/bbb-hyperboleqa.html">BBB</a>""" note="""No recorded presentation, just live Q&A""" startutc="""2025-12-07T18:40:00+0000""" endutc="""2025-12-07T19:10:00+0000""" start="""1:40""" end="""2:10""" title="""Questions and answers to help you fly with Hyperbole""" url="""/2025/talks/hyperboleqa""" speakers="""Bob Weiner""" track="""General""" watch="""https://emacsconf.org/2025/watch/gen""" slug="""hyperboleqa""" note=""""""]]
+[[!template id=sched time="""10""" q-and-a="""none""" startutc="""2025-12-07T19:10:00+0000""" endutc="""2025-12-07T19:20:00+0000""" start="""2:10""" end="""2:20""" title="""Gardening in Emacs: A Windows user's tale of tending, tweaking, and triumph""" url="""/2025/talks/gardening""" speakers="""Marco Bresciani""" track="""General""" watch="""https://emacsconf.org/2025/watch/gen""" slug="""gardening""" note="""video: 17:36"""]]
+[[!template id=sched time="""20""" q-and-a="""none""" startutc="""2025-12-07T19:30:00+0000""" endutc="""2025-12-07T19:50:00+0000""" start="""2:30""" end="""2:50""" title="""Reading and writing emails in GNU Emacs with Gnus""" url="""/2025/talks/gnus""" speakers="""Amin Bandali""" track="""General""" watch="""https://emacsconf.org/2025/watch/gen""" slug="""gnus""" note=""""""]]
+[[!template id=sched time="""20""" q-and-a="""<a href="https://media.emacsconf.org/2025/current/bbb-writing.html">BBB</a>""" startutc="""2025-12-07T20:00:00+0000""" endutc="""2025-12-07T20:20:00+0000""" start="""3:00""" end="""3:20""" title="""A writing day in the life with Org-Mode""" url="""/2025/talks/writing""" speakers="""Jeremy Friesen""" track="""General""" watch="""https://emacsconf.org/2025/watch/gen""" slug="""writing""" note=""""""]]
+[[!template id=sched time="""20""" q-and-a="""<a href="https://media.emacsconf.org/2025/current/bbb-bookclub-tapas.html">BBB</a>""" startutc="""2025-12-07T20:40:00+0000""" endutc="""2025-12-07T21:00:00+0000""" start="""3:40""" end="""4:00""" title="""Bookclub tapas""" url="""/2025/talks/bookclub-tapas""" speakers="""Maddie Sullivan""" track="""General""" watch="""https://emacsconf.org/2025/watch/gen""" slug="""bookclub-tapas""" note=""""""]]
+[[!template id=sched time="""10""" q-and-a="""<a href="https://media.emacsconf.org/2025/current/bbb-sun-close.html">BBB</a>""" startutc="""2025-12-07T21:20:00+0000""" endutc="""2025-12-07T21:30:00+0000""" start="""4:20""" end="""4:30""" title="""Sunday closing remarks""" url="""/2025/talks/sun-close""" track="""General""" watch="""https://emacsconf.org/2025/watch/gen""" slug="""sun-close""" note=""""""]]</div> \ No newline at end of file
diff --git a/2025/info/authoring-after.md b/2025/info/authoring-after.md
new file mode 100644
index 00000000..25e66b40
--- /dev/null
+++ b/2025/info/authoring-after.md
@@ -0,0 +1,7 @@
+<!-- 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%20authoring%3A%20How%20Emacs%20became%20my%20authoring%20playground%E2%80%94no%20Lisp%20required)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2025/info/authoring-before.md b/2025/info/authoring-before.md
new file mode 100644
index 00000000..98b88670
--- /dev/null
+++ b/2025/info/authoring-before.md
@@ -0,0 +1,18 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+
+The following image shows where the talk is in the schedule for Sat 2025-12-06. Solid lines show talks with Q&A via BigBlueButton. Dashed lines show talks with Q&A via IRC or Etherpad.<div class="schedule-in-context schedule-svg-container" data-slug="authoring">
+<svg width="700" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><title>Schedule for Saturday</title><rect width="700" height="150" x="0" y="0" fill="white"></rect><text font-size="10" fill="black" y="12" x="3">Saturday</text><a href="/2025/talks/sat-open" title="Saturday opening remarks" data-slug="sat-open"><title> 9:00- 9:10 Saturday opening remarks</title><rect x="0" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(11,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">sat-open</text></g></a><a href="/2025/talks/org-babel" title="Making Org-Babel reactive" data-slug="org-babel"><title> 9:10- 9:20 Making Org-Babel reactive</title><rect x="13" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(24,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">org-babel</text></g></a><a href="/2025/talks/reference" title="Emacs as a fully-fledged reference manager" data-slug="reference"><title> 9:30- 9:50 Emacs as a fully-fledged reference manager</title><rect x="41" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(66,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">reference</text></g></a><a href="/2025/talks/gmail" title="org-gmail: A deep integration of Gmail into your Org Mode" data-slug="gmail"><title>10:10-10:30 org-gmail: A deep integration of Gmail into your Org Mode</title><rect x="96" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(121,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">gmail</text></g></a><a href="/2025/talks/languages" title="Studying foreign languages with Emacs, Org Mode and gptel" data-slug="languages"><title>10:40-10:50 Studying foreign languages with Emacs, Org Mode and gptel</title><rect x="137" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(148,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">languages</text></g></a><a href="/2025/talks/latex" title="LaTeX export in org-mode: the overhaul" data-slug="latex"><title>11:10-11:30 LaTeX export in org-mode: the overhaul</title><rect x="178" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(203,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">latex</text></g></a><a href="/2025/talks/bibliography" title="An enhanced bibliography in org-mode for scientific research and self-directed learning" data-slug="bibliography"><title> 1:00- 1:20 An enhanced bibliography in org-mode for scientific research and self-directed learning</title><rect x="329" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(354,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">bibliography</text></g></a><a href="/2025/talks/calc" title="Basic Calc functionality for engineering or electronics" data-slug="calc"><title> 1:40- 1:50 Basic Calc functionality for engineering or electronics</title><rect x="384" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(395,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">calc</text></g></a><a href="/2025/talks/authoring" title="How Emacs became my authoring playground—no Lisp required" data-slug="authoring"><title> 2:00- 2:10 How Emacs became my authoring playground—no Lisp required</title><rect stroke-width="3" x="411" y="15" opacity="0.8" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(422,73)"><text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">authoring</text></g></a><a href="/2025/talks/blee-lcnt" title="Blee-LCNT: An Emacs-centered content production and self-publication framework" data-slug="blee-lcnt"><title> 2:30- 2:50 Blee-LCNT: An Emacs-centered content production and self-publication framework</title><rect x="452" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(477,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">blee-lcnt</text></g></a><a href="/2025/talks/greader" title="GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence" data-slug="greader"><title> 3:10- 3:20 GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence</title><rect x="507" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(518,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">greader</text></g></a><a href="/2025/talks/sat-close" title="Saturday closing remarks" data-slug="sat-close"><title> 3:30- 3:40 Saturday closing remarks</title><rect x="535" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(546,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">sat-close</text></g></a><a href="/2025/talks/schemacs" title="One year progress update Schemacs (formerly Gypsum)" data-slug="schemacs"><title> 9:30- 9:45 One year progress update Schemacs (formerly Gypsum)</title><rect x="41" y="75" opacity="0.5" width="20" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(59,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">schemacs</text></g></a><a href="/2025/talks/juicemacs" title="Juicemacs: exploring speculative JIT compilation for ELisp in Java" data-slug="juicemacs"><title>10:05-10:25 Juicemacs: exploring speculative JIT compilation for ELisp in Java</title><rect x="89" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect><g transform="translate(114,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">juicemacs</text></g></a><a href="/2025/talks/swanky" title="Swanky Python: Interactive development for Python" data-slug="swanky"><title>10:35-10:55 Swanky Python: Interactive development for Python</title><rect x="130" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect><g transform="translate(155,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">swanky</text></g></a><a href="/2025/talks/python" title="Interactive Python programming in Emacs" data-slug="python"><title>11:05-11:25 Interactive Python programming in Emacs</title><rect x="171" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(196,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">python</text></g></a><a href="/2025/talks/llm" title="Emacs, editors, and LLM driven workflows" data-slug="llm"><title> 1:00- 1:20 Emacs, editors, and LLM driven workflows</title><rect x="329" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(354,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">llm</text></g></a><a href="/2025/talks/private-ai" title="Emacs and private AI: a great match" data-slug="private-ai"><title> 1:40- 2:00 Emacs and private AI: a great match</title><rect x="384" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(409,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">private-ai</text></g></a><a href="/2025/talks/commonlisp" title="Common Lisp images communicating like-a-human through shared Emacs slime and eev" data-slug="commonlisp"><title> 2:20- 2:40 Common Lisp images communicating like-a-human through shared Emacs slime and eev</title><rect x="439" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect><g transform="translate(464,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">commonlisp</text></g></a><a href="/2025/talks/graphics" title="Modern Emacs/Elisp hardware/software accelerated graphics" data-slug="graphics"><title> 2:50- 3:10 Modern Emacs/Elisp hardware/software accelerated graphics</title><rect x="480" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(505,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">graphics</text></g></a><g transform="translate(0,3)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="140" font-size="10" text-anchor="left">9 AM</text></g><g transform="translate(82,3)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="140" font-size="10" text-anchor="left">10 AM</text></g><g transform="translate(164,3)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="140" font-size="10" text-anchor="left">11 AM</text></g><g transform="translate(247,3)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="140" font-size="10" text-anchor="left">12 PM</text></g><g transform="translate(329,3)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="140" font-size="10" text-anchor="left">1 PM</text></g><g transform="translate(411,3)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="140" font-size="10" text-anchor="left">2 PM</text></g><g transform="translate(494,3)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="140" font-size="10" text-anchor="left">3 PM</text></g><g transform="translate(576,3)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="140" font-size="10" text-anchor="left">4 PM</text></g><g transform="translate(658,3)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="140" font-size="10" text-anchor="left">5 PM</text></g></svg>
+</div>
+
+[[!toc ]]
+Format: 10-min talk ; Q&A: BigBlueButton conference room <https://media.emacsconf.org/2025/current/bbb-authoring.html>
+Discuss on IRC: [#emacsconf](https://chat.emacsconf.org/?join=emacsconf)
+Status: Waiting for video from speaker
+<div>Times in different time zones:</div><div class="times" start="2025-12-06T19:00:00Z" end="2025-12-06T19:10:00Z"><div class="conf-time">Saturday, Dec 6 2025, ~2:00 PM - 2:10 PM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Saturday, Dec 6 2025, ~1:00 PM - 1:10 PM CST (US/Central)<br />Saturday, Dec 6 2025, ~12:00 PM - 12:10 PM MST (US/Mountain)<br />Saturday, Dec 6 2025, ~11:00 AM - 11:10 AM PST (US/Pacific)<br />Saturday, Dec 6 2025, ~7:00 PM - 7:10 PM UTC <br />Saturday, Dec 6 2025, ~8:00 PM - 8:10 PM CET (Europe/Paris)<br />Saturday, Dec 6 2025, ~9:00 PM - 9:10 PM EET (Europe/Athens)<br />Sunday, Dec 7 2025, ~12:30 AM - 12:40 AM IST (Asia/Kolkata)<br />Sunday, Dec 7 2025, ~3:00 AM - 3:10 AM +08 (Asia/Singapore)<br />Sunday, Dec 7 2025, ~4:00 AM - 4:10 AM JST (Asia/Tokyo)</div></div><div><strong><a href="/2025/watch/gen/">Find out how to watch and participate</a></strong></div>
+
+
+
+
+
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2025/info/authoring-nav.md b/2025/info/authoring-nav.md
new file mode 100644
index 00000000..f547b494
--- /dev/null
+++ b/2025/info/authoring-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by time: <a href="/2025/talks/calc">Basic Calc functionality for engineering or electronics</a>
+Next by time: <a href="/2025/talks/commonlisp">Common Lisp images communicating like-a-human through shared Emacs slime and eev</a>
+Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2025/watch/gen">Watch</a></strong>
+</div>
diff --git a/2025/info/bibliography-after.md b/2025/info/bibliography-after.md
new file mode 100644
index 00000000..4254a9da
--- /dev/null
+++ b/2025/info/bibliography-after.md
@@ -0,0 +1,7 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+Questions or comments? Please e-mail [blaine-mooers@ouhsc.edu](mailto:blaine-mooers@ouhsc.edu?subject=Comment%20for%20EmacsConf%202023%20bibliography%3A%20An%20enhanced%20bibliography%20in%20org-mode%20for%20scientific%20research%20and%20self-directed%20learning)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2025/info/bibliography-before.md b/2025/info/bibliography-before.md
new file mode 100644
index 00000000..7bb2a78d
--- /dev/null
+++ b/2025/info/bibliography-before.md
@@ -0,0 +1,18 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+
+The following image shows where the talk is in the schedule for Sat 2025-12-06. Solid lines show talks with Q&A via BigBlueButton. Dashed lines show talks with Q&A via IRC or Etherpad.<div class="schedule-in-context schedule-svg-container" data-slug="bibliography">
+<svg width="700" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><title>Schedule for Saturday</title><rect width="700" height="150" x="0" y="0" fill="white"></rect><text font-size="10" fill="black" y="12" x="3">Saturday</text><a href="https://emacsconf.org/2025/talks/sat-open" title="Saturday opening remarks" data-slug="sat-open"><title> 9:00- 9:10 Saturday opening remarks</title><rect x="0" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(11,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">sat-open</text></g></a><a href="https://emacsconf.org/2025/talks/org-babel" title="Making Org-Babel reactive" data-slug="org-babel"><title> 9:10- 9:20 Making Org-Babel reactive</title><rect x="13" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(24,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">org-babel</text></g></a><a href="https://emacsconf.org/2025/talks/reference" title="Emacs as a fully-fledged reference manager" data-slug="reference"><title> 9:30- 9:55 Emacs as a fully-fledged reference manager</title><rect x="41" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(73,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">reference</text></g></a><a href="https://emacsconf.org/2025/talks/gmail" title="org-gmail: A deep integration of Gmail into your Org Mode" data-slug="gmail"><title>10:15-10:40 org-gmail: A deep integration of Gmail into your Org Mode</title><rect x="102" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(134,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">gmail</text></g></a><a href="https://emacsconf.org/2025/talks/gnus" title="Reading and writing emails in GNU Emacs with Gnus" data-slug="gnus"><title>10:50-11:15 Reading and writing emails in GNU Emacs with Gnus</title><rect x="150" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(182,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">gnus</text></g></a><a href="https://emacsconf.org/2025/talks/latex" title="LaTeX export in org-mode: the overhaul" data-slug="latex"><title>11:25-11:45 LaTeX export in org-mode: the overhaul</title><rect x="199" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(224,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">latex</text></g></a><a href="https://emacsconf.org/2025/talks/bibliography" title="An enhanced bibliography in org-mode for scientific research and self-directed learning" data-slug="bibliography"><title> 1:00- 1:20 An enhanced bibliography in org-mode for scientific research and self-directed learning</title><rect stroke-width="3" x="329" y="15" opacity="0.8" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(354,73)"><text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">bibliography</text></g></a><a href="https://emacsconf.org/2025/talks/calc" title="Basic Calc functionality for engineering or electronics" data-slug="calc"><title> 1:40- 2:05 Basic Calc functionality for engineering or electronics</title><rect x="384" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(416,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">calc</text></g></a><a href="https://emacsconf.org/2025/talks/blee-lcnt" title="Blee-LCNT: An Emacs-centered content production and self-publication framework" data-slug="blee-lcnt"><title> 2:15- 2:55 Blee-LCNT: An Emacs-centered content production and self-publication framework</title><rect x="432" y="15" opacity="0.5" width="54" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(484,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">blee-lcnt</text></g></a><a href="https://emacsconf.org/2025/talks/greader" title="GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence" data-slug="greader"><title> 3:15- 3:25 GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence</title><rect x="514" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(525,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">greader</text></g></a><a href="https://emacsconf.org/2025/talks/sat-close" title="Saturday closing remarks" data-slug="sat-close"><title> 3:30- 3:40 Saturday closing remarks</title><rect x="535" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(546,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">sat-close</text></g></a><a href="https://emacsconf.org/2025/talks/schemacs" title="One year progress update Schemacs (formerly Gypsum)" data-slug="schemacs"><title> 9:30- 9:55 One year progress update Schemacs (formerly Gypsum)</title><rect x="41" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(73,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">schemacs</text></g></a><a href="https://emacsconf.org/2025/talks/juicemacs" title="Juicemacs: exploring speculative JIT compilation for ELisp in Java" data-slug="juicemacs"><title>10:15-10:35 Juicemacs: exploring speculative JIT compilation for ELisp in Java</title><rect x="102" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect><g transform="translate(127,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">juicemacs</text></g></a><a href="https://emacsconf.org/2025/talks/swanky" title="Swanky Python: Interactive development for Python" data-slug="swanky"><title>10:45-11:10 Swanky Python: Interactive development for Python</title><rect x="144" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect><g transform="translate(176,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">swanky</text></g></a><a href="https://emacsconf.org/2025/talks/python" title="Interactive Python programming in Emacs" data-slug="python"><title>11:20-11:40 Interactive Python programming in Emacs</title><rect x="192" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(217,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">python</text></g></a><a href="https://emacsconf.org/2025/talks/llm" title="Emacs, editors, and LLM driven workflows" data-slug="llm"><title> 1:00- 1:25 Emacs, editors, and LLM driven workflows</title><rect x="329" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(361,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">llm</text></g></a><a href="https://emacsconf.org/2025/talks/private-ai" title="Emacs and private AI: a great match" data-slug="private-ai"><title> 1:45- 2:05 Emacs and private AI: a great match</title><rect x="391" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(416,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">private-ai</text></g></a><a href="https://emacsconf.org/2025/talks/commonlisp" title="Common Lisp images communicating like-a-human through shared Emacs slime and eev" data-slug="commonlisp"><title> 2:25- 2:45 Common Lisp images communicating like-a-human through shared Emacs slime and eev</title><rect x="446" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect><g transform="translate(471,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">commonlisp</text></g></a><a href="https://emacsconf.org/2025/talks/graphics" title="Modern Emacs/Elisp hardware/software accelerated graphics" data-slug="graphics"><title> 2:55- 3:20 Modern Emacs/Elisp hardware/software accelerated graphics</title><rect x="487" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(519,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">graphics</text></g></a><g transform="translate(0,3)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="140" font-size="10" text-anchor="left">9 AM</text></g><g transform="translate(82,3)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="140" font-size="10" text-anchor="left">10 AM</text></g><g transform="translate(164,3)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="140" font-size="10" text-anchor="left">11 AM</text></g><g transform="translate(247,3)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="140" font-size="10" text-anchor="left">12 PM</text></g><g transform="translate(329,3)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="140" font-size="10" text-anchor="left">1 PM</text></g><g transform="translate(411,3)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="140" font-size="10" text-anchor="left">2 PM</text></g><g transform="translate(494,3)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="140" font-size="10" text-anchor="left">3 PM</text></g><g transform="translate(576,3)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="140" font-size="10" text-anchor="left">4 PM</text></g><g transform="translate(658,3)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="140" font-size="10" text-anchor="left">5 PM</text></g></svg>
+</div>
+
+[[!toc ]]
+Format: 20-min talk ; Q&A: BigBlueButton conference room <https://media.emacsconf.org/2025/current/bbb-bibliography.html>
+Discuss on IRC: [#emacsconf](https://chat.emacsconf.org/?join=emacsconf)
+Status: Waiting for video from speaker
+<div>Times in different time zones:</div><div class="times" start="2025-12-06T18:00:00Z" end="2025-12-06T18:20:00Z"><div class="conf-time">Saturday, Dec 6 2025, ~1:00 PM - 1:20 PM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Saturday, Dec 6 2025, ~12:00 PM - 12:20 PM CST (US/Central)<br />Saturday, Dec 6 2025, ~11:00 AM - 11:20 AM MST (US/Mountain)<br />Saturday, Dec 6 2025, ~10:00 AM - 10:20 AM PST (US/Pacific)<br />Saturday, Dec 6 2025, ~6:00 PM - 6:20 PM UTC <br />Saturday, Dec 6 2025, ~7:00 PM - 7:20 PM CET (Europe/Paris)<br />Saturday, Dec 6 2025, ~8:00 PM - 8:20 PM EET (Europe/Athens)<br />Saturday, Dec 6 2025, ~11:30 PM - 11:50 PM IST (Asia/Kolkata)<br />Sunday, Dec 7 2025, ~2:00 AM - 2:20 AM +08 (Asia/Singapore)<br />Sunday, Dec 7 2025, ~3:00 AM - 3:20 AM JST (Asia/Tokyo)</div></div><div><strong><a href="/2025/watch/gen/">Find out how to watch and participate</a></strong></div>
+
+
+
+
+
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2025/info/bibliography-nav.md b/2025/info/bibliography-nav.md
new file mode 100644
index 00000000..ae626eb8
--- /dev/null
+++ b/2025/info/bibliography-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by time: <a href="/2025/talks/llm">Emacs, editors, and LLM driven workflows</a>
+Next by time: <a href="/2025/talks/calc">Basic Calc functionality for engineering or electronics</a>
+Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2025/watch/gen">Watch</a></strong>
+</div>
diff --git a/2025/info/blee-lcnt-after.md b/2025/info/blee-lcnt-after.md
new file mode 100644
index 00000000..8983bcf5
--- /dev/null
+++ b/2025/info/blee-lcnt-after.md
@@ -0,0 +1,708 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<div class="transcript transcript-mainVideo"><a name="blee-lcnt-mainVideo-transcript"></a><h1>Transcript</h1>
+
+
+<div class="transcript-heading">[[!template new="1" text="""Introduction""" start="00:00:05.760" video="mainVideo-blee-lcnt" id="subtitle"]]</div>[[!template text="""Greetings. Salaam.""" start="00:00:05.760" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""This is Mohsen Banan.""" start="00:00:08.160" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""I am a software and internet engineer.""" start="00:00:10.160" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""The title of this presentation""" start="00:00:12.840" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""is &quot;Blee-LCNT: An Emacs Centered""" start="00:00:14.680" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""Content Production and Self-Publication Framework&quot;.""" start="00:00:18.840" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""Blee stands for""" start="00:00:23.660" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""ByStar Libre-Halaal Emacs Environment.""" start="00:00:25.560" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""In last year's EmacsConf,""" start="00:00:29.280" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""I introduced Blee, BISOS and ByStar""" start="00:00:31.800" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""as concepts and as foundations.""" start="00:00:36.080" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""This year I want to focus""" start="00:00:39.440" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""on one concrete capability.""" start="00:00:41.080" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""Content Production and Self-Publication""" start="00:00:43.880" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""is a foundational Blee and BISOS Capability Bundle.""" start="00:00:47.960" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""Both this presentation""" start="00:00:54.120" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""and the Nature of Polyexistentials book""" start="00:00:55.760" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""were developed with Blee-LCNT.""" start="00:00:59.080" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""In this presentation I want to look at Emacs""" start="00:01:02.880" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""as a central ingredient""" start="00:01:06.760" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""for a usage environment""" start="00:01:08.520" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""that we can use to orchestrate production of""" start="00:01:10.960" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""quite fancy multi-media presentations.""" start="00:01:14.920" video="mainVideo-blee-lcnt" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Scope: A complete multi-media content processing framework""" start="00:01:20.080" video="mainVideo-blee-lcnt" id="subtitle"]]</div>[[!template text="""Let's consider two different scopes.""" start="00:01:20.080" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""First, the scope of Blee-LCNT Capabilities Bundle,""" start="00:01:23.080" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""which is that of a complete""" start="00:01:27.920" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""multi-media content authorship,""" start="00:01:29.920" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""generation, publication""" start="00:01:32.600" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""and distribution framework.""" start="00:01:34.800" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""That complete scope is presented in this slide""" start="00:01:37.640" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""and it spans both black ink""" start="00:01:41.000" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""and violet ink.""" start="00:01:44.240" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""Second, the scope of this presentation,""" start="00:01:46.640" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""which is more limited.""" start="00:01:49.800" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""In this presentation I confine myself""" start="00:01:52.120" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""to the bullets is violet ink.""" start="00:01:54.920" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""Here, I focus on presentation""" start="00:01:58.520" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""and video as content types""" start="00:02:01.160" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""and their authorship and generation""" start="00:02:03.600" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""and their federated re-publication.""" start="00:02:06.000" video="mainVideo-blee-lcnt" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Prior art and similar art""" start="00:02:10.320" video="mainVideo-blee-lcnt" id="subtitle"]]</div>[[!template text="""This is a common topic.""" start="00:02:10.320" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""It makes good sense for us to start with""" start="00:02:12.560" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""a review of prior art and similar art.""" start="00:02:14.840" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""I went through the past EmacsConf talks""" start="00:02:19.080" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""and found a good number of them""" start="00:02:21.960" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""that also deal with the topic""" start="00:02:23.920" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""of content generation.""" start="00:02:26.000" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""A few of these are included""" start="00:02:28.840" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""in black ink in this slide.""" start="00:02:30.320" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""Many of these have chosen the Babel,""" start="00:02:33.360" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""in other words Org-Mode+LaTeX as primary input.""" start="00:02:35.600" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""I prefer the inverse of that.""" start="00:02:40.720" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""I also looked for past talks""" start="00:02:43.600" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""which have used Reveal.js and LaTeX-Beamer.""" start="00:02:45.840" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""For example, Sacha's use of Reveal.js""" start="00:02:50.000" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""is shown in violet inK.""" start="00:02:53.400" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""And Ihor's use of Beamer is in teal ink.""" start="00:02:56.960" video="mainVideo-blee-lcnt" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""LaTeX-Beamer + Reveal.js with Blee and BISOS""" start="00:03:02.420" video="mainVideo-blee-lcnt" id="subtitle"]]</div>[[!template text="""This presentation is about a combination""" start="00:03:02.420" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""of Reveal.js and LaTeX-Beamer.""" start="00:03:05.400" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""For those who may not be familiar""" start="00:03:08.640" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""with Beamer and Reveal,""" start="00:03:10.600" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""here is a quick intro.""" start="00:03:12.620" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""Among academics, LaTeX-Beamer is the go-to tool""" start="00:03:14.800" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""for producing presentations.""" start="00:03:19.040" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""Reveal.js is recognized""" start="00:03:22.160" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""as the best of breed""" start="00:03:24.240" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""for dispensing HTML slide decks.""" start="00:03:25.920" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""For many, Reveal and Beamer""" start="00:03:29.920" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""live in different universes.""" start="00:03:32.440" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""Beamer is pdf oriented""" start="00:03:35.960" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""and Reveal is html oriented.""" start="00:03:38.680" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""Combining two powerful tools""" start="00:03:42.020" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""makes for an even more powerful tool.""" start="00:03:44.520" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""This Blee-LCNT Presentations combines""" start="00:03:48.360" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""the best of LaTeX-Beamer with Reveal.js.""" start="00:03:51.880" video="mainVideo-blee-lcnt" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Blee-LCNT novel concepts""" start="00:03:57.160" video="mainVideo-blee-lcnt" id="subtitle"]]</div>[[!template text="""Beamer primarily functions as producer""" start="00:03:57.160" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""and Reveal functions as dispenser""" start="00:04:00.680" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""and multi-media enhancer.""" start="00:04:03.100" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""Here is how the combination works.""" start="00:04:05.580" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""LaTeX Beamer pdf result""" start="00:04:08.300" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""is dissected into named frame images""" start="00:04:10.440" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""which can then be inserted in Reveal.js.""" start="00:04:13.840" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""LaTeX Beamer frames can also be""" start="00:04:18.800" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""translated into html with HeVeA""" start="00:04:21.240" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""which can also be inserted in Reveal.js.""" start="00:04:24.800" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""Voice-overs for Beamer frames""" start="00:04:29.000" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""can be correlated to frame names""" start="00:04:31.120" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""and applied to image or html frames.""" start="00:04:34.040" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""Screen captures and image narrations as videos""" start="00:04:37.120" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""can be directly dispensed""" start="00:04:42.080" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""through Reveal.""" start="00:04:44.360" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""There are various additional novel concepts""" start="00:04:46.380" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""with regard to the way""" start="00:04:49.440" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""that we have integrated all of this together.""" start="00:04:50.600" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""Instead of Org-Mode+LaTeX,""" start="00:04:54.560" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""we do LaTeX+Org-Mode.""" start="00:04:57.600" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""Instead of Babel, we do COMEEGA,""" start="00:05:01.000" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""instead of the Literate model""" start="00:05:04.000" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""we introduce the Surrounded model.""" start="00:05:06.000" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""You shall see various examples""" start="00:05:08.840" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""of these shortly.""" start="00:05:10.840" video="mainVideo-blee-lcnt" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Part of a bigger picture - part of a series""" start="00:05:12.520" video="mainVideo-blee-lcnt" id="subtitle"]]</div>[[!template text="""All of this is part of a bigger picture.""" start="00:05:12.520" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""A much bigger picture.""" start="00:05:15.640" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""My talks at EmacsConf 2021, 2022""" start="00:05:17.620" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""and 2024 are related.""" start="00:05:23.600" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""This 2025 talk builds on those.""" start="00:05:26.520" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""Last year's talk &quot;About Blee:""" start="00:05:31.400" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""enveloping our own autonomy""" start="00:05:34.720" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""directed digital ecosystem""" start="00:05:36.840" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""with Emacs&quot; in particular,""" start="00:05:39.000" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""lays the foundations for this talk.""" start="00:05:42.200" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""If you have not seen that,""" start="00:05:44.980" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""it would make good sense to review it.""" start="00:05:47.120" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""In my previous talks I have been criticized""" start="00:05:51.160" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""of having a &quot;prophetic&quot; style.""" start="00:05:54.280" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""The scope of ByStar is lofty and immense.""" start="00:05:58.360" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""In many ways it is unbelievable.""" start="00:06:02.060" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""And EmacsConf talks are meant to be short.""" start="00:06:04.880" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""So, as a result, sometimes""" start="00:06:09.140" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""I end up being cryptic.""" start="00:06:11.840" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""Having accepted the &quot;prophetic&quot; criticism""" start="00:06:13.960" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""as legitimate,""" start="00:06:17.500" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""I now need to put a book on the table.""" start="00:06:19.400" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""With that book in place, moving forward,""" start="00:06:23.600" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""when needing to be cryptic,""" start="00:06:26.840" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""I shall cite Chapter and Verse.""" start="00:06:29.340" video="mainVideo-blee-lcnt" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Nature of polyexistentials""" start="00:06:32.560" video="mainVideo-blee-lcnt" id="subtitle"]]</div>[[!template text="""I am delighted to announce""" start="00:06:32.560" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""the availability of my recent book,""" start="00:06:34.880" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""&quot;Nature of Polyexistentials&quot;.""" start="00:06:37.560" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""The full title of my book is:""" start="00:06:40.200" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""Nature Of Polyexistentials---""" start="00:06:42.960" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""Basis For Abolishment Of The Western""" start="00:06:45.040" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""Intellectual Property Rights Regime---""" start="00:06:48.240" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""And Introduction Of The Libre-Halaal""" start="00:06:51.220" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""ByStar Digital Ecosystem.""" start="00:06:53.900" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""Knowledge, know-how, uses of know-how,""" start="00:06:57.000" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""ideas, formulas, software and information""" start="00:06:59.200" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""are inherently non-scarce.""" start="00:07:02.880" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""They are \*polyexistentials\*.""" start="00:07:05.520" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""Unlike monoexistentials""" start="00:07:08.440" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""which exist in singular,""" start="00:07:10.240" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""polyexistentials naturally exist in multiples.""" start="00:07:12.260" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""What is abundant in nature""" start="00:07:17.540" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""is being made artificially scarce""" start="00:07:19.560" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""through man-made ownership rules""" start="00:07:22.600" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""called copyright and patents.""" start="00:07:25.400" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""These mistaken ownership rules,""" start="00:07:28.600" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""the so called Western IPR regime,""" start="00:07:31.240" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""has immense ramifications""" start="00:07:34.960" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""on the shape and the direction""" start="00:07:37.320" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""of the American Digital Ecosystem.""" start="00:07:38.840" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""It would be an understatement to say""" start="00:07:42.620" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""that the American Digital Ecosystem""" start="00:07:45.120" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""has put humanity in danger.""" start="00:07:47.780" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""Two parts of the book, in particular""" start="00:07:50.600" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""are of immediate relevance.""" start="00:07:53.100" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""Part III, the ethics layer,""" start="00:07:55.680" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""focuses on contours of cures.""" start="00:07:58.220" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""Having dismissed the Western""" start="00:08:01.120" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""intellectual property rights (IPR) regime""" start="00:08:02.840" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""as an erroneous governance model for polyexistentials,""" start="00:08:06.120" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""I propose the Libre-Halaal model""" start="00:08:11.740" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""of governance of polyexistentials""" start="00:08:14.320" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""towards facilitating conviviality of tools.""" start="00:08:17.200" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""Part IV, the engineering layer,""" start="00:08:22.780" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""introduces the Libre-Halaal ByStar Digital Ecosystem.""" start="00:08:25.360" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""as an ethical alternative""" start="00:08:29.600" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""to the prevailing proprietary""" start="00:08:32.400" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""American digital ecosystem.""" start="00:08:34.240" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""The book also provides additional details""" start="00:08:37.500" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""about the content generation""" start="00:08:40.480" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""and publication facilities""" start="00:08:42.920" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""that I am presenting here.""" start="00:08:44.920" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""And the book itself, as content,""" start="00:08:46.840" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""was generated and published""" start="00:08:50.080" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""using the facilities""" start="00:08:53.440" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""that I am presenting here.""" start="00:08:55.320" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""You can think of this book""" start="00:08:57.240" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""as being in two volumes.""" start="00:08:59.200" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""Our focus are Blee and BISOS in Volume II.""" start="00:09:01.160" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""Volume I deals with the general concept""" start="00:09:05.920" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""of polyexistence and invalidity""" start="00:09:10.240" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""of IPR and our terminoloy of Libre-Halaal---""" start="00:09:13.880" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""instead of the common but ill directed vocabulary""" start="00:09:18.680" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""of Free Software and Open-Source and FOSS.""" start="00:09:23.520" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""In Chapter 11, I introduce""" start="00:09:28.240" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""the very sensitive and potent vocabulary""" start="00:09:31.240" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""of Halaal and Libre-Halaal.""" start="00:09:34.760" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""The contents of this book""" start="00:09:37.720" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""belong to all of humanity""" start="00:09:39.080" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""and verbatim copying of it is unrestricted.""" start="00:09:41.660" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""If you want to read it, this book is yours.""" start="00:09:45.520" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""The &quot;Nature of Polyexistentials&quot; book""" start="00:09:49.480" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""is available both online and in print.""" start="00:09:51.840" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""This book is available as two editions.""" start="00:09:56.660" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""The US Edition and the International edition.""" start="00:09:59.440" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""The US Edition is written""" start="00:10:03.820" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""with a slightly milder Western unfriendly tone,""" start="00:10:05.960" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""while the International Edition""" start="00:10:10.080" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""includes additional original content in Farsi.""" start="00:10:12.400" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""I consider the International Edition""" start="00:10:17.620" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""to be the authoritative version.""" start="00:10:20.400" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""However, many readers in""" start="00:10:22.980" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""the US and Western countries""" start="00:10:25.320" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""may prefer the US Edition.""" start="00:10:27.320" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""I maintain separate Git repositories""" start="00:10:31.200" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""for each edition on GitHub:""" start="00:10:34.000" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""US Edition is at bxplpc/120033""" start="00:10:36.040" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""and International Edition: bxplpc/120074""" start="00:10:42.840" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""Cloning these repositories""" start="00:10:51.420" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""will give you access to the book""" start="00:10:53.680" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""in PDF format (suitable for both""" start="00:10:56.400" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""A4 and US Letter printing)""" start="00:11:00.040" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""and in EPUB format.""" start="00:11:04.040" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""Alternatively, the content""" start="00:11:06.380" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""can be downloaded directly from your browser""" start="00:11:08.560" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""without needing to clone the repositories.""" start="00:11:12.040" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""To ensure broader online""" start="00:11:17.260" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""availability and stability,""" start="00:11:19.080" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""I have also published the book on Zenodo,""" start="00:11:21.900" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""complete with a DOI (Digital Object Identifier).""" start="00:11:26.160" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""You can download both the A4""" start="00:11:31.780" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""and 8.5 x 11 PDFs from there as well.""" start="00:11:34.440" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""The book is also available in print on Amazon""" start="00:11:39.640" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""and at most major bookstores""" start="00:11:44.120" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""in the US and Western regions.""" start="00:11:46.240" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""The ISBNs for both editions""" start="00:11:49.380" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""are included in this slide.""" start="00:11:51.520" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""Additionally, I have published""" start="00:11:54.140" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""this book in Iran through Jangal Publishers.""" start="00:11:56.320" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""I did not write this book for profit.""" start="00:12:00.720" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""My aim is to share my thoughts""" start="00:12:03.080" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""and encourage readers to engage with my views and ideas.""" start="00:12:05.360" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""Your feedback is welcome,""" start="00:12:10.600" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""and I am genuinely interested""" start="00:12:12.500" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""in hearing your perspectives.""" start="00:12:14.120" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""In Western markets, I have priced the print edition""" start="00:12:17.200" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""somewhat above production costs.""" start="00:12:20.880" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""If you find value in the book""" start="00:12:24.340" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""and the ByStar project,""" start="00:12:26.640" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""purchasing a copy will help support my work.""" start="00:12:28.600" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""Thanks in advance for your support.""" start="00:12:32.760" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""And here are the same links""" start="00:12:37.460" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""as a native Reveal slide.""" start="00:12:39.480" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""If instead of a video,""" start="00:12:42.180" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""you are viewing this presentation as a Reveal web page,""" start="00:12:43.840" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""you can just click on the pointers and URLs.""" start="00:12:47.760" video="mainVideo-blee-lcnt" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Content processing - a ByStar/BISOS/Blee Capability Bundle (BCB)""" start="00:12:52.640" video="mainVideo-blee-lcnt" id="subtitle"]]</div>[[!template text="""Instead of the traditional model""" start="00:12:52.640" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""of giving you recipes in a DIY context""" start="00:12:55.080" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""towards the goal of creating""" start="00:12:59.560" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""content processing capabilities""" start="00:13:01.480" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""on top of what you may already have,""" start="00:13:04.560" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""I am doing the opposite.""" start="00:13:07.660" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""I am saying: take this whole BISOS and Blee thing,""" start="00:13:09.960" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""and in there you will also have""" start="00:13:15.160" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""the content processing capabilities""" start="00:13:17.560" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""that I am speaking of here.""" start="00:13:20.240" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""So, at the top level we have""" start="00:13:22.580" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""our own autonomy and privacy""" start="00:13:24.920" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""directed digital ecosystem,""" start="00:13:27.520" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""which in contrast to the center oriented""" start="00:13:30.200" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""American digital ecosystem,""" start="00:13:32.840" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""is edge oriented.""" start="00:13:35.660" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""We call it: &quot;The Libre-Halaal""" start="00:13:38.480" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""ByStar Digital Ecosystem&quot;.""" start="00:13:40.920" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""All the systems in ByStar,""" start="00:13:43.920" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""run BISOS (By\* Internet Services OS),""" start="00:13:45.800" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""which is a layer on top of Debian.""" start="00:13:50.700" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""The usage environment of ByStar and BISOS is Blee""" start="00:13:53.760" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""which is a layer on top of Emacs.""" start="00:13:58.200" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""With those in place, we then create""" start="00:14:01.580" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""a capability bundle called Blee-LCNT.""" start="00:14:04.920" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""So, when you buy into Blee and BISOS,""" start="00:14:10.140" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""you will naturally also get""" start="00:14:13.040" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""these content processing capabilities---""" start="00:14:15.200" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""without a need for any recipies or DIY effort.""" start="00:14:18.720" video="mainVideo-blee-lcnt" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""ByStar containment hierarchy and ByStar capability bundles""" start="00:14:23.120" video="mainVideo-blee-lcnt" id="subtitle"]]</div>[[!template text="""If you were to look at the model""" start="00:14:23.120" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""that I introduced as containment hierarchies,""" start="00:14:24.880" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""it would look like this.""" start="00:14:29.120" video="mainVideo-blee-lcnt" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Aggregated conviviality of ByStar capabilities""" start="00:14:31.280" video="mainVideo-blee-lcnt" id="subtitle"]]</div>[[!template text="""We love Emacs and we love Unix""" start="00:14:31.280" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""because their design is convivial.""" start="00:14:33.780" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""By convivial, I am referring""" start="00:14:36.760" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""to Ivan Illich's concept""" start="00:14:39.200" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""and terminology of &quot;Tools for Conviviality&quot;.""" start="00:14:40.760" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""It was first published in 1973.""" start="00:14:45.320" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""It's a must read.""" start="00:14:48.680" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""A goal of the design""" start="00:14:50.960" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""of the ByStar Digital Ecosystem""" start="00:14:52.640" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""is to enlarge the aggregated""" start="00:14:54.800" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""conviviality of its capabilities.""" start="00:14:57.480" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""What distinguishes Blee-LCNT""" start="00:15:01.720" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""from other content processing tools and frameworks,""" start="00:15:04.720" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""is our emphasis on enhancing""" start="00:15:08.960" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""the aggregated conviviality.""" start="00:15:12.440" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""These tools let you express yourself.""" start="00:15:15.660" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""They let you be in charge.""" start="00:15:19.260" video="mainVideo-blee-lcnt" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Parts list: integrated components""" start="00:15:22.000" video="mainVideo-blee-lcnt" id="subtitle"]]</div>[[!template text="""Here is our parts list.""" start="00:15:22.000" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""These are the components""" start="00:15:24.500" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""that we have chosen to bring together""" start="00:15:25.840" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""towards our goal of creating convivial tools.""" start="00:15:27.960" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""In this slide, we are using black ink""" start="00:15:32.780" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""to denote exisiting tools""" start="00:15:36.040" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""and we use violet ink""" start="00:15:38.520" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""to denote pieces that we have developed""" start="00:15:41.340" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""towards cohesive integration.""" start="00:15:44.420" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""[This] video,""" start="00:15:46.560" video="mainVideo-blee-lcnt" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Resulting contents - output forms and formats""" start="00:15:47.868" video="mainVideo-blee-lcnt" id="subtitle"]]</div>[[!template text="""the video is just one of the outputs.""" start="00:15:47.868" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""There are other outputs as well.""" start="00:15:51.480" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""In this figure, the outputs""" start="00:15:54.500" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""are shown in the top layer.""" start="00:15:56.360" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""Using this video as an example,""" start="00:15:58.860" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""this presentation's output also include""" start="00:16:02.280" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""the &quot;Presentation Form&quot;""" start="00:16:05.600" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""and the &quot;Article-Presentation Form&quot;.""" start="00:16:07.600" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""Let's look at these more closely.""" start="00:16:11.000" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""For Presentations, there are 3 different forms.""" start="00:16:13.720" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""The Video Form, the Presentation From""" start="00:16:17.260" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""and the Article-Presentation Form.""" start="00:16:19.560" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""The Presentation Form produces both a pdf output""" start="00:16:22.820" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""and Reveal output.""" start="00:16:27.440" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""Next we will walkthrough some of the benefits""" start="00:16:29.080" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""that availability of these forms""" start="00:16:32.880" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""and formats provide.""" start="00:16:35.520" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""The video presentation that you are watching""" start="00:16:38.100" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""is just one of the outputs""" start="00:16:41.960" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""of the Blee-LCNT machinery.""" start="00:16:44.600" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""There are two PDF format outputs""" start="00:16:48.480" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""and two HTML outputs""" start="00:16:52.680" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""that are also quite useful.""" start="00:16:56.440" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""The primary output of Beamer""" start="00:16:58.860" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""is a set of slides""" start="00:17:02.120" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""that people use to give their talks with.""" start="00:17:04.240" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""Typically that's done live.""" start="00:17:10.440" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""In my case I dissect the images of each frame""" start="00:17:12.480" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""and do a voiceover on it""" start="00:17:19.180" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""and then dispense it through reveal.""" start="00:17:21.640" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""In a second, you will see that as well.""" start="00:17:28.840" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""This PDF output is very useful.""" start="00:17:33.380" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""You get the table of contents, of course,""" start="00:17:36.960" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""and in addition to that,""" start="00:17:39.280" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""Beamer generates navigations for you""" start="00:17:42.208" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""where on any part you get""" start="00:17:46.320" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""a small table of content as well.""" start="00:17:49.600" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""This is heavily used amongst academics,""" start="00:17:51.840" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""and it's a good output on its own,""" start="00:17:57.120" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""and I'm augmenting it""" start="00:18:00.960" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""in a variety of ways.""" start="00:18:03.320" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""In addition to the presentation PDF format,""" start="00:18:05.400" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""there is also an article-presentation PDF format""" start="00:18:09.720" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""which gives you the same content,""" start="00:18:15.360" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""but it gives it to you in a textual form""" start="00:18:18.800" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""with the table of content and the rest.""" start="00:18:25.160" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""This is a good form to use""" start="00:18:30.940" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""when you are giving, for example, class lectures,""" start="00:18:34.760" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""and the students often prefer this format.""" start="00:18:39.920" video="mainVideo-blee-lcnt" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""reveal.js""" start="00:18:45.720" video="mainVideo-blee-lcnt" id="subtitle"]]</div>[[!template text="""Now for the HTML format output, the most relevant,""" start="00:18:45.720" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""of course, is the reveal itself.""" start="00:18:51.840" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""If you have not used reveal before,""" start="00:18:55.600" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""in my view, it's a HTML slide dispenser.""" start="00:19:05.680" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""I don't look at it as a presentation framework.""" start="00:19:10.560" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""I use, as you are seeing, we use Beamer to feed into it""" start="00:19:15.480" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""and we use it to dispense the information.""" start="00:19:22.600" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""It has all the typical navigation""" start="00:19:25.760" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""capabilities that you would expect,""" start="00:19:33.440" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""and most of what I have as slides are images,""" start="00:19:39.960" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""but occasionally, particularly when there is a need""" start="00:19:44.320" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""to provide pointers, HTML pointers,""" start="00:19:48.240" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""I then also include a textual output.""" start="00:19:53.000" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""This is also produced""" start="00:20:01.440" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""from the Beamer LaTeX source,""" start="00:20:05.560" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""but it's HTML through textual HTML,""" start="00:20:09.840" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""through HeVeA, not the image.""" start="00:20:14.960" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""You can... you get a table of contents.""" start="00:20:19.020" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""You can navigate""" start="00:20:22.500" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""and there are a whole lot of other features""" start="00:20:24.575" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""that reveal also provides.""" start="00:20:28.080" video="mainVideo-blee-lcnt" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Generating the video""" start="00:20:31.980" video="mainVideo-blee-lcnt" id="subtitle"]]</div>[[!template text="""So to generate the video,""" start="00:20:31.980" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""what I do is I come to""" start="00:20:35.880" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""the very beginning of the presentation.""" start="00:20:40.981" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""I turn on the screen capture recorder,""" start="00:20:49.460" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""and then I start playing""" start="00:20:51.520" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""the voiceover for each slide""" start="00:20:54.160" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""and at the very end, you get a video,""" start="00:20:58.240" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""but what you just did is you dispensed every frame,""" start="00:21:02.520" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""one at a time, through reveal.""" start="00:21:08.760" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""In addition to this HTML form,""" start="00:21:11.280" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""you also get an article presentation form of it,""" start="00:21:15.320" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""with a full table of contents""" start="00:21:22.240" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""and the videos are there, and the notes are there,""" start="00:21:24.160" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""and this is also quite useful.""" start="00:21:27.760" video="mainVideo-blee-lcnt" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""A unified single input -- a sequencef of frames""" start="00:21:33.480" video="mainVideo-blee-lcnt" id="subtitle"]]</div>[[!template text="""Now, let's look at the one single input file""" start="00:21:33.480" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""that produced all of the outputs""" start="00:21:36.520" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""that we just saw.""" start="00:21:38.880" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""I have put both the input file""" start="00:21:39.880" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""and some of the output files""" start="00:21:43.080" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""for this presentation on Github.""" start="00:21:45.120" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""Here are some links""" start="00:21:48.300" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""to these repos and files.""" start="00:21:49.840" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""And here are the same links""" start="00:21:51.680" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""as a native Reveal slide.""" start="00:21:54.680" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""This figure gives us an overview""" start="00:21:57.120" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""of how one set of inputs""" start="00:21:59.880" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""encapsulted in a single file""" start="00:22:02.760" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""can produce all of the outputs that we saw.""" start="00:22:04.960" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""The main TeX file shown at the bottom""" start="00:22:08.760" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""is processed by both XeLaTeX and by HeVeA.""" start="00:22:11.440" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""That main TeX file, in addition""" start="00:22:15.660" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""to LaTeX syntax,""" start="00:22:18.280" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""also include org-mode constructs""" start="00:22:19.680" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""that facilitate addition of audio and video files.""" start="00:22:23.000" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""Later, I'll walkthrough the bodyPresArtEnFa.tex file""" start="00:22:27.040" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""that generated this very presentation with you.""" start="00:22:34.880" video="mainVideo-blee-lcnt" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Abstractions to keep in mind""" start="00:22:39.180" video="mainVideo-blee-lcnt" id="subtitle"]]</div>[[!template text="""When you construct that primary TeX file,""" start="00:22:39.180" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""there are several abstractions""" start="00:22:42.680" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""that you need to keep in mind.""" start="00:22:44.680" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""Is my presentation going to go""" start="00:22:46.900" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""from Left-To-Right or from Right-To-Left?""" start="00:22:49.120" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""Perso-Arabic presentations go from Right-To-Left.""" start="00:22:52.740" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""Another consideration is the types""" start="00:22:57.040" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""of forms of results that you want.""" start="00:22:59.680" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""Just the presentation""" start="00:23:03.120" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""or Article-Presentation as well?""" start="00:23:05.020" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""With those choices in place""" start="00:23:09.000" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""you can produce condition based text""" start="00:23:10.880" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""for each of your desired outputs.""" start="00:23:13.400" video="mainVideo-blee-lcnt" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Frame control types""" start="00:23:16.200" video="mainVideo-blee-lcnt" id="subtitle"]]</div>[[!template text="""Think of this video presentation""" start="00:23:16.200" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""as a sequence of frames.""" start="00:23:18.920" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""Each frame is controlled by an org-mode dynamic block.""" start="00:23:20.880" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""This table lists available dblocks""" start="00:23:26.120" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""from which you can choose.""" start="00:23:29.040" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""For example, this particular frame""" start="00:23:31.560" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""that we are watching""" start="00:23:34.040" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""is controlled by b:lcnt:pres:frame/derivedImage.""" start="00:23:34.840" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""Beamer creates a pdf file""" start="00:23:41.980" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""that includes the image of this slide.""" start="00:23:44.640" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""That image is then injected into Reveal.""" start="00:23:47.880" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""And in the end, a video of that image is produced""" start="00:23:51.460" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""with the narrations""" start="00:23:55.360" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""that I am uttering right now.""" start="00:23:57.240" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""All of this has similarly been applied""" start="00:23:59.260" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""to each and every frame""" start="00:24:02.200" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""that you have been watching.""" start="00:24:03.600" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""Similar to Frame Controls,""" start="00:24:05.920" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""there are org-mode dynamic blocks""" start="00:24:08.400" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""for &quot;Frame Body Types&quot;.""" start="00:24:10.720" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""You can easily insert an image""" start="00:24:13.520" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""which is typically created by OpenOffice Draw""" start="00:24:15.840" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""into a frame.""" start="00:24:19.640" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""Same with say a screen capture video.""" start="00:24:21.620" video="mainVideo-blee-lcnt" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""How outputs are generate from the inputs""" start="00:24:24.360" video="mainVideo-blee-lcnt" id="subtitle"]]</div>[[!template text="""Now that we have looked at the &quot;Outputs&quot; and the &quot;Inputs&quot;,""" start="00:24:24.360" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""let's look at how the Outputs""" start="00:24:29.320" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""are generated from the Inputs.""" start="00:24:31.680" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""Let's bootstrap Raw-BISOS and Raw-Blee.""" start="00:24:35.920" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""Starting from scratch,""" start="00:24:39.400" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""get yourself a fresh copy of Debian 12.""" start="00:24:41.720" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""Then go to https://github.com/bxGenesis/start .""" start="00:24:45.800" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""The README.org file""" start="00:24:52.720" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""of that github repo""" start="00:24:55.080" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""is same as Chapter 18,""" start="00:24:57.120" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""&quot;Engineering Adoption of BISOS and ByStar&quot; of the book.""" start="00:24:58.640" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""We will next run &quot;raw-bisos.sh&quot;,""" start="00:25:01.960" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""but prior to that, let's take a quick look.""" start="00:25:05.360" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""This bootstrap scripts will do a lot as root""" start="00:25:09.960" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""on your Fresh-Debian.""" start="00:25:14.760" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""It is best to first try it""" start="00:25:16.480" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""on a disposable VM.""" start="00:25:18.600" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""raw-bisos.sh adds the current debian user to sudoers.""" start="00:25:21.180" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""Then it installs pipx.""" start="00:25:27.160" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""And then with pipx it installs""" start="00:25:30.400" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""from PyPI bisos.provision.""" start="00:25:34.200" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""bisos.provision includes additional bash scripts""" start="00:25:38.000" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""that are then executed.""" start="00:25:43.280" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""Full installation involves""" start="00:25:45.360" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""setting up various accounts, groups,""" start="00:25:48.160" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""various directory hierarchies,""" start="00:25:51.040" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""lots of apt packages""" start="00:25:53.280" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""and lots of python packages""" start="00:25:55.440" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""from the bisos namespace.""" start="00:25:57.980" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""If you are ready, copy and paste""" start="00:26:01.500" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""this line and run it.""" start="00:26:03.880" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""You will be prompted""" start="00:26:06.600" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""for the root password.""" start="00:26:08.040" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""Then be patient.""" start="00:26:09.620" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""Full installation""" start="00:26:11.280" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""can take 15 minutes or so.""" start="00:26:12.560" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""The logs of this script""" start="00:26:14.520" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""are also captured""" start="00:26:17.080" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""in ~/raw-bisos-${dateTag}-log.org""" start="00:26:18.520" video="mainVideo-blee-lcnt" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Context for unified source walkthrough""" start="00:26:25.200" video="mainVideo-blee-lcnt" id="subtitle"]]</div>[[!template text="""Now that we have Raw-BISOS and Raw-Blee installed,""" start="00:26:25.200" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""we are ready to walk through""" start="00:26:28.960" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""the unified source""" start="00:26:31.040" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""of the very presentation""" start="00:26:32.320" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""that you are watching.""" start="00:26:34.440" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""The &quot;bodyPresArtEnFa.tex&quot; file""" start="00:26:36.260" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""that we will visit""" start="00:26:40.960" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""is in COMEEGA-LaTeX syntax""" start="00:26:42.440" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""with lots of org-mode dblocks""" start="00:26:45.060" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""which generate Beamer-LaTeX frames""" start="00:26:47.700" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""and conditioned LaTeX bodies.""" start="00:26:50.480" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""After the walkthrough,""" start="00:26:54.140" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""I'll describe dblocks and COMEEGA in more detail.""" start="00:26:55.600" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""At the tail end of the walkthrough,""" start="00:27:00.360" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""we will also go through the generation process""" start="00:27:02.240" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""which runs XeLaTeX and HeVeA and a lot more.""" start="00:27:05.320" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""Let's look at our input file.""" start="00:27:10.860" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""It's a LaTeX file in LaTeX mode,""" start="00:27:13.620" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""and it has org syntax org-mode included in it,""" start="00:27:17.020" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""and I can toggle between LaTeX and org-mode.""" start="00:27:24.280" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""So, now I'm gonna be in org-mode,""" start="00:27:29.560" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""and org-mode gives me everything""" start="00:27:33.600" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""that org has to offer,""" start="00:27:37.840" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""including a very convenient navigation framework.""" start="00:27:39.400" video="mainVideo-blee-lcnt" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""One slide""" start="00:27:46.480" video="mainVideo-blee-lcnt" id="subtitle"]]</div>[[!template text="""Let's take one slide and take a look at how it was done.""" start="00:27:46.480" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""So I would come to this scope slide""" start="00:27:54.280" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""and while I am there, I'm going to click on N.""" start="00:27:58.680" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""N takes me to the native LaTeX form back,""" start="00:28:04.000" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""so that I'll be looking at it not in org, but in LaTeX.""" start="00:28:09.760" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""So we're back in LaTeX, and as you can see""" start="00:28:16.360" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""it uses a dynamic block""" start="00:28:22.907" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""starting with the comments and the BEGIN,""" start="00:28:26.000" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""and it uses a dynamic block""" start="00:28:30.800" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""named a framedDrive image,""" start="00:28:34.840" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""which means the content of this frame""" start="00:28:38.080" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""will be dispensed as an image, not as text,""" start="00:28:45.400" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""and it also automatically creates for me""" start="00:28:50.440" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""a name, a label, that can be used""" start="00:28:56.900" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""for voiceover augmentation.""" start="00:29:00.440" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""So a file in the audio directory""" start="00:29:05.120" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""called ScopeOfBleeLcnt.mp3""" start="00:29:08.120" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""is this audio that will come on top of this slide""" start="00:29:13.040" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""and then the rest is the LaTeX itself.""" start="00:29:19.320" video="mainVideo-blee-lcnt" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Dynamic blocks""" start="00:29:24.080" video="mainVideo-blee-lcnt" id="subtitle"]]</div>[[!template text="""The concept of &quot;Org Dynamic Blocks&quot;""" start="00:29:24.080" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""is very powerful.""" start="00:29:29.680" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""I think of them as universal""" start="00:29:31.520" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""visible macros.""" start="00:29:33.600" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""But, why should they be primarily used in just Org-Mode?""" start="00:29:35.180" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""I say, let's generalize them""" start="00:29:41.360" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""to &quot;Emacs Dynamic Blocks&quot;.""" start="00:29:43.640" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""Have defaults for org-dblock-start-re""" start="00:29:46.060" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""in every relevant mode""" start="00:29:49.960" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""and use them everywhere.""" start="00:29:52.160" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""Blee does that.""" start="00:29:55.100" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""In COMEEGA-LaTeX, Dynamic Blocks create Frame Controls""" start="00:29:56.320" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""and insert Image and Video contents.""" start="00:30:01.720" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""Much of Blee and BISOS""" start="00:30:05.520" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""are implemented in COMEEGA.""" start="00:30:07.520" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""Almost all of our Elisp, Python, Bash""" start="00:30:09.960" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""and LaTeX work uses COMEEGA.""" start="00:30:13.600" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""COMEEGA stands for Collaborative""" start="00:30:17.200" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""Org-Mode""" start="00:30:19.300" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""Enhanced Emacs Generalized Authorship.""" start="00:30:21.680" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""It is the inverse of org-babel.""" start="00:30:24.760" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""COMEEGA adds org-mode""" start="00:30:27.880" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""to your programming mode.""" start="00:30:30.000" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""Full and proper use of COMEEGA,""" start="00:30:33.100" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""requires Polymode.""" start="00:30:35.080" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""Let's call that Poly-COMEEGA.""" start="00:30:38.300" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""But Emacs's Polymode""" start="00:30:41.360" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""is work-in-progress,""" start="00:30:43.320" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""particularly now with the new tree-sitter.""" start="00:30:45.680" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""So, in the interim, my usage of COMEEGA""" start="00:30:49.200" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""has been in the form of Toggle-COMEEGA.""" start="00:30:53.200" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""Where I manually switch between""" start="00:30:55.920" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""the programming-mode and org-mode.""" start="00:30:59.480" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""For me this has proved to be""" start="00:31:02.360" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""a fine interim solution.""" start="00:31:04.200" video="mainVideo-blee-lcnt" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Internationalization - a non-Americanist perspective""" start="00:31:05.800" video="mainVideo-blee-lcnt" id="subtitle"]]</div>[[!template text="""Naturally, content processing""" start="00:31:05.800" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""should be multi-lingual""" start="00:31:09.680" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""and internationalized.""" start="00:31:11.240" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""Let's look at that dimension.""" start="00:31:14.160" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""I am Iranian and much of what I write is in Farsi.""" start="00:31:15.840" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""Getting Perso-Arabic text right""" start="00:31:21.020" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""is often a challenge,""" start="00:31:23.520" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""as it involves Bi-Directional text (BIDI)""" start="00:31:25.520" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""and shaping of characters.""" start="00:31:30.060" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""In the context of our content generation""" start="00:31:33.000" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""these need to span all relevant tools,""" start="00:31:36.040" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""not just emacs.""" start="00:31:39.820" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""For emacs, I have created""" start="00:31:41.760" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""my own input method""" start="00:31:43.760" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""called farsi-transliterate-banan.""" start="00:31:46.240" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""My EmacsConf 2021 talk was about that.""" start="00:31:49.420" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""Now let's look at some examples""" start="00:31:54.140" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""and spice it up a bit with semantics.""" start="00:31:57.200" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""As an example of proper BIDI text,""" start="00:32:01.700" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""here is the orignal Farsi text""" start="00:32:05.280" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""along with English translation""" start="00:32:07.900" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""of Imam Khomeini's text""" start="00:32:10.360" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""with respect to invalidity""" start="00:32:12.520" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""of Western Intellectual Proprty Rights regime.""" start="00:32:15.480" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""And as another example""" start="00:32:20.400" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""of proper BIDI text,""" start="00:32:23.040" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""here is Ayatollah Mothari's take on Western IPR""" start="00:32:24.480" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""not being private property. Note that these predate""" start="00:32:29.920" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""by more than half a century""" start="00:32:35.160" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""Jack Dorsey and Elon Musk's tweets of April 11, 2025""" start="00:32:36.920" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""saying &quot;Delete all IP law&quot;.""" start="00:32:43.240" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""This topic is too important""" start="00:32:47.200" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""and too sensitive""" start="00:32:49.160" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""to be left to American billionaires""" start="00:32:50.400" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""and their tweets.""" start="00:32:53.640" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""Let me again refer you to the logic""" start="00:32:55.640" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""of polyexistentials in my book.""" start="00:32:58.200" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""Chapter 14 of the book is dedicated to""" start="00:33:00.600" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""Ethics and ownership in Religions.""" start="00:33:06.360" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""With respect to my preference""" start="00:33:08.580" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""for Ethics over Freedom,""" start="00:33:10.920" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""let me refer you to Section 12.4""" start="00:33:12.720" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""&quot;A Cynical Perspective""" start="00:33:16.520" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""on Freedom Orientation of Americans&quot;""" start="00:33:19.080" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""in which I describe where the FOSS labels""" start="00:33:22.860" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""and the likes of Stallman, Raymond,""" start="00:33:26.000" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""Moglen and Lessig have gone wrong.""" start="00:33:29.040" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""If you are one of their followers,""" start="00:33:31.600" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""perhaps Chapter 12 is for you.""" start="00:33:34.240" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""My emphasis thus far has been on content generation.""" start="00:33:36.600" video="mainVideo-blee-lcnt" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Autonomous self-publication and federated re-publications""" start="00:33:42.280" video="mainVideo-blee-lcnt" id="subtitle"]]</div>[[!template text="""Let's very briefly also look at""" start="00:33:42.280" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""Autonomous Self-Publication""" start="00:33:45.000" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""and Federated Re-Publications of our content.""" start="00:33:47.160" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""From the very beginning the Debian folks""" start="00:33:52.280" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""understood the importance of &quot;Universality&quot;""" start="00:33:55.760" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""and coined the &quot;Universal Debian&quot; label.""" start="00:33:59.040" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""This means that we can base""" start="00:34:03.360" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""our entire digital ecosystem""" start="00:34:05.920" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""on just the Libre-Halaal Debian distro.""" start="00:34:08.620" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""And that is what we have done with ByStar.""" start="00:34:13.500" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""In ByStar, everything is based on""" start="00:34:17.300" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""just the Universal Debian everywhere.""" start="00:34:20.040" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""This has made our Usage Environment""" start="00:34:24.120" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""totally harmonious with our Service Environment""" start="00:34:27.000" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""allowing for very powerful software-service continuums.""" start="00:34:31.320" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""Of course, all of this is immediately applicable""" start="00:34:38.060" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""to our ByStar Content Bundle as well.""" start="00:34:41.480" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""Some have asked, why don't you also include Ubuntu?""" start="00:34:46.020" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""I think the opposite makes more sense.""" start="00:34:50.520" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""Ubuntu should converge with Debian.""" start="00:34:53.680" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""I tried to explain this to Mark Shuttleworth""" start="00:34:56.700" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""in an email a while back.""" start="00:34:59.640" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""I have included that email""" start="00:35:02.480" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""in Section 12.1.5.""" start="00:35:04.120" video="mainVideo-blee-lcnt" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Ingredients of BISOS platforms and their progression""" start="00:35:07.720" video="mainVideo-blee-lcnt" id="subtitle"]]</div>[[!template text="""In this presentation, we have stopped""" start="00:35:07.720" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""at the &quot;Raw-BISOS&quot; stage.""" start="00:35:10.440" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""We can further evolve Raw-BISOS""" start="00:35:13.160" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""and make it be &quot;Sited&quot;""" start="00:35:15.760" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""and provide autonomous publication services.""" start="00:35:17.960" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""But here by going through EmacsConf and youtube""" start="00:35:22.240" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""we are using the &quot;Federated Re-Publications&quot; model.""" start="00:35:25.680" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""Something this large,""" start="00:35:30.960" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""should be well documented.""" start="00:35:32.480" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""In Emacs, the way that""" start="00:35:35.480" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""we have been dealing with documentation""" start="00:35:37.080" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""and information retrieval is archaic.""" start="00:35:39.320" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""Man-pages, TeXInfo, Helpful-Mode""" start="00:35:43.440" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""and convention based Doc-Strings are old and limited.""" start="00:35:46.080" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""In BISOS and Blee, we use Blee-Panels""" start="00:35:51.600" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""for all kinds of documentation.""" start="00:35:55.280" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""Let me show you some examples.""" start="00:35:57.740" video="mainVideo-blee-lcnt" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Moving forward""" start="00:36:02.560" video="mainVideo-blee-lcnt" id="subtitle"]]</div>[[!template text="""So, what next?""" start="00:36:02.560" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""If Blee, BISOS, ByStar, Libre-Halaal, Polyexistentials""" start="00:36:05.200" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""and these Content Processing capabilities""" start="00:36:10.600" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""have piqued your interest,""" start="00:36:14.160" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""please feel welcome to contact me.""" start="00:36:16.640" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""These Emacs Conferences have proven""" start="00:36:19.380" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""to be very useful and productive.""" start="00:36:22.240" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""I look forward to your thoughts,""" start="00:36:25.380" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""feedback and questions.""" start="00:36:27.200" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""I want to thank all the EmacsConf 2025 Organizers""" start="00:36:29.600" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""for their great work,""" start="00:36:35.360" video="mainVideo-blee-lcnt" id="subtitle"]]
+[[!template text="""and Sacha in particular.""" start="00:36:37.200" video="mainVideo-blee-lcnt" id="subtitle"]]
+
+</div>
+
+Captioner: mohsen
+
+Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202023%20blee-lcnt%3A%20Blee-LCNT%3A%20An%20Emacs-centered%20content%20production%20and%20self-publication%20framework)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2025/info/blee-lcnt-before.md b/2025/info/blee-lcnt-before.md
new file mode 100644
index 00000000..ef6b39b5
--- /dev/null
+++ b/2025/info/blee-lcnt-before.md
@@ -0,0 +1,46 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+
+The following image shows where the talk is in the schedule for Sat 2025-12-06. Solid lines show talks with Q&A via BigBlueButton. Dashed lines show talks with Q&A via IRC or Etherpad.<div class="schedule-in-context schedule-svg-container" data-slug="blee-lcnt">
+<svg width="700" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Schedule for Saturday</title> <rect width="700" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="/2025/talks/sat-open" title="Saturday opening remarks" data-slug="sat-open"> <title> 9:00- 9:10 Saturday opening remarks</title> <rect x="0" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(11,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="/2025/talks/org-babel" title="Making Org-Babel reactive" data-slug="org-babel"> <title> 9:10- 9:20 Making Org-Babel reactive</title> <rect x="13" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(24,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> org-babel</text></g></a> <a href="/2025/talks/reference" title="Emacs as a fully-fledged reference manager" data-slug="reference"> <title> 9:30- 9:55 Emacs as a fully-fledged reference manager</title> <rect x="41" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(73,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> reference</text></g></a> <a href="/2025/talks/gmail" title="org-gmail: A deep integration of Gmail into your Org Mode" data-slug="gmail"> <title> 10:15-10:40 org-gmail: A deep integration of Gmail into your Org Mode</title> <rect x="102" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(134,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gmail</text></g></a> <a href="/2025/talks/gnus" title="Reading and writing emails in GNU Emacs with Gnus" data-slug="gnus"> <title> 10:50-11:15 Reading and writing emails in GNU Emacs with Gnus</title> <rect x="150" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(182,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gnus</text></g></a> <a href="/2025/talks/latex" title="LaTeX export in org-mode: the overhaul" data-slug="latex"> <title> 11:25-11:45 LaTeX export in org-mode: the overhaul</title> <rect x="199" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(224,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> latex</text></g></a> <a href="/2025/talks/calc" title="Basic Calc functionality for engineering or electronics" data-slug="calc"> <title> 1:00- 1:25 Basic Calc functionality for engineering or electronics</title> <rect x="329" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(361,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> calc</text></g></a> <a href="/2025/talks/blee-lcnt" title="Blee-LCNT: An Emacs-centered content production and self-publication framework" data-slug="blee-lcnt"> <title> 1:35- 2:15 Blee-LCNT: An Emacs-centered content production and self-publication framework</title> <rect stroke-width="3" x="377" y="15" opacity="0.8" width="54" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(429,73)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> blee-lcnt</text></g></a> <a href="/2025/talks/greader" title="GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence" data-slug="greader"> <title> 2:35- 2:40 GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence</title> <rect x="459" y="15" opacity="0.5" width="6" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(463,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> greader</text></g></a> <a href="/2025/talks/open-mic" title="Open session" data-slug="open-mic"> <title> 2:50- 3:40 Open session</title> <rect x="480" y="15" opacity="0.5" width="68" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(546,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> open-mic</text></g></a> <a href="/2025/talks/sat-close" title="Saturday closing remarks / open session" data-slug="sat-close"> <title> 4:00- 4:10 Saturday closing remarks / open session</title> <rect x="576" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(587,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="/2025/talks/schemacs" title="One year progress update Schemacs (formerly Gypsum)" data-slug="schemacs"> <title> 9:30- 9:55 One year progress update Schemacs (formerly Gypsum)</title> <rect x="41" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(73,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> schemacs</text></g></a> <a href="/2025/talks/juicemacs" title="Juicemacs: exploring speculative JIT compilation for ELisp in Java" data-slug="juicemacs"> <title> 10:15-10:35 Juicemacs: exploring speculative JIT compilation for ELisp in Java</title> <rect x="102" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(127,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> juicemacs</text></g></a> <a href="/2025/talks/swanky" title="Swanky Python: Interactive development for Python" data-slug="swanky"> <title> 10:45-11:10 Swanky Python: Interactive development for Python</title> <rect x="144" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(176,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> swanky</text></g></a> <a href="/2025/talks/python" title="Interactive Python programming in Emacs" data-slug="python"> <title> 11:20-11:40 Interactive Python programming in Emacs</title> <rect x="192" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(217,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <a href="/2025/talks/llm" title="Emacs, editors, and LLM driven workflows" data-slug="llm"> <title> 1:00- 1:25 Emacs, editors, and LLM driven workflows</title> <rect x="329" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(361,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> llm</text></g></a> <a href="/2025/talks/private-ai" title="Emacs and private AI: a great match" data-slug="private-ai"> <title> 1:45- 2:05 Emacs and private AI: a great match</title> <rect x="391" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(416,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> private-ai</text></g></a> <a href="/2025/talks/commonlisp" title="Common Lisp images communicating like-a-human through shared Emacs slime and eev" data-slug="commonlisp"> <title> 2:25- 2:55 Common Lisp images communicating like-a-human through shared Emacs slime and eev</title> <rect x="446" y="75" opacity="0.5" width="41" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(485,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> commonlisp</text></g></a> <a href="/2025/talks/graphics" title="Modern Emacs/Elisp hardware/software accelerated graphics" data-slug="graphics"> <title> 3:05- 3:30 Modern Emacs/Elisp hardware/software accelerated graphics</title> <rect x="500" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(532,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> graphics</text></g></a> <g transform="translate(0,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(82,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(164,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(247,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(329,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(411,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(494,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(576,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(658,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 5 PM</text></g></svg>
+</div>
+
+[[!toc ]]
+Format: 37-min talk ; Q&A: BigBlueButton conference room <https://media.emacsconf.org/2025/current/bbb-blee-lcnt.html> Etherpad: <https://pad.emacsconf.org/2025-blee-lcnt>
+Etherpad: <https://pad.emacsconf.org/2025-blee-lcnt>
+Discuss on IRC: [#emacsconf-gen](https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen)
+Status: Q&A finished, IRC and pad will be archived on this page
+
+
+
+
+
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-blee-lcnt"><source src="https://media.emacsconf.org/2025/emacsconf-2025-blee-lcnt--bleelcnt-an-emacscentered-content-production-and-selfpublication-framework--mohsen-banan--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2025/captions/emacsconf-2025-blee-lcnt--bleelcnt-an-emacscentered-content-production-and-selfpublication-framework--mohsen-banan--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2025/captions/emacsconf-2025-blee-lcnt--bleelcnt-an-emacscentered-content-production-and-selfpublication-framework--mohsen-banan--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="mainVideo-blee-lcnt" data="""
+00:05.760 Introduction
+01:20.080 Scope: A complete multi-media content processing framework
+02:10.320 Prior art and similar art
+03:02.420 LaTeX-Beamer + Reveal.js with Blee and BISOS
+03:57.160 Blee-LCNT novel concepts
+05:12.520 Part of a bigger picture - part of a series
+06:32.560 Nature of polyexistentials
+12:52.640 Content processing - a ByStar/BISOS/Blee Capability Bundle (BCB)
+14:23.120 ByStar containment hierarchy and ByStar capability bundles
+14:31.280 Aggregated conviviality of ByStar capabilities
+15:22.000 Parts list: integrated components
+15:47.868 Resulting contents - output forms and formats
+18:45.720 reveal.js
+20:31.980 Generating the video
+21:33.480 A unified single input -- a sequencef of frames
+22:39.180 Abstractions to keep in mind
+23:16.200 Frame control types
+24:24.360 How outputs are generate from the inputs
+26:25.200 Context for unified source walkthrough
+27:46.480 One slide
+29:24.080 Dynamic blocks
+31:05.800 Internationalization - a non-Americanist perspective
+33:42.280 Autonomous self-publication and federated re-publications
+35:07.720 Ingredients of BISOS platforms and their progression
+36:02.560 Moving forward
+
+"""]]<div></div>Duration: 36:41 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2025-blee-lcnt">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2025/current/bbb-blee-lcnt.html">Open public Q&A</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-blee-lcnt--bleelcnt-an-emacscentered-content-production-and-selfpublication-framework--mohsen-banan--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-blee-lcnt--bleelcnt-an-emacscentered-content-production-and-selfpublication-framework--mohsen-banan--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-blee-lcnt--bleelcnt-an-emacscentered-content-production-and-selfpublication-framework--mohsen-banan--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-blee-lcnt--bleelcnt-an-emacscentered-content-production-and-selfpublication-framework--mohsen-banan--main.opus">Download --main.opus (32MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-blee-lcnt--bleelcnt-an-emacscentered-content-production-and-selfpublication-framework--mohsen-banan--main.png">Download --main.png</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-blee-lcnt--bleelcnt-an-emacscentered-content-production-and-selfpublication-framework--mohsen-banan--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-blee-lcnt--bleelcnt-an-emacscentered-content-production-and-selfpublication-framework--mohsen-banan--main.webm">Download --main.webm (97MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-blee-lcnt--bleelcnt-an-emacscentered-content-production-and-selfpublication-framework--mohsen-banan--script.txt">Download --script.txt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-blee-lcnt--bleelcnt-an-emacscentered-content-production-and-selfpublication-framework--mohsen-banan--split.txt">Download --split.txt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-blee-lcnt--bleelcnt-an-emacscentered-content-production-and-selfpublication-framework--mohsen-banan--split.vtt">Download --split.vtt</a></li><li><a href="https://youtu.be/49e0ES-nk0k">View on Youtube</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2025/info/blee-lcnt-nav.md b/2025/info/blee-lcnt-nav.md
new file mode 100644
index 00000000..fcf1d9fe
--- /dev/null
+++ b/2025/info/blee-lcnt-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by time: <a href="/2025/talks/llm">Emacs, editors, and LLM driven workflows</a>
+Next by time: <a href="/2025/talks/private-ai">Emacs and private AI: a great match</a>
+Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2025/watch/gen">Watch</a></strong>
+</div>
diff --git a/2025/info/bookclub-tapas-after.md b/2025/info/bookclub-tapas-after.md
new file mode 100644
index 00000000..c4b08e7c
--- /dev/null
+++ b/2025/info/bookclub-tapas-after.md
@@ -0,0 +1,821 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<div class="transcript transcript-mainVideo"><a name="bookclub-tapas-mainVideo-transcript"></a><h1>Transcript</h1>
+
+
+<div class="transcript-heading">[[!template new="1" text="""Introduction""" start="00:00:00.620" video="mainVideo-bookclub-tapas" id="subtitle"]]</div>[[!template text="""Alright! Hi everyone! Happy EmacsConf!""" start="00:00:00.620" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""I´m so excited to be here.""" start="00:00:04.160" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""It's surreal to be part""" start="00:00:07.080" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""of the conference itself,""" start="00:00:07.960" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""in addition to being a viewer.""" start="00:00:09.440" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""EmacsConf is like Christmas to me,""" start="00:00:11.240" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""and I'm so excited when it comes around every year.""" start="00:00:13.880" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""Today, my talk is on a programming methodology""" start="00:00:18.160" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""that I've created, discovered, stumbled upon.""" start="00:00:21.120" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""I call it &quot;Bookclub Tapas.&quot;""" start="00:00:24.000" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""Before we get into that,""" start="00:00:26.440" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""let me introduce myself.""" start="00:00:27.760" video="mainVideo-bookclub-tapas" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Hi, I'm Maddie!""" start="00:00:29.680" video="mainVideo-bookclub-tapas" id="subtitle"]]</div>[[!template text="""My name is Maddie Sullivan,""" start="00:00:29.680" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""and my pronouns are she/her.""" start="00:00:32.120" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""I go by the handle ElephantErgonomics,""" start="00:00:34.240" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""which is shortened down to ElephantErgo in the IRC.""" start="00:00:36.720" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""You can reach out to me after the talk""" start="00:00:41.120" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""for questions, comments,""" start="00:00:43.080" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""or just to say hello by reaching out""" start="00:00:44.960" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""to hello@ElephantErgonomics.com.""" start="00:00:47.760" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""So this software development strategy I found,""" start="00:00:56.960" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""it's inspired by literate programming and Agile.""" start="00:01:00.040" video="mainVideo-bookclub-tapas" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Bookclub Tapas""" start="00:01:03.840" video="mainVideo-bookclub-tapas" id="subtitle"]]</div>[[!template text="""So what exactly is Bookclub Tapas?""" start="00:01:03.840" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""Bookclub Tapas is a conversation""" start="00:01:07.440" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""that you have with yourself.""" start="00:01:09.440" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""It's a log and a ledger,""" start="00:01:11.720" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""of your intentions, hopes, dreams,""" start="00:01:13.480" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""and what you've learned""" start="00:01:16.520" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""over the course of development.""" start="00:01:17.120" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""Bookclub Tapas is an oracle""" start="00:01:19.720" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""you can consult""" start="00:01:22.800" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""about the state of, and the strategies behind,""" start="00:01:24.200" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""your development process.""" start="00:01:26.934" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""Bookclub Tapas is also a peer programming partner""" start="00:01:29.560" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""that helps you decide how to best put forward your efforts""" start="00:01:33.480" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""and how to best pull together""" start="00:01:37.120" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""what you're working on.""" start="00:01:38.440" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""Bookclub Tapas will also help you to understand""" start="00:01:40.400" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""how to tailor scope to your needs,""" start="00:01:42.720" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""and how to have the best parts""" start="00:01:45.240" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""of your program shine through clearly.""" start="00:01:46.760" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""Bookclub Tapas consists of two parts:""" start="00:01:49.400" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""Bookclub and Tapas,""" start="00:01:52.160" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""but what does that mean exactly, though?""" start="00:01:54.160" video="mainVideo-bookclub-tapas" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Bookclub""" start="00:02:00.520" video="mainVideo-bookclub-tapas" id="subtitle"]]</div>[[!template text="""Bookclub is a reverse literate development strategy.""" start="00:02:00.520" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""Bookclub is a time for you to write,""" start="00:02:04.720" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""and then read and reflect.""" start="00:02:07.480" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""It's like a Bookclub,""" start="00:02:08.960" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""but it's for your program.""" start="00:02:10.720" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""Instead of inserting narration into your code""" start="00:02:12.560" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""to narrativize what you are accomplishing,""" start="00:02:15.240" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""you are instead inserting snippets of code""" start="00:02:17.800" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""into your narrative to make it come alive.""" start="00:02:20.760" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""So, what are we narrativizing, exactly?""" start="00:02:23.800" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""What sort of story are we telling?""" start="00:02:28.000" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""Bookclub is the story of you, your program,""" start="00:02:30.440" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""and how your efforts are allowing your program""" start="00:02:34.320" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""to come into the world.""" start="00:02:36.560" video="mainVideo-bookclub-tapas" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Too many hats, too many roles""" start="00:02:40.300" video="mainVideo-bookclub-tapas" id="subtitle"]]</div>[[!template text="""Software developers naturally have to wear""" start="00:02:40.300" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""a lot of different hats,""" start="00:02:42.480" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""and take on a lot of different roles.""" start="00:02:43.680" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""We apply ourselves into a lot""" start="00:02:46.480" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""of different contexts.""" start="00:02:48.160" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""We do research, interface architecture design,""" start="00:02:50.080" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""mathematics, philosophy.""" start="00:02:53.068" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""We take in the world around us""" start="00:02:55.520" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""and then build abstractions to model it.""" start="00:02:57.680" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""We translate the abstract""" start="00:03:00.360" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""into the concrete,""" start="00:03:01.800" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""and then when we're trying to teach software""" start="00:03:03.080" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""how to be &quot;smart,&quot;""" start="00:03:04.668" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""we translate the concrete""" start="00:03:06.000" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""back into the abstract.""" start="00:03:07.240" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""I can't help but feel like so much of""" start="00:03:09.640" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""what makes software development difficult""" start="00:03:11.501" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""is just trying to remember""" start="00:03:13.760" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""and keep track of everything.""" start="00:03:14.920" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""We have to try and remember""" start="00:03:16.680" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""so many different implementation details.""" start="00:03:17.960" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""We have to remember how our own code works,""" start="00:03:21.260" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""how the API of our dependencies work,""" start="00:03:24.160" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""how relevant real-world constraints behave,""" start="00:03:26.680" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""what the standards lay out,""" start="00:03:29.480" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""and how our data structures are laid out.""" start="00:03:31.320" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""When we're debugging,""" start="00:03:34.160" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""we simultaneously have to remember""" start="00:03:35.080" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""how our program is currently behaving,""" start="00:03:37.520" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""as well as how the program ought to behave""" start="00:03:40.240" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""in order to get a chance""" start="00:03:42.680" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""to reconcile that gap.""" start="00:03:43.720" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""It's honestly all way too much.""" start="00:03:46.040" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""We need a ledger of what we're actually doing""" start="00:03:48.000" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""in order to stay sane.""" start="00:03:50.240" video="mainVideo-bookclub-tapas" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Narrativiation""" start="00:03:55.800" video="mainVideo-bookclub-tapas" id="subtitle"]]</div>[[!template text="""I think a really effective way to""" start="00:03:55.800" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""make sense of things that are complex and important""" start="00:03:57.334" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""is to narrativize them,""" start="00:03:59.600" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""to turn them into stories.""" start="00:04:01.040" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""This is a strategy that humans have been using for a long time.""" start="00:04:02.840" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""Mnemonic devices, metaphors,""" start="00:04:06.040" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""and drawing parallels""" start="00:04:08.560" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""are all different ways of doing just this.""" start="00:04:09.760" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""Telling stories helps us to understand""" start="00:04:12.200" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""things that are big and complex""" start="00:04:14.800" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""by grounding them in our own experience""" start="00:04:16.360" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""and making it fit into our scale.""" start="00:04:19.120" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""So because the way that everyone""" start="00:04:23.980" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""naturally tells stories""" start="00:04:25.800" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""is going to be a little different,""" start="00:04:26.920" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""because the details that strike us""" start="00:04:28.240" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""as important and worth focusing on""" start="00:04:30.068" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""are going to be different for different people,""" start="00:04:32.120" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""I'm not going to say""" start="00:04:34.240" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""that there are hard and fast rules""" start="00:04:35.640" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""about how Bookclub &quot;should work,&quot;""" start="00:04:36.800" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""because how it &quot;should work&quot;""" start="00:04:39.360" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""is however it best fits your needs.""" start="00:04:41.134" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""Different people and different projects""" start="00:04:43.920" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""have different backgrounds and mindsets.""" start="00:04:45.880" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""And I don't think it's my place to say""" start="00:04:47.560" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""what strategy is correct as a universal law.""" start="00:04:49.634" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""You know, because Bookclub Tapas is, after all,""" start="00:04:51.880" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""just something I've sort of stumbled into.""" start="00:04:54.720" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""Bookclub is intrinsically ad-hoc.""" start="00:04:57.100" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""My providing a prescription of strategy""" start="00:05:00.040" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""is basically going to begin and end with the idea""" start="00:05:02.160" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""that you write a reverse-literate document""" start="00:05:04.840" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""that illustrates how you've gone""" start="00:05:07.520" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""about writing your program.""" start="00:05:08.800" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""All of that being said,""" start="00:05:11.920" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""I'm going to talk about""" start="00:05:14.520" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""how I've laid out my book club files""" start="00:05:16.320" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""and why I think this is a solid place""" start="00:05:18.440" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""from which to get started.""" start="00:05:20.400" video="mainVideo-bookclub-tapas" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""My starter kit - My stock, off the shelf suggestions""" start="00:05:24.780" video="mainVideo-bookclub-tapas" id="subtitle"]]</div>[[!template text="""So my stock off-the-shelf suggestions""" start="00:05:24.780" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""for just getting started""" start="00:05:27.840" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""is to have sections for: our overarching goal,""" start="00:05:29.080" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""our development goals,""" start="00:05:32.961" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""a place for scratch work, a test suite, research,""" start="00:05:35.060" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""and then finally sections for variables,""" start="00:05:40.700" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""functions, and macros.""" start="00:05:42.468" video="mainVideo-bookclub-tapas" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Now what?""" start="00:05:47.660" video="mainVideo-bookclub-tapas" id="subtitle"]]</div>[[!template text="""So we have our starter kit sections.""" start="00:05:47.660" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""How do we go about using them?""" start="00:05:50.000" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""How do we get started?""" start="00:05:51.960" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""Well, we write them, you know,""" start="00:05:53.640" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""out in our org document,""" start="00:05:55.320" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""but then what do we do?""" start="00:05:56.440" video="mainVideo-bookclub-tapas" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Our overarching goal""" start="00:05:58.980" video="mainVideo-bookclub-tapas" id="subtitle"]]</div>[[!template text="""We start by writing what we know.""" start="00:05:58.980" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""We have a spark, a vision.""" start="00:06:01.600" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""We had the beginning of an idea""" start="00:06:04.220" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""of what we wanted our program to do.""" start="00:06:05.840" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""Alternatively, maybe we had""" start="00:06:08.080" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""a client lay our goals out.""" start="00:06:09.840" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""Either way, we have some idea""" start="00:06:10.880" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""of how we want our program to be shaped.""" start="00:06:13.300" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""Let's start by writing that down.""" start="00:06:15.440" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""What are we trying to do?""" start="00:06:18.340" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""What is our goal?""" start="00:06:19.440" video="mainVideo-bookclub-tapas" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Our development focuses""" start="00:06:23.460" video="mainVideo-bookclub-tapas" id="subtitle"]]</div>[[!template text="""After that, we're probably wondering to ourselves,""" start="00:06:23.460" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""&quot;Okay, we have our goal,""" start="00:06:26.280" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""but how do we get there?&quot;""" start="00:06:27.760" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""That's when we start writing""" start="00:06:30.080" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""our development focuses.""" start="00:06:31.360" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""If we have bursts of intuition""" start="00:06:33.360" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""about what functions to write,""" start="00:06:35.160" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""questions that we want to answer through research,""" start="00:06:36.920" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""we start enumerating those every time they hit us.""" start="00:06:39.800" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""Our goal is to write them""" start="00:06:43.340" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""all down in a checklist""" start="00:06:44.560" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""in order to turn them from daydreams""" start="00:06:46.200" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""into courses of action.""" start="00:06:48.160" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""If we aren't having development focuses""" start="00:06:50.480" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""hit us right away, that's okay.""" start="00:06:52.440" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""If we just stare at the goal for long enough,""" start="00:06:54.800" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""I think it's inevitable""" start="00:06:57.280" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""that the muse will speak,""" start="00:06:58.320" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""and we'll get a clear lead""" start="00:06:59.560" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""on a path forward.""" start="00:07:00.880" video="mainVideo-bookclub-tapas" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""The rest of the headings""" start="00:07:05.120" video="mainVideo-bookclub-tapas" id="subtitle"]]</div>[[!template text="""So now what?""" start="00:07:05.120" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""Now that we have our development focuses,""" start="00:07:07.220" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""we want to go ahead and create""" start="00:07:09.900" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""the rest of the headings for ourselves""" start="00:07:11.760" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""so we can act upon them.""" start="00:07:13.440" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""We go ahead and write the rest""" start="00:07:15.540" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""of the file's structure ad-hoc""" start="00:07:17.240" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""in a way that will serve our needs for now.""" start="00:07:19.420" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""If it's not fitting us well later on,""" start="00:07:22.340" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""we can just go ahead and change it.""" start="00:07:24.080" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""There's no pressure.""" start="00:07:25.280" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""That's the beauty of having this""" start="00:07:26.240" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""all be in a plain Org document.""" start="00:07:27.720" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""If we're doing something consistently,""" start="00:07:30.100" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""we probably want to have a heading for it.""" start="00:07:32.080" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""We'll go ahead and create homes""" start="00:07:35.060" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""for our variables, our functions, our macros.""" start="00:07:36.440" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""We'll want to create a spot for scratch work""" start="00:07:38.920" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""to sort of like stretch our legs""" start="00:07:41.480" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""and lament in a stream-of-consciousness""" start="00:07:43.320" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""sort of format about how""" start="00:07:45.400" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""a particular piece of design ought to work.""" start="00:07:47.080" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""Basically, any time we wear a different &quot;hat&quot;""" start="00:07:50.160" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""or we take on a different &quot;role&quot; as a developer,""" start="00:07:52.360" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""it's worth considering creating a category for it.""" start="00:07:55.080" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""The best way for us to figure out""" start="00:07:58.840" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""what headings to fill in,""" start="00:08:00.720" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""and how to fill them in,""" start="00:08:01.840" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""is to just go ahead and act upon our development goals.""" start="00:08:03.360" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""If we have a question we want to answer,""" start="00:08:07.920" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""we'll want to create a Research heading""" start="00:08:09.960" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""so we can go ahead and have a spot""" start="00:08:12.520" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""for scratch-work for reasoning things out.""" start="00:08:14.760" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""If we want to write the first draft""" start="00:08:17.420" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""of a function we want,""" start="00:08:18.920" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""We'll want to create a heading for functions""" start="00:08:20.680" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""and then a sub-heading for that function in particular.""" start="00:08:22.800" video="mainVideo-bookclub-tapas" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Conversationality""" start="00:08:37.980" video="mainVideo-bookclub-tapas" id="subtitle"]]</div>[[!template text="""So now that we've filled in our sections,""" start="00:08:37.980" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""what do we do now?""" start="00:08:40.420" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""Our idea for a program""" start="00:08:42.380" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""has been turned into a story,""" start="00:08:43.680" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""but what does that actually get us?""" start="00:08:44.880" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""To me, a lot of what's exciting about Bookclub""" start="00:08:47.620" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""is that novelization goes in""" start="00:08:50.840" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""and a peer programming partner comes out.""" start="00:08:52.920" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""As we loop through reviewing our document,""" start="00:08:56.060" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""as we scan it up and down,""" start="00:08:58.360" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""we're able to engage in conversationality""" start="00:08:59.800" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""with our past self because of how verbose""" start="00:09:02.001" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""we've been in our notes.""" start="00:09:05.000" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""We can ask our past self questions,""" start="00:09:06.500" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""and get back answers.""" start="00:09:08.440" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""We've turned our past self""" start="00:09:09.880" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""into a peer programming partner.""" start="00:09:11.980" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""If we're wondering what to do next,""" start="00:09:14.580" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""we can check our Development Focuses.""" start="00:09:16.360" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""If we're wondering how something works,""" start="00:09:18.320" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""we can read documentation""" start="00:09:20.760" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""embedded in our function drafts,""" start="00:09:22.200" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""or we can read the outcomes of tests""" start="00:09:24.720" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""that we've performed in our research.""" start="00:09:26.920" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""We can ask ourselves questions and get answers.""" start="00:09:28.660" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""Some of what's most exciting""" start="00:09:33.020" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""about peer programming to me""" start="00:09:34.440" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""is having fresh perspective""" start="00:09:35.920" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""and alternate context.""" start="00:09:38.080" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""We have a fresh set of eyes""" start="00:09:41.080" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""on the program that aren't our own,""" start="00:09:42.680" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""and with that set of eyes""" start="00:09:44.440" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""comes someone else to share the burden""" start="00:09:47.480" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""of trying to remember everything.""" start="00:09:50.200" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""With Bookclub, instead of having""" start="00:09:52.540" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""a peer programmer that exists in physical space,""" start="00:09:54.840" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""we have one that's, to get all sci-fi for a moment,""" start="00:09:57.560" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""reaching forward towards us""" start="00:10:00.720" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""from backward in time.""" start="00:10:03.040" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""We're asynchronously working""" start="00:10:05.000" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""with our past selves""" start="00:10:06.800" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""as an equal-role collaborative""" start="00:10:08.120" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""partner in development.""" start="00:10:10.440" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""We have their perspective,""" start="00:10:12.880" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""their fresh memories of the code as it was written,""" start="00:10:15.040" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""and their focus on what was worth worrying about""" start="00:10:17.800" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""at a different point in time.""" start="00:10:20.960" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""We can ask them questions and get answers.""" start="00:10:22.320" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""We can ask them questions like,""" start="00:10:24.960" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""well, &quot;What do I do now?&quot;""" start="00:10:26.320" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""&quot;How does this data structure work?&quot;""" start="00:10:28.200" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""&quot;What types does this third-party library take?&quot;""" start="00:10:30.420" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""By asking these questions,""" start="00:10:33.680" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""I can even stay fresh""" start="00:10:35.120" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""on development progress""" start="00:10:36.320" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""that I last touched months ago.""" start="00:10:37.480" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""It's really easy to duplicate work,""" start="00:10:40.100" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""forget how things work,""" start="00:10:42.800" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""lose track of priorities.""" start="00:10:44.720" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""Bookclub helps keep us focused,""" start="00:10:46.160" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""it keeps us accountable,""" start="00:10:48.280" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""it even keeps us company.""" start="00:10:49.840" video="mainVideo-bookclub-tapas" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Ad-hoc means lesricsf tion""" start="00:10:55.480" video="mainVideo-bookclub-tapas" id="subtitle"]]</div>[[!template text="""One of the most immediately useful things about Bookclub,""" start="00:10:55.480" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""in my opinion, is that we immediately have""" start="00:10:58.360" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""a list of actionable items.""" start="00:11:00.868" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""Every time I have a little pain point,""" start="00:11:02.360" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""I go ahead and write it down,""" start="00:11:04.320" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""and I write down all of the things""" start="00:11:06.640" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""that would be nice to have done someday.""" start="00:11:09.080" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""So you might be wondering,""" start="00:11:11.580" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""and it's fair to wonder this,""" start="00:11:13.200" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""isn't this effectively just the GitHub issue model?""" start="00:11:14.680" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""We're listing out bug requests,""" start="00:11:17.480" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""issue requests, feature requests.""" start="00:11:19.280" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""It's not exactly a new idea,""" start="00:11:21.240" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""and it's pretty intuitive.""" start="00:11:22.520" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""I think the important consideration here""" start="00:11:24.560" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""is that having really formalized apparatus""" start="00:11:26.720" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""for entering in our thoughts""" start="00:11:30.000" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""can be an unnecessary source of friction.""" start="00:11:31.640" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""Bug listings don't tend to be""" start="00:11:34.420" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""a great fit for daydreaming""" start="00:11:36.360" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""or verbose considerations of philosophy.""" start="00:11:37.840" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""Bug listings tend to be reserved""" start="00:11:40.940" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""for catastrophes.""" start="00:11:42.920" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""I feel like a lot of the tooling""" start="00:11:45.120" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""that we currently use""" start="00:11:47.280" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""really struggles with creating ergonomics""" start="00:11:48.200" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""that make taking frictionless notes difficult.""" start="00:11:51.280" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""We have systems where all the disparate""" start="00:11:54.880" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""parts of what we're working on""" start="00:11:57.160" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""feel really far away from each other.""" start="00:11:59.080" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""We're pushed away from engaging""" start="00:12:02.500" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""in conversations with ourselves""" start="00:12:04.040" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""as a result of how disparate""" start="00:12:05.960" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""all of our tooling feels,""" start="00:12:07.920" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""how the process of working with it""" start="00:12:09.160" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""is incongruent.""" start="00:12:10.960" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""My hope is that we can instead""" start="00:12:12.900" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""engage with a process""" start="00:12:15.600" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""that makes it really trivial""" start="00:12:17.000" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""to write impulsive journaling""" start="00:12:18.360" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""about what we're doing.""" start="00:12:20.200" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""So much of design is ultimately""" start="00:12:21.980" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""just daydreaming.""" start="00:12:23.840" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""Good ideas tend to strike us hard,""" start="00:12:25.560" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""in a momentary flash of inspiration,""" start="00:12:27.280" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""and then they fade just as quickly.""" start="00:12:29.780" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""Anyone who's had an idea all at once""" start="00:12:32.600" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""in the middle of the night""" start="00:12:35.240" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""knows that they're going to have to choose""" start="00:12:36.580" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""between either committing to writing it down""" start="00:12:38.160" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""or accept that by morning""" start="00:12:40.620" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""they'll have lost it.""" start="00:12:41.960" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""If we're not writing""" start="00:12:44.260" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""what strikes us as important""" start="00:12:45.360" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""at the same moment that it's happening,""" start="00:12:46.760" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""we're going to lose it.""" start="00:12:48.640" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""It's not realistic to expect ourselves""" start="00:12:50.380" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""to hold onto our ideas forever""" start="00:12:52.640" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""with the same precision""" start="00:12:54.520" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""as when we were first inspired.""" start="00:12:56.360" video="mainVideo-bookclub-tapas" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Gratis documentation""" start="00:13:01.920" video="mainVideo-bookclub-tapas" id="subtitle"]]</div>[[!template text="""Okay. I'm gonna call you out real quick.""" start="00:13:01.920" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""If I ask all of you &quot;Who wants to read""" start="00:13:11.320" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""really excellent documentation?&quot;""" start="00:13:13.760" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""I imagine that everyone here""" start="00:13:15.960" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""is raising their hand.""" start="00:13:17.080" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""We want code to make sense""" start="00:13:18.380" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""and we want to know what""" start="00:13:20.760" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""the original developer had in mind.""" start="00:13:21.960" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""Even the original developer themselves""" start="00:13:24.240" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""would want this just for their own sake.""" start="00:13:26.400" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""I know that for me, I can even feel""" start="00:13:28.580" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""things becoming less fresh""" start="00:13:31.000" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""just after a couple months away""" start="00:13:32.320" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""from my codebase.""" start="00:13:33.760" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""And that was me from a couple months ago.""" start="00:13:35.540" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""They're not around anymore.""" start="00:13:38.620" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""Now, here's the rough part.""" start="00:13:42.360" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""Here's what I'm really gonna call you all out.""" start="00:13:45.360" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""&quot;Who wants to write really excellent documentation?&quot;""" start="00:13:48.580" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""Now, I don't know what's happening on your end,""" start="00:13:51.600" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""but I'm imagining crickets,""" start="00:13:53.720" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""silence, tumbleweeds""" start="00:13:55.560" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""blowing through to the horizon.""" start="00:13:57.040" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""It's a tough ask.""" start="00:13:59.140" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""It's not generally all that rewarding.""" start="00:14:01.000" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""If you're writing docs from scratch,""" start="00:14:03.560" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""a lot of it involves relearning""" start="00:14:06.300" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""the intentions behind crusty old code.""" start="00:14:08.000" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""For me, it hurts to not spend that same time""" start="00:14:10.680" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""implementing bug fixes and new features.""" start="00:14:13.360" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""It just doesn't feel like""" start="00:14:16.120" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""a great use of my time.""" start="00:14:17.600" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""Even if it's strictly for my own codebase""" start="00:14:19.620" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""for my own use, it's hard to sit down and do it""" start="00:14:22.280" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""even when I know how much I would benefit from it.""" start="00:14:25.040" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""My thinking is that when you write rough,""" start="00:14:28.780" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""piecewise daydreaming as you go,""" start="00:14:31.360" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""it's so much easier to not only""" start="00:14:34.040" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""begin writing documentation early in your process,""" start="00:14:36.040" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""but also to stay consistent about not slouching into""" start="00:14:38.760" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""an accumulation of a backlog.""" start="00:14:42.840" video="mainVideo-bookclub-tapas" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Keeping the thread of your intention""" start="00:14:48.440" video="mainVideo-bookclub-tapas" id="subtitle"]]</div>[[!template text="""So not only does writing documentation early""" start="00:14:48.440" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""make us more likely to keep that habit going,""" start="00:14:51.320" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""but it also makes the documentation""" start="00:14:54.600" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""we do write way more robust.""" start="00:14:56.400" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""When fiction meets reality""" start="00:14:59.500" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""and we start writing out code""" start="00:15:01.240" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""that is constrained by the real world""" start="00:15:04.120" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""and not just our imagination,""" start="00:15:06.120" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""we learn that things we assumed about our design""" start="00:15:08.860" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""aren't going to work out in practice.""" start="00:15:11.760" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""Because of this, we can enter""" start="00:15:14.840" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""into a sort of situation""" start="00:15:16.880" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""akin to boiling a frog in a pot of water.""" start="00:15:18.560" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""Frogs don't notice that they're being boiled""" start="00:15:21.140" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""if the water is only heated gradually enough.""" start="00:15:23.080" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""We decide to adjust our design only a little bit""" start="00:15:26.920" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""without changing the documentation right away.""" start="00:15:31.100" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""Doing that once is fine,""" start="00:15:33.920" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""but I don't believe for a second""" start="00:15:35.000" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""that we're only going to do it once.""" start="00:15:36.560" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""We can find ourselves surprised""" start="00:15:38.560" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""that as time goes on,""" start="00:15:39.920" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""our code looks nothing like our spec,""" start="00:15:41.660" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""and we lose the thread of what our code""" start="00:15:43.920" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""was supposed to do in the first place.""" start="00:15:45.880" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""When we stake our intentions clearly and early,""" start="00:15:48.700" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""you ground yourself in them.""" start="00:15:52.980" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""You reduce the risk of straying from them.""" start="00:15:54.980" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""You have clear reference""" start="00:15:58.440" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""for what you want your code to do,""" start="00:15:59.880" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""and you reduce the risk""" start="00:16:01.920" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""of having its purpose shift over time.""" start="00:16:03.320" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""When we take turns alternating""" start="00:16:05.920" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""between writing code and documentation""" start="00:16:07.400" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""rather than acting, you know,""" start="00:16:09.240" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""as having it all as one step,""" start="00:16:11.200" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""we risk taking turns just moving""" start="00:16:14.320" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""our goalpost back and forth.""" start="00:16:16.480" video="mainVideo-bookclub-tapas" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Bookclub is becoming too much""" start="00:16:21.500" video="mainVideo-bookclub-tapas" id="subtitle"]]</div>[[!template text="""So we've seen how our Bookclub files get us""" start="00:16:21.500" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""all sorts of amazing features""" start="00:16:24.240" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""and practical benefits.""" start="00:16:25.840" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""But we might be starting to notice a pattern""" start="00:16:27.620" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""as we continue to engage in conversation""" start="00:16:29.600" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""and work with our document""" start="00:16:31.840" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""and watch it grow in size.""" start="00:16:33.840" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""We originally created our Bookclub file""" start="00:16:35.920" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""with the hope to reduce""" start="00:16:38.820" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""what we would need to keep track of""" start="00:16:40.701" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""and to reduce our level of overwhelm.""" start="00:16:42.120" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""We might find that as our Bookclub file grows,""" start="00:16:44.880" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""we're encountering more detail""" start="00:16:48.920" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""than we can practically parse, manage,""" start="00:16:51.160" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""and decipher intention from.""" start="00:16:53.320" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""It can be easy to enter into a situation""" start="00:16:55.760" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""where we're drowning in the breadth of our notes,""" start="00:16:57.720" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""and in doing so we've recreated the same problem""" start="00:16:59.840" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""we originally set out to solve.""" start="00:17:03.400" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""Writing out every single detail helps us a lot""" start="00:17:05.420" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""to make sense of things at first,""" start="00:17:08.760" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""but then after a while, we can encounter""" start="00:17:11.080" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""a signal-to-noise problem""" start="00:17:13.520" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""when we try to make meaning from too many details.""" start="00:17:15.880" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""This is where tapas come in.""" start="00:17:19.400" video="mainVideo-bookclub-tapas" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Introducing Tapas""" start="00:17:25.240" video="mainVideo-bookclub-tapas" id="subtitle"]]</div>[[!template text="""So tapas in Spanish cuisine are appetizers.""" start="00:17:25.240" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""What's notable about tapas""" start="00:17:29.200" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""is that you can bring a bunch of them together""" start="00:17:31.560" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""to make a full meal.""" start="00:17:33.840" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""In the context of Bookclub Tapas,""" start="00:17:35.300" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""they serve a similar role.""" start="00:17:38.380" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""The idea is that we write flavorful libraries""" start="00:17:40.340" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""that together form a full program.""" start="00:17:42.720" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""We have a full program,""" start="00:17:45.420" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""but it's made from discrete modules.""" start="00:17:47.060" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""The idea behind tapas is that instead of creating""" start="00:17:49.840" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""one perfect, &quot;solves everything&quot; codebase,""" start="00:17:52.720" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""we want to create a whole bunch""" start="00:17:55.860" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""of separate libraries""" start="00:17:57.320" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""that themselves nail a specific subdomain.""" start="00:17:59.080" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""And once these libraries""" start="00:18:02.920" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""are all brought together,""" start="00:18:04.120" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""they form the whole that we're seeking.""" start="00:18:05.180" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""Once our Bookclub file becomes big enough""" start="00:18:08.020" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""such that we feel like our scope can be split""" start="00:18:10.080" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""into multiple libraries,""" start="00:18:12.240" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""that's when we want to take the opportunity""" start="00:18:14.240" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""to split our program up into parts, into Tapas.""" start="00:18:16.080" video="mainVideo-bookclub-tapas" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""What are Tapas, what are Tapas not?""" start="00:18:22.840" video="mainVideo-bookclub-tapas" id="subtitle"]]</div>[[!template text="""So, maybe one of the best ways""" start="00:18:22.840" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""to understand what makes a good Tapa""" start="00:18:25.160" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""is to first examine what does not make a good Tapa.""" start="00:18:27.040" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""The single most important thing""" start="00:18:30.600" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""to understand about Tapas""" start="00:18:32.160" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""is that they themselves are substantial.""" start="00:18:33.560" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""There's a lot of back and forth""" start="00:18:37.140" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""on the idea of micro-libraries,""" start="00:18:38.880" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""their merits, their dangers,""" start="00:18:40.680" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""and when and where they kind of work best.""" start="00:18:42.880" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""I think the distinction""" start="00:18:45.420" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""that I would like to draw""" start="00:18:46.360" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""is that I think that tapas belong in the larger end""" start="00:18:47.600" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""of scale and complexity for microlibraries""" start="00:18:50.720" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""rather than the smaller end.""" start="00:18:53.760" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""I think particularly small helpers""" start="00:18:56.160" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""like NPM's is-odd""" start="00:18:58.080" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""are a good example of something""" start="00:19:00.300" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""I think does not constitute a good Tapa.""" start="00:19:01.920" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""Meanwhile, I think Python's Requests library""" start="00:19:05.480" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""is a really good example of a Tapa.""" start="00:19:08.800" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""I believe Requests only does HTTP connections,""" start="00:19:11.800" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""but I feel like that's not so simple and straightforward""" start="00:19:15.320" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""that you can just go ahead and implement it""" start="00:19:18.320" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""on your own real quick.""" start="00:19:20.240" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""A real danger of creating""" start="00:19:23.200" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""helper libraries that are too small""" start="00:19:24.640" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""is that we don't remove abstraction""" start="00:19:27.220" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""nearly as much as we postpone it.""" start="00:19:31.160" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""If our libraries are small,""" start="00:19:33.320" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""but the glue code that binds them is large,""" start="00:19:35.820" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""we haven't done anything""" start="00:19:38.900" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""to reduce complexity""" start="00:19:40.080" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""or employ abstraction in a meaningful way.""" start="00:19:41.520" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""If all of the complexity exists in our glue code,""" start="00:19:44.180" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""we've simply replaced our functions""" start="00:19:47.480" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""with libraries of the same size and purpose.""" start="00:19:49.800" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""Our codebase is still monolithic""" start="00:19:52.520" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""instead of having meaningfully divided scope.""" start="00:19:54.560" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""I think that a good Tapa""" start="00:19:58.040" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""ought to feel like augmentations""" start="00:19:59.560" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""or extensions to the standard library.""" start="00:20:01.480" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""You know, maybe something kind of""" start="00:20:03.980" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""akin to Scheme's SRFI system.""" start="00:20:05.200" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""I think that the goal of good Tapas""" start="00:20:08.380" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""is not to solve a particular problem,""" start="00:20:10.600" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""but instead to solve a particular class of problem.""" start="00:20:13.920" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""The goal of a well-written Tapa""" start="00:20:18.520" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""is to solve needing to do hard work in general""" start="00:20:20.160" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""rather than solving what can only really be""" start="00:20:23.000" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""an individual need""" start="00:20:25.560" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""of an individual program.""" start="00:20:26.680" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""I feel like Tapas are most helpful""" start="00:20:28.440" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""when we instead seek to solve""" start="00:20:30.360" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""a larger overarching problem""" start="00:20:32.120" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""that intersects with the problem space of our code base.""" start="00:20:35.320" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""When we have a handful of Tapas""" start="00:20:39.440" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""that are roughly the same size and scale,""" start="00:20:42.240" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""the glue code that marries them""" start="00:20:46.180" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""is also roughly the same size and scale.""" start="00:20:48.120" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""As a heuristic, I try to aim for any function""" start="00:20:52.180" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""being approximately 3 calls in length,""" start="00:20:55.640" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""and then any Tapa being between 6""" start="00:20:57.840" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""and 12 functions in length.""" start="00:21:00.840" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""The number of Tapas themselves""" start="00:21:06.400" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""can be as many or as few as you need,""" start="00:21:08.040" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""but then your Tapas can split into""" start="00:21:09.640" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""their own separate Tapas as needed.""" start="00:21:12.880" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""My hope is that the collection of our Tapas,""" start="00:21:16.460" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""especially as we create""" start="00:21:18.800" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""dependency chains among them,""" start="00:21:20.600" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""is that each next Tapa is a trivial case""" start="00:21:22.320" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""of the one prerequisite to it.""" start="00:21:25.040" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""Every Tapa is a meaningful,""" start="00:21:27.100" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""human-readable abstraction""" start="00:21:28.880" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""that enables us to feel confident about our tooling""" start="00:21:31.060" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""without drowning in detail.""" start="00:21:33.440" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""The whole stack can be understood by humans,""" start="00:21:35.640" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""but we only have to focus on""" start="00:21:38.500" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""any one piece of it at a time,""" start="00:21:40.160" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""rather than focusing on the entire stack all at once.""" start="00:21:41.880" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""We can practically achieve""" start="00:21:47.420" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""a huge final product,""" start="00:21:48.880" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""but each individual step""" start="00:21:51.260" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""in working towards that goal""" start="00:21:52.760" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""is still at a human scale.""" start="00:21:54.280" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""One thing I want to make sure to point out,""" start="00:21:56.040" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""one thing I want to make sure""" start="00:22:02.180" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""to point out explicitly, real quick,""" start="00:22:03.280" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""is that having access""" start="00:22:05.180" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""to a hygienic macro system,""" start="00:22:06.280" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""like the ones that we have in Lisps,""" start="00:22:07.840" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""makes for an amazing experience""" start="00:22:10.260" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""for creating Tapas.""" start="00:22:12.000" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""The types of abstractions that we can do""" start="00:22:13.320" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""by modifying syntax at compile time""" start="00:22:15.280" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""makes for incredibly intuitive""" start="00:22:17.040" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""and ergonomic tooling.""" start="00:22:18.440" video="mainVideo-bookclub-tapas" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Tapas are maybe best illustrated by example""" start="00:22:25.180" video="mainVideo-bookclub-tapas" id="subtitle"]]</div>[[!template text="""So we've talked quite a bit about""" start="00:22:25.180" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""what I think makes a Tapa good,""" start="00:22:27.280" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""but I think maybe the best way""" start="00:22:28.920" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""to understand the concept""" start="00:22:30.760" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""is to have a look at the whole workflow in practice.""" start="00:22:32.680" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""I've been working on this, currently""" start="00:22:35.600" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""unnamed, Elisp program recently.""" start="00:22:37.480" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""It's a validator for the filetags lines""" start="00:22:40.220" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""of my Org Mode files.""" start="00:22:42.960" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""So I have Org Mode files""" start="00:22:45.820" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""under my Documents directory,""" start="00:22:49.300" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""organized in this hierarchical way,""" start="00:22:51.000" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""and the nested directories have meaningful names.""" start="00:22:53.634" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""I want the headers of my Org files to be tagged""" start="00:22:57.040" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""in accordance with the sequence""" start="00:23:00.301" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""of the names of the directories.""" start="00:23:01.801" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""I do this by having the file-tags line""" start="00:23:04.200" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""at the top of the file""" start="00:23:06.168" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""just list the path segments in order.""" start="00:23:07.000" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""If I have an Org file in the directory""" start="00:23:09.520" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""&quot;~/Documents/foo/bar&quot;,""" start="00:23:12.200" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""the file-tags line has the tags &quot;foo&quot; and &quot;bar&quot;.""" start="00:23:16.560" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""This is totally fine to do by hand,""" start="00:23:20.800" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""but I want a program""" start="00:23:23.140" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""that recursively searches through my directories""" start="00:23:24.920" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""to validate that the tags are correct""" start="00:23:27.120" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""because it's easy to drop something.""" start="00:23:29.800" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""This scale of problem is actually kind of perfect""" start="00:23:33.460" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""for demonstrating how Bookclub Tapas work in action.""" start="00:23:36.040" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""We have a problem""" start="00:23:39.960" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""that's mostly rather simple,""" start="00:23:40.760" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""but it has a lot of moving pieces.""" start="00:23:42.640" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""We want to iterate over directories recursively,""" start="00:23:44.360" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""we want to do string manipulation,""" start="00:23:47.800" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""we want to parse buffers,""" start="00:23:49.560" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""and we want to edit buffers.""" start="00:23:50.880" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""All of these tasks are simple enough on their own,""" start="00:23:52.900" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""but it's deceptively easy""" start="00:23:55.360" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""to start tripping over ourselves""" start="00:23:56.680" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""when we feel like it's necessary""" start="00:23:58.400" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""to do all of these different things in one step.""" start="00:23:59.960" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""So there are a ton of great string""" start="00:24:03.020" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""manipulation tools for Emacs,""" start="00:24:05.400" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""so that's checked off,""" start="00:24:06.960" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""that's done, taken care of.""" start="00:24:08.080" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""I'm still kind of daydreaming""" start="00:24:10.940" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""about writing a wrapper around""" start="00:24:12.120" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""some of the Emacs standard libraries""" start="00:24:14.400" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""for directory traversal,""" start="00:24:16.040" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""just to make it a little bit nicer to work with.""" start="00:24:17.000" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""But the big thing""" start="00:24:20.180" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""that really struck me as odd""" start="00:24:20.800" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""is that there doesn't seem to be a great tooling""" start="00:24:22.520" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""for destructuring Emacs buffers""" start="00:24:25.480" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""beyond just chaining together""" start="00:24:28.240" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""a bunch of editor commands.""" start="00:24:29.400" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""Emacs is so buffer-oriented,""" start="00:24:31.380" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""I feel like it really deserves a good library""" start="00:24:33.960" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""for programmatic buffer destructuring.""" start="00:24:36.440" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""I looked around for a bit,""" start="00:24:38.720" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""but I couldn't really find anything.""" start="00:24:40.560" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""So at the end of the day,""" start="00:24:42.800" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""I could definitely just grit my teeth""" start="00:24:44.760" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""and put my head down and just use tools""" start="00:24:47.280" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""that feel cumbersome to work with if I wanted to.""" start="00:24:50.920" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""I could write something""" start="00:24:54.360" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""that's &quot;good enough&quot;""" start="00:24:55.200" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""just for the purpose of my package""" start="00:24:56.040" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""and then hide it deep inside the code base.""" start="00:24:57.760" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""I could absolutely do that.""" start="00:25:00.280" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""But I can't help but think about how""" start="00:25:03.820" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""after I properly write the tooling I'm missing,""" start="00:25:07.920" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""I'm really going to be thanking myself""" start="00:25:11.100" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""in terms of reduced implementational complexity,""" start="00:25:13.160" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""reduced bug hunting, real reusability,""" start="00:25:15.880" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""and ultimately really just a deep sense of pride""" start="00:25:19.040" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""in knowing that I took the time""" start="00:25:22.200" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""to do something in a way that feels &quot;right.&quot;""" start="00:25:23.720" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""This right here is the perfect time""" start="00:25:27.320" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""to split off Tapas.""" start="00:25:28.800" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""Any time that we find ourselves""" start="00:25:30.240" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""reaching for a fictional dependency,""" start="00:25:32.120" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""wishing that someone had written""" start="00:25:34.320" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""a library like this...""" start="00:25:35.440" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""We can take that opportunity""" start="00:25:37.680" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""to remember that we are &quot;someone.&quot;""" start="00:25:39.120" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""We can write that library ourselves,""" start="00:25:42.020" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""and we deserve to write that library""" start="00:25:44.320" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""because we deserve to get to use it.""" start="00:25:46.680" video="mainVideo-bookclub-tapas" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Introducing Squint""" start="00:25:52.340" video="mainVideo-bookclub-tapas" id="subtitle"]]</div>[[!template text="""So I'm going to briefly show""" start="00:25:52.340" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""a Bookclub buffer""" start="00:25:55.280" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""for a program called Squint.""" start="00:25:56.900" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""It's the buffer destructure""" start="00:25:59.260" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""that I've been talking about, and it's real.""" start="00:26:00.880" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""It's a wrapper around""" start="00:26:03.200" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""Emacs's narrowing functionality""" start="00:26:04.520" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""and regular expression search.""" start="00:26:06.000" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""It's not totally done,""" start="00:26:08.740" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""and will likely see some breaking changes,""" start="00:26:11.800" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""but I really like where it is.""" start="00:26:15.280" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""I'll be posting it in its current state""" start="00:26:16.760" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""on some of the big source repository sites""" start="00:26:18.680" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""relatively soon.""" start="00:26:22.400" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""I think it has a good feature,""" start="00:26:23.280" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""which is really quite exciting.""" start="00:26:24.720" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""And it'll likely probably get split off""" start="00:26:26.520" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""into its own Tapas.""" start="00:26:29.000" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""We'll see. No matter what,""" start="00:26:29.800" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""I do recommend being on the lookout for it,""" start="00:26:32.240" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""because I think it'll be""" start="00:26:34.320" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""a really excellent demonstration""" start="00:26:35.600" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""of some of the solid ideas""" start="00:26:37.480" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""behind how to get rolling with Bookclub Tapas.""" start="00:26:39.680" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""So I have my background section""" start="00:26:43.900" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""where I'm basically just sort of laying out,""" start="00:26:46.640" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""you know, what the objective is for the program.""" start="00:26:49.040" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""I have my vision where I'm doing""" start="00:26:53.240" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""some daydreaming about, you know,""" start="00:26:55.120" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""how this all ought to work.""" start="00:26:58.020" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""I date stamped this.""" start="00:26:59.640" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""As you can see, it's from a while ago,""" start="00:27:00.920" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""but I still have the full context of, you know,""" start="00:27:02.920" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""all the things that I've done working on this.""" start="00:27:05.600" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""I listed out a bunch of ideas""" start="00:27:08.160" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""for different forms for functions macros.""" start="00:27:12.320" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""I did different pieces of research.""" start="00:27:15.480" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""Yeah, I was trying to figure out""" start="00:27:21.840" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""for the width restriction macro,""" start="00:27:23.200" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""what types does it take?""" start="00:27:24.680" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""And I did a whole bunch of tests""" start="00:27:26.600" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""to try and ultimately figure it out.""" start="00:27:28.480" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""Because it claims in the documentation,""" start="00:27:31.280" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""I believe, that it will just take""" start="00:27:35.720" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""any type for labels.""" start="00:27:37.400" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""But in my testing, that's not""" start="00:27:39.440" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""ultimately what I found.""" start="00:27:43.960" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""The results of my tests""" start="00:27:44.880" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""is that symbols, numbers, they work.""" start="00:27:46.520" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""Strings do not.""" start="00:27:50.120" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""I'm not sure why that is.""" start="00:27:51.320" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""But for my purposes,""" start="00:27:52.920" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""this is what I need to know.""" start="00:27:54.440" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""I have my development focuses here.""" start="00:27:58.160" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""So I have my assorted goals""" start="00:28:00.360" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""for different directions""" start="00:28:03.880" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""I want to take the program.""" start="00:28:05.120" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""And then lastly, I have my functions, my macros.""" start="00:28:08.060" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""And this right here""" start="00:28:13.340" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""is the titular macro.""" start="00:28:14.440" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""This is ultimately the big meat""" start="00:28:18.080" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""of the program.""" start="00:28:20.500" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""And it's all contained happily organized""" start="00:28:24.860" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""inside my Bookclub file.""" start="00:28:28.220" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""I'm quite happy with it.""" start="00:28:30.360" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""I think it looks really nice.""" start="00:28:31.200" video="mainVideo-bookclub-tapas" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""What else does Bookclub Tapas do?""" start="00:28:36.100" video="mainVideo-bookclub-tapas" id="subtitle"]]</div>[[!template text="""So what else does Bookclub tapas do?""" start="00:28:36.100" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""I don't know. It probably does a lot of stuff.""" start="00:28:40.760" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""It does all sorts of stuff""" start="00:28:44.520" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""that I don't know about yet,""" start="00:28:46.440" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""but this is where you come in.""" start="00:28:47.440" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""I'm really excited to see what people do""" start="00:28:48.880" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""when they take these ideas""" start="00:28:51.440" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""and run with them.""" start="00:28:52.880" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""And if you have something really cool you're doing with it,""" start="00:28:54.020" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""please email me and come talk to me about it.""" start="00:28:56.820" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""I'd love to hear about it.""" start="00:28:59.240" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""Again, my email is hello@ElephantErgonomics.com.""" start="00:29:00.600" video="mainVideo-bookclub-tapas" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Let's work together""" start="00:29:08.160" video="mainVideo-bookclub-tapas" id="subtitle"]]</div>[[!template text="""So last, before we wrap up,""" start="00:29:08.160" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""I want to go ahead and give""" start="00:29:10.840" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""a quick plug for my services.""" start="00:29:12.600" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""I am an independent software engineer""" start="00:29:14.200" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""that has an emphasis in backend design""" start="00:29:17.020" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""and general automation.""" start="00:29:20.080" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""In particular, I have an emphasis""" start="00:29:21.600" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""in that really cool new generative AI thing""" start="00:29:23.920" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""that everyone's been talking about recently.""" start="00:29:26.840" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""If you have a headache,""" start="00:29:28.560" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""you have some sort of pain point""" start="00:29:30.680" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""for your small or large business,""" start="00:29:33.240" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""you wish you could just wiggle your nose""" start="00:29:34.800" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""and have disappear, come talk to me.""" start="00:29:36.768" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""I'll make it disappear. I love doing that.""" start="00:29:39.000" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""Reach out to me at hello@ElephantErgonomics.com.""" start="00:29:41.600" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""If you think that Bookclub Tapas""" start="00:29:46.980" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""would be a great fit for your team and your project,""" start="00:29:48.320" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""I'd love to hop on and help you""" start="00:29:51.040" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""get the ball rolling quickly.""" start="00:29:53.040" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""Go ahead and email me at hello@ElephantErgonomics.com.""" start="00:29:55.120" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""Lastly, if you're a member""" start="00:29:59.820" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""of the larger Lisp community""" start="00:30:01.640" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""and you want to fund independent software development""" start="00:30:03.800" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""for things that really excite you,""" start="00:30:06.860" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""for passion projects""" start="00:30:08.320" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""that make our ecosystem richer,""" start="00:30:09.640" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""I'd love to look into accepting independent funding""" start="00:30:11.440" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""so I can commit more hours""" start="00:30:17.080" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""toward making that happen.""" start="00:30:20.420" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""Some of the projects that I want to work on""" start="00:30:22.680" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""are a Python Foreign Function Interface for Guile Scheme,""" start="00:30:24.600" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""a framework for rapidly creating simulation games""" start="00:30:28.680" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""that feels just as simple""" start="00:30:31.960" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""as writing Emacs configurations,""" start="00:30:33.879" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""I want to work on getting""" start="00:30:36.240" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""a full graphical web browser inside of Emacs,""" start="00:30:37.720" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""and I want to finish programs like Squint.""" start="00:30:41.460" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""These are just some of the projects""" start="00:30:43.360" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""I want to work on,""" start="00:30:44.880" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""but I need funding to do so.""" start="00:30:46.020" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""If you want to see these things happen,""" start="00:30:48.240" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""send me an email at hello@ElephantErgonomics.com""" start="00:30:49.560" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""with both your intention""" start="00:30:53.800" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""to pledge a monthly contribution""" start="00:30:55.560" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""as well as clarification,""" start="00:30:57.360" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""a sort of vote on which project""" start="00:30:59.400" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""you would like to see me prioritize.""" start="00:31:02.080" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""I would love to have folks reach out""" start="00:31:03.520" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""for any of these reasons.""" start="00:31:06.680" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""I would just love to talk to you.""" start="00:31:07.520" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""Thank you so much for watching!""" start="00:31:12.200" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""I really hope that the talk was interesting,""" start="00:31:14.620" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""and I'm really excited to see""" start="00:31:16.520" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""your thoughts and questions""" start="00:31:18.640" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""right now in the Q&A!""" start="00:31:19.720" video="mainVideo-bookclub-tapas" id="subtitle"]]
+[[!template text="""Thank you so much for watching. Bye!""" start="00:31:21.960" video="mainVideo-bookclub-tapas" id="subtitle"]]
+
+</div>
+
+Captioner: sachac
+
+Questions or comments? Please e-mail [hello@ElephantErgonomics.com](mailto:hello@ElephantErgonomics.com?subject=Comment%20for%20EmacsConf%202023%20bookclub-tapas%3A%20Bookclub%20tapas)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2025/info/bookclub-tapas-before.md b/2025/info/bookclub-tapas-before.md
new file mode 100644
index 00000000..c58ce85f
--- /dev/null
+++ b/2025/info/bookclub-tapas-before.md
@@ -0,0 +1,43 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+
+The following image shows where the talk is in the schedule for Sun 2025-12-07. Solid lines show talks with Q&A via BigBlueButton. Dashed lines show talks with Q&A via IRC or Etherpad.<div class="schedule-in-context schedule-svg-container" data-slug="bookclub-tapas">
+<svg width="700" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Schedule for Sunday</title> <rect width="700" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="/2025/talks/sun-open" title="Sunday opening remarks" data-slug="sun-open"> <title> 9:00- 9:10 Sunday opening remarks</title> <rect x="0" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(11,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-open</text></g></a> <a href="/2025/talks/modern" title="Some problems of modernizing Emacs" data-slug="modern"> <title> 9:10- 9:30 Some problems of modernizing Emacs</title> <rect x="13" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(38,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> modern</text></g></a> <a href="/2025/talks/reader" title="An introduction to the Emacs Reader" data-slug="reader"> <title> 9:40-10:15 An introduction to the Emacs Reader</title> <rect x="54" y="15" opacity="0.5" width="48" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(100,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> reader</text></g></a> <a href="/2025/talks/weights" title="Weightlifting tracking with Emacs on Android" data-slug="weights"> <title> 10:35-10:45 Weightlifting tracking with Emacs on Android</title> <rect x="130" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(141,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> weights</text></g></a> <a href="/2025/talks/completion" title="corfu+yasnippet: Easier than I thought" data-slug="completion"> <title> 11:05-11:25 corfu+yasnippet: Easier than I thought</title> <rect x="171" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(196,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> completion</text></g></a> <a href="/2025/talks/zettelkasten" title="Zettelkasten for regular Emacs hackers" data-slug="zettelkasten"> <title> 1:00- 1:25 Zettelkasten for regular Emacs hackers</title> <rect x="329" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(361,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> zettelkasten</text></g></a> <a href="/2025/talks/hyperboleqa" title="Questions and answers to help you fly with Hyperbole" data-slug="hyperboleqa"> <title> 1:45- 2:15 Questions and answers to help you fly with Hyperbole</title> <rect x="391" y="15" opacity="0.5" width="41" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(430,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperboleqa</text></g></a> <a href="/2025/talks/gardening" title="Gardening in Emacs: A Windows user's tale of tending, tweaking, and triumph" data-slug="gardening"> <title> 2:15- 2:35 Gardening in Emacs: A Windows user's tale of tending, tweaking, and triumph</title> <rect x="432" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(457,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gardening</text></g></a> <a href="/2025/talks/bookclub-tapas" title="Bookclub tapas" data-slug="bookclub-tapas"> <title> 2:45- 3:20 Bookclub tapas</title> <rect stroke-width="3" x="473" y="15" opacity="0.8" width="48" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(519,73)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> bookclub-tapas</text></g></a> <a href="/2025/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"> <title> 3:40- 3:50 Sunday closing remarks</title> <rect x="549" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(560,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-close</text></g></a> <g transform="translate(0,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(82,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(164,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(247,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(329,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(411,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(494,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(576,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(658,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 5 PM</text></g></svg>
+</div>
+
+[[!toc ]]
+Format: 32-min talk ; Q&A: BigBlueButton conference room <https://media.emacsconf.org/2025/current/bbb-bookclub-tapas.html> Etherpad: <https://pad.emacsconf.org/2025-bookclub-tapas>
+Etherpad: <https://pad.emacsconf.org/2025-bookclub-tapas>
+Discuss on IRC: [#emacsconf-gen](https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen)
+Status: Q&A open for participation
+<div>Times in different time zones:</div><div class="times" start="2025-12-07T19:45:00Z" end="2025-12-07T20:20:00Z"><div class="conf-time">Sunday, Dec 7 2025, ~2:45 PM - 3:20 PM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Sunday, Dec 7 2025, ~1:45 PM - 2:20 PM CST (US/Central)<br />Sunday, Dec 7 2025, ~12:45 PM - 1:20 PM MST (US/Mountain)<br />Sunday, Dec 7 2025, ~11:45 AM - 12:20 PM PST (US/Pacific)<br />Sunday, Dec 7 2025, ~7:45 PM - 8:20 PM UTC <br />Sunday, Dec 7 2025, ~8:45 PM - 9:20 PM CET (Europe/Paris)<br />Sunday, Dec 7 2025, ~9:45 PM - 10:20 PM EET (Europe/Athens)<br />Monday, Dec 8 2025, ~1:15 AM - 1:50 AM IST (Asia/Kolkata)<br />Monday, Dec 8 2025, ~3:45 AM - 4:20 AM +08 (Asia/Singapore)<br />Monday, Dec 8 2025, ~4:45 AM - 5:20 AM JST (Asia/Tokyo)</div></div><div><strong><a href="/2025/watch/gen/">Find out how to watch and participate</a></strong></div>
+
+
+
+
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-bookclub-tapas"><source src="https://media.emacsconf.org/2025/emacsconf-2025-bookclub-tapas--bookclub-tapas--maddie-sullivan--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2025/captions/emacsconf-2025-bookclub-tapas--bookclub-tapas--maddie-sullivan--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2025/captions/emacsconf-2025-bookclub-tapas--bookclub-tapas--maddie-sullivan--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="mainVideo-bookclub-tapas" data="""
+00:00:00.620 Introduction
+00:29.680 Hi, I'm Maddie!
+01:03.840 Bookclub Tapas
+02:00.520 Bookclub
+02:40.300 Too many hats, too many roles
+03:55.800 Narrativiation
+05:24.780 My starter kit - My stock, off the shelf suggestions
+05:47.660 Now what?
+05:58.980 Our overarching goal
+06:23.460 Our development focuses
+07:05.120 The rest of the headings
+08:37.980 Conversationality
+10:55.480 Ad-hoc means lesricsf tion
+13:01.920 Gratis documentation
+14:48.440 Keeping the thread of your intention
+16:21.500 Bookclub is becoming too much
+17:25.240 Introducing Tapas
+18:22.840 What are Tapas, what are Tapas not?
+22:25.180 Tapas are maybe best illustrated by example
+25:52.340 Introducing Squint
+28:36.100 What else does Bookclub Tapas do?
+29:08.160 Let's work together
+
+"""]]<div></div>Duration: 31:25 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2025-bookclub-tapas">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2025/current/bbb-bookclub-tapas.html">Open public Q&A</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-bookclub-tapas--bookclub-tapas--maddie-sullivan--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-bookclub-tapas--bookclub-tapas--maddie-sullivan--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-bookclub-tapas--bookclub-tapas--maddie-sullivan--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-bookclub-tapas--bookclub-tapas--maddie-sullivan--main.opus">Download --main.opus (27MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-bookclub-tapas--bookclub-tapas--maddie-sullivan--main.png">Download --main.png</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-bookclub-tapas--bookclub-tapas--maddie-sullivan--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-bookclub-tapas--bookclub-tapas--maddie-sullivan--main.webm">Download --main.webm (74MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-bookclub-tapas--bookclub-tapas--maddie-sullivan--script.org">Download --script.org</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-bookclub-tapas--bookclub-tapas--maddie-sullivan--split.txt">Download --split.txt</a></li><li><a href="https://youtu.be/GAOZzrm6ecA">View on Youtube</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2025/info/bookclub-tapas-nav.md b/2025/info/bookclub-tapas-nav.md
new file mode 100644
index 00000000..cd9e1a88
--- /dev/null
+++ b/2025/info/bookclub-tapas-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by time: <a href="/2025/talks/gardening">Gardening in Emacs: A Windows user's tale of tending, tweaking, and triumph</a>
+Next by time: <a href="/2025/talks/sun-close">Sunday closing remarks</a>
+Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2025/watch/gen">Watch</a></strong>
+</div>
diff --git a/2025/info/calc-after.md b/2025/info/calc-after.md
new file mode 100644
index 00000000..7c0f6ebf
--- /dev/null
+++ b/2025/info/calc-after.md
@@ -0,0 +1,314 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<div class="transcript transcript-mainVideo"><a name="calc-mainVideo-transcript"></a><h1>Transcript</h1>
+
+
+<div class="transcript-heading">[[!template new="1" text="""Introduction""" start="00:00:03.620" video="mainVideo-calc" id="subtitle"]]</div>[[!template text="""Hello, my name is Christopher Howard and welcome to my talk.""" start="00:00:03.620" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""This is basically an introduction""" start="00:00:08.800" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""to the built-in Emacs calculator,""" start="00:00:11.320" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""properly known as Emacs Calc,""" start="00:00:15.120" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""particularly from the perspective of someone""" start="00:00:18.320" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""with a technical background such as engineering or electronics.""" start="00:00:21.440" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""I will say, though, my personal interest is not really""" start="00:00:27.560" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""in digital computing or digital calculators,""" start="00:00:32.880" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""but lately has been focused more on analog computing.""" start="00:00:37.840" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""I have, for example, been working to master""" start="00:00:42.520" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""the venerable slide rule, a mechanical computer""" start="00:00:46.800" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""that calculates multiplication powers and logarithms.""" start="00:00:50.840" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""Here's a picture of one.""" start="00:00:57.320" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""It's a physical tool that was used for hundreds of years""" start="00:01:02.200" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""for this sort of thing""" start="00:01:06.800" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""before the handheld calculator was made popular.""" start="00:01:09.000" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""And I also had a project that I did""" start="00:01:16.680" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""for a while to several months""" start="00:01:18.640" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""to build an electronic analog computer.""" start="00:01:21.120" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""A rudimentary attempt of mine, but it's functional,""" start="00:01:33.120" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""and it's basically a 1960s or 1970s style""" start="00:01:38.680" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""electronic analog computer built very much on a budget,""" start="00:01:43.400" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""but the box in the middle is the computer proper""" start="00:01:48.840" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""which has most of the components inside of it""" start="00:01:52.560" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""as well as the potentiometers for setting values,""" start="00:01:55.720" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""and an operation switch.""" start="00:02:00.200" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""There's a patch panel on the left""" start="00:02:02.040" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""for connecting the different integrators,""" start="00:02:04.400" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""amplifiers, multipliers, and so forth together.""" start="00:02:07.120" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""Then the output of the simulation is displayed""" start="00:02:11.320" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""on the oscilloscope on the right side,""" start="00:02:16.920" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""which is a digital oscilloscope.""" start="00:02:19.800" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""To be honest, I think that a talk about analog computing""" start="00:02:25.480" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""would be much more interesting""" start="00:02:28.440" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""than the talk that I'm about to give,""" start="00:02:30.200" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""but unfortunately that would be out of scope for EmacsConf.""" start="00:02:32.040" video="mainVideo-calc" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""What is Calc?""" start="00:02:36.640" video="mainVideo-calc" id="subtitle"]]</div>[[!template text="""So instead I will talk about Emacs Calc,""" start="00:02:36.640" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""the digital calculator built into Emacs.""" start="00:02:39.920" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""Emacs Calc, while not being a replacement for software""" start="00:02:43.360" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""like GNU Octave, does have advanced calculator functionality""" start="00:02:47.520" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""that can be useful in engineering, electronics,""" start="00:02:51.480" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""or other technical applications. So I don't want to oversell it,""" start="00:02:55.040" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""but I think functionality-wise, Calc is somewhere in between""" start="00:03:00.760" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""what you'd expect of a decent scientific calculator""" start="00:03:06.480" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""and an advanced graphics calculator.""" start="00:03:12.240" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""So this talk I'll mention is not intended to be a tutorial""" start="00:03:23.940" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""but only a brief introduction to Calc.""" start="00:03:28.840" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""Please refer to the built-in Calc info manual""" start="00:03:33.840" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""for detailed instructions on how to complete operations.""" start="00:03:37.440" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""Turn off my volume here.""" start="00:03:46.740" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""The documentation for Emacs Calc is built-in,""" start="00:04:01.480" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""although on some distributions you may have to install""" start="00:04:05.720" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""the Emacs documentation separately for licensing reasons.""" start="00:04:10.440" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""Calc presents itself as a stack-based calculator""" start="00:04:24.480" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""where entries are dropped onto a stack""" start="00:04:28.600" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""and then an operation is performed on the stack entries.""" start="00:04:31.600" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""For example, I can drop 1.23 onto the stack,""" start="00:04:36.740" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""and then 8.56, and then multiply them together.""" start="00:04:42.900" video="mainVideo-calc" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""calc-algebraic-entry""" start="00:04:54.280" video="mainVideo-calc" id="subtitle"]]</div>[[!template text="""It may present itself as a stack-based calculator,""" start="00:04:54.280" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""but indeed, Calc is also capable of accepting input""" start="00:05:01.560" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""in the more well-known algebraic format""" start="00:05:05.400" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""by using the calc-algebraic-entry command,""" start="00:05:07.740" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""which by default is bound to the apostrophe (') key.""" start="00:05:10.760" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""So you type the apostrophe key, enter the algebraic input,""" start="00:05:15.000" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""including parentheses as needed.""" start="00:05:19.760" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""For example, here's a calculation of the resonance frequency""" start="00:05:22.760" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""of a coil which has an inductance of 250 microhenries""" start="00:05:28.200" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""and 160 picofarads, taken from one of my electronics handbooks.""" start="00:05:35.040" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""The formula for that is 1 over 2 pi""" start="00:05:41.060" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""and then the square root of our inductance""" start="00:05:50.020" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""which is in this case 250 microfarads - excuse me, microhenries""" start="00:05:57.440" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""and then the capacitance is 160 picofarads.""" start="00:06:06.280" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""Small typo here.""" start="00:06:19.400" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""Now I need to evaluate that one more time,""" start="00:06:24.400" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""because pi is a symbol.""" start="00:06:26.640" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""I get about 800 kHz resonant frequency.""" start="00:06:30.920" video="mainVideo-calc" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""calc-roll-down""" start="00:06:37.399" video="mainVideo-calc" id="subtitle"]]</div>[[!template text="""The command calc-roll-down,""" start="00:06:37.399" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""which by default is bound to the TAB key,""" start="00:06:41.680" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""will swap the top two stack entries,""" start="00:06:44.200" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""which is sometimes useful if you need to manipulate something""" start="00:06:47.920" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""that's further down the stack.""" start="00:06:51.560" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""So I can swap this around and say multiply by two""" start="00:06:57.000" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""and then put it back where it was.""" start="00:07:02.040" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""This command is also capable of rolling the entire stack.""" start="00:07:05.480" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""Say I want to shift them all around.""" start="00:07:14.040" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""This can be done by passing extra arguments""" start="00:07:18.900" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""to the calc-roll-down function.""" start="00:07:21.400" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""That's a little bit inconvenient to do manually,""" start="00:07:23.560" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""so in my init file, I defined here a key definition""" start="00:07:28.280" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""that passes in those arguments correctly.""" start="00:07:40.080" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""I attached this to shift-tab,""" start="00:07:45.760" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""so this way, I can roll the entire stack.""" start="00:07:49.180" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""Then I could change one entry here""" start="00:07:52.320" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""and then put it back where it was.""" start="00:07:56.160" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""So Calc does algebraic input.""" start="00:08:03.460" video="mainVideo-calc" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Advanced functions""" start="00:08:07.760" video="mainVideo-calc" id="subtitle"]]</div>[[!template text="""It also does advanced functions""" start="00:08:07.760" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""that you would expect any handheld scientific calculator,""" start="00:08:10.160" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""including trigonometric functions.""" start="00:08:15.600" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""For example, we can get the sine of a number.""" start="00:08:19.160" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""Now I'll mention here that Calc has multiple modes.""" start="00:08:25.320" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""Right now it's in degree mode.""" start="00:08:30.720" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""You can switch over to radian mode if you want.""" start="00:08:32.320" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""I'm going to put it back in degrees.""" start="00:08:38.160" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""Drop 12 degrees on the stack, and then get the sine of that.""" start="00:08:42.800" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""And then with the inverse sine function, I can put it back.""" start="00:08:49.800" video="mainVideo-calc" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Solving equations with calc-solve-for""" start="00:08:58.180" video="mainVideo-calc" id="subtitle"]]</div>[[!template text="""Calc also has the nifty ability to solve equations for you""" start="00:08:58.180" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""so long as the equation is not too complicated.""" start="00:09:07.520" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""This is using the calc-solve-for function.""" start="00:09:13.920" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""For example, we could enter in an equation algebraically,""" start="00:09:19.960" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""then run calc-solve-for, and we just have to tell it""" start="00:09:31.700" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""what variable we want to solve for. And there we go.""" start="00:09:36.680" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""We can do this manually as well""" start="00:09:41.000" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""just so you can see that we get the same result.""" start="00:09:43.200" video="mainVideo-calc" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Systems of equations""" start="00:09:54.720" video="mainVideo-calc" id="subtitle"]]</div>[[!template text="""Calc is also able to solve systems of equations.""" start="00:09:54.720" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""We can put more than one equation on the stack,""" start="00:09:57.960" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""and then solve for several variables.""" start="00:10:03.440" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""To give a technical example for this,""" start="00:10:08.960" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""I'll show you a resistor network scribble that I did recently.""" start="00:10:13.320" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""Hopefully you can see that. Basically,""" start="00:10:30.660" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""it's fairly simple, a pretty simple resistor network""" start="00:10:32.820" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""with 1 kilo ohm and 10 kilo ohm resistors,""" start="00:10:38.720" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""and using the loop methods, we are calculating the currents,""" start="00:10:42.160" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""the current in each loop, and then that current can be used""" start="00:10:48.960" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""to solve for the voltage of each individual resistor""" start="00:10:52.760" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""if we want to. So at the bottom there we have the equations""" start="00:10:58.840" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""that we come up with as we work through each loop.""" start="00:11:06.200" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""And I'm going to paste that into Calc.""" start="00:11:11.520" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""To save some time, I'm going to copy and paste that""" start="00:11:19.580" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""from my notes instead of typing it out.""" start="00:11:22.720" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""So we have two equations there on the stack""" start="00:11:34.260" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""in one stack entry. We run that calc-solve-for function again,""" start="00:11:38.260" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""and we tell it which variables we want to solve for.""" start="00:11:44.720" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""And voila! Those are our currents,""" start="00:11:49.900" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""which we can then use to get the voltages""" start="00:11:51.960" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""for the individual resistors.""" start="00:11:55.720" video="mainVideo-calc" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""calc-find-root""" start="00:12:00.080" video="mainVideo-calc" id="subtitle"]]</div>[[!template text="""I'll just briefly mention""" start="00:12:00.080" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""that if Calc is not able to solve an equation""" start="00:12:02.000" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""with calc-solve-for,""" start="00:12:05.840" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""then you might be helped by another calc function""" start="00:12:07.780" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""called calc-find-root.""" start="00:12:10.280" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""This function basically does a manual search""" start="00:12:11.560" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""for a numerical solution to the equation.""" start="00:12:14.440" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""And there's the documentation page on that.""" start="00:12:30.200" video="mainVideo-calc" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Derivatives and integrals""" start="00:12:39.960" video="mainVideo-calc" id="subtitle"]]</div>[[!template text="""Calc can also solve or find derivatives of functions,""" start="00:12:39.960" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""at least the more straightforward functions.""" start="00:12:44.040" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""For a simple example,""" start="00:12:47.580" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""we can get the derivative of that""" start="00:12:49.840" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""with the derivative function.""" start="00:13:00.560" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""On the other hand, Calc is also capable of figuring out""" start="00:13:11.980" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""indefinite integrals.""" start="00:13:17.160" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""Say we put that function back on the stack,""" start="00:13:22.100" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""and this time, we call the integral function.""" start="00:13:26.860" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""There you go. Of course, you have to add""" start="00:13:32.560" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""your own constant of integration.""" start="00:13:35.080" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""For integrals that Calc cannot figure out symbolically,""" start="00:13:39.820" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""a numerical integration method is available""" start="00:13:43.400" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""through the calc-num-integral command, which is documented...""" start="00:13:46.080" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""The function documentation is available here, more or less.""" start="00:13:59.999" video="mainVideo-calc" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Programmable functions""" start="00:14:17.540" video="mainVideo-calc" id="subtitle"]]</div>[[!template text="""I definitely need to mention""" start="00:14:17.540" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""that Calc is capable of doing programmable functions.""" start="00:14:20.400" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""That is to say, you can program your own functions into Calc.""" start="00:14:24.760" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""There are three separate ways to do this.""" start="00:14:29.620" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""One is through a macro method""" start="00:14:32.240" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""similar to Emacs's usual keyboard macros.""" start="00:14:36.280" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""The second method is to transform an algebraic function""" start="00:14:41.540" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""into a stored function definition.""" start="00:14:46.520" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""And the third is to use Elisp directly.""" start="00:14:50.860" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""Personally, I find that the second method""" start="00:14:54.060" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""is the most practical, the most convenient and practical""" start="00:14:56.600" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""in my opinion. So I'll give a quick example of that.""" start="00:15:01.800" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""So I could... Let's say I wanted to have a function""" start="00:15:08.060" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""for calculating capacitive reactance.""" start="00:15:14.160" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""I'll define that in algebraic mode first.""" start="00:15:20.700" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""The function for that is 1 over 2 pi""" start="00:15:28.900" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""the frequency and the capacitance.""" start="00:15:33.640" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""Drop that on the stack. You see, it does automatically""" start="00:15:41.600" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""get simplified a little bit, but it's the same function.""" start="00:15:44.960" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""And then I press letters Z and F. Do that again.""" start="00:15:52.080" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""Z and F to start transforming that into a stored function.""" start="00:15:58.840" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""It asks me to select a user key, a single key press.""" start="00:16:06.240" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""I'll use the letter c.""" start="00:16:11.040" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""Then it's going to ask for a longer command name.""" start="00:16:15.480" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""I've actually defined this once before, so it prefilled in""" start="00:16:19.080" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""that command name.""" start="00:16:24.640" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""Then I need to enter which variables in the formula""" start="00:16:38.340" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""are actual arguments, rather than just symbols""" start="00:16:43.000" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""to be evaluated later. I prefer to put this in with frequency""" start="00:16:46.560" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""and the capacitance after that,""" start="00:16:52.560" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""but actually in this particular case,""" start="00:16:54.280" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""it doesn't matter at all to the mathematics.""" start="00:16:57.800" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""So, now all I have to do, that this is defined,""" start="00:17:07.340" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""is I can drop the frequency on the stack,""" start="00:17:11.400" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""which we'll say, for this example, will be 4.5 MHz,""" start="00:17:15.200" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""and then drop on the capacitance, which in this example""" start="00:17:24.400" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""will be 22 pF.""" start="00:17:32.280" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""Then I'll call the function that I just defined.""" start="00:17:40.320" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""I don't really like having to try to remember""" start="00:17:42.440" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""the short letters that I've come up with,""" start="00:17:45.240" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""so I'll just use the longer name.""" start="00:17:48.680" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""I need to evaluate one more time""" start="00:17:57.840" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""because the symbol pi is in there and not yet evaluated.""" start="00:17:59.800" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""And so if I've done that right,""" start="00:18:05.620" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""we have a capacitive reactance of about 1600 ohms.""" start="00:18:07.540" video="mainVideo-calc" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Plotting""" start="00:18:12.160" video="mainVideo-calc" id="subtitle"]]</div>[[!template text="""As the last feature that I'll mention here,""" start="00:18:12.160" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""Emacs Calc does have an interface with gnuplot,""" start="00:18:16.840" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""if you want to have Calc work as your graphing calculator.""" start="00:18:24.060" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""I do need to be honest and mention""" start="00:18:30.800" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""that I don't generally use it myself""" start="00:18:33.160" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""because there's another program in GNOME""" start="00:18:35.580" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""that I've found to be generally more convenient""" start="00:18:39.720" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""for the things that I want to graph quickly.""" start="00:18:43.500" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""But I think I can give you a simple example.""" start="00:18:47.400" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""So first, we need to drop a range on the stack.""" start="00:18:53.400" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""Let's say 0 to 10.""" start="00:19:00.340" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""And then we need to drop the function on the stack.""" start="00:19:06.620" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""And then I believe it's the letters g and f that graph this.""" start="00:19:11.640" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""Let's see. Yep, there we go.""" start="00:19:17.840" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""So there's our function and it looks nice.""" start="00:19:22.320" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""That was pretty easy.""" start="00:19:25.060" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""That's the fast way to do it.""" start="00:19:26.660" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""I will, as a disclaimer, mention that""" start="00:19:29.020" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""using this quick approach,""" start="00:19:32.840" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""that sometimes more complicated graphs""" start="00:19:34.160" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""will not turn out nicely,""" start="00:19:38.760" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""because by default, the resolution will be pretty low.""" start="00:19:40.000" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""That is to say it's... gnuplot is going to be""" start="00:19:44.340" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""skipping a lot of points""" start="00:19:48.120" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""and so you'll have to learn a bit more""" start="00:19:49.900" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""about how to use the interface,""" start="00:19:52.040" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""what parameters to pass if you want all your graphs""" start="00:19:55.320" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""to come out looking nice.""" start="00:19:59.520" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""So that covers all the features that I wanted to cover.""" start="00:20:03.700" video="mainVideo-calc" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Wish list""" start="00:20:08.800" video="mainVideo-calc" id="subtitle"]]</div>[[!template text="""I wanted to briefly mention a wish list of items""" start="00:20:08.800" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""that I'd like to see in Calc.""" start="00:20:13.280" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""One of them would be improper integrals.""" start="00:20:16.680" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""So that's like our definite integrals""" start="00:20:23.640" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""except for where a limit of integration is infinity.""" start="00:20:25.160" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""That's something that can be useful in a few applications.""" start="00:20:32.860" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""Something else that would be neat to have would be""" start="00:20:38.560" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""annotations for row entries. So for example""" start="00:20:41.080" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""if I was putting together a sum of numbers""" start="00:20:45.680" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""for, say, my monthly budget,""" start="00:20:48.820" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""let's say I was paying $2,000 for my rent""" start="00:20:53.280" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""and let's say $800 a month for my groceries,""" start="00:20:57.480" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""(a lot of kids to feed there)""" start="00:21:03.832" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""and then say another $60 for dining out, and so on,""" start="00:21:07.932" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""it would be nice if there was some way""" start="00:21:14.566" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""to put a little annotation next to each number""" start="00:21:18.260" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""so that you could remember""" start="00:21:21.320" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""what the meaning of that number was more easily.""" start="00:21:23.400" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""I actually looked into programming this into Calc myself,""" start="00:21:27.040" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""but discovered that it would require reprogramming""" start="00:21:31.200" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""quite a bit of Calc to make that work well""" start="00:21:35.920" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""across all calc functionality,""" start="00:21:41.840" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""and so, eventually, I gave up.""" start="00:21:43.480" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""But I'd still really like to have that feature.""" start="00:21:46.940" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""The final thing, though""" start="00:21:51.140" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""I think this would not necessarily belong in Calc,""" start="00:21:52.040" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""I think it would be cool if Emacs had some way""" start="00:21:54.580" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""to run numerical solutions""" start="00:21:57.920" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""for systems of differential equations,""" start="00:22:00.600" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""also known as a differential analyzer.""" start="00:22:02.600" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""So this would allow you to be able to set up simulation models""" start="00:22:06.020" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""involving systems of differential equations,""" start="00:22:09.280" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""for example, a spring mass system, or pressure temperature,""" start="00:22:11.680" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""or what have you, and then run the simulation""" start="00:22:14.880" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""using numerical approximation.""" start="00:22:18.040" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""Maybe it would be silly""" start="00:22:22.120" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""to actually put that in Calc itself,""" start="00:22:24.080" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""but a nice interface maybe to some other software,""" start="00:22:26.000" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""simple software that did that,""" start="00:22:30.340" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""an easy to use interface for that""" start="00:22:33.300" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""would be really great.""" start="00:22:35.780" video="mainVideo-calc" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Wrapping up""" start="00:22:38.600" video="mainVideo-calc" id="subtitle"]]</div>[[!template text="""So that's my entire talk.""" start="00:22:38.600" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""I'll just mention some information.""" start="00:22:41.801" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""If you want to learn more about me""" start="00:22:44.535" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""or things that I'm interested in,""" start="00:22:48.366" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""I do not any longer have a web presence.""" start="00:22:50.120" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""I don't have a website anymore,""" start="00:22:57.780" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""but I do have a Gemini capsule""" start="00:22:59.660" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""that I post to all the time.""" start="00:23:03.360" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""And if you can install, if you're willing to install the...""" start="00:23:07.140" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""Gemini browser known as Elpher""" start="00:23:13.880" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""into Emacs, which is available from ELPA,""" start="00:23:19.080" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""then you can browse directly to it""" start="00:23:23.699" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""and look around my Gemini capsule.""" start="00:23:27.360" video="mainVideo-calc" id="subtitle"]]
+[[!template text="""Thank you very much.""" start="00:23:31.440" video="mainVideo-calc" id="subtitle"]]
+
+</div>
+
+Captioner: sachac
+
+Questions or comments? Please e-mail [christopher@librehacker.com](mailto:christopher@librehacker.com?subject=Comment%20for%20EmacsConf%202023%20calc%3A%20Basic%20Calc%20functionality%20for%20engineering%20or%20electronics)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2025/info/calc-before.md b/2025/info/calc-before.md
new file mode 100644
index 00000000..8e5c5bd5
--- /dev/null
+++ b/2025/info/calc-before.md
@@ -0,0 +1,34 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+
+The following image shows where the talk is in the schedule for Sat 2025-12-06. Solid lines show talks with Q&A via BigBlueButton. Dashed lines show talks with Q&A via IRC or Etherpad.<div class="schedule-in-context schedule-svg-container" data-slug="calc">
+<svg width="700" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Schedule for Saturday</title> <rect width="700" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="/2025/talks/sat-open" title="Saturday opening remarks" data-slug="sat-open"> <title> 9:00- 9:10 Saturday opening remarks</title> <rect x="0" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(11,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="/2025/talks/org-babel" title="Making Org-Babel reactive" data-slug="org-babel"> <title> 9:10- 9:20 Making Org-Babel reactive</title> <rect x="13" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(24,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> org-babel</text></g></a> <a href="/2025/talks/reference" title="Emacs as a fully-fledged reference manager" data-slug="reference"> <title> 9:30- 9:55 Emacs as a fully-fledged reference manager</title> <rect x="41" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(73,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> reference</text></g></a> <a href="/2025/talks/gmail" title="org-gmail: A deep integration of Gmail into your Org Mode" data-slug="gmail"> <title> 10:15-10:40 org-gmail: A deep integration of Gmail into your Org Mode</title> <rect x="102" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(134,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gmail</text></g></a> <a href="/2025/talks/gnus" title="Reading and writing emails in GNU Emacs with Gnus" data-slug="gnus"> <title> 10:50-11:15 Reading and writing emails in GNU Emacs with Gnus</title> <rect x="150" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(182,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gnus</text></g></a> <a href="/2025/talks/latex" title="LaTeX export in org-mode: the overhaul" data-slug="latex"> <title> 11:25-11:45 LaTeX export in org-mode: the overhaul</title> <rect x="199" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(224,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> latex</text></g></a> <a href="/2025/talks/calc" title="Basic Calc functionality for engineering or electronics" data-slug="calc"> <title> 1:00- 1:25 Basic Calc functionality for engineering or electronics</title> <rect stroke-width="3" x="329" y="15" opacity="0.8" width="34" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(361,73)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> calc</text></g></a> <a href="/2025/talks/blee-lcnt" title="Blee-LCNT: An Emacs-centered content production and self-publication framework" data-slug="blee-lcnt"> <title> 1:35- 2:15 Blee-LCNT: An Emacs-centered content production and self-publication framework</title> <rect x="377" y="15" opacity="0.5" width="54" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(429,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> blee-lcnt</text></g></a> <a href="/2025/talks/greader" title="GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence" data-slug="greader"> <title> 2:35- 2:40 GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence</title> <rect x="459" y="15" opacity="0.5" width="6" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(463,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> greader</text></g></a> <a href="/2025/talks/open-mic" title="Open session" data-slug="open-mic"> <title> 2:50- 3:40 Open session</title> <rect x="480" y="15" opacity="0.5" width="68" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(546,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> open-mic</text></g></a> <a href="/2025/talks/sat-close" title="Saturday closing remarks / open session" data-slug="sat-close"> <title> 4:00- 4:10 Saturday closing remarks / open session</title> <rect x="576" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(587,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="/2025/talks/schemacs" title="One year progress update Schemacs (formerly Gypsum)" data-slug="schemacs"> <title> 9:30- 9:55 One year progress update Schemacs (formerly Gypsum)</title> <rect x="41" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(73,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> schemacs</text></g></a> <a href="/2025/talks/juicemacs" title="Juicemacs: exploring speculative JIT compilation for ELisp in Java" data-slug="juicemacs"> <title> 10:15-10:35 Juicemacs: exploring speculative JIT compilation for ELisp in Java</title> <rect x="102" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(127,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> juicemacs</text></g></a> <a href="/2025/talks/swanky" title="Swanky Python: Interactive development for Python" data-slug="swanky"> <title> 10:45-11:10 Swanky Python: Interactive development for Python</title> <rect x="144" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(176,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> swanky</text></g></a> <a href="/2025/talks/python" title="Interactive Python programming in Emacs" data-slug="python"> <title> 11:20-11:40 Interactive Python programming in Emacs</title> <rect x="192" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(217,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <a href="/2025/talks/llm" title="Emacs, editors, and LLM driven workflows" data-slug="llm"> <title> 1:00- 1:25 Emacs, editors, and LLM driven workflows</title> <rect x="329" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(361,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> llm</text></g></a> <a href="/2025/talks/private-ai" title="Emacs and private AI: a great match" data-slug="private-ai"> <title> 1:45- 2:05 Emacs and private AI: a great match</title> <rect x="391" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(416,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> private-ai</text></g></a> <a href="/2025/talks/commonlisp" title="Common Lisp images communicating like-a-human through shared Emacs slime and eev" data-slug="commonlisp"> <title> 2:25- 2:55 Common Lisp images communicating like-a-human through shared Emacs slime and eev</title> <rect x="446" y="75" opacity="0.5" width="41" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(485,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> commonlisp</text></g></a> <a href="/2025/talks/graphics" title="Modern Emacs/Elisp hardware/software accelerated graphics" data-slug="graphics"> <title> 3:05- 3:30 Modern Emacs/Elisp hardware/software accelerated graphics</title> <rect x="500" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(532,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> graphics</text></g></a> <g transform="translate(0,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(82,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(164,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(247,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(329,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(411,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(494,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(576,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(658,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 5 PM</text></g></svg>
+</div>
+
+[[!toc ]]
+Format: 24-min talk ; Q&A: IRC <https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen> Etherpad: <https://pad.emacsconf.org/2025-calc>
+Etherpad: <https://pad.emacsconf.org/2025-calc>
+Discuss on IRC: [#emacsconf-gen](https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen)
+Status: Q&A finished, IRC and pad will be archived on this page
+
+
+
+
+
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-calc"><source src="https://media.emacsconf.org/2025/emacsconf-2025-calc--basic-calc-functionality-for-engineering-or-electronics--christopher-howard--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2025/captions/emacsconf-2025-calc--basic-calc-functionality-for-engineering-or-electronics--christopher-howard--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2025/captions/emacsconf-2025-calc--basic-calc-functionality-for-engineering-or-electronics--christopher-howard--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="mainVideo-calc" data="""
+00:03.620 Introduction
+02:36.640 What is Calc?
+04:54.280 calc-algebraic-entry
+06:37.399 calc-roll-down
+08:07.760 Advanced functions
+08:58.180 Solving equations with calc-solve-for
+09:54.720 Systems of equations
+12:00.080 calc-find-root
+12:39.960 Derivatives and integrals
+14:17.540 Programmable functions
+18:12.160 Plotting
+20:08.800 Wish list
+22:38.600 Wrapping up
+
+"""]]<div></div>Duration: 23:35 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2025-calc">Open Etherpad</a></li><li><a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen">Open public Q&A</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-calc--basic-calc-functionality-for-engineering-or-electronics--christopher-howard--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-calc--basic-calc-functionality-for-engineering-or-electronics--christopher-howard--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-calc--basic-calc-functionality-for-engineering-or-electronics--christopher-howard--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-calc--basic-calc-functionality-for-engineering-or-electronics--christopher-howard--main.opus">Download --main.opus (20MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-calc--basic-calc-functionality-for-engineering-or-electronics--christopher-howard--main.png">Download --main.png</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-calc--basic-calc-functionality-for-engineering-or-electronics--christopher-howard--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-calc--basic-calc-functionality-for-engineering-or-electronics--christopher-howard--main.webm">Download --main.webm (56MB)</a></li><li><a href="https://youtu.be/MAc6gCUHjOw">View on Youtube</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2025/info/calc-nav.md b/2025/info/calc-nav.md
new file mode 100644
index 00000000..85146398
--- /dev/null
+++ b/2025/info/calc-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by time: <a href="/2025/talks/latex">LaTeX export in org-mode: the overhaul</a>
+Next by time: <a href="/2025/talks/llm">Emacs, editors, and LLM driven workflows</a>
+Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2025/watch/gen">Watch</a></strong>
+</div>
diff --git a/2025/info/claude-code-after.md b/2025/info/claude-code-after.md
new file mode 100644
index 00000000..e4a29e32
--- /dev/null
+++ b/2025/info/claude-code-after.md
@@ -0,0 +1,7 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+Questions or comments? Please e-mail [ywata1989@gmail.com](mailto:ywata1989@gmail.com?subject=Comment%20for%20EmacsConf%202023%20claude-code%3A%20emacs-claude-code%3A%20Intelligent%20Claude%20Integration%20for%20Emacs)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2025/info/claude-code-before.md b/2025/info/claude-code-before.md
new file mode 100644
index 00000000..d9c35617
--- /dev/null
+++ b/2025/info/claude-code-before.md
@@ -0,0 +1,13 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+[[!toc ]]
+Format: 20-min talk cancelled
+Discuss on IRC: [#emacsconf](https://chat.emacsconf.org/?join=emacsconf)
+Status: Sorry, this talk has been cancelled
+
+
+
+
+
+
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2025/info/claude-code-nav.md b/2025/info/claude-code-nav.md
new file mode 100644
index 00000000..35ed938a
--- /dev/null
+++ b/2025/info/claude-code-nav.md
@@ -0,0 +1,4 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+</div> \ No newline at end of file
diff --git a/2025/info/commonlisp-after.md b/2025/info/commonlisp-after.md
new file mode 100644
index 00000000..0b866149
--- /dev/null
+++ b/2025/info/commonlisp-after.md
@@ -0,0 +1,437 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<div class="transcript transcript-mainVideo"><a name="commonlisp-mainVideo-transcript"></a><h1>Transcript</h1>
+
+
+<div class="transcript-heading">[[!template new="1" text="""Introduction""" start="00:00:00.000" video="mainVideo-commonlisp" id="subtitle"]]</div>[[!template text="""Hey, everyone. This talk is on this tradition,""" start="00:00:00.000" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""intelligent agents in Emacs""" start="00:00:07.120" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""using my Leonardo software individuals,""" start="00:00:10.640" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""which I've mistyped as I just wrote here, I see.""" start="00:00:13.800" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""Thank you to Sacha and everyone""" start="00:00:16.920" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""at EmacsConf and Emacs, I guess.""" start="00:00:20.160" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""Sorry that I was running late.""" start="00:00:25.240" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""I'm screwlisp.small-web.org.""" start="00:00:26.600" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""I run those one or two weekly shows for a long time,""" start="00:00:29.760" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""the Lispy Gopher Climate.""" start="00:00:34.000" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""I'm active on the Mastodon at @screwlisp@gamerplus.org.""" start="00:00:35.600" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""I'm screwtape on lambda.moo.mud.org.""" start="00:00:42.200" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""And I ported, over the last kind of year,""" start="00:00:46.720" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""years, to some extent, I ported Eric Sandewall's system""" start="00:00:50.475" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""for developing intelligent software agents,""" start="00:00:58.500" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""which he finished working on in 2014.""" start="00:01:01.520" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""I got it working again around 2025.""" start="00:01:04.880" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""First, we're going to take a long arc.""" start="00:01:10.120" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""We're going to motivate... This is the idea.""" start="00:01:14.200" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""You can see I'm using Org Mode,""" start="00:01:16.760" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""which I hope provides a good example""" start="00:01:18.120" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""for all the Org-Mode-oriented talks this conference.""" start="00:01:19.960" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""But you can also see""" start="00:01:25.360" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""that I'm using Eduardo Ochs's eev minor mode with Org.""" start="00:01:26.400" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""But we can see a little bit of the difference""" start="00:01:33.108" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""between these two, and that will kind of evolve into""" start="00:01:35.641" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""my style with the agent communication in Emacs.""" start="00:01:39.208" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""So you can see I used eev anchors as my Emacs headings.""" start="00:01:45.260" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""In eev, you just evaluate Elisp expressions""" start="00:01:53.000" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""as links to places.""" start="00:01:56.840" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""An anchor will link you somewhere else in the document.""" start="00:01:58.680" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""So my table of contents links to my talk, I guess.""" start="00:02:01.680" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""Anchors come in two halves,""" start="00:02:04.808" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""so that's why I built that unique table of contents""" start="00:02:07.508" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""experience there. What else am I going to say?""" start="00:02:12.941" video="mainVideo-commonlisp" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Totally normal computing""" start="00:02:21.480" video="mainVideo-commonlisp" id="subtitle"]]</div>[[!template text="""So first, let's just do some totally normal computing""" start="00:02:21.480" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""because intelligence is going to be difficult to describe.""" start="00:02:24.175" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""Let's just try and compute normally in Emacs in Org Mode""" start="00:02:27.141" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""and then segue more so into eev,""" start="00:02:31.101" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""and then maybe I would like if an agent was intelligent,""" start="00:02:34.360" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""I would think that an intelligent agent""" start="00:02:38.360" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""would do something like what I'm doing.""" start="00:02:40.840" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""It should be recognizably similar to what I do myself.""" start="00:02:43.320" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""I don't think the word intelligence is relevant""" start="00:02:47.240" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""if it's not related to something I'm not familiar with.""" start="00:02:52.400" video="mainVideo-commonlisp" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Using Emacs as a human""" start="00:02:55.680" video="mainVideo-commonlisp" id="subtitle"]]</div>[[!template text="""Using Emacs as a human, reading headings from my article,""" start="00:02:55.680" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""using Common Lisp. Right, my friend jeremy_list""" start="00:03:01.000" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""wrote actually a big project,""" start="00:03:03.920" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""but part of it was base64 encoding,""" start="00:03:06.880" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""and I just yoinked his C code for base64 encoding, I think.""" start="00:03:09.800" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""This is just clearly some C-based 64 encoding.""" start="00:03:17.440" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""If you go to my blog, his project is actually a C++ project""" start="00:03:20.760" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""and you can see me doing this with C++ rather than C.""" start="00:03:24.280" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""But basically, you can go to my blog articles""" start="00:03:29.580" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""if you want more detail to read something instead.""" start="00:03:33.320" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""And then here's some embeddable Common Lisp,""" start="00:03:40.300" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""Jack Daniel's ECL ANSI Common Lisp compiler I guess.""" start="00:03:42.434" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""This is just what it looks like.""" start="00:03:48.440" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""You can see I'm using Org Mode trickily,""" start="00:03:49.640" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""using noweb to put the lines of the C source block""" start="00:03:52.240" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""in this one. We're tangling it to this file""" start="00:03:56.120" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""rather than evaluating it.""" start="00:04:00.280" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""So, you know, literate programming, tangle and weave.""" start="00:04:01.920" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""We're just using Org Mode""" start="00:04:05.280" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""like the other Org Mode people""" start="00:04:07.000" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""are all showing us this conference, I guess.""" start="00:04:09.198" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""Then we have to compile it.""" start="00:04:12.080" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""It's always hard to remember these invocations for me.""" start="00:04:13.400" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""Results file. The file is my .fas file,""" start="00:04:16.040" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""because the way ECL's C and C++ integration works""" start="00:04:20.160" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""is that it just has to be seen by compile-file in Lisp.""" start="00:04:24.560" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""I cached this earlier.""" start="00:04:30.520" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""Oh, I should actually start Lisp, actually, shouldn't I?""" start="00:04:32.120" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""How are we going to do this?""" start="00:04:36.200" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""(setq inferior-lisp-program &quot;ecl&quot;). We could M-x slime.""" start="00:04:39.640" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""Because... we better actually load this.""" start="00:04:47.100" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""I did a dry run before.""" start="00:04:48.920" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""I think we can just load this, because I already did it.""" start="00:04:54.120" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""But I cached it. Let's nuke the cache.""" start="00:04:58.260" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""Okay, I'm going to say that that probably worked.""" start="00:05:04.080" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""Now, as you saw, that base64 encoding""" start="00:05:06.600" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""was just, I guess, number to character code""" start="00:05:09.320" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""to other character code. So I wrote this higher-level Lisp one,""" start="00:05:13.620" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""but that's not really the point.""" start="00:05:19.141" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""Obviously, Emacs also has Base64 encoding.""" start="00:05:20.600" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""It's just a point that we might have""" start="00:05:26.200" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""C++ and C external programs""" start="00:05:27.980" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""that we'd like to be integrating""" start="00:05:29.960" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""into our Emacs agents capabilities.""" start="00:05:31.240" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""Here we can see a normal named Org Mode source block.""" start="00:05:37.140" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""that calls that function, then an Org Mode source block""" start="00:05:46.475" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""that calls Emacs's base64-decode-string as a way of""" start="00:05:50.475" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""validating it, I guess.""" start="00:05:56.300" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""We go to Org, so we can see...""" start="00:05:57.941" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""I have a named call to that function calling the Lisp function""" start="00:06:00.141" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""Org is just kind of like this.""" start="00:06:04.408" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""It's cached but I don't seem to have run it before.""" start="00:06:07.041" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""Then I do the Emacs decode.""" start="00:06:11.560" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""So if we just run this using C-c C-c,""" start="00:06:13.575" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""and we can kind of see""" start="00:06:15.975" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""what Org Mode is like a little bit here.""" start="00:06:17.241" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""All right, yes, so as we can see,""" start="00:06:22.180" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""oh hang on, let's run this as well actually.""" start="00:06:24.320" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""So the C embeddable Common Lisp""" start="00:06:27.660" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""base64 encoding gets us this.""" start="00:06:32.194" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""And then Emacs is decoding and gets us back,""" start="00:06:35.200" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""kind of validates it. I think I'm missing some things.""" start="00:06:38.080" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""I don't pad characters out to the correct byte lengths,""" start="00:06:40.320" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""that kind of thing, but it's fine.""" start="00:06:43.080" video="mainVideo-commonlisp" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""using this via eev as a human""" start="00:06:45.400" video="mainVideo-commonlisp" id="subtitle"]]</div>[[!template text="""And then I kind of contrast that to,""" start="00:06:45.400" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""I really like what my friend mdhughes.tech,""" start="00:06:48.720" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""game dev of the ages, calls REPL-driven development,""" start="00:06:53.180" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""which he says is kind of the opposite of literate coding.""" start="00:06:57.320" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""I think eev, at least for me,""" start="00:07:06.140" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""is kind of like REPL-driven development.""" start="00:07:08.941" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""So in eev, if you just press F8, the thing happens.""" start="00:07:11.080" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""And if it's a red star line,""" start="00:07:16.160" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""the thing is an Emacs Lisp thing,""" start="00:07:17.480" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""and otherwise it goes to the eepitch target.""" start="00:07:19.440" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""So if I do this, great, now I'm pitching to that slime""" start="00:07:23.000" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""REPL ECL I made. And then I pressed F8. Press F8 again.""" start="00:07:26.720" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""The string got coerced to a list.""" start="00:07:32.760" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""F8. Now it's car codified.""" start="00:07:34.481" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""I quite like this, because this looks like something I can do""" start="00:07:38.360" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""and understand doing and reason about doing.""" start="00:07:41.320" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""Then I form a command to send from Lisp to Emacs.""" start="00:07:44.240" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""Then I do it and I recover the string from the beginning.""" start="00:07:49.520" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""I guess I had one of these here. Oh, by the way, look at""" start="00:07:52.600" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""What Org Mode did with an eev source block.""" start="00:07:56.120" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""And then when I close the source block""" start="00:07:59.160" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""using C-c ',""" start="00:08:01.000" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""it brings me back to the Org doc,""" start="00:08:02.680" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""which was a cool synergy between the eev minor mode""" start="00:08:05.320" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""and eev source blocks in Org Mode that I noticed.""" start="00:08:09.160" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""And so I kind of want my agents to be like this eev usage.""" start="00:08:16.020" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""Clearly, Org is super powerful,""" start="00:08:22.600" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""but I don't even like writing calls like this,""" start="00:08:25.160" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""where you write the function that will happen last first,""" start="00:08:28.160" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""so you're kind of writing right to left, first to last.""" start="00:08:32.080" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""Whereas in REPL-driven development,""" start="00:08:39.040" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""I guess I'm writing top to bottom,""" start="00:08:41.240" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""and eev, I guess, executable logs""" start="00:08:43.200" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""are logs that are like that.""" start="00:08:46.980" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""So I kind of like eev's view for reasoning""" start="00:08:48.600" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""more than Org's Tangle.""" start="00:08:52.379" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""Obviously, Tangle is trying to do tricky things,""" start="00:08:54.400" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""but maybe they have different specializations,""" start="00:08:57.320" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""and eev's one is more close""" start="00:09:01.360" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""to my own version of intelligence, maybe.""" start="00:09:04.880" video="mainVideo-commonlisp" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Software individuals using eev in Emacs like a human""" start="00:09:07.800" video="mainVideo-commonlisp" id="subtitle"]]</div>[[!template text="""Software individuals using eev in Emacs like a human.""" start="00:09:07.800" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""Yeah, you can always visit my blog post for more detail.""" start="00:09:13.540" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""Right, I made a CLOS object""" start="00:09:17.280" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""in Common Lisp to wrap doing this.""" start="00:09:20.040" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""It's not really the topic.""" start="00:09:22.520" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""It's in the appendix somewhere if you need it.""" start="00:09:23.640" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""So I've just executed that.""" start="00:09:27.960" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""You can look at the appendix in your own time.""" start="00:09:29.560" video="mainVideo-commonlisp" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Sandewall's leonardo system""" start="00:09:32.080" video="mainVideo-commonlisp" id="subtitle"]]</div>[[!template text="""Jumping over to actually starting""" start="00:09:32.080" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""our hypothetical intelligent agent.""" start="00:09:33.960" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""I guess we're doing eev here.""" start="00:09:36.320" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""So if we open this, press F8 a bunch of times.""" start="00:09:38.240" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""Oh, and if you were cloning it yourself,""" start="00:09:46.760" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""I guess that's what you would do. setq eepitch-buffer-name.""" start="00:09:49.200" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""Oh yeah, if you went to an eepitch shell and then came back.""" start="00:09:56.720" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""You would have had to do that, but I didn't.""" start="00:10:00.320" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""I didn't, so I didn't need to.""" start="00:10:01.680" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""Sandewall's style is to use relative paths""" start="00:10:04.240" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""to tell which agent is acting inside a software individual.""" start="00:10:07.280" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""Remembering a software individual""" start="00:10:11.975" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""is potentially a bunch of agents.""" start="00:10:13.360" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""And we load... So one individual,""" start="00:10:15.240" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""all the agents in each individual share a kernel.""" start="00:10:18.480" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""So only one agent in one software individual""" start="00:10:21.920" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""is active at any given time, but the agents are separate.""" start="00:10:25.600" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""They just all have to share the kernel resource,""" start="00:10:28.280" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""which is the Remus agent. Oh, I got rid of this.""" start="00:10:31.280" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""And start the CLE is the thing.""" start="00:10:38.320" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""Oh, I did need to have an EmacsConf knowledge base.""" start="00:10:43.280" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""Well, let's just keep eepitching for a little bit.""" start="00:10:46.120" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""So I think I made... I'm going to call it emacsconf-kb.""" start="00:10:48.960" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""Right, that looks likely. And I think that the agent...""" start="00:10:55.260" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""I can check this. I could have checked that.""" start="00:10:59.680" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""I could have done something like (get emacsconf-kb contents).""" start="00:11:03.480" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""Yeah, and you can see""" start="00:11:12.700" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""there's a location inside it which is agent1,""" start="00:11:13.480" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""which I assume is an entity file""" start="00:11:15.880" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""that I was working with before.""" start="00:11:17.520" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""And then what were we going to do?""" start="00:11:20.600" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""Oh yeah, back to the embeddable Common Lisp image.""" start="00:11:21.920" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""So if I just press our button back to there...""" start="00:11:28.280" video="mainVideo-commonlisp" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Start a loop for one leonardo software individual""" start="00:11:36.100" video="mainVideo-commonlisp" id="subtitle"]]</div>[[!template text="""And so my idea is that for an Emacs agent,""" start="00:11:36.100" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""basically, I'd like to have an Emacs Lisp list.""" start="00:11:41.120" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""And just when stuff gets into that list,""" start="00:11:47.000" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""the agent which is always running, but running slowly,""" start="00:11:49.641" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""will incrementally just do the stuff it finds in that list.""" start="00:11:53.240" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""Populating that list probably gets into stuff""" start="00:11:58.360" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""like your Beliefs, Desires, Intents framework""" start="00:12:00.760" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""and those kind of well-known and well-studied algorithms.""" start="00:12:03.200" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""That's not the point here.""" start="00:12:06.160" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""I just want to have a list in Emacs that my ECL...""" start="00:12:07.800" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""I'm just going to run a loop in ECL,""" start="00:12:14.260" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""and the ECL is going to keep sending""" start="00:12:16.080" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""anything it finds in that Emacs Lisp list""" start="00:12:18.320" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""to the software agent. The agent is also in Emacs,""" start="00:12:22.400" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""so it would be able to populate its own list itself""" start="00:12:25.400" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""if it had an idea of evaluating desires and chances to improve""" start="00:12:28.760" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""whatever it wants to improve""" start="00:12:36.160" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""and chances to avoid whatever it wants to avoid.""" start="00:12:37.560" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""We talked a little bit too much. Let's just start this.""" start="00:12:40.000" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""Sorry that I'm manually setting up my screen.""" start="00:12:47.600" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""Then let's put CLisp over here.""" start="00:12:51.540" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""Right, we could work with this, right?""" start="00:12:55.500" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""This loop isn't very important.""" start="00:12:58.680" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""It's just a Common Lisp loop. I copy my friend jmbr's style""" start="00:13:00.100" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""of using Lisp machine-style keyword arguments""" start="00:13:04.920" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""instead of symbols like cl-loop,""" start="00:13:08.200" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""the compatibility thing in Emacs Lisp does.""" start="00:13:12.120" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""I'd never initialized that. Well, let's do that.""" start="00:13:16.720" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""Okay, now we have the list.""" start="00:13:28.140" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""And just every 30, let's turn it down to every 20 seconds.""" start="00:13:30.680" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""Hypothetically, it's going to put""" start="00:13:35.020" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""whatever it finds in there, into there.""" start="00:13:37.160" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""And so, I think, yeah, and now... Great.""" start="00:13:40.000" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""So here I'm just going to fill it with stuff.""" start="00:13:46.240" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""And this is quite interesting, I think.""" start="00:13:50.100" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""It just shows I can put a whole bunch of stuff into that list.""" start="00:13:54.840" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""Ideally, the agent would populate it itself""" start="00:13:58.480" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""with a BDI algorithm or something.""" start="00:14:01.200" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""But if we just put some stuff in there,""" start="00:14:03.360" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""we'll see that it will all get sent""" start="00:14:04.920" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""basically using Eduardo's eepitch internal machinery, at least.""" start="00:14:07.800" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""And hence, it meets my requirement""" start="00:14:14.800" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""that it works exactly like I work.""" start="00:14:17.480" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""And then in eev, I just have to press M-e.""" start="00:14:20.780" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""Oh, it works via Emacs server, and I didn't start that,""" start="00:14:25.860" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""so if we server-start, hopefully...""" start="00:14:31.480" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""And then, ideally, things will just begin happening""" start="00:14:39.720" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""in this slime-repl C/Lisp agent.""" start="00:14:42.800" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""Oh, if this was still running.""" start="00:14:53.120" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""Okay, well we got at least one,""" start="00:15:05.420" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""but hypothetically lots of these will happen.""" start="00:15:07.200" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""So, show agent, I guess,""" start="00:15:09.640" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""happened over here. I put a whole bunch of &quot;sleep-for&quot;s in,""" start="00:15:13.700" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""because I thought that going slowly""" start="00:15:17.040" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""would make it seem more human.""" start="00:15:19.720" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""Like I saw in Eduardo's talk last year""" start="00:15:21.320" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""which is where I learned about eev.""" start="00:15:24.640" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""The system is a little fragile.""" start="00:15:29.100" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""Hypothetically, we have a whole bunch of agents.""" start="00:15:32.320" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""I guess every time it gets sent,""" start="00:15:41.080" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""it checks that we're in the right agent.""" start="00:15:43.040" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""And it's not actually just sending a string,""" start="00:15:45.000" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""it's sending a sequence of string actions over there.""" start="00:15:47.000" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""And so we see Emacs Lisp hypothetically put,""" start="00:15:52.800" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""I guess it put this &quot;foo bar baz!&quot; into an entity, message-1,""" start="00:15:57.480" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""which should be of type message, I guess, conceivably.""" start="00:16:06.860" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""I forget if I set that up earlier.""" start="00:16:11.900" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""It's in the appendix somewhere.""" start="00:16:13.320" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""And then it just called, it did a sequence of actions""" start="00:16:14.720" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""which was really just one action of showing that.""" start="00:16:18.000" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""And then I called b64-encode on message1,""" start="00:16:21.320" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""which I believe will have set message-1 encoded.""" start="00:16:26.400" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""Can I check that manually while it's happening?""" start="00:16:30.600" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""Disaster. Well that's what it should have been.""" start="00:16:37.243" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""Well, I did mention it was a little bit fragile.""" start="00:16:51.500" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""What if we put... Can we kind of rescue this?""" start="00:16:54.941" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""I don't want to try redoing this. It's slightly fragile.""" start="00:17:03.280" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""What it would do, we can see the actions are kind of getting there,""" start="00:17:07.240" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""but somehow my message didn't end up getting encoded""" start="00:17:12.640" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""by that sequence of actions.""" start="00:17:16.720" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""So this decode will have also made the decoded one be null.""" start="00:17:18.120" video="mainVideo-commonlisp" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Let's do it manually""" start="00:17:23.280" video="mainVideo-commonlisp" id="subtitle"]]</div>[[!template text="""Let's just do it manually. Should have worked.""" start="00:17:23.280" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""b64-encode, which calls out to Emacs""" start="00:17:26.240" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""to get everything actually done.""" start="00:17:30.560" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""Oh, I got interrupted by the agent.""" start="00:17:37.300" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""Well, if I do it manually, it worked.""" start="00:17:41.520" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""Hypothetically, the queue thing should have worked. Great.""" start="00:17:43.321" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""Well, you can see it's kind of working.""" start="00:17:53.520" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""Could be more robust.""" start="00:17:56.841" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""The reason is that I think what I did is a bit fragile,""" start="00:17:57.441" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""but the intent is that FIPA,""" start="00:18:03.641" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""Foundation for Intelligent Physical Agents's""" start="00:18:07.108" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""SL standard has tools for reliability""" start="00:18:09.308" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""through repetition and checking outcomes and that kind of thing.""" start="00:18:15.640" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""So I would use those. I'm not putting too much work""" start="00:18:19.920" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""into being ultra-reliable right now, but it kind of worked.""" start="00:18:22.960" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""We saw, I guess, at least Embeddable Common Lisp""" start="00:18:26.680" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""believed it used emacsclient externally, asynchronously,""" start="00:18:29.760" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""to send these to Emacs within Emacs.""" start="00:18:35.600" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""I put a whole bunch of sleeps into its thing""" start="00:18:38.360" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""to make it look slow and human-like, kind of happened""" start="00:18:41.600" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""because Emacs' model is that it's kind of single-threaded.""" start="00:18:45.000" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""Can I just... I bet if we run this again""" start="00:18:52.720" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""It'll at least look like it's succeeding""" start="00:18:59.640" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""because I fixed the base64 encoding""" start="00:19:02.120" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""and so forth in the background. I wonder if it will.""" start="00:19:05.040" video="mainVideo-commonlisp" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Wrapping up""" start="00:19:11.400" video="mainVideo-commonlisp" id="subtitle"]]</div>[[!template text="""In the meantime, let's wrap up this talk to some extent.""" start="00:19:11.400" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""Then I'm just kind of saying what I'm expecting to happen.""" start="00:19:15.560" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""I took out next action.""" start="00:19:18.800" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""Originally, I was keeping the list inside of the agent.""" start="00:19:20.480" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""Then I decided to keep the list inside Emacs""" start="00:19:25.280" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""because I have kind of first class Emacs is my IDE,""" start="00:19:27.880" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""so I have better access to what's going on in my IDE.""" start="00:19:31.680" video="mainVideo-commonlisp" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Intelligence""" start="00:19:37.608" video="mainVideo-commonlisp" id="subtitle"]]</div>[[!template text="""Then I wanted to talk about intelligence a little bit""" start="00:19:37.608" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""in whatever my remaining time is.""" start="00:19:39.560" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""I just have these great bullet points""" start="00:19:41.200" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""of Nosredna yduJ and Eric Sandewall.""" start="00:19:43.040" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""So Nosredna yduJ, when she was on the show quite a long time ago,""" start="00:19:45.560" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""she... I keep describing things as expert systems""" start="00:19:50.040" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""and she wanted to know what I meant""" start="00:19:55.560" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""when I said expert systems,""" start="00:19:57.040" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""and I gave her a Lisp software example""" start="00:19:58.360" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""and she said she personally wrote""" start="00:20:00.200" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""that software in the 80s that I was referring to""" start="00:20:02.619" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""and she wanted to know how it was an expert system.""" start="00:20:06.280" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""What I mean when I say expert system""" start="00:20:08.240" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""is a system that works kind of like I do and eev's eepitch does.""" start="00:20:10.040" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""It's where we can really reason""" start="00:20:19.840" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""in a very human-relatable way""" start="00:20:22.000" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""about what the inputs to the program is.""" start="00:20:24.200" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""And also a program should be exposed to other programs""" start="00:20:26.480" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""in terms of like a well-structured transfer of knowledge as inputs,""" start="00:20:31.400" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""and it should have a well-structured""" start="00:20:36.560" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""transfer of knowledge kind of outputs.""" start="00:20:38.011" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""I don't know why this b64-encode message wasn't working.""" start="00:20:41.940" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""Then we kind of faked it into working.""" start="00:20:47.160" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""It's going to be embarrassing for me""" start="00:20:50.000" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""if anybody watches this. But yeah, so yduJ's thing...""" start="00:20:52.400" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""And then I was going to also build""" start="00:20:58.740" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""that into Eric Sandewall's one.""" start="00:20:59.960" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""So this is my vision of expert systems""" start="00:21:02.680" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""as kind of maybe this is an important""" start="00:21:05.640" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""general style loosely associated with Lisp.""" start="00:21:07.780" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""Same as the Lisp editor Emacs.""" start="00:21:11.680" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""So Eric Sandewall's description of intelligence""" start="00:21:14.400" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""was that his grandchildren were intelligent.""" start="00:21:17.666" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""So if we had software agents that were intelligent,""" start="00:21:21.160" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""this would be true if and maybe only if they were similar""" start="00:21:26.440" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""to his grandchildren""" start="00:21:32.440" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""who were a good reference for intelligence.""" start="00:21:33.720" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""And grandchildren live for a really long time.""" start="00:21:36.320" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""They kind of learn gradually.""" start="00:21:39.200" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""They don't run on GPUs for a few minutes""" start="00:21:42.880" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""and then get thrown out forever, something like that.""" start="00:21:46.880" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""And so this is the kind of vision of, I guess,""" start="00:21:51.880" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""the Leonardo system software individual stuff.""" start="00:21:54.960" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""You can see we kind of faked it into...""" start="00:21:57.920" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""at least the show get message one decoded bits were working.""" start="00:22:03.947" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""I'm not sure what was happening""" start="00:22:06.321" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""with the Elisp ones that worked interactively,""" start="00:22:07.301" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""but then they didn't work in my loopy thing.""" start="00:22:12.675" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""Oh yeah, and then so I mentioned""" start="00:22:18.608" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""thank you to Sacha at the start of this talk.""" start="00:22:21.308" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""And so Eric Sandewall's emphasis""" start="00:22:24.641" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""that you'd really like intelligent software agents,""" start="00:22:26.975" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""Leonardo system agents, to be like your grandchildren.""" start="00:22:31.341" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""And I was talking to somebody, maybe to Ramin Honary""" start="00:22:34.175" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""who's doing the schemacs talk this year""" start="00:22:40.660" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""about Sacha's writing.""" start="00:22:44.960" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""A lot of Sacha's writing is about""" start="00:22:46.875" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""her experiences of life and technology,""" start="00:22:48.841" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""and especially raising A\*""" start="00:22:51.775" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""and her observations of her progeny A\*'s""" start="00:22:54.375" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""experiences of life and technology,""" start="00:22:59.741" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""I would say as well as being""" start="00:23:05.320" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""the Emacs News and Emacs conf doer that she is.""" start="00:23:07.875" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""Yeah, and so I think a lot of what Sacha is seen doing""" start="00:23:18.040" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""and concerned with are specifically what Eric Sandewall""" start="00:23:22.741" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""identifies as the study of intelligence as such,""" start="00:23:25.841" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""as should apply to computing as well. That was my thought""" start="00:23:31.208" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""on Sacha, Eric Sandewall, intelligence, and yduJ.""" start="00:23:36.480" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""I have this note from pizzapal...""" start="00:23:42.980" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""I didn't realize that Microsoft had announced""" start="00:23:44.241" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""that 2025 was going to be the year of the software agent.""" start="00:23:46.275" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""I only found this out in hindsight""" start="00:23:49.680" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""when I saw people crowing on the Mastodon""" start="00:23:51.200" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""about how Microsoft had basically declared""" start="00:23:54.200" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""that their Year of the Agent marketing campaign""" start="00:23:58.080" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""was a failure""" start="00:24:00.780" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""where basically people didn't like the same old web services""" start="00:24:04.460" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""but now while you're accessing,""" start="00:24:09.280" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""while you're formally kind of accessing a web service,""" start="00:24:11.360" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""the kind of web service that used to be called""" start="00:24:15.240" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""serverless web services, this kind of thing,""" start="00:24:16.960" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""but you're just being gibbered at by Microsoft Copilot""" start="00:24:19.280" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""while you're trying to use regular services.""" start="00:24:23.880" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""And people turned out not to like this.""" start="00:24:27.120" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""I think that, as we can see in this agent,""" start="00:24:29.280" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""the agent really needs to be running on its own clock""" start="00:24:32.400" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""and independently of you.""" start="00:24:36.375" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""Like if you imagine your body is getting""" start="00:24:37.908" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""novel, slightly speculative instructions from your brain""" start="00:24:42.280" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""constantly throughout your entire waking day, quite slowly,""" start="00:24:46.075" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""this is what an agent should be like.""" start="00:24:50.681" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""And it should be... Sandewall wrote about this.""" start="00:24:54.975" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""Basically, computer programs""" start="00:24:59.541" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""aren't going to want to use human natural language with each other.""" start="00:25:01.541" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""There's nothing desirable about that,""" start="00:25:04.841" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""so you wouldn't have two hypothetical Microsoft agents,""" start="00:25:06.675" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""which are just regular web services with""" start="00:25:10.675" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""a GPT model gibbering at you""" start="00:25:13.400" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""while you're trying to use the web service.""" start="00:25:16.341" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""I think we can see...""" start="00:25:19.840" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""Microsoft did the wrong thing with the word agent,""" start="00:25:22.540" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""allowing that agent is an overloaded term like static.""" start="00:25:26.741" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""I'm going to stop this. I'm not going to try and fix this.""" start="00:25:30.708" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""Sorry, everybody. Thank you. Talk to you on the Mastodon.""" start="00:25:34.257" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""Hopefully, see you on the show.""" start="00:25:36.314" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""See you at your conference talks.""" start="00:25:37.920" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""My blog has writing and examples of this with multi-agents,""" start="00:25:40.400" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""more C and C++ stuff, Lisp things.""" start="00:25:45.600" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""You're welcome to come on my show to be interviewed,""" start="00:25:50.820" video="mainVideo-commonlisp" id="subtitle"]]
+[[!template text="""however formally we do that. See everybody next time.""" start="00:25:53.440" video="mainVideo-commonlisp" id="subtitle"]]
+
+</div>
+
+Captioner: sachac
+
+Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202023%20commonlisp%3A%20Common%20Lisp%20images%20communicating%20like-a-human%20through%20shared%20Emacs%20slime%20and%20eev)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2025/info/commonlisp-before.md b/2025/info/commonlisp-before.md
new file mode 100644
index 00000000..dd88acf3
--- /dev/null
+++ b/2025/info/commonlisp-before.md
@@ -0,0 +1,19 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+
+The following image shows where the talk is in the schedule for Sat 2025-12-06. Solid lines show talks with Q&A via BigBlueButton. Dashed lines show talks with Q&A via IRC or Etherpad.<div class="schedule-in-context schedule-svg-container" data-slug="commonlisp">
+<svg width="700" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Schedule for Saturday</title> <rect width="700" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="/2025/talks/sat-open" title="Saturday opening remarks" data-slug="sat-open"> <title> 9:00- 9:10 Saturday opening remarks</title> <rect x="0" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(11,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="/2025/talks/org-babel" title="Making Org-Babel reactive" data-slug="org-babel"> <title> 9:10- 9:20 Making Org-Babel reactive</title> <rect x="13" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(24,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> org-babel</text></g></a> <a href="/2025/talks/reference" title="Emacs as a fully-fledged reference manager" data-slug="reference"> <title> 9:30- 9:55 Emacs as a fully-fledged reference manager</title> <rect x="41" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(73,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> reference</text></g></a> <a href="/2025/talks/gmail" title="org-gmail: A deep integration of Gmail into your Org Mode" data-slug="gmail"> <title> 10:15-10:40 org-gmail: A deep integration of Gmail into your Org Mode</title> <rect x="102" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(134,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gmail</text></g></a> <a href="/2025/talks/gnus" title="Reading and writing emails in GNU Emacs with Gnus" data-slug="gnus"> <title> 10:50-11:15 Reading and writing emails in GNU Emacs with Gnus</title> <rect x="150" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(182,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gnus</text></g></a> <a href="/2025/talks/latex" title="LaTeX export in org-mode: the overhaul" data-slug="latex"> <title> 11:25-11:45 LaTeX export in org-mode: the overhaul</title> <rect x="199" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(224,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> latex</text></g></a> <a href="/2025/talks/calc" title="Basic Calc functionality for engineering or electronics" data-slug="calc"> <title> 1:00- 1:25 Basic Calc functionality for engineering or electronics</title> <rect x="329" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(361,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> calc</text></g></a> <a href="/2025/talks/blee-lcnt" title="Blee-LCNT: An Emacs-centered content production and self-publication framework" data-slug="blee-lcnt"> <title> 1:35- 2:15 Blee-LCNT: An Emacs-centered content production and self-publication framework</title> <rect x="377" y="15" opacity="0.5" width="54" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(429,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> blee-lcnt</text></g></a> <a href="/2025/talks/greader" title="GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence" data-slug="greader"> <title> 2:35- 2:40 GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence</title> <rect x="459" y="15" opacity="0.5" width="6" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(463,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> greader</text></g></a> <a href="/2025/talks/open-mic" title="Open session" data-slug="open-mic"> <title> 2:50- 3:40 Open session</title> <rect x="480" y="15" opacity="0.5" width="68" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(546,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> open-mic</text></g></a> <a href="/2025/talks/sat-close" title="Saturday closing remarks / open session" data-slug="sat-close"> <title> 4:00- 4:10 Saturday closing remarks / open session</title> <rect x="576" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(587,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="/2025/talks/schemacs" title="One year progress update Schemacs (formerly Gypsum)" data-slug="schemacs"> <title> 9:30- 9:55 One year progress update Schemacs (formerly Gypsum)</title> <rect x="41" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(73,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> schemacs</text></g></a> <a href="/2025/talks/juicemacs" title="Juicemacs: exploring speculative JIT compilation for ELisp in Java" data-slug="juicemacs"> <title> 10:15-10:35 Juicemacs: exploring speculative JIT compilation for ELisp in Java</title> <rect x="102" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(127,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> juicemacs</text></g></a> <a href="/2025/talks/swanky" title="Swanky Python: Interactive development for Python" data-slug="swanky"> <title> 10:45-11:10 Swanky Python: Interactive development for Python</title> <rect x="144" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(176,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> swanky</text></g></a> <a href="/2025/talks/python" title="Interactive Python programming in Emacs" data-slug="python"> <title> 11:20-11:40 Interactive Python programming in Emacs</title> <rect x="192" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(217,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <a href="/2025/talks/llm" title="Emacs, editors, and LLM driven workflows" data-slug="llm"> <title> 1:00- 1:25 Emacs, editors, and LLM driven workflows</title> <rect x="329" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(361,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> llm</text></g></a> <a href="/2025/talks/private-ai" title="Emacs and private AI: a great match" data-slug="private-ai"> <title> 1:45- 2:05 Emacs and private AI: a great match</title> <rect x="391" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(416,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> private-ai</text></g></a> <a href="/2025/talks/commonlisp" title="Common Lisp images communicating like-a-human through shared Emacs slime and eev" data-slug="commonlisp"> <title> 2:25- 2:55 Common Lisp images communicating like-a-human through shared Emacs slime and eev</title> <rect stroke-width="3" x="446" y="75" opacity="0.8" width="41" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(485,133)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> commonlisp</text></g></a> <a href="/2025/talks/graphics" title="Modern Emacs/Elisp hardware/software accelerated graphics" data-slug="graphics"> <title> 3:05- 3:30 Modern Emacs/Elisp hardware/software accelerated graphics</title> <rect x="500" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(532,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> graphics</text></g></a> <g transform="translate(0,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(82,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(164,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(247,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(329,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(411,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(494,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(576,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(658,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 5 PM</text></g></svg>
+</div>
+
+[[!toc ]]
+Format: 26-min talk ; Q&A: IRC <https://chat.emacsconf.org/?join=emacsconf,emacsconf-dev> Etherpad: <https://pad.emacsconf.org/2025-commonlisp>
+Etherpad: <https://pad.emacsconf.org/2025-commonlisp>
+Discuss on IRC: [#emacsconf-dev](https://chat.emacsconf.org/?join=emacsconf,emacsconf-dev)
+Status: Q&A finished, IRC and pad will be archived on this page
+
+
+
+
+
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-commonlisp"><source src="https://media.emacsconf.org/2025/emacsconf-2025-commonlisp--common-lisp-images-communicating-likeahuman-through-shared-emacs-slime-and-eev--screwlisp--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2025/captions/emacsconf-2025-commonlisp--common-lisp-images-communicating-likeahuman-through-shared-emacs-slime-and-eev--screwlisp--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 25:56 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2025-commonlisp">Open Etherpad</a></li><li><a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-dev">Open public Q&A</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-commonlisp--common-lisp-images-communicating-likeahuman-through-shared-emacs-slime-and-eev--screwlisp--debugged.png">Download --debugged.png</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-commonlisp--common-lisp-images-communicating-likeahuman-through-shared-emacs-slime-and-eev--screwlisp--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-commonlisp--common-lisp-images-communicating-likeahuman-through-shared-emacs-slime-and-eev--screwlisp--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-commonlisp--common-lisp-images-communicating-likeahuman-through-shared-emacs-slime-and-eev--screwlisp--main.opus">Download --main.opus (23MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-commonlisp--common-lisp-images-communicating-likeahuman-through-shared-emacs-slime-and-eev--screwlisp--main.org">Download --main.org</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-commonlisp--common-lisp-images-communicating-likeahuman-through-shared-emacs-slime-and-eev--screwlisp--main.png">Download --main.png</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-commonlisp--common-lisp-images-communicating-likeahuman-through-shared-emacs-slime-and-eev--screwlisp--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-commonlisp--common-lisp-images-communicating-likeahuman-through-shared-emacs-slime-and-eev--screwlisp--main.webm">Download --main.webm (63MB)</a></li><li><a href="https://youtu.be/hy5i6Qb6fYE">View on Youtube</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2025/info/commonlisp-nav.md b/2025/info/commonlisp-nav.md
new file mode 100644
index 00000000..a35d90af
--- /dev/null
+++ b/2025/info/commonlisp-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by time: <a href="/2025/talks/private-ai">Emacs and private AI: a great match</a>
+Next by time: <a href="/2025/talks/greader">GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence</a>
+Track: <span class="sched-track Development">Development</span> - <strong><a href="https://emacsconf.org/2025/watch/dev">Watch</a></strong>
+</div>
diff --git a/2025/info/completion-after.md b/2025/info/completion-after.md
new file mode 100644
index 00000000..14e33ea5
--- /dev/null
+++ b/2025/info/completion-after.md
@@ -0,0 +1,7 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+Questions or comments? Please e-mail [paaguti@gmail.com](mailto:paaguti@gmail.com?subject=Comment%20for%20EmacsConf%202023%20completion%3A%20corfu%2Byasnippet%3A%20Easier%20than%20I%20thought)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2025/info/completion-before.md b/2025/info/completion-before.md
new file mode 100644
index 00000000..a4733e81
--- /dev/null
+++ b/2025/info/completion-before.md
@@ -0,0 +1,19 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+
+The following image shows where the talk is in the schedule for Sun 2025-12-07. Solid lines show talks with Q&A via BigBlueButton. Dashed lines show talks with Q&A via IRC or Etherpad.<div class="schedule-in-context schedule-svg-container" data-slug="completion">
+<svg width="700" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Schedule for Sunday</title> <rect width="700" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="/2025/talks/sun-open" title="Sunday opening remarks" data-slug="sun-open"> <title> 9:00- 9:10 Sunday opening remarks</title> <rect x="0" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(11,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-open</text></g></a> <a href="/2025/talks/modern" title="Some problems of modernizing Emacs" data-slug="modern"> <title> 9:10- 9:30 Some problems of modernizing Emacs</title> <rect x="13" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(38,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> modern</text></g></a> <a href="/2025/talks/reader" title="An introduction to the Emacs Reader" data-slug="reader"> <title> 9:40-10:15 An introduction to the Emacs Reader</title> <rect x="54" y="15" opacity="0.5" width="48" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(100,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> reader</text></g></a> <a href="/2025/talks/weights" title="Weightlifting tracking with Emacs on Android" data-slug="weights"> <title> 10:35-10:45 Weightlifting tracking with Emacs on Android</title> <rect x="130" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(141,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> weights</text></g></a> <a href="/2025/talks/completion" title="corfu+yasnippet: Easier than I thought" data-slug="completion"> <title> 11:05-11:25 corfu+yasnippet: Easier than I thought</title> <rect stroke-width="3" x="171" y="15" opacity="0.8" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(196,73)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> completion</text></g></a> <a href="/2025/talks/zettelkasten" title="Zettelkasten for regular Emacs hackers" data-slug="zettelkasten"> <title> 1:00- 1:25 Zettelkasten for regular Emacs hackers</title> <rect x="329" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(361,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> zettelkasten</text></g></a> <a href="/2025/talks/hyperboleqa" title="Questions and answers to help you fly with Hyperbole" data-slug="hyperboleqa"> <title> 1:45- 2:15 Questions and answers to help you fly with Hyperbole</title> <rect x="391" y="15" opacity="0.5" width="41" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(430,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperboleqa</text></g></a> <a href="/2025/talks/gardening" title="Gardening in Emacs: A Windows user's tale of tending, tweaking, and triumph" data-slug="gardening"> <title> 2:15- 2:35 Gardening in Emacs: A Windows user's tale of tending, tweaking, and triumph</title> <rect x="432" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(457,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gardening</text></g></a> <a href="/2025/talks/bookclub-tapas" title="Bookclub tapas" data-slug="bookclub-tapas"> <title> 2:45- 3:20 Bookclub tapas</title> <rect x="473" y="15" opacity="0.5" width="48" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(519,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> bookclub-tapas</text></g></a> <a href="/2025/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"> <title> 3:40- 3:50 Sunday closing remarks</title> <rect x="549" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(560,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-close</text></g></a> <g transform="translate(0,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(82,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(164,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(247,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(329,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(411,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(494,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(576,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(658,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 5 PM</text></g></svg>
+</div>
+
+[[!toc ]]
+Format: 23-min talk ; Q&A: BigBlueButton conference room <https://media.emacsconf.org/2025/current/bbb-completion.html> Etherpad: <https://pad.emacsconf.org/2025-completion>
+Etherpad: <https://pad.emacsconf.org/2025-completion>
+Discuss on IRC: [#emacsconf-gen](https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen)
+Status: Q&A open for participation
+<div>Times in different time zones:</div><div class="times" start="2025-12-07T16:05:00Z" end="2025-12-07T16:25:00Z"><div class="conf-time">Sunday, Dec 7 2025, ~11:05 AM - 11:25 AM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Sunday, Dec 7 2025, ~10:05 AM - 10:25 AM CST (US/Central)<br />Sunday, Dec 7 2025, ~9:05 AM - 9:25 AM MST (US/Mountain)<br />Sunday, Dec 7 2025, ~8:05 AM - 8:25 AM PST (US/Pacific)<br />Sunday, Dec 7 2025, ~4:05 PM - 4:25 PM UTC <br />Sunday, Dec 7 2025, ~5:05 PM - 5:25 PM CET (Europe/Paris)<br />Sunday, Dec 7 2025, ~6:05 PM - 6:25 PM EET (Europe/Athens)<br />Sunday, Dec 7 2025, ~9:35 PM - 9:55 PM IST (Asia/Kolkata)<br />Monday, Dec 8 2025, ~12:05 AM - 12:25 AM +08 (Asia/Singapore)<br />Monday, Dec 8 2025, ~1:05 AM - 1:25 AM JST (Asia/Tokyo)</div></div><div><strong><a href="/2025/watch/gen/">Find out how to watch and participate</a></strong></div>
+
+
+
+
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-completion"><source src="https://media.emacsconf.org/2025/emacsconf-2025-completion--corfuyasnippet-easier-than-i-thought--pedro-a-aranda-gutirrez--backup.webm" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 22:42 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2025-completion">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2025/current/bbb-completion.html">Open public Q&A</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-completion--corfuyasnippet-easier-than-i-thought--pedro-a-aranda-gutirrez--backup.webm">Download --backup.webm (30MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-completion--corfuyasnippet-easier-than-i-thought--pedro-a-aranda-gutirrez--handout.pdf">Download --handout.pdf</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-completion--corfuyasnippet-easier-than-i-thought--pedro-a-aranda-gutirrez--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-completion--corfuyasnippet-easier-than-i-thought--pedro-a-aranda-gutirrez--intro.webm">Download --intro.webm</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2025/info/completion-nav.md b/2025/info/completion-nav.md
new file mode 100644
index 00000000..6e648706
--- /dev/null
+++ b/2025/info/completion-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by time: <a href="/2025/talks/weights">Weightlifting tracking with Emacs on Android</a>
+Next by time: <a href="/2025/talks/zettelkasten">Zettelkasten for regular Emacs hackers</a>
+Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2025/watch/gen">Watch</a></strong>
+</div>
diff --git a/2025/info/gardening-after.md b/2025/info/gardening-after.md
new file mode 100644
index 00000000..9a7aa15e
--- /dev/null
+++ b/2025/info/gardening-after.md
@@ -0,0 +1,387 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<div class="transcript transcript-mainVideo"><a name="gardening-mainVideo-transcript"></a><h1>Transcript</h1>
+
+
+<div class="transcript-heading">[[!template new="1" text="""Introduction""" start="00:00:05.980" video="mainVideo-gardening" id="subtitle"]]</div>[[!template text="""Hello, everyone. My name is Marco""" start="00:00:05.980" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""and today I'll talk about gardening with Emacs.""" start="00:00:08.960" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""Gardening? Yes, but digital gardening, obviously.""" start="00:00:13.360" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""But first, one thing: I'm sorry, yes,""" start="00:00:17.200" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""I'm a Microsoft Windows user.""" start="00:00:20.360" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""I know, I know. I said I'm sorry.""" start="00:00:22.520" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""Please stick with me.""" start="00:00:24.680" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""Do not skip this talk!""" start="00:00:26.160" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""Promise, I'll show you only free software!""" start="00:00:27.320" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""And speaking about free software,""" start="00:00:31.200" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""yes, this presentation is not made with Emacs,""" start="00:00:33.200" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""but I made it with LibreOffice.""" start="00:00:35.920" video="mainVideo-gardening" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""What is a digital garden?""" start="00:00:39.040" video="mainVideo-gardening" id="subtitle"]]</div>[[!template text="""So what is a digital garden?""" start="00:00:39.040" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""A digital garden is""" start="00:00:42.000" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""your personal corner of the internet""" start="00:00:43.320" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""to cultivate ideas.""" start="00:00:45.480" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""Think of it like a real garden""" start="00:00:47.840" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""where you plant seeds (your new thoughts),""" start="00:00:50.080" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""you water them (you add the details),""" start="00:00:54.395" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""and watch them grow.""" start="00:00:57.380" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""Unlike a fixed-date blog,""" start="00:00:59.960" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""which shows only polished results,""" start="00:01:03.200" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""a garden includes works-in-progress--""" start="00:01:06.320" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""like seedlings in a greenhouse.""" start="00:01:09.280" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""It's a network of notes""" start="00:01:12.480" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""connected by links and tags,""" start="00:01:14.760" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""helping you see patterns in your thinking.""" start="00:01:17.320" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""Here, the ideas are not static;""" start="00:01:21.280" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""they evolve as you learn,""" start="00:01:24.160" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""creating a living archive of your mind,""" start="00:01:26.400" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""just like the plants in a garden grow.""" start="00:01:29.360" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""Also here, instead of the blog platform,""" start="00:01:37.740" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""you decide the tools, the look, and your pace.""" start="00:01:41.520" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""I'll show you how I run my garden""" start="00:01:46.880" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""with plain Org Mode files""" start="00:01:50.600" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""and our favorite Emacs.""" start="00:01:53.040" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""In short: a digital garden""" start="00:01:55.640" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""is a flexible, pressure-free space""" start="00:01:57.880" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""to explore, learn in public""" start="00:02:01.040" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""and connect the knowledge--""" start="00:02:04.213" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""your own digital ecosystem.""" start="00:02:07.160" video="mainVideo-gardening" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Why a digital garden?""" start="00:02:11.520" video="mainVideo-gardening" id="subtitle"]]</div>[[!template text="""Why a digital garden?""" start="00:02:11.520" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""Well, a digital garden keeps knowledge alive:""" start="00:02:13.560" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""instead of freezing content after &quot;publish,&quot;""" start="00:02:17.360" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""you revisit and refine it,""" start="00:02:21.040" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""so ideas stay accurate and useful.""" start="00:02:22.400" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""By sharing half-formed thoughts early,""" start="00:02:26.080" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""you lower the barrier to writing""" start="00:02:29.240" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""and let concepts evolve gradually--""" start="00:02:31.560" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""no need to wait for one &quot;perfect&quot; essay.""" start="00:02:34.160" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""Links and tags weave ideas together,""" start="00:02:37.840" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""revealing unexpected patterns""" start="00:02:41.120" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""that isolated posts would hide.""" start="00:02:43.480" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""This approach sheds perfectionism,""" start="00:02:46.440" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""encouraging small, regular updates""" start="00:02:49.920" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""that build momentum and invite collaboration.""" start="00:02:52.560" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""Well, actually, even not regular updates are fine.""" start="00:02:55.880" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""Early readers can offer feedback, share resources,""" start="00:03:00.080" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""or identify blind spots,""" start="00:03:04.880" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""accelerating your and their improvement.""" start="00:03:07.240" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""Over time, your garden can become""" start="00:03:12.040" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""a searchable showcase of your thinking,""" start="00:03:14.720" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""a living résumé for collaborators, peers,""" start="00:03:18.440" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""or anyone curious about how you learn.""" start="00:03:21.240" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""And what about me?""" start="00:03:25.920" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""Why a digital garden?""" start="00:03:27.800" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""Well, I actually have started a digital garden""" start="00:03:29.120" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""to learn Emacs and Org Mode.""" start="00:03:33.140" video="mainVideo-gardening" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""How to digital garden?""" start="00:03:39.200" video="mainVideo-gardening" id="subtitle"]]</div>[[!template text="""How to digital garden?""" start="00:03:39.200" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""Well, start simple.""" start="00:03:41.440" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""Pick one place for your notes""" start="00:03:43.000" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""and put them online.""" start="00:03:45.080" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""Even the worst Github ever out there is fine.""" start="00:03:46.120" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""Then, well, maybe you can move out of GitHub,""" start="00:03:50.420" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""but that's another story.""" start="00:03:53.520" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""Capture your ideas quickly.""" start="00:03:55.020" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""Publish them, even rough,""" start="00:03:57.920" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""and maybe, if you want, tag them as seeds""" start="00:04:00.240" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""to let the other people know they are rough.""" start="00:04:02.940" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""Learning in public is useful""" start="00:04:06.440" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""because link-related pages""" start="00:04:09.440" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""so that readers can work through your thinking,""" start="00:04:11.580" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""helping them see your connections.""" start="00:04:16.860" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""Once a week or whenever you want,""" start="00:04:19.920" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""prune outdated pieces if you want""" start="00:04:22.040" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""or keep them there""" start="00:04:24.960" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""and add fresh insights if you have any.""" start="00:04:26.520" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""Share your updates openly.""" start="00:04:30.460" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""Invite comments because steady small steps""" start="00:04:33.400" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""will keep the garden thriving.""" start="00:04:38.080" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""And what about me?""" start="00:04:41.560" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""How I do digital garden work with Emacs?""" start="00:04:43.240" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""With Org Mode and its publishing to HTML file,""" start="00:04:46.360" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""and we will see it in a moment.""" start="00:04:51.140" video="mainVideo-gardening" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""How to make Emacs portable, on Windows""" start="00:04:57.440" video="mainVideo-gardening" id="subtitle"]]</div>[[!template text="""How to make Emacs portable on Windows""" start="00:04:57.440" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""is the first topic.""" start="00:05:01.320" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""Well, being in Windows,""" start="00:05:03.700" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""I have the advantage and the possibility""" start="00:05:06.000" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""to bring and use my data""" start="00:05:08.740" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""and software basically everywhere:""" start="00:05:10.880" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""home, office, my sister-in-law's PC""" start="00:05:14.300" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""when she needs technical help,""" start="00:05:18.160" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""friends and the like.""" start="00:05:19.440" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""So for these reasons,""" start="00:05:21.440" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""it's been many, many years""" start="00:05:23.240" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""I'm using exclusively portable applications""" start="00:05:25.320" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""that do not need an installation""" start="00:05:28.520" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""and bring their own data""" start="00:05:31.540" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""and configuration bundled together.""" start="00:05:33.240" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""And now also Emacs is portable,""" start="00:05:37.320" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""inside my tiny, really tiny, USB key.""" start="00:05:38.800" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""How?""" start="00:05:43.680" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""I mean: not being sure""" start="00:05:44.840" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""if my USB key drive letter""" start="00:05:46.920" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""will be D:, E:, K:,""" start="00:05:48.800" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""or whatever other drive letter""" start="00:05:52.120" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""will be assigned to it""" start="00:05:53.640" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""by the system I'm plugging it into,""" start="00:05:54.760" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""how can I specify, to Emacs,""" start="00:05:57.720" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""that its home folder is on my USB?""" start="00:06:00.320" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""Well, I could maybe have used relative paths,""" start="00:06:04.440" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""but then, where's the fun of hacking things?""" start="00:06:07.360" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""The trick here is""" start="00:06:10.880" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""the not-so-well-known ~dp0 system variable""" start="00:06:12.700" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""that contains the execution directory""" start="00:06:17.680" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""full path of the executable file.""" start="00:06:20.700" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""And yes, it ends with a backslash,""" start="00:06:25.520" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""so composing it with other literal paths is ugly as well.""" start="00:06:29.040" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""The ~dp0 variable is only available""" start="00:06:33.340" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""inside a batch file during its execution,""" start="00:06:37.540" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""and expands to the drive (d) and the path (p),""" start="00:06:40.760" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""in which that batch file (0th)""" start="00:06:46.720" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""command line parameter is located""" start="00:06:50.701" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""(that obviously cannot change""" start="00:06:55.500" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""because it's executing).""" start="00:06:58.440" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""The data are obtained""" start="00:07:02.400" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""from the %0 system variable""" start="00:07:04.680" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""that contains the batch file name.""" start="00:07:08.734" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""I actually have never tried,""" start="00:07:10.600" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""but it should even allow to let the batch run""" start="00:07:12.440" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""from a UNC network location""" start="00:07:16.280" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""with no mapped drive letter at all!""" start="00:07:19.820" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""And that's the batch file""" start="00:07:22.640" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""I'm using to run Emacs with an automatically selected""" start="00:07:24.280" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""and fixed Emacs folder,""" start="00:07:28.280" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""emacshome folder,""" start="00:07:31.140" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""sibling of the unzipped Emacs one,""" start="00:07:33.120" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""regardless the computer I'm in""" start="00:07:35.900" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""and the assigned drive letter.""" start="00:07:37.680" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""If you need a portable Emacs,""" start="00:07:40.220" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""this is probably the simplest way to go!""" start="00:07:42.160" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""Just put the runemacs.bat file""" start="00:07:45.520" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""in your unzipped Emacs""" start="00:07:48.400" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""(well, 30.2 actually now) bin folder,""" start="00:07:50.080" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""and your Emacs and its configuration""" start="00:07:54.380" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""will always be there with you.""" start="00:07:56.520" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""With this, I'm basically""" start="00:07:58.620" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""creating the possibility""" start="00:08:00.200" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""to bring my own digital garden with me,""" start="00:08:01.560" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""just like a little desk Zen garden,""" start="00:08:05.240" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""and together with it, also,""" start="00:08:09.467" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""all the tools that I need to work on it,""" start="00:08:11.480" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""always with me, in my USB key.""" start="00:08:13.860" video="mainVideo-gardening" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""My Emacs customization""" start="00:08:18.820" video="mainVideo-gardening" id="subtitle"]]</div>[[!template text="""Speaking about configuration,""" start="00:08:18.820" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""here comes the second topic:""" start="00:08:20.680" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""my Emacs customization.""" start="00:08:22.200" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""Having a portable Emacs allows to""" start="00:08:25.480" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""always have the configuration with me.""" start="00:08:28.080" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""Yes, okay, but which configuration?""" start="00:08:31.320" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""Well, obviously, I'm speaking of the init.el file""" start="00:08:33.560" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""that lives inside of the emacs.d folder""" start="00:08:38.520" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""in my emacshome portable configuration folder""" start="00:08:42.000" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""that we just saw.""" start="00:08:45.240" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""I'm not an Emacs expert,""" start="00:08:46.880" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""but I want to highlight a point here""" start="00:08:48.320" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""that has to be clear to every one of us:""" start="00:08:51.520" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""the set of basic considerations I had""" start="00:08:55.560" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""for text width, tabs versus spaces,""" start="00:08:59.160" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""trailing spaces, and so on.""" start="00:09:02.020" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""As you can see here,""" start="00:09:05.140" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""I'm pretty opinionated,""" start="00:09:07.300" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""but this is the important part:""" start="00:09:08.960" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""we are lucky enough to be able to use Emacs,""" start="00:09:10.760" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""that is presumably""" start="00:09:15.340" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""the most highly configurable tool ever,""" start="00:09:16.920" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""so let's use it!""" start="00:09:20.360" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""Remember that it's your Emacs,""" start="00:09:21.680" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""and you can and must configure it""" start="00:09:24.280" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""for your needs,""" start="00:09:27.860" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""even if it might seem ridiculous to others.""" start="00:09:28.880" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""Here, the configuration you see""" start="00:09:33.140" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""is not the important part.""" start="00:09:35.280" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""The important part is how you feel""" start="00:09:37.240" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""with your configuration.""" start="00:09:39.760" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""For example: I have a fill-column-indicator""" start="00:09:42.420" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""at 72 characters,""" start="00:09:45.360" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""I prefer spaces instead of tabs,""" start="00:09:47.320" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""no trailing spaces, truncate lines, and so on.""" start="00:09:49.480" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""It might seem weird to some of you""" start="00:09:53.020" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""and to most of my colleagues""" start="00:09:55.480" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""(and friends as well,""" start="00:09:57.960" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""but that's another story!)""" start="00:09:58.960" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""and it might even be.""" start="00:10:00.620" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""But I'm comfortable with my configuration,""" start="00:10:02.240" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""and you should be with yours too.""" start="00:10:05.200" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""That is: as an owner and worker""" start="00:10:07.600" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""of my own digital garden,""" start="00:10:11.480" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""it's obviously easier for me""" start="00:10:13.480" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""to choose my own tools""" start="00:10:15.720" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""and adapt those to my needs,""" start="00:10:18.080" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""instead of the opposite!""" start="00:10:21.040" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""If I want to put the roses""" start="00:10:23.160" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""in a circle instead of a row""" start="00:10:25.720" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""that is maybe the best practice, who cares?""" start="00:10:27.760" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""It's my garden, and I use it as I want.""" start="00:10:30.400" video="mainVideo-gardening" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""PlantUML and Japanese""" start="00:10:36.120" video="mainVideo-gardening" id="subtitle"]]</div>[[!template text="""Continuing on the configuration party,""" start="00:10:36.120" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""the third topic is PlantUML and Japanese.""" start="00:10:38.440" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""Why those two are listed together?""" start="00:10:44.860" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""Well, they are weird enough""" start="00:10:47.200" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""to be both part of my configuration.""" start="00:10:48.680" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""First, I think PlantUML""" start="00:10:50.880" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""is a very nice and powerful tool,""" start="00:10:52.840" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""so integrating it in Emacs""" start="00:10:55.020" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""is pretty useful,""" start="00:10:57.360" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""even if I'm currently using it""" start="00:10:58.900" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""only to generate SVG images""" start="00:11:01.080" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""when publishing my digital garden to HTML.""" start="00:11:04.240" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""There are some pain points""" start="00:11:08.960" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""that I still have to solve,""" start="00:11:10.600" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""and I know that it's also possible to use it""" start="00:11:11.760" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""for (pre)viewing diagrams""" start="00:11:14.740" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""directly in Emacs, without publishing,""" start="00:11:16.280" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""but maybe I don't need this feature at the moment.""" start="00:11:19.160" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""And I have to thank our favorite Sacha Chua here,""" start="00:11:22.840" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""because she taught me (through Mastodon)""" start="00:11:27.120" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""how to automatically answer y,""" start="00:11:29.280" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""when publishing in HTML,""" start="00:11:32.360" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""every time that PlantUML has to (re)generate an SVG.""" start="00:11:33.920" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""So, thank you Sacha.""" start="00:11:36.920" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""Moving to Japanese, let me go back to""" start="00:11:39.200" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""the previous slide for a moment""" start="00:11:41.840" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""to show you a bit more in detail""" start="00:11:43.560" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""the coding system I've configured.""" start="00:11:46.320" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""If this PC is helping me in moving""" start="00:11:49.800" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""back to the previous slide.""" start="00:11:54.240" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""Okay, so let me... No, it's not working.""" start="00:11:56.360" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""It's not... Okay.""" start="00:12:02.520" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""So, speaking about Japanese,""" start="00:12:05.820" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""I have studied Japanese.""" start="00:12:09.400" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""My wife is Japanese,""" start="00:12:12.360" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""but that's a detail.""" start="00:12:13.800" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""So I frequently write in Japanese,""" start="00:12:15.600" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""and I wanted to write in Japanese""" start="00:12:18.040" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""also inside Emacs.""" start="00:12:19.640" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""I learned, as you can see,""" start="00:12:21.220" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""that UTF-8 DOS""" start="00:12:23.240" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""is a more than enough coding system""" start="00:12:25.560" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""to allow me writing in the same file,""" start="00:12:28.480" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""both Italian with all our accented letters""" start="00:12:31.140" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""and Japanese through Windows IME system.""" start="00:12:35.640" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""This allows me to properly write, save, read files,""" start="00:12:40.360" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""but it was not enough for copying""" start="00:12:44.880" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""and pasting Japanese text.""" start="00:12:48.720" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""If I copied some Japanese text from the browser""" start="00:12:51.180" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""or even from another text editor,""" start="00:12:55.120" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""it didn't work.""" start="00:12:56.760" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""It only pasted the rubbish in Emacs""" start="00:12:57.880" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""until I found out that for whatever reason,""" start="00:13:00.680" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""I had to use, as you can see in bold,""" start="00:13:04.560" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""UTF-16LE DOS for the selection coding system.""" start="00:13:07.680" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""And this basically allows me""" start="00:13:13.280" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""to copy Japanese from another file,""" start="00:13:14.880" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""text editor, browser, whatever,""" start="00:13:17.720" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""and paste it in Emacs and vice versa.""" start="00:13:19.600" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""So the lesson here is,""" start="00:13:22.700" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""if you need European languages""" start="00:13:24.400" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""and Japanese inside your Emacs,""" start="00:13:26.280" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""well, this coding system works.""" start="00:13:29.160" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""Let me go back to PlantUML and Japanese.""" start="00:13:32.360" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""Another interesting thing about Japanese""" start="00:13:37.000" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""is this nice macro I found""" start="00:13:40.520" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""in the Emacs mailing list""" start="00:13:44.280" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""to add furigana to Japanese kanjis""" start="00:13:46.980" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""when exporting or publishing to HTML.""" start="00:13:49.720" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""It's actually even possible to do the same""" start="00:13:53.640" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""with LaTeX export/publish""" start="00:13:55.560" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""and I'll give you some references later.""" start="00:13:57.680" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""It's very useful because I can show,""" start="00:14:00.360" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""as you can see on the example at the bottom,""" start="00:14:03.240" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""I can show the easier-to-read pronunciation""" start="00:14:06.860" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""even for readers with really basic knowledge of Japanese.""" start="00:14:10.220" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""(And it's also useful to myself, actually,""" start="00:14:14.080" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""to remember how to pronounce those kanji!)""" start="00:14:17.320" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""For those of you that have no idea""" start="00:14:20.260" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""on how to read or write Japanese, well, sorry.""" start="00:14:22.560" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""As you can see, the garden evolved from the beginning""" start="00:14:27.040" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""on how to use Emacs and Org Mode,""" start="00:14:31.480" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""and it's evolving further,""" start="00:14:33.320" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""and here it's becoming open to""" start="00:14:35.200" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""different plants (or PlantUML…)""" start="00:14:37.400" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""and also be able to adapt""" start="00:14:40.640" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""to different foreign visitors' needs.""" start="00:14:43.840" video="mainVideo-gardening" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""My Org Mode publishing configuration""" start="00:14:50.660" video="mainVideo-gardening" id="subtitle"]]</div>[[!template text="""Third topic: my Org Mode publishing configuration,""" start="00:14:50.660" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""or where the digital garden is born.""" start="00:14:54.880" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""The latest (but not least!) part of""" start="00:14:58.160" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""the creation and tending of my digital garden""" start="00:15:00.840" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""is the publishing file that is needed to export""" start="00:15:03.360" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""the whole Org Mode project into HTML.""" start="00:15:07.120" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""Here I do not have many fancy configurations,""" start="00:15:11.280" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""even though I'm copying the publishing.el file itself""" start="00:15:14.760" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""in the output folder,""" start="00:15:19.520" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""to make it available in the published version of the garden.""" start="00:15:21.460" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""Also I have added the mentioned configuration""" start="00:15:24.860" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""to manage SVG (or PNG) exports from PlantUML""" start="00:15:28.520" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""(thank you again, Sacha),""" start="00:15:32.980" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""and I'm also forcing HTML5""" start="00:15:34.280" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""without scripts as the result format.""" start="00:15:37.000" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""Together with this,""" start="00:15:40.060" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""I also have a fancy CSS addition""" start="00:15:41.240" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""to the default one""" start="00:15:43.440" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""that uses the System Font Stack concept""" start="00:15:44.360" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""to harmonize fonts""" start="00:15:48.240" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""with readers' local systems,""" start="00:15:49.760" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""without downloading or injecting""" start="00:15:51.880" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""external fonts.""" start="00:15:54.320" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""I've customized links and tags a bit,""" start="00:15:55.280" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""with the CSS, together with tables""" start="00:15:57.800" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""and some other pieces here and there,""" start="00:15:59.840" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""but nothing too much fancy.""" start="00:16:01.160" video="mainVideo-gardening" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""The final result""" start="00:16:04.520" video="mainVideo-gardening" id="subtitle"]]</div>[[!template text="""So, this is one (not-so-)random page""" start="00:16:04.520" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""of my digital garden,""" start="00:16:08.440" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""or my knowledge 枯山水,""" start="00:16:10.040" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""my knowledge Zen garden, as I prefer to call it.""" start="00:16:12.360" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""This is, specifically, the page related""" start="00:16:17.620" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""to write about the Digital Garden concept itself,""" start="00:16:20.520" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""as a sort of meta-writing.""" start="00:16:23.640" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""You can see the different""" start="00:16:26.080" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""rendering of the links,""" start="00:16:27.320" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""depending if they are internal, in blue,""" start="00:16:28.880" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""or external to the garden in gray-ish.""" start="00:16:31.640" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""You can see the Japanese furigana""" start="00:16:37.660" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""on top of the kanjis,""" start="00:16:39.440" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""and you also can see the automatic table of contents,""" start="00:16:40.920" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""the custom aside component that highlights""" start="00:16:44.360" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""the latest modification date, and so on.""" start="00:16:47.600" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""Everything I've spoke about here""" start="00:16:50.820" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""is available in my digital garden""" start="00:16:53.280" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""in my knowledge kare-san-sui, again,""" start="00:16:55.920" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""as a sort of self-description""" start="00:16:57.600" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""of the digital garden itself.""" start="00:17:00.600" video="mainVideo-gardening" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Thank you for listening""" start="00:17:03.280" video="mainVideo-gardening" id="subtitle"]]</div>[[!template text="""Thank you, everyone,""" start="00:17:03.280" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""for being with me till the end.""" start="00:17:04.280" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""So as I said, if you want more details""" start="00:17:06.080" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""about these topics,""" start="00:17:08.720" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""take a look at my knowledge kare-san-sui.""" start="00:17:10.040" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""The link is here, and feel free to contact me""" start="00:17:13.160" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""through Delta Chat""" start="00:17:16.360" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""at this email address.""" start="00:17:17.480" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""Yes, I know.""" start="00:17:20.320" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""It's a Microsoft email address.""" start="00:17:21.320" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""It's an old one.""" start="00:17:23.720" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""I recycled it. I know. It's my fault.""" start="00:17:25.080" video="mainVideo-gardening" id="subtitle"]]
+[[!template text="""Thank you again, and happy Emacs everyone!""" start="00:17:29.020" video="mainVideo-gardening" id="subtitle"]]
+
+</div>
+
+Captioner: rodion
+
+Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202023%20gardening%3A%20Gardening%20in%20Emacs%3A%20A%20Windows%20user%27s%20tale%20of%20tending%2C%20tweaking%2C%20and%20triumph)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2025/info/gardening-before.md b/2025/info/gardening-before.md
new file mode 100644
index 00000000..d94f7b4e
--- /dev/null
+++ b/2025/info/gardening-before.md
@@ -0,0 +1,31 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+
+The following image shows where the talk is in the schedule for Sun 2025-12-07. Solid lines show talks with Q&A via BigBlueButton. Dashed lines show talks with Q&A via IRC or Etherpad.<div class="schedule-in-context schedule-svg-container" data-slug="gardening">
+<svg width="700" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Schedule for Sunday</title> <rect width="700" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="/2025/talks/sun-open" title="Sunday opening remarks" data-slug="sun-open"> <title> 9:00- 9:10 Sunday opening remarks</title> <rect x="0" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(11,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-open</text></g></a> <a href="/2025/talks/modern" title="Some problems of modernizing Emacs" data-slug="modern"> <title> 9:10- 9:30 Some problems of modernizing Emacs</title> <rect x="13" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(38,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> modern</text></g></a> <a href="/2025/talks/reader" title="An introduction to the Emacs Reader" data-slug="reader"> <title> 9:40-10:15 An introduction to the Emacs Reader</title> <rect x="54" y="15" opacity="0.5" width="48" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(100,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> reader</text></g></a> <a href="/2025/talks/weights" title="Weightlifting tracking with Emacs on Android" data-slug="weights"> <title> 10:35-10:45 Weightlifting tracking with Emacs on Android</title> <rect x="130" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(141,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> weights</text></g></a> <a href="/2025/talks/completion" title="corfu+yasnippet: Easier than I thought" data-slug="completion"> <title> 11:05-11:25 corfu+yasnippet: Easier than I thought</title> <rect x="171" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(196,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> completion</text></g></a> <a href="/2025/talks/zettelkasten" title="Zettelkasten for regular Emacs hackers" data-slug="zettelkasten"> <title> 1:00- 1:25 Zettelkasten for regular Emacs hackers</title> <rect x="329" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(361,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> zettelkasten</text></g></a> <a href="/2025/talks/hyperboleqa" title="Questions and answers to help you fly with Hyperbole" data-slug="hyperboleqa"> <title> 1:45- 2:15 Questions and answers to help you fly with Hyperbole</title> <rect x="391" y="15" opacity="0.5" width="41" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(430,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperboleqa</text></g></a> <a href="/2025/talks/gardening" title="Gardening in Emacs: A Windows user's tale of tending, tweaking, and triumph" data-slug="gardening"> <title> 2:15- 2:35 Gardening in Emacs: A Windows user's tale of tending, tweaking, and triumph</title> <rect stroke-width="3" x="432" y="15" opacity="0.8" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(457,73)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gardening</text></g></a> <a href="/2025/talks/bookclub-tapas" title="Bookclub tapas" data-slug="bookclub-tapas"> <title> 2:45- 3:20 Bookclub tapas</title> <rect x="473" y="15" opacity="0.5" width="48" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(519,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> bookclub-tapas</text></g></a> <a href="/2025/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"> <title> 3:40- 3:50 Sunday closing remarks</title> <rect x="549" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(560,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-close</text></g></a> <g transform="translate(0,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(82,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(164,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(247,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(329,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(411,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(494,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(576,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(658,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 5 PM</text></g></svg>
+</div>
+
+[[!toc ]]
+Format: 18-min talk ; Q&A: ask questions via Etherpad/IRC; we'll e-mail the speaker and post answers on this wiki page after the conference Etherpad: <https://pad.emacsconf.org/2025-gardening>
+Etherpad: <https://pad.emacsconf.org/2025-gardening>
+Discuss on IRC: [#emacsconf-gen](https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen)
+Status: Q&A open for participation
+<div>Times in different time zones:</div><div class="times" start="2025-12-07T19:15:00Z" end="2025-12-07T19:35:00Z"><div class="conf-time">Sunday, Dec 7 2025, ~2:15 PM - 2:35 PM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Sunday, Dec 7 2025, ~1:15 PM - 1:35 PM CST (US/Central)<br />Sunday, Dec 7 2025, ~12:15 PM - 12:35 PM MST (US/Mountain)<br />Sunday, Dec 7 2025, ~11:15 AM - 11:35 AM PST (US/Pacific)<br />Sunday, Dec 7 2025, ~7:15 PM - 7:35 PM UTC <br />Sunday, Dec 7 2025, ~8:15 PM - 8:35 PM CET (Europe/Paris)<br />Sunday, Dec 7 2025, ~9:15 PM - 9:35 PM EET (Europe/Athens)<br />Monday, Dec 8 2025, ~12:45 AM - 1:05 AM IST (Asia/Kolkata)<br />Monday, Dec 8 2025, ~3:15 AM - 3:35 AM +08 (Asia/Singapore)<br />Monday, Dec 8 2025, ~4:15 AM - 4:35 AM JST (Asia/Tokyo)</div></div><div><strong><a href="/2025/watch/gen/">Find out how to watch and participate</a></strong></div>
+
+
+
+
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-gardening"><source src="https://media.emacsconf.org/2025/emacsconf-2025-gardening--gardening-in-emacs-a-windows-users-tale-of-tending-tweaking-and-triumph--marco-bresciani--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2025/captions/emacsconf-2025-gardening--gardening-in-emacs-a-windows-users-tale-of-tending-tweaking-and-triumph--marco-bresciani--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2025/captions/emacsconf-2025-gardening--gardening-in-emacs-a-windows-users-tale-of-tending-tweaking-and-triumph--marco-bresciani--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="mainVideo-gardening" data="""
+00:05.980 Introduction
+00:39.040 What is a digital garden?
+02:11.520 Why a digital garden?
+03:39.200 How to digital garden?
+04:57.440 How to make Emacs portable, on Windows
+08:18.820 My Emacs customization
+10:36.120 PlantUML and Japanese
+14:50.660 My Org Mode publishing configuration
+16:04.520 The final result
+17:03.280 Thank you for listening
+
+"""]]<div></div>Duration: 17:36 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2025-gardening">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-gardening--gardening-in-emacs-a-windows-users-tale-of-tending-tweaking-and-triumph--marco-bresciani--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-gardening--gardening-in-emacs-a-windows-users-tale-of-tending-tweaking-and-triumph--marco-bresciani--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-gardening--gardening-in-emacs-a-windows-users-tale-of-tending-tweaking-and-triumph--marco-bresciani--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-gardening--gardening-in-emacs-a-windows-users-tale-of-tending-tweaking-and-triumph--marco-bresciani--main.opus">Download --main.opus (15MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-gardening--gardening-in-emacs-a-windows-users-tale-of-tending-tweaking-and-triumph--marco-bresciani--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-gardening--gardening-in-emacs-a-windows-users-tale-of-tending-tweaking-and-triumph--marco-bresciani--main.webm">Download --main.webm (48MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-gardening--gardening-in-emacs-a-windows-users-tale-of-tending-tweaking-and-triumph--marco-bresciani--script.txt">Download --script.txt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-gardening--gardening-in-emacs-a-windows-users-tale-of-tending-tweaking-and-triumph--marco-bresciani--split.txt">Download --split.txt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-gardening--gardening-in-emacs-a-windows-users-tale-of-tending-tweaking-and-triumph--marco-bresciani--split.vtt">Download --split.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-gardening--gardening-in-emacs-a-windows-users-tale-of-tending-tweaking-and-triumph--marco-bresciani.odp">Download .odp (3.6MB)</a></li><li><a href="https://youtu.be/lNIc8-_C9kQ">View on Youtube</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2025/info/gardening-nav.md b/2025/info/gardening-nav.md
new file mode 100644
index 00000000..da717ec7
--- /dev/null
+++ b/2025/info/gardening-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by time: <a href="/2025/talks/hyperboleqa">Questions and answers to help you fly with Hyperbole</a>
+Next by time: <a href="/2025/talks/bookclub-tapas">Bookclub tapas</a>
+Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2025/watch/gen">Watch</a></strong>
+</div>
diff --git a/2025/info/gmail-after.md b/2025/info/gmail-after.md
new file mode 100644
index 00000000..d0b0ca1a
--- /dev/null
+++ b/2025/info/gmail-after.md
@@ -0,0 +1,606 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<div class="transcript transcript-mainVideo"><a name="gmail-mainVideo-transcript"></a><h1>Transcript</h1>
+
+
+<div class="transcript-heading">[[!template new="1" text="""Before we begin""" start="00:00:00.000" video="mainVideo-gmail" id="subtitle"]]</div>[[!template text="""Hello everyone.""" start="00:00:00.000" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""My name is Bala Ramadurai.""" start="00:00:01.760" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Today I'm going to be talking about org-gmail.""" start="00:00:03.440" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""That's something that I put together.""" start="00:00:07.840" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""This is what I call gmail meets org mode.""" start="00:00:10.040" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""And they get along too.""" start="00:00:12.720" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Let's talk about email""" start="00:00:15.120" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""and how to manage email via org mode.""" start="00:00:16.520" video="mainVideo-gmail" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""The 4-year overnight success""" start="00:00:19.840" video="mainVideo-gmail" id="subtitle"]]</div>[[!template text="""This project is a four year overnight success.""" start="00:00:19.840" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""It was in 2021.""" start="00:00:23.920" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""I said, Hey, wait a second.""" start="00:00:26.040" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""It'll be so cool if we can integrate Gmail with org.""" start="00:00:27.280" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""So I started trying out new things.""" start="00:00:30.520" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""And immediately I realized""" start="00:00:32.960" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""this is a much larger project than I thought.""" start="00:00:34.400" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""So it lived in someday maybe.org""" start="00:00:36.800" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""for about three years.""" start="00:00:40.600" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Enter 2024 AI arrives and in 2025 I had a working""" start="00:00:42.600" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""prototype in 24 hours flat.""" start="00:00:48.760" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""So three years and 364 days, nothing much happened""" start="00:00:50.920" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""and one day it actually got it working.""" start="00:00:55.760" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Sometimes procrastination is just waiting for the""" start="00:00:58.160" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""right tools.""" start="00:01:00.920" video="mainVideo-gmail" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""The real title""" start="00:01:02.800" video="mainVideo-gmail" id="subtitle"]]</div>[[!template text="""The real title should have been org mail for""" start="00:01:02.800" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""people who like org mode more than email.""" start="00:01:05.520" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""The Gmail monster that has always been attacking us.""" start="00:01:08.480" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Okay, but we still have to deal with email.""" start="00:01:12.800" video="mainVideo-gmail" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Why not gnus/mu4e/notmuch?""" start="00:01:15.600" video="mainVideo-gmail" id="subtitle"]]</div>[[!template text="""One of the most common questions that I've got so far.""" start="00:01:15.600" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Why not gnus or mu4e or notmuch, or other tools.""" start="00:01:18.600" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""They are amazing.""" start="00:01:24.640" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Use them if it works for you, absolutely.""" start="00:01:26.360" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Just go right ahead.""" start="00:01:29.240" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""If it works for you, don't change anything""" start="00:01:30.320" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""because this looks cool.""" start="00:01:32.240" video="mainVideo-gmail" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""The honest answer""" start="00:01:34.280" video="mainVideo-gmail" id="subtitle"]]</div>[[!template text="""Well, the honest answer for me is that""" start="00:01:34.280" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""they want to be your email client.""" start="00:01:36.600" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""That's not what I am after.""" start="00:01:39.400" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""I don't want an email client.""" start="00:01:40.880" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""I have enough email clients already.""" start="00:01:42.960" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""I don't want one more.""" start="00:01:45.040" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""And they require 500 lines of config.""" start="00:01:46.240" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""I've tried it.""" start="00:01:49.360" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""It's a lot of maintenance for myself,""" start="00:01:50.680" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""I still have those somewhere.""" start="00:01:53.040" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""The mu4e config or the gnus config.""" start="00:01:54.360" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""They struggle with Gmail's labels,""" start="00:01:57.320" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""threading, messages and deletion.""" start="00:01:59.440" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""I find it tough, and it's either""" start="00:02:01.840" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""all in emacs or nothing.""" start="00:02:05.440" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""It cannot be a combinatorial approach,""" start="00:02:07.080" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""is what I realized.""" start="00:02:10.080" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""So I said, why can't we have both?""" start="00:02:11.160" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""I want the org mode's focus""" start="00:02:13.520" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""and Gmail's flexibility.""" start="00:02:15.960" video="mainVideo-gmail" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""The org-gmail philosophy""" start="00:02:17.920" video="mainVideo-gmail" id="subtitle"]]</div>[[!template text="""Org-gmail philosophy is very simple.""" start="00:02:17.920" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""You triage in Gmail.""" start="00:02:20.560" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Use the fast web UI for the easy stuff""" start="00:02:22.200" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""and process in org mode.""" start="00:02:26.280" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Pull important threads where you do real work.""" start="00:02:27.880" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""And of course, a two way sync is possible.""" start="00:02:30.640" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Changes flow both directions.""" start="00:02:33.720" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Big inspiration has been org-gcal.""" start="00:02:36.640" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""I named it org-gmail because I saw org-gcal.""" start="00:02:39.480" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""It was so cool.""" start="00:02:42.320" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""I really wanted it.""" start="00:02:43.160" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Think of it like an org capture for email, but""" start="00:02:44.760" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""just bidirectional.""" start="00:02:47.720" video="mainVideo-gmail" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Architecture (the boring but important slide)""" start="00:02:49.440" video="mainVideo-gmail" id="subtitle"]]</div>[[!template text="""Alright, the architecture (boring, but important""" start="00:02:49.440" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""slide) is that Gmail interacts with Python via an""" start="00:02:53.000" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""API and interacts with Emacs Lisp.""" start="00:02:56.680" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""User commands, org formatting, all that magic is""" start="00:02:59.440" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""done on the Emacs side with Lisp.""" start="00:03:02.520" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Python side handles the Gmail API, OAuth,""" start="00:03:04.280" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""json wrangling and Gmail API handles""" start="00:03:09.141" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""the actual email data.""" start="00:03:12.408" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""You can do pip install, add to the load path, and""" start="00:03:13.960" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""10 minute OAuth setup, you are all set.""" start="00:03:17.680" video="mainVideo-gmail" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Demo 1: From gmail to org""" start="00:03:21.200" video="mainVideo-gmail" id="subtitle"]]</div>[[!template text="""We'll switch over to demo from gmail to org.""" start="00:03:21.200" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""How do you go about doing that?""" start="00:03:27.080" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""I will start off with a demo folder that I have.""" start="00:03:29.040" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""It has this tree structure.""" start="00:03:32.880" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Ignore the tilde files.""" start="00:03:35.120" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""So this is what it contains.""" start="00:03:36.560" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""An org folder with all the working directory, the""" start="00:03:37.920" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""actual where the life of org mode is.""" start="00:03:41.640" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""And I have a credentials.json, this is for logging""" start="00:03:44.640" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""into Gmail.""" start="00:03:48.240" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""This is a file that you can download.""" start="00:03:49.120" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""The instructions are in my README in the""" start="00:03:50.800" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""repository.""" start="00:03:53.320" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""You can find out how to get yourself a""" start="00:03:54.160" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""credentials.json.""" start="00:03:56.120" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""It's not very difficult.""" start="00:03:57.720" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Once you have these, you're all set.""" start="00:03:59.160" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""All you need to do is if you have straight or any""" start="00:04:01.480" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""of the other VC packages ready, that you can take""" start="00:04:05.360" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""a Git repository and have that in your folder, you""" start="00:04:08.540" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""can do that, or you can do it like this.""" start="00:04:11.501" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Have a Git clone.""" start="00:04:13.400" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Like I'm doing it right now.""" start="00:04:15.160" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Just clone it, keep it in.""" start="00:04:16.480" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""And now you'll see""" start="00:04:19.240" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""that the Gmail is already there.""" start="00:04:20.875" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""There are two files that are really ultra""" start="00:04:23.200" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""important, which is, gmail_label_manager.py and""" start="00:04:25.200" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""org-gmail.el.""" start="00:04:28.040" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""These are the two files that do the email""" start="00:04:30.480" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""processing.""" start="00:04:31.900" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""I have a plain vanilla Emacs""" start="00:04:33.200" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""that I'm going to use for the demo.""" start="00:04:35.200" video="mainVideo-gmail" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Settings""" start="00:04:37.480" video="mainVideo-gmail" id="subtitle"]]</div>[[!template text="""These are a few settings""" start="00:04:37.480" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""that you will need in order to get going.""" start="00:04:39.440" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""So one is the Gmail itself, the elisp, and the""" start="00:04:42.160" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Python script.""" start="00:04:45.960" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""You'll need to require the package.""" start="00:04:47.040" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""The org agenda files need to be set.""" start="00:04:49.400" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""If they're already there, then yes, it needs to""" start="00:04:52.400" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""include the org files.""" start="00:04:54.840" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Main settings are, you need an org file in order""" start="00:04:55.880" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""to download all the emails from Gmail.""" start="00:04:59.280" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""You need the credentials path.""" start="00:05:02.240" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""You need the Python script,""" start="00:05:03.880" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""wherever it is pointed to that.""" start="00:05:05.520" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""The date drawer, you can customize it""" start="00:05:07.440" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""to whatever you want.""" start="00:05:10.040" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""I call it org-gmail.""" start="00:05:11.320" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""You can set it to ignore certain labels,""" start="00:05:12.160" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""not to download it.""" start="00:05:14.640" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""You're not interested in certain labels""" start="00:05:15.800" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""being downloaded.""" start="00:05:17.360" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""You can set that""" start="00:05:18.480" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""and process time out of 300 seconds.""" start="00:05:19.600" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""These are some things to keep life sane in this""" start="00:05:21.960" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""plain vanilla emacs.""" start="00:05:25.360" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""So I have this refile targets and stuff.""" start="00:05:27.820" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""That's the main org-gmail settings are all here.""" start="00:05:30.800" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""I'm going to eval this buffer so that we have all""" start="00:05:33.580" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""of it and we are all set.""" start="00:05:37.880" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""So we have org-gmail ready to work right now.""" start="00:05:40.040" video="mainVideo-gmail" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Downloading""" start="00:05:43.040" video="mainVideo-gmail" id="subtitle"]]</div>[[!template text="""The first thing I'm going to show you is""" start="00:05:43.040" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""org-gmail-download-by-label.""" start="00:05:44.960" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""This is the demo Gmail that I have.""" start="00:05:48.080" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""They all have some kind of test emails and I'm""" start="00:05:50.600" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""going to label them.""" start="00:05:53.620" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""I've created this hierarchy of labels here based""" start="00:05:56.200" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""on Tiago Forte's PARA - Project, Area, Resources,""" start="00:06:00.720" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Archives structure.""" start="00:06:04.120" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""1Projects, DemoProject1, 2Areas, DemoArea,""" start="00:06:06.080" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""4Archives, 2025, OldProject.""" start="00:06:09.440" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""I've labeled them inside my Gmail.""" start="00:06:12.120" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Okay, now let's go to Emacs and we will now""" start="00:06:14.960" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""download these things, but before downloading""" start="00:06:20.760" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""them, you will need to authenticate.""" start="00:06:23.720" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""So for that, you can start""" start="00:06:26.920" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""with any org-gmail command.""" start="00:06:28.801" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""So I'm going to take org-gmail-download-by-label.""" start="00:06:30.901" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""When I press that, it immediately opens a session""" start="00:06:35.080" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""in my browser.""" start="00:06:38.840" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Okay?""" start="00:06:40.000" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""What you can't see is a list of my Gmail accounts""" start="00:06:40.660" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""that I'm going to select.""" start="00:06:45.800" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""I'm going to select my one Gmail account, and I'm""" start="00:06:46.760" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""going to show you the next screen.""" start="00:06:50.040" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""So in this screen, you'll have to continue and""" start="00:06:53.200" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""select, and the authentication is completed.""" start="00:06:57.000" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""So once it's, this is done, you can close this.""" start="00:06:59.120" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Come back to Emacs and you will have Select Gmail.""" start="00:07:02.680" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""So it has tab support.""" start="00:07:09.000" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""If you click tab, it will tell you""" start="00:07:10.440" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""what all labels are available.""" start="00:07:11.720" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""I can pick anyone.""" start="00:07:13.920" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""1Projects/DemoProject1, and let's see what happens.""" start="00:07:16.320" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""It starts downloading and it downloads.""" start="00:07:21.840" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""And all three messages, four messages,""" start="00:07:26.480" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""five messages.""" start="00:07:28.800" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Six, seven.""" start="00:07:29.720" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""There are 11 messages in total,""" start="00:07:30.760" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""and it's downloading all of them.""" start="00:07:33.320" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""~/demo/org/0Inbox.""" start="00:07:36.040" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""That's where I have it.""" start="00:07:40.320" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""And here are the emails.""" start="00:07:42.080" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""They're all in org mode, format.""" start="00:07:44.400" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""All the emails are in here.""" start="00:07:46.440" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Since it's org mode,""" start="00:07:48.400" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""it can fold them all and you will see those emails.""" start="00:07:49.720" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""So these are five emails""" start="00:07:52.680" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""that are present for the DemoProject1.""" start="00:07:54.280" video="mainVideo-gmail" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Replying""" start="00:07:56.880" video="mainVideo-gmail" id="subtitle"]]</div>[[!template text="""The next one I wanted to show you was""" start="00:07:56.880" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""reply without leaving emacs.""" start="00:07:59.280" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Let's go back to emacs.""" start="00:08:01.040" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""How am I going to reply?""" start="00:08:04.920" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""org-gmail-reply-at-point.""" start="00:08:06.480" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""That's how I'm going to reply.""" start="00:08:09.320" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Reply all or reply.""" start="00:08:11.380" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Okay.""" start="00:08:13.120" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Let's first find out what is the email all about.""" start="00:08:13.760" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Okay.""" start="00:08:16.200" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""There's just one sender with just one recipient.""" start="00:08:16.720" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""So the reply all or reply""" start="00:08:19.320" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""doesn't make a difference.""" start="00:08:21.400" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Okay?""" start="00:08:23.021" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""So we will reply at point and if it's Reply All,""" start="00:08:23.701" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""it includes my own email as well.""" start="00:08:28.340" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""In this, my email is .mx.""" start="00:08:31.000" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Okay.""" start="00:08:34.400" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Cc, I can cc anybody I want and I won't do that.""" start="00:08:35.160" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""I have a Gmail reply window.""" start="00:08:39.280" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Split window here.""" start="00:08:42.040" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""C-c C-c is what will send the reply.""" start="00:08:43.440" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""C-c C-k is what will cancel the reply.""" start="00:08:47.160" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""I want to reply.""" start="00:08:50.480" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""So let's say test reply from within emacs""" start="00:08:51.920" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""and bala@balaramadurai.net""" start="00:08:57.780" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""should receive this email.""" start="00:09:00.560" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Okay.""" start="00:09:01.720" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Initial successfully reply sent for this email id.""" start="00:09:03.000" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Okay.""" start="00:09:07.600" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""A feature request I can already imagine is""" start="00:09:08.600" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""the reply also appearing at the bottom of this.""" start="00:09:11.960" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""It's not yet there.""" start="00:09:15.440" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""In the next version I will have that.""" start="00:09:16.760" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Let's check if I've have sent that email.""" start="00:09:18.280" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Let's check in the sent box.""" start="00:09:22.320" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""I just checked in the sent and yes,""" start="00:09:25.320" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""a test reply from within emacs, does show up.""" start="00:09:29.120" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Okay, great.""" start="00:09:31.960" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""That works.""" start="00:09:33.040" video="mainVideo-gmail" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Label management""" start="00:09:33.680" video="mainVideo-gmail" id="subtitle"]]</div>[[!template text="""The third demo is going to be on label management.""" start="00:09:33.680" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""How do I manage labels?""" start="00:09:36.960" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Let's see.""" start="00:09:38.440" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Let's go back to emacs.""" start="00:09:39.360" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Suppose, I am not keen on this DemoProject1 for this.""" start="00:09:40.400" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""It should belong to DemoArea, okay?""" start="00:09:46.600" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""For this thread itself doesn't belong to this.""" start="00:09:50.840" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Let's do org-gmail-edit-label-at-point.""" start="00:09:52.920" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Well, I don't want one project at all.""" start="00:09:57.880" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""It should be under 2Areas/DemoArea.""" start="00:10:00.880" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""I don't think it, it's not tab supported.""" start="00:10:05.900" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""You should know this.""" start="00:10:08.560" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""I will.""" start="00:10:09.520" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""That's another feature request.""" start="00:10:10.000" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""2Areas/DemoArea.""" start="00:10:11.440" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""And when I say this, it should update it.""" start="00:10:14.600" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Yes, it has updated it.""" start="00:10:17.680" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""So you can see that it has updated""" start="00:10:19.040" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""the label here as well.""" start="00:10:21.040" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""We can go check if it has indeed changed it""" start="00:10:22.160" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""in our... what is the name of the email?""" start="00:10:26.160" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""It's a test mail for one project demo""" start="00:10:29.400" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""and the date is at 3 12.""" start="00:10:31.440" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Let's check if DemoArea has it.""" start="00:10:33.460" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""It's not refreshed, but there are two,""" start="00:10:36.840" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""two emails now under DemoArea.""" start="00:10:39.560" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""It's obviously done the job well.""" start="00:10:42.280" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""It's happening as expected.""" start="00:10:43.640" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""I just turned this back from DemoArea to""" start="00:10:46.120" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""DemoProject1.""" start="00:10:49.160" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""If you decide that I want to move all of""" start="00:10:50.160" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""DemoProject1 to archive, I'm done with the""" start="00:10:53.760" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""project.""" start="00:10:56.560" video="mainVideo-gmail" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Refiling""" start="00:10:57.160" video="mainVideo-gmail" id="subtitle"]]</div>[[!template text="""Oh, by the way, you could...""" start="00:10:57.160" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""that's the whole point""" start="00:10:58.320" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""of this is to have""" start="00:10:59.600" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""all of this refiled into your project,""" start="00:11:00.920" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""you can do that.""" start="00:11:05.200" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""I don't know if I have that.""" start="00:11:06.720" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Yes, I have demo project one""" start="00:11:08.920" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""and I could have emails and I created a node""" start="00:11:11.640" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""and I moved everything there to that folder""" start="00:11:17.520" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""so that when I want to look at the demo project.""" start="00:11:20.440" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Let me look at this.""" start="00:11:24.800" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""In that context, in the project context and email,""" start="00:11:25.960" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""I have notes, let's say, and one of the emails is""" start="00:11:29.560" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""a note.""" start="00:11:33.960" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""And I want to be able to keep it that way.""" start="00:11:34.840" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""I could refile it and put it under notes as well,""" start="00:11:38.360" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""saying that this has some password, it has some""" start="00:11:41.720" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""reference that I need to have it there.""" start="00:11:44.440" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""I can have it under notes as well.""" start="00:11:46.560" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""So that's the advantage.""" start="00:11:48.200" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Once it's inside the org mode system, you can do""" start="00:11:49.920" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""many things that are usually org-modesy.""" start="00:11:52.880" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""So you can do all of that within your org mode""" start="00:11:55.240" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""with emails, manipulate them, see it under a""" start="00:11:57.600" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""context, reply to that.""" start="00:12:00.200" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""All of that can happen""" start="00:12:01.360" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""right within your project context.""" start="00:12:02.575" video="mainVideo-gmail" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Archiving""" start="00:12:04.120" video="mainVideo-gmail" id="subtitle"]]</div>[[!template text="""You're done with this project.""" start="00:12:04.120" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""You want to move to archive.""" start="00:12:05.440" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""So what you need to do is you don't have to be""" start="00:12:07.000" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""here, you can do it this from anywhere.""" start="00:12:09.480" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Bulk movement of labels, you can do it.""" start="00:12:11.840" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""If you had consult, embark, ivy, or helm, this will""" start="00:12:15.200" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""show up as a dropdown and it looks neater.""" start="00:12:19.680" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""This, I'm using a vanilla emacs, so this is what""" start="00:12:22.440" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""you would see, but it has tab support.""" start="00:12:24.400" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""You can use that.""" start="00:12:26.280" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""So I want to transfer 1Projects/DemoArea1, I want""" start="00:12:27.520" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""to move it to archive.""" start="00:12:32.320" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""So let's say 4Archives is the folder.""" start="00:12:33.000" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""So 4Archives/2025 already set this up.""" start="00:12:36.720" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""I have not created this label in Gmail.""" start="00:12:41.760" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""So do I need to go back to Gmail and create that?""" start="00:12:46.740" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""No, not at all.""" start="00:12:48.681" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""You can do this from the comfort of your org mode.""" start="00:12:49.840" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Go in here and enter this.""" start="00:12:52.160" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Let's see what happens.""" start="00:12:54.680" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""So it found that it is not there.""" start="00:12:55.640" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""So it created a new label and it's now moving all""" start="00:12:57.760" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""of the emails, all of those threads into archives""" start="00:13:01.440" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""without deleting 1Projects/DemoProject1.""" start="00:13:04.800" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""So it still has 1Projects/DemoProject1 and it also""" start="00:13:07.080" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""updated the labels here.""" start="00:13:09.640" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""So the project has been moved.""" start="00:13:10.640" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""If you want to move it to archive this entire...""" start="00:13:12.240" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""You can do that too.""" start="00:13:15.000" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Let's see if it has archives.""" start="00:13:16.480" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Yes, it has archives and I have it...""" start="00:13:19.080" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""have a heading called 2025.""" start="00:13:21.960" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""My demo project can be moved there""" start="00:13:24.520" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""and I'm done here.""" start="00:13:26.275" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""My project was done.""" start="00:13:27.280" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""All the emails are moved to archive.""" start="00:13:28.400" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""So is this project from my project folder.""" start="00:13:30.080" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""You can integrate it into your workflow, your org""" start="00:13:32.480" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""mode workflow.""" start="00:13:34.920" video="mainVideo-gmail" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Action commands""" start="00:13:37.140" video="mainVideo-gmail" id="subtitle"]]</div>[[!template text="""Next, we have action commands.""" start="00:13:37.140" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""What all can you do with singular emails?""" start="00:13:39.040" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""You can do four things with single emails.""" start="00:13:41.400" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Delegate, defer, act on it or trash at point.""" start="00:13:45.000" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Defer.""" start="00:13:49.660" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Doesn't seem to work yet.""" start="00:13:50.400" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""That is a snooze part.""" start="00:13:52.520" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Doesn't seem to work yet.""" start="00:13:53.600" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""That's another bug.""" start="00:13:54.760" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""That's the second bug I have in my package.""" start="00:13:55.720" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""But the rest of them work.""" start="00:13:58.240" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Delegate is to move it to somebody so they can do""" start="00:13:59.600" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""the job.""" start="00:14:02.520" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Act is you will do it with a context with a to-do""" start="00:14:03.120" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""which will show up in your agenda.""" start="00:14:06.400" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Trash the email from your Gmail, and you are done.""" start="00:14:08.120" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Okay, let's do that.""" start="00:14:10.840" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Let's go back to emacs.""" start="00:14:12.080" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""I just moved everything back to DemoProject1.""" start="00:14:13.880" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""I moved everything back so that I can demonstrate""" start="00:14:18.080" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""the four actions that I'm showing.""" start="00:14:20.920" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""At least three actions.""" start="00:14:22.680" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""One of them doesn't work yet.""" start="00:14:23.520" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""So if I want to delegate it to somebody in this""" start="00:14:25.040" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""case myself, but I can delegate it""" start="00:14:30.180" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""to anybody I want.""" start="00:14:31.608" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""So how do I do that so I can delegate this, or""" start="00:14:32.840" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""delegate is org-gmail-delegate-at-point.""" start="00:14:36.160" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Move the cursor to the email, delegate it to this""" start="00:14:38.960" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""guy balaramadurai.net.""" start="00:14:42.280" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""You can add a note saying,""" start="00:14:44.920" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Hey, act on task quickly.""" start="00:14:46.608" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Boss is watching.""" start="00:14:50.800" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Okay?""" start="00:14:53.400" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""So you can say yes, and this thread gets forwarded""" start="00:14:54.920" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""to your colleague""" start="00:14:59.520" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""and so that they can take this up.""" start="00:15:01.441" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""It has indeed arrived here.""" start="00:15:03.560" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""You can see.""" start="00:15:05.820" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Boss is watching.""" start="00:15:07.040" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""The test reply was also arrived here.""" start="00:15:08.840" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""You can also see that email.""" start="00:15:11.400" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""So that was delegate.""" start="00:15:13.080" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""So how do we set up actions?""" start="00:15:15.360" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""So let's not mess this email.""" start="00:15:18.520" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""This is the second email.""" start="00:15:21.200" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""How do you act""" start="00:15:22.600" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""on it?""" start="00:15:23.920" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""That's an action you set for yourself is add""" start="00:15:24.920" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""action at point, and you do that.""" start="00:15:27.160" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""What action can you set for yourself?""" start="00:15:31.001" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Write a long report using an LLM.""" start="00:15:32.941" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Okay, so it's changed the status to a to-do task.""" start="00:15:38.620" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""And the to-do is right here.""" start="00:15:42.280" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Now, here you can schedule it""" start="00:15:44.960" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""to say tomorrow 9:00 AM.""" start="00:15:47.834" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""So there you go.""" start="00:15:50.701" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""At 9:00 AM I'll be looking at this.""" start="00:15:51.801" video="mainVideo-gmail" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Org Agenda""" start="00:15:53.680" video="mainVideo-gmail" id="subtitle"]]</div>[[!template text="""Now here's the cool part.""" start="00:15:53.680" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""You can actually find the whole thing""" start="00:15:55.120" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""in org agenda.""" start="00:15:58.934" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""So my entire email threads""" start="00:16:00.560" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""are all in the org agenda.""" start="00:16:03.268" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""They're all present here and my task associated is""" start="00:16:05.960" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""also here in the agenda.""" start="00:16:09.680" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""This is marked TODO,""" start="00:16:11.320" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""means I haven't acted on that email.""" start="00:16:12.768" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""It's still pending.""" start="00:16:14.920" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""And what do I have to do is right here within""" start="00:16:16.160" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""here, which is the action that I have to carry on""" start="00:16:19.120" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""in the DemoProject1.""" start="00:16:21.560" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""You can see that demo project one""" start="00:16:22.720" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""is showing up in the bottom.""" start="00:16:24.534" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Okay. It's cool way you can also see it in the agenda.""" start="00:16:25.740" video="mainVideo-gmail" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Trash""" start="00:16:28.280" video="mainVideo-gmail" id="subtitle"]]</div>[[!template text="""I am not interested in this email at all.""" start="00:16:28.280" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Let's say I, I want to delete it.""" start="00:16:31.600" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Let's see.""" start="00:16:33.200" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Yes, I finished the task.""" start="00:16:33.720" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Now the task is finished.""" start="00:16:35.320" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""I really don't want to see this email, this""" start="00:16:37.600" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""message alone.""" start="00:16:40.040" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Alright.""" start="00:16:40.920" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Easy peasy.""" start="00:16:42.160" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Let's do Gmail Trash at point.""" start="00:16:42.600" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""And you say, message,""" start="00:16:46.680" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""I don't want to delete the entire thread.""" start="00:16:48.021" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Yes.""" start="00:16:49.880" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Delete it.""" start="00:16:50.400" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Delete the message alone.""" start="00:16:51.960" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""And it's gone.""" start="00:16:53.240" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""But it's not gone.""" start="00:16:54.240" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""It's gone to the trash.""" start="00:16:56.040" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""The entire subtree was deleted""" start="00:16:57.160" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""and we have a clean flow here.""" start="00:16:59.734" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""I have archived, it is still in the archive, but""" start="00:17:01.881" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""it's still active according to my Gmail folder.""" start="00:17:04.480" video="mainVideo-gmail" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Real workflow: GTD""" start="00:17:07.440" video="mainVideo-gmail" id="subtitle"]]</div>[[!template text="""Next I'm going to show you is""" start="00:17:07.440" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""real workflow capture.""" start="00:17:09.575" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""You can use label in email with ToProcess""" start="00:17:12.040" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""downloaded to the inbox.org, and do one of these""" start="00:17:15.800" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""you've already seen.""" start="00:17:19.360" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Later still doesn't work.""" start="00:17:20.600" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""I will get it to work, but hopefully by the time""" start="00:17:22.520" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""the conference is up, you will have the feature up""" start="00:17:25.640" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""and ready.""" start="00:17:28.760" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Rest of the stuff works, delegate works, trash""" start="00:17:29.400" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""works, and add action works.""" start="00:17:32.680" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""We are in weekly review can have an email context,""" start="00:17:34.040" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""not just links to an external URL.""" start="00:17:37.480" video="mainVideo-gmail" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Real Workflow: P.A.R.A.""" start="00:17:40.560" video="mainVideo-gmail" id="subtitle"]]</div>[[!template text="""In the P.A.R.A Our Project, Areas, Resources and""" start="00:17:40.560" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Archives structure, you can have Gmail labels""" start="00:17:46.520" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""mirror your PARA structure.""" start="00:17:50.040" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""You can have that within your org mode structure,""" start="00:17:51.200" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""and you can mimic that very well.""" start="00:17:53.880" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""All the emails embedded in your own structure and""" start="00:17:56.240" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""you can download it by label""" start="00:17:59.420" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""in the place you want.""" start="00:18:02.068" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""I'm still working on that feature where you can""" start="00:18:03.521" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""have it inside the project structure itself rather""" start="00:18:05.440" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""than an index.org.""" start="00:18:08.560" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""It'll take some time, but I will do it.""" start="00:18:09.840" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""But right now you can refile it once it's in the""" start="00:18:11.720" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""index.org or any other file you choose, and then""" start="00:18:14.840" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""you can bulk move labels to archive and move that""" start="00:18:17.460" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""entire project repository to""" start="00:18:21.040" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""your archive also. That works very well.""" start="00:18:23.320" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""And your org files and Gmail stay in sync""" start="00:18:26.320" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""effortlessly, and the whole email part of it""" start="00:18:29.920" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""becomes part of your knowledge management system.""" start="00:18:33.040" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Okay.""" start="00:18:35.240" video="mainVideo-gmail" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""What this is NOT""" start="00:18:35.960" video="mainVideo-gmail" id="subtitle"]]</div>[[!template text="""We have reached the end of the demo.""" start="00:18:35.960" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Hopefully you understood""" start="00:18:37.640" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""what org-gmail was all about.""" start="00:18:39.668" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""If you have any questions, let me know, but some""" start="00:18:41.800" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""bits of warning, I wanted to give you what this""" start="00:18:44.640" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""package is not, it's not a full fledged email""" start="00:18:47.520" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""client.""" start="00:18:50.240" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""It's meant for label management and importing some""" start="00:18:50.960" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""emails that you wanted or you're interested in to""" start="00:18:55.320" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""the context of your projects or areas or your GTD""" start="00:18:58.740" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""context.""" start="00:19:02.080" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""It is not a replacement for gnus, mu4e or notmuch.""" start="00:19:02.680" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""It is not a way to read all your emails in emacs.""" start="00:19:07.160" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""It cannot handle a large server load for sure.""" start="00:19:10.480" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""It is not offline capable.""" start="00:19:13.440" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""It needs API access.""" start="00:19:15.680" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""So bear that in mind.""" start="00:19:17.360" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""What it is, is a bridge between""" start="00:19:19.480" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""gmail and org mode.""" start="00:19:22.160" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""It's a way to manage important email threads.""" start="00:19:23.880" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""So you can keep updating threads.""" start="00:19:27.360" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Whenever there's a reply, you keep downloading it""" start="00:19:29.560" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""to that thread.""" start="00:19:32.040" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""If you want to keep track of what's going on, what""" start="00:19:32.920" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""is the logical way you can all see it.""" start="00:19:35.280" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""You can even use ellama or one of those to make""" start="00:19:37.080" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""sense of the conversation.""" start="00:19:40.600" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""If it's a long longish thread, it's a power tool""" start="00:19:42.000" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""for the getting things done or Tiago Forte's PARA""" start="00:19:45.280" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""method.""" start="00:19:49.080" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""I've used PARA for a long time now.""" start="00:19:49.840" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""I'm a power user of PARA, so to speak, so I find""" start="00:19:52.120" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""this extremely useful myself.""" start="00:19:54.840" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""It's about 800 lines of Python""" start="00:19:56.320" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""and about 300 to 500 lines of elisp.""" start="00:19:59.068" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""It's usable in 10 minutes, but can remain powerful""" start="00:20:02.480" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""for years.""" start="00:20:07.000" video="mainVideo-gmail" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Technical decisions""" start="00:20:07.680" video="mainVideo-gmail" id="subtitle"]]</div>[[!template text="""So some technical decisions that I took.""" start="00:20:07.680" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Why Python plus Gmail, API.""" start="00:20:10.600" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Gmail API is better at handling than an imap with""" start="00:20:13.420" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""all the other metadata.""" start="00:20:17.960" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""I found it easier.""" start="00:20:19.360" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Python has excellent Google API libraries.""" start="00:20:20.200" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Email calls Python via the call-process.""" start="00:20:22.680" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""json is the interchange format.""" start="00:20:25.480" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Why not pure elisp?""" start="00:20:27.560" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""For one, OAuth 2.0 flow is a bit complex.""" start="00:20:29.880" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""I found it a bit complex to meander on.""" start="00:20:33.800" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""That's probably why it took me three years, 364""" start="00:20:35.720" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""days to get over it.""" start="00:20:38.140" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Gmail API Client libraries are mature, easier to""" start="00:20:40.320" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""test/debug separately and lets emacs do what it""" start="00:20:43.840" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""does best, which is text editing.""" start="00:20:48.460" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Pragmatism over purity, the emacs way since 1976.""" start="00:20:50.160" video="mainVideo-gmail" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Roadmap""" start="00:20:54.760" video="mainVideo-gmail" id="subtitle"]]</div>[[!template text="""Okay, some roadmap here.""" start="00:20:54.760" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""But near term I want better error messages.""" start="00:20:57.160" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""It still gives me python error messages.""" start="00:21:00.240" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""There are some asynchronous operations there's no""" start="00:21:02.760" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""blocking going on.""" start="00:21:05.040" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""It needs a search integration soon.""" start="00:21:06.320" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Attachment I have not yet touched.""" start="00:21:08.880" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""That's a big big if, I don't know how to integrate""" start="00:21:11.120" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""with org-attach, I'm still wondering how to do""" start="00:21:13.880" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""that.""" start="00:21:15.880" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Perhaps I should be able to interact with Outlook""" start="00:21:16.440" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""also, fast mail, proton mail.""" start="00:21:19.520" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""I don't know AI summaries of thread.""" start="00:21:21.920" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""I'm thinking ellama could do it, but I'm not very""" start="00:21:24.760" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""sure.""" start="00:21:27.760" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Calendar integration is a nice idea, but org-gcal""" start="00:21:28.320" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""and org gmail...""" start="00:21:32.080" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""How will they interact?""" start="00:21:33.320" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""How will that work?""" start="00:21:34.280" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""I'm still not sure. I use them separately.""" start="00:21:35.840" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""And any other feature requests that you may have,""" start="00:21:37.760" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""just let me know.""" start="00:21:40.600" video="mainVideo-gmail" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Contributing""" start="00:21:41.440" video="mainVideo-gmail" id="subtitle"]]</div>[[!template text="""What I may need help with if you have the time and""" start="00:21:41.440" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""you're interested in this project, is to test it""" start="00:21:44.920" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""on macOS and Windows.""" start="00:21:47.440" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""I use Linux.""" start="00:21:49.080" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""I use it on Debian.""" start="00:21:50.160" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""It works fine.""" start="00:21:51.760" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""OAuth edge cases.""" start="00:21:52.720" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""I'm not sure how it works.""" start="00:21:54.360" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""It shows me some error or the other""" start="00:21:55.720" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""here and there.""" start="00:21:57.520" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Definitely documentation needs improvements.""" start="00:21:58.120" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Other email provider expertise will be welcome.""" start="00:22:00.920" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""What's ready is, GitHub repo with issues.""" start="00:22:04.240" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""You can start with that could be great if you can""" start="00:22:07.360" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""tell me some issues with that.""" start="00:22:10.240" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Some kind of development guide.""" start="00:22:11.880" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""I am not a programmer.""" start="00:22:13.880" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""I vibe-coded most of it.""" start="00:22:15.480" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""So a development guide, a true blood developer,""" start="00:22:18.080" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""if they can come and tell me,""" start="00:22:20.920" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""here is what you should be doing,""" start="00:22:22.480" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""I'm more than happy to listen to that.""" start="00:22:24.000" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""And probably a test suite.""" start="00:22:26.240" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""I do that manually.""" start="00:22:27.960" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""All of this, some kind of help with that""" start="00:22:28.960" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""will also work.""" start="00:22:31.240" video="mainVideo-gmail" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""The big picture""" start="00:22:32.940" video="mainVideo-gmail" id="subtitle"]]</div>[[!template text="""The big picture is org-mode and Gmail""" start="00:22:32.940" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""can be friends.""" start="00:22:36.560" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""They can bond over a cup of coffee.""" start="00:22:37.680" video="mainVideo-gmail" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Let's connect""" start="00:22:41.120" video="mainVideo-gmail" id="subtitle"]]</div>[[!template text="""Let's connect.""" start="00:22:41.120" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Here are my details and I am all game to listen to""" start="00:22:41.960" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""your question and answers.""" start="00:22:47.660" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""I'm happy to give you any answer or responses that""" start="00:22:48.680" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""I find.""" start="00:22:51.280" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Please do connect with me on LinkedIn. I have my""" start="00:22:52.000" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""website here, and please do fork or install""" start="00:22:54.440" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""org-gmail and let me know what you think.""" start="00:22:58.360" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Let's talk about taming email.""" start="00:23:00.520" video="mainVideo-gmail" id="subtitle"]]
+[[!template text="""Thank you very much.""" start="00:23:02.760" video="mainVideo-gmail" id="subtitle"]]
+
+</div>Questions or comments? Please e-mail [bala@balaramadurai.net](mailto:bala@balaramadurai.net?subject=Comment%20for%20EmacsConf%202023%20gmail%3A%20org-gmail%3A%20A%20deep%20integration%20of%20Gmail%20into%20your%20Org%20Mode)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2025/info/gmail-before.md b/2025/info/gmail-before.md
new file mode 100644
index 00000000..556e898b
--- /dev/null
+++ b/2025/info/gmail-before.md
@@ -0,0 +1,46 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+
+The following image shows where the talk is in the schedule for Sat 2025-12-06. Solid lines show talks with Q&A via BigBlueButton. Dashed lines show talks with Q&A via IRC or Etherpad.<div class="schedule-in-context schedule-svg-container" data-slug="gmail">
+<svg width="700" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Schedule for Saturday</title> <rect width="700" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="/2025/talks/sat-open" title="Saturday opening remarks" data-slug="sat-open"> <title> 9:00- 9:10 Saturday opening remarks</title> <rect x="0" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(11,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="/2025/talks/org-babel" title="Making Org-Babel reactive" data-slug="org-babel"> <title> 9:10- 9:20 Making Org-Babel reactive</title> <rect x="13" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(24,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> org-babel</text></g></a> <a href="/2025/talks/reference" title="Emacs as a fully-fledged reference manager" data-slug="reference"> <title> 9:30- 9:55 Emacs as a fully-fledged reference manager</title> <rect x="41" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(73,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> reference</text></g></a> <a href="/2025/talks/gmail" title="org-gmail: A deep integration of Gmail into your Org Mode" data-slug="gmail"> <title> 10:15-10:40 org-gmail: A deep integration of Gmail into your Org Mode</title> <rect stroke-width="3" x="102" y="15" opacity="0.8" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(134,73)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gmail</text></g></a> <a href="/2025/talks/gnus" title="Reading and writing emails in GNU Emacs with Gnus" data-slug="gnus"> <title> 10:50-11:15 Reading and writing emails in GNU Emacs with Gnus</title> <rect x="150" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(182,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gnus</text></g></a> <a href="/2025/talks/latex" title="LaTeX export in org-mode: the overhaul" data-slug="latex"> <title> 11:25-11:45 LaTeX export in org-mode: the overhaul</title> <rect x="199" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(224,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> latex</text></g></a> <a href="/2025/talks/calc" title="Basic Calc functionality for engineering or electronics" data-slug="calc"> <title> 1:00- 1:25 Basic Calc functionality for engineering or electronics</title> <rect x="329" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(361,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> calc</text></g></a> <a href="/2025/talks/blee-lcnt" title="Blee-LCNT: An Emacs-centered content production and self-publication framework" data-slug="blee-lcnt"> <title> 1:35- 2:15 Blee-LCNT: An Emacs-centered content production and self-publication framework</title> <rect x="377" y="15" opacity="0.5" width="54" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(429,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> blee-lcnt</text></g></a> <a href="/2025/talks/greader" title="GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence" data-slug="greader"> <title> 2:35- 2:40 GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence</title> <rect x="459" y="15" opacity="0.5" width="6" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(463,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> greader</text></g></a> <a href="/2025/talks/open-mic" title="Open session" data-slug="open-mic"> <title> 2:50- 3:40 Open session</title> <rect x="480" y="15" opacity="0.5" width="68" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(546,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> open-mic</text></g></a> <a href="/2025/talks/sat-close" title="Saturday closing remarks / open session" data-slug="sat-close"> <title> 4:00- 4:10 Saturday closing remarks / open session</title> <rect x="576" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(587,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="/2025/talks/schemacs" title="One year progress update Schemacs (formerly Gypsum)" data-slug="schemacs"> <title> 9:30- 9:55 One year progress update Schemacs (formerly Gypsum)</title> <rect x="41" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(73,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> schemacs</text></g></a> <a href="/2025/talks/juicemacs" title="Juicemacs: exploring speculative JIT compilation for ELisp in Java" data-slug="juicemacs"> <title> 10:15-10:35 Juicemacs: exploring speculative JIT compilation for ELisp in Java</title> <rect x="102" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(127,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> juicemacs</text></g></a> <a href="/2025/talks/swanky" title="Swanky Python: Interactive development for Python" data-slug="swanky"> <title> 10:45-11:10 Swanky Python: Interactive development for Python</title> <rect x="144" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(176,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> swanky</text></g></a> <a href="/2025/talks/python" title="Interactive Python programming in Emacs" data-slug="python"> <title> 11:20-11:40 Interactive Python programming in Emacs</title> <rect x="192" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(217,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <a href="/2025/talks/llm" title="Emacs, editors, and LLM driven workflows" data-slug="llm"> <title> 1:00- 1:25 Emacs, editors, and LLM driven workflows</title> <rect x="329" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(361,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> llm</text></g></a> <a href="/2025/talks/private-ai" title="Emacs and private AI: a great match" data-slug="private-ai"> <title> 1:45- 2:05 Emacs and private AI: a great match</title> <rect x="391" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(416,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> private-ai</text></g></a> <a href="/2025/talks/commonlisp" title="Common Lisp images communicating like-a-human through shared Emacs slime and eev" data-slug="commonlisp"> <title> 2:25- 2:55 Common Lisp images communicating like-a-human through shared Emacs slime and eev</title> <rect x="446" y="75" opacity="0.5" width="41" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(485,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> commonlisp</text></g></a> <a href="/2025/talks/graphics" title="Modern Emacs/Elisp hardware/software accelerated graphics" data-slug="graphics"> <title> 3:05- 3:30 Modern Emacs/Elisp hardware/software accelerated graphics</title> <rect x="500" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(532,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> graphics</text></g></a> <g transform="translate(0,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(82,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(164,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(247,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(329,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(411,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(494,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(576,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(658,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 5 PM</text></g></svg>
+</div>
+
+[[!toc ]]
+Format: 24-min talk ; Q&A: BigBlueButton conference room <https://media.emacsconf.org/2025/current/bbb-gmail.html> Etherpad: <https://pad.emacsconf.org/2025-gmail>
+Etherpad: <https://pad.emacsconf.org/2025-gmail>
+Discuss on IRC: [#emacsconf-gen](https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen)
+Status: Q&A finished, IRC and pad will be archived on this page
+
+
+
+
+
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-gmail"><source src="https://media.emacsconf.org/2025/emacsconf-2025-gmail--orggmail-a-deep-integration-of-gmail-into-your-org-mode--bala-ramadurai--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2025/captions/emacsconf-2025-gmail--orggmail-a-deep-integration-of-gmail-into-your-org-mode--bala-ramadurai--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2025/captions/emacsconf-2025-gmail--orggmail-a-deep-integration-of-gmail-into-your-org-mode--bala-ramadurai--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="mainVideo-gmail" data="""
+00:00.000 Before we begin
+00:19.840 The 4-year overnight success
+01:02.800 The real title
+01:15.600 Why not gnus/mu4e/notmuch?
+01:34.280 The honest answer
+02:17.920 The org-gmail philosophy
+02:49.440 Architecture (the boring but important slide)
+03:21.200 Demo 1: From gmail to org
+04:37.480 Settings
+05:43.040 Downloading
+07:56.880 Replying
+09:33.680 Label management
+10:57.160 Refiling
+12:04.120 Archiving
+13:37.140 Action commands
+15:53.680 Org Agenda
+16:28.280 Trash
+17:07.440 Real workflow: GTD
+17:40.560 Real Workflow: P.A.R.A.
+18:35.960 What this is NOT
+20:07.680 Technical decisions
+20:54.760 Roadmap
+21:41.440 Contributing
+22:32.940 The big picture
+22:41.120 Let's connect
+
+"""]]<div></div>Duration: 23:04 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2025-gmail">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2025/current/bbb-gmail.html">Open public Q&A</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-gmail--orggmail-a-deep-integration-of-gmail-into-your-org-mode--bala-ramadurai--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-gmail--orggmail-a-deep-integration-of-gmail-into-your-org-mode--bala-ramadurai--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-gmail--orggmail-a-deep-integration-of-gmail-into-your-org-mode--bala-ramadurai--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-gmail--orggmail-a-deep-integration-of-gmail-into-your-org-mode--bala-ramadurai--main.opus">Download --main.opus (20MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-gmail--orggmail-a-deep-integration-of-gmail-into-your-org-mode--bala-ramadurai--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-gmail--orggmail-a-deep-integration-of-gmail-into-your-org-mode--bala-ramadurai--main.webm">Download --main.webm (57MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-gmail--orggmail-a-deep-integration-of-gmail-into-your-org-mode--bala-ramadurai--script.txt">Download --script.txt</a></li><li><a href="https://youtu.be/8P93UBYrUB8">View on Youtube</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2025/info/gmail-nav.md b/2025/info/gmail-nav.md
new file mode 100644
index 00000000..7120d450
--- /dev/null
+++ b/2025/info/gmail-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by time: <a href="/2025/talks/reference">Emacs as a fully-fledged reference manager</a>
+Next by time: <a href="/2025/talks/juicemacs">Juicemacs: exploring speculative JIT compilation for ELisp in Java</a>
+Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2025/watch/gen">Watch</a></strong>
+</div>
diff --git a/2025/info/gnus-after.md b/2025/info/gnus-after.md
new file mode 100644
index 00000000..bb76010d
--- /dev/null
+++ b/2025/info/gnus-after.md
@@ -0,0 +1,463 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<div class="transcript transcript-mainVideo"><a name="gnus-mainVideo-transcript"></a><h1>Transcript</h1>
+
+
+<div class="transcript-heading">[[!template new="1" text="""Introduction""" start="00:00:02.620" video="mainVideo-gnus" id="subtitle"]]</div>[[!template text="""Hello, my name is Amin Bandali,""" start="00:00:02.620" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""and today I'd like to talk about""" start="00:00:04.800" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""reading and writing emails in GNU Emacs""" start="00:00:06.360" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""using Gnus specifically.""" start="00:00:08.800" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""Gnus has had this sort of reputation""" start="00:00:14.320" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""of being difficult to approach and configure.""" start="00:00:16.880" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""That's understandable""" start="00:00:20.600" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""because it has many, many options""" start="00:00:23.360" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""and major and minor modes""" start="00:00:26.320" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""that interact in different ways with each other.""" start="00:00:27.680" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""And it also doesn't help that Gnus started originally""" start="00:00:30.680" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""as a newsreader""" start="00:00:35.320" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""rather than a mail client.""" start="00:00:36.360" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""So a lot of the terminology that it uses""" start="00:00:38.760" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""is also rooted in that,""" start="00:00:40.880" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""in reading and writing news.""" start="00:00:42.520" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""But nevertheless, with this video and talk,""" start="00:00:45.560" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""I hope to provide a sort""" start="00:00:48.120" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""of very quick introduction""" start="00:00:52.160" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""of starting to use Gnus""" start="00:00:55.760" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""to read and write email and send it.""" start="00:00:57.540" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""We will use Gnus' IMAP support,""" start="00:01:00.920" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""mainly because a lot of people""" start="00:01:02.680" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""these days have email accounts""" start="00:01:06.120" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""with mail service providers""" start="00:01:08.680" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""that support IMAP,""" start="00:01:10.760" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""which is an open standard.""" start="00:01:12.040" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""So it's widely available and supported""" start="00:01:14.320" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""across many different providers""" start="00:01:17.480" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""as well as mail clients or mail user agents as well.""" start="00:01:19.720" video="mainVideo-gnus" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Demo""" start="00:01:25.240" video="mainVideo-gnus" id="subtitle"]]</div>[[!template text="""Okay, so let's just jump straight right in.""" start="00:01:25.240" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""I will enter this demo directory that I created""" start="00:01:30.560" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""for the purposes of this demonstration""" start="00:01:34.280" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""and change my home directory to this one""" start="00:01:36.920" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""so that we can safely experiment with Gnus here.""" start="00:01:41.000" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""For this presentation, I've written up""" start="00:01:49.840" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""a quick initialization file or init file""" start="00:01:53.980" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""that I will share afterwards as well""" start="00:01:56.840" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""to get us going with Gnus.""" start="00:01:59.720" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""There's not much to it at the moment.""" start="00:02:01.640" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""Just set up the package archives and""" start="00:02:04.520" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""install the keycast package""" start="00:02:07.400" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""for showing the key presses in the mode line.""" start="00:02:09.480" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""Yeah, that's about it.""" start="00:02:14.080" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""And I'll also define""" start="00:02:15.360" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""a little like inline function +emacs.d""" start="00:02:16.240" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""that allows me to conveniently write""" start="00:02:20.280" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""and have it expanded""" start="00:02:24.080" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""or refer to files and directories, rather,""" start="00:02:26.640" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""paths that we could expand,""" start="00:02:29.301" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""inside my Emacs configuration directory.""" start="00:02:30.901" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""I also have this eval-last-sexp""" start="00:02:32.834" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""bound to a global key,""" start="00:02:37.501" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""so that I will be able to easily""" start="00:02:41.120" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""use it for this talk.""" start="00:02:43.280" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""Okay, let's jump right in.""" start="00:02:47.520" video="mainVideo-gnus" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Don't panic""" start="00:02:49.960" video="mainVideo-gnus" id="subtitle"]]</div>[[!template text="""First things first, don't panic.""" start="00:02:49.960" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""And that's actually also the name""" start="00:02:52.240" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""of the very first node""" start="00:02:55.268" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""in the Gnus manual when you open it.""" start="00:02:58.360" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""And it's actually nice.""" start="00:03:01.560" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""I definitely, definitely recommend""" start="00:03:02.840" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""that you look through""" start="00:03:04.480" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""at least the very first couple of chapters of this,""" start="00:03:07.080" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""skim through it, and later on refer to it""" start="00:03:10.200" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""whenever you find something confusing""" start="00:03:14.200" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""or don't understand it.""" start="00:03:16.134" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""But yeah, we'll start""" start="00:03:19.500" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""with these two paragraphs here.""" start="00:03:21.360" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""So again, a Gnus installation""" start="00:03:22.400" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""is basically just a list of one or more servers""" start="00:03:23.640" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""and the subscribed groups from those servers""" start="00:03:28.120" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""and articles in those groups.""" start="00:03:30.120" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""You can already kind of see""" start="00:03:32.320" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""where that influence of a newsreader comes in.""" start="00:03:34.280" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""But yeah, basically what it's saying is that,""" start="00:03:39.480" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""you know, we have one or more servers.""" start="00:03:41.840" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""We can think of them as email servers.""" start="00:03:43.840" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""Groups can be like, we can think""" start="00:03:47.080" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""of them as folders or directories.""" start="00:03:49.360" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""And yeah, articles,""" start="00:03:52.960" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""those would be like our email messages.""" start="00:03:55.240" video="mainVideo-gnus" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Configuring servers""" start="00:03:58.560" video="mainVideo-gnus" id="subtitle"]]</div>[[!template text="""With Gnus, we can add""" start="00:03:58.560" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""and configure servers mainly using two variables.""" start="00:03:59.680" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""One of them is the gnus-select-method""" start="00:04:06.120" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""and the other is gnus-secondary-select-methods.""" start="00:04:07.920" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""The first one predates the second one""" start="00:04:11.480" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""and I generally don't recommend using it, because""" start="00:04:15.760" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""first of all, it can only point""" start="00:04:17.560" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""to one server, and that server,""" start="00:04:22.560" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""because it's the primary,""" start="00:04:26.360" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""then Gnus won't add a prefix to its groups,""" start="00:04:27.880" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""so later on, as you get into""" start="00:04:32.560" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""more advanced features of Gnus""" start="00:04:34.840" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""and, for example, want to write rules""" start="00:04:36.680" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""to modify your message composition""" start="00:04:38.520" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""in a way for certain groups, or file mail,""" start="00:04:42.960" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""automatically classify mail,""" start="00:04:47.040" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""this distinction can become""" start="00:04:48.800" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""confusing and annoying.""" start="00:04:51.880" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""My recommendation is to always and only use""" start="00:04:53.960" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""the gnus-secondary-select-methods.""" start="00:04:57.200" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""Yeah, so let's do that here.""" start="00:05:01.800" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""I'm gonna uncomment this portion.""" start="00:05:07.320" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""So here, I set the primary select method to nil,""" start="00:05:10.300" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""and the second one, I define an nnimap server""" start="00:05:16.420" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""of the nnimap backend.""" start="00:05:24.160" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""I give it the name ec25gnus.""" start="00:05:30.040" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""What I want it to do is to""" start="00:05:32.440" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""connect to my mail server,""" start="00:05:35.880" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""which is at this address,""" start="00:05:37.800" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""and fetch emails from it over TLS with this username.""" start="00:05:41.080" video="mainVideo-gnus" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text=""".authinfo""" start="00:05:46.240" video="mainVideo-gnus" id="subtitle"]]</div>[[!template text="""And then the passwords or the credentials,""" start="00:05:46.240" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""you can put them in the .authinfo file.""" start="00:05:50.720" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""Normally, you would want to, for example,""" start="00:05:56.840" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""encrypt this file with your GPG key.""" start="00:05:58.800" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""But for this demonstration, I haven't.""" start="00:06:03.720" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""So yeah, the format is the keyword &quot;machine&quot;""" start="00:06:06.720" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""followed by the name of your Gnus server or account,""" start="00:06:10.480" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""followed by the word &quot;login&quot;,""" start="00:06:15.240" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""then your login username,""" start="00:06:17.200" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""and then the password, which here it's not shown.""" start="00:06:19.200" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""Yeah.""" start="00:06:23.960" video="mainVideo-gnus" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Configuration""" start="00:06:26.600" video="mainVideo-gnus" id="subtitle"]]</div>[[!template text="""But before we actually set this,""" start="00:06:26.600" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""I'll just show you that if we like start Gnus""" start="00:06:28.680" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""with M-x gnus,""" start="00:06:31.480" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""initially, it will just show""" start="00:06:33.720" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""an error like this.""" start="00:06:36.440" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""Even if we continue, it's empty.""" start="00:06:37.760" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""There's not much because Gnus doesn't know""" start="00:06:40.400" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""where to fetch these emails from.""" start="00:06:43.400" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""And that's what we will configure.""" start="00:06:47.040" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""Excuse me.""" start="00:06:52.160" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""Yeah, so just for convenience,""" start="00:06:55.860" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""we can bind Gnus to,""" start="00:06:57.560" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""for example, C-c g, as I've done here.""" start="00:06:59.080" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""You will want to set your name""" start="00:07:00.680" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""and email address, like so.""" start="00:07:04.120" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""Here we tell Emacs""" start="00:07:05.800" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""that we are going to be using Gnus for reading email,""" start="00:07:09.240" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""because Emacs comes""" start="00:07:11.440" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""with other email clients as well,""" start="00:07:12.840" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""such as Rmail, and in fact, defaults to Rmail,""" start="00:07:14.760" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""so this way, we tell it to use Gnus.""" start="00:07:18.560" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""By default, Gnus puts its newsrc file and other files,""" start="00:07:24.840" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""I believe it still scatters them""" start="00:07:31.560" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""in a few different directories""" start="00:07:34.320" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""in your home directory,""" start="00:07:35.440" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""so it's a little bit messy.""" start="00:07:36.280" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""So what I prefer to do is to just put it""" start="00:07:37.400" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""all under the Gnus directory""" start="00:07:40.040" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""inside of my Emacs configuration, as I do here.""" start="00:07:42.440" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""Yeah, and then here we just tell Gnus""" start="00:07:47.440" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""to, like, don't try to bother""" start="00:07:50.640" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""with a generic newsrc file""" start="00:07:53.320" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""that would be shared""" start="00:07:55.760" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""with other news readers.""" start="00:07:57.120" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""Just want to use it for email.""" start="00:07:58.400" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""And yeah, so we just tell Gnus""" start="00:07:59.680" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""to keep all of its data""" start="00:08:01.960" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""inside a dedicated .newsrc.eld""" start="00:08:03.040" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""(for Emacs Lisp data) file instead.""" start="00:08:08.080" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""And we can also have Gnus not prompt us""" start="00:08:12.160" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""when we want to exit with q.""" start="00:08:15.200" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""Anyway, so let's go ahead and evaluate this.""" start="00:08:19.680" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""So this has been set,""" start="00:08:23.400" video="mainVideo-gnus" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Starting Gnus""" start="00:08:25.720" video="mainVideo-gnus" id="subtitle"]]</div>[[!template text="""so if we type M-x gnus again, or hit C-c g,""" start="00:08:25.720" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""now we're faced with an empty buffer,""" start="00:08:32.268" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""and it says no news is good news,""" start="00:08:35.700" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""and that's actually""" start="00:08:37.400" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""one of the characteristics of Gnus""" start="00:08:38.400" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""is that by default it tries""" start="00:08:40.720" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""to like sort of declutter""" start="00:08:44.780" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""and show us a little less possible""" start="00:08:47.620" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""in the group buffer,""" start="00:08:49.200" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""meaning that if you don't have""" start="00:08:50.820" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""any groups with unread or marked""" start="00:08:53.260" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""or, like, starred messages, it will not show them.""" start="00:08:55.640" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""To actually see all of our groups or folders,""" start="00:09:00.120" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""we hit shift L or capital L,""" start="00:09:03.960" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""and we see that we have an inbox here,""" start="00:09:08.360" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""as expected. So we enter the inbox,""" start="00:09:12.420" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""and we see that there is an article there""" start="00:09:14.880" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""and it's already been marked as read.""" start="00:09:17.460" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""But if we mark it as unread""" start="00:09:20.780" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""and exit and enter Gnus again,""" start="00:09:22.680" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""this is what we would see.""" start="00:09:25.960" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""We would see that our group""" start="00:09:27.280" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""and then we enter it, we see our mail here.""" start="00:09:28.840" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""Yeah, and this is our very first email""" start="00:09:34.100" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""that we read in GNU Emacs here, inside Gnus.""" start="00:09:36.160" video="mainVideo-gnus" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Always showing groups""" start="00:09:40.080" video="mainVideo-gnus" id="subtitle"]]</div>[[!template text="""It might be useful to have Gnus always show""" start="00:09:40.080" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""certain groups or folders""" start="00:09:43.840" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""even if they don't have""" start="00:09:46.840" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""anything unread or marked inside of them.""" start="00:09:48.320" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""The way we can do that is""" start="00:09:52.340" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""by setting this variable""" start="00:09:56.040" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""gnus-permanently-visible-groups""" start="00:09:57.600" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""to a regular expression""" start="00:10:01.340" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""that describes the name of these groups.""" start="00:10:03.040" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""So if we launch Gnus again,""" start="00:10:09.120" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""this time, we see that that group is visible,""" start="00:10:11.540" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""even though there's no unread messages in it.""" start="00:10:14.760" video="mainVideo-gnus" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Reading messages""" start="00:10:19.900" video="mainVideo-gnus" id="subtitle"]]</div>[[!template text="""When we enter a group or folder,""" start="00:10:19.900" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""we will see a list of all of our messages.""" start="00:10:24.400" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""Here, we only have one.""" start="00:10:26.720" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""We can press M-u or Alt-u""" start="00:10:27.800" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""to mark something as unread.""" start="00:10:31.940" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""You can press d to mark it as read.""" start="00:10:34.680" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""If you press just u,""" start="00:10:38.540" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""it'll tick the article,""" start="00:10:40.080" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""which is kind of the equivalent""" start="00:10:41.960" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""of marking the message or email""" start="00:10:44.040" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""as starred in other email clients""" start="00:10:47.000" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""such as Thunderbird.""" start="00:10:50.540" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""We see that when there are groups""" start="00:10:55.720" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""that have starred or ticked messages""" start="00:11:00.640" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""inside of them,""" start="00:11:03.960" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""Gnus will mark them""" start="00:11:04.680" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""with this little star here, or asterisk.""" start="00:11:05.600" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""This talk is just barely""" start="00:11:16.020" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""scratching the surface.""" start="00:11:17.640" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""Let's see how far...""" start="00:11:19.040" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""How am I doing with the time?""" start="00:11:21.081" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""Okay, 11 minutes already.""" start="00:11:22.760" video="mainVideo-gnus" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Debugging IMAP""" start="00:11:30.120" video="mainVideo-gnus" id="subtitle"]]</div>[[!template text="""Just a couple of helpful things here,""" start="00:11:30.120" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""like this nnimap-record-commands variable.""" start="00:11:32.080" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""It's useful when you want to debug""" start="00:11:36.920" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""your IMAP setup with Gnus.""" start="00:11:38.520" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""If you set it to anything non-nil,""" start="00:11:40.120" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""it will log the commands that it runs""" start="00:11:42.860" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""to a special `\*imap log\*` buffer.""" start="00:11:46.700" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""And here I just set it""" start="00:11:49.540" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""to this init-file-debug variable,""" start="00:11:50.720" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""which is set to non-nil""" start="00:11:52.680" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""whenever you launch Emacs""" start="00:11:55.160" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""with the --debug-init switch,""" start="00:11:56.440" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""so that's pretty helpful.""" start="00:11:59.280" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""You want to also set your sent folder,""" start="00:12:02.240" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""basically, where Gnus will save""" start="00:12:05.120" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""a copy of the message that you just sent.""" start="00:12:07.480" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""Normally, I think the convention these days is,""" start="00:12:09.440" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""a lot of you know servers and clients""" start="00:12:12.800" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""use a dedicated sent folder,""" start="00:12:16.600" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""but with Gnus, I just prefer to use INBOX itself.""" start="00:12:18.800" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""Mainly because then I will have""" start="00:12:24.340" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""threading working for free,""" start="00:12:27.120" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""so I can read the entire thread""" start="00:12:28.760" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""of an email chain there in one place.""" start="00:12:31.940" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""Of course, we don't have to keep""" start="00:12:34.300" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""the messages in there forever.""" start="00:12:35.320" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""And in fact, Gnus has facilities,""" start="00:12:38.900" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""both manual and automated,""" start="00:12:42.080" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""for expiring emails into""" start="00:12:43.480" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""different locations or different folders.""" start="00:12:46.000" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""Yeah. So let's move on here.""" start="00:12:52.680" video="mainVideo-gnus" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Topics""" start="00:12:55.160" video="mainVideo-gnus" id="subtitle"]]</div>[[!template text="""Topics are another nice feature of Gnus.""" start="00:12:55.160" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""So this is useful""" start="00:13:02.040" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""for creating some topics""" start="00:13:03.280" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""and then classifying or grouping""" start="00:13:05.360" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""your directories there.""" start="00:13:08.460" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""So we will see the use""" start="00:13:10.600" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""of this in a moment,""" start="00:13:11.800" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""where, let's say, I want to add""" start="00:13:13.640" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""a second account to Gnus.""" start="00:13:17.020" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""This one I'm going to call ec25work.""" start="00:13:20.000" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""Let's pretend that""" start="00:13:23.560" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""this is my work email.""" start="00:13:24.680" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""So if we open Gnus now,""" start="00:13:29.860" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""we see that our work INBOX""" start="00:13:32.480" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""also shows up here.""" start="00:13:37.000" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""And because we enabled topic mode,""" start="00:13:37.960" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""we see that we have""" start="00:13:41.300" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""these sort of buttons""" start="00:13:42.360" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""like Gnus and misc here.""" start="00:13:43.440" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""And we can, I believe,""" start="00:13:44.840" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""create a topic with capital T n.""" start="00:13:46.680" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""We can call it personal, this one.""" start="00:13:49.800" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""Let's create another one, work.""" start="00:13:52.880" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""And then what we can do is go""" start="00:13:56.940" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""over the directory that we want,""" start="00:13:59.580" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""for example, this one,""" start="00:14:02.800" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""hit capital T m to move it""" start="00:14:04.760" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""to the personal topic,""" start="00:14:08.220" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""and this work one,""" start="00:14:11.900" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""move it to the work topic.""" start="00:14:13.080" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""So we can nicely classify""" start="00:14:15.200" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""and group our groups folders here,""" start="00:14:17.440" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""which is especially useful""" start="00:14:23.120" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""when you have hundreds of them.""" start="00:14:24.720" video="mainVideo-gnus" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Customizing message display""" start="00:14:25.560" video="mainVideo-gnus" id="subtitle"]]</div>[[!template text="""Anyhow, we can customize""" start="00:14:25.560" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""different aspects of message display.""" start="00:14:29.760" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""Like for example,""" start="00:14:35.040" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""we can this way customize""" start="00:14:35.840" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""and change the order of""" start="00:14:38.200" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""which headers we want to see and where.""" start="00:14:39.200" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""So if I launch Gnus""" start="00:14:41.600" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""and go back to this email here,""" start="00:14:45.200" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""these are the headers that we see at the top.""" start="00:14:48.460" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""Excuse me.""" start="00:14:52.140" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""And with Gnus we can always""" start="00:14:52.640" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""We can have it show all the headers""" start="00:14:55.160" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""by pressing t to toggle the headers.""" start="00:14:57.800" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""Here we can see all the nitty-gritty""" start="00:15:02.000" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""and all of the headers in the message""" start="00:15:04.580" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""and we can toggle it back with t again.""" start="00:15:06.360" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""We can modify and customize the sorting""" start="00:15:12.220" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""with dedicated sorting functions.""" start="00:15:16.480" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""It comes with a number of them""" start="00:15:20.020" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""out of the box""" start="00:15:21.000" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""but we can define them as well.""" start="00:15:21.600" video="mainVideo-gnus" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Sending emails""" start="00:15:24.320" video="mainVideo-gnus" id="subtitle"]]</div>[[!template text="""Now to send emails. Let's see.""" start="00:15:24.320" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""We will be using message,""" start="00:15:29.760" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""and that's what Gnus itself uses.""" start="00:15:31.000" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""So I will set things up here.""" start="00:15:34.940" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""Let's see.""" start="00:15:38.580" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""Okay, so first of all,""" start="00:15:42.640" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""we want to have Gnus mark""" start="00:15:44.520" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""the messages that we write to others""" start="00:15:46.440" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""as read automatically,""" start="00:15:48.520" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""so this option does that.""" start="00:15:49.760" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""And then we define posting styles this way""" start="00:15:51.360" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""using the prefix, the name""" start="00:15:58.040" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""of the IMAP server.""" start="00:16:01.620" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""And this is how we can tell it to use""" start="00:16:04.360" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""what email address for the From [header]""" start="00:16:06.520" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""and which SMTP server to send it with.""" start="00:16:09.200" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""Yeah, and then gcc is where Gnus will save""" start="00:16:14.600" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""the copy of the messages that we write.""" start="00:16:17.880" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""So if we go ahead and launch Gnus again.""" start="00:16:20.200" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""We can go into our personal email here,""" start="00:16:24.140" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""hit m to compose a new message.""" start="00:16:26.280" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""We can prepare an email to,""" start="00:16:28.920" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""let's say, our work address.""" start="00:16:33.560" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""Hello from EmacsConf 2025 Gnus talk.""" start="00:16:35.120" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""Hello, this is just a test. :)""" start="00:16:42.420" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""Yeah, and we hit send.""" start="00:16:47.640" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""The sending will be done""" start="00:16:55.740" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""using Emacs's built-in SMTP libraries.""" start="00:16:56.920" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""Sometimes it can take a moment.""" start="00:17:03.480" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""Okay, that's it. It's done.""" start="00:17:05.120" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""So if we go back out""" start="00:17:07.600" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""and if we hit g to get new news,""" start="00:17:09.260" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""we should be able to see our new email there""" start="00:17:11.560" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""in the other account that we just sent it to.""" start="00:17:15.680" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""So we can come here, open it,""" start="00:17:17.640" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""and there we go.""" start="00:17:22.361" video="mainVideo-gnus" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Plans""" start="00:17:26.660" video="mainVideo-gnus" id="subtitle"]]</div>[[!template text="""There is a lot to configure in Gnus,""" start="00:17:26.660" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""and we're just barely scratching the surface,""" start="00:17:29.240" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""and unfortunately I don't have the time""" start="00:17:31.440" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""to explain all of these""" start="00:17:34.080" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""but I do plan on doing""" start="00:17:35.000" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""a much longer running series,""" start="00:17:36.520" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""whether it's text or videos,""" start="00:17:38.840" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""showing how to configure""" start="00:17:41.500" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""and use a lot of these different aspects of Gnus.""" start="00:17:42.880" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""But yeah, here, near the end, just a couple of...""" start="00:17:45.320" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""quick things. I find it's nice to have message""" start="00:17:49.520" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""prompt us for [confirmation]""" start="00:17:54.920" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""that we do want to send a message.""" start="00:17:56.520" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""Actually, when it does that, I take""" start="00:17:59.200" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""another look over my email""" start="00:18:01.360" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""to make sure I don't have any typos.""" start="00:18:02.600" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""It's generally a good idea to wrap your messages""" start="00:18:07.060" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""around 70 or 72 characters.""" start="00:18:09.520" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""We do that here.""" start="00:18:14.120" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""We can tell Gnus to forward messages""" start="00:18:16.620" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""as a proper MIME part,""" start="00:18:19.160" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""instead of some half-broken way.""" start="00:18:22.600" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""This customization, the sendmail function,""" start="00:18:27.060" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""is how we tell Gnus with message""" start="00:18:30.120" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""to use the SMTP library to sending the email,""" start="00:18:34.240" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""and these two variables are useful for""" start="00:18:38.240" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""omitting our own email address""" start="00:18:42.480" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""when we want to send someone,""" start="00:18:45.960" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""like when we hit r, to reply to someone.""" start="00:18:47.440" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""if we configure these variables,""" start="00:18:50.180" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""then Gnus won't add""" start="00:18:51.960" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""our own address to the To or Cc,""" start="00:18:52.960" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""which is pretty useful.""" start="00:18:56.060" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""I also find it helpful""" start="00:18:58.480" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""to unbind C-c C-s.""" start="00:18:59.920" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""That's another key""" start="00:19:03.360" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""for sending the message [in addition to C-c C-c].""" start="00:19:04.975" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""And because C-c C-d,""" start="00:19:06.320" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""which is very close to it on the QWERTY layout,""" start="00:19:09.720" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""is useful for saving a draft""" start="00:19:13.360" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""and then coming back to it,""" start="00:19:15.720" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""I don't want to accidentally hit C-c C-s,""" start="00:19:16.840" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""and send the message prematurely.""" start="00:19:20.080" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""So I unbind it.""" start="00:19:22.040" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""Yeah, anyway, that's about it.""" start="00:19:25.980" video="mainVideo-gnus" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Wrapping up""" start="00:19:27.960" video="mainVideo-gnus" id="subtitle"]]</div>[[!template text="""That's a kind of very quick tour""" start="00:19:27.960" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""and introduction of setting up Gnus.""" start="00:19:31.040" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""Here, we just configured a remote IMAP server,""" start="00:19:37.120" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""but we can also, of course,""" start="00:19:40.720" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""set up a local IMAP server such as Dovecot""" start="00:19:43.520" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""and point Gnus to there,""" start="00:19:46.360" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""and use programs like OfflineIMAP, I believe,""" start="00:19:48.400" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""or the mbsync program from isync package""" start="00:19:52.800" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""or isync project to synchronize our messages""" start="00:19:57.480" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""to local mail directories""" start="00:20:02.940" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""and then point Gnus to it.""" start="00:20:04.480" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""The reason we might want to use that""" start="00:20:06.280" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""is to always have a copy of our messages at hand""" start="00:20:08.360" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""so we can use offline.""" start="00:20:11.720" video="mainVideo-gnus" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""nnimap""" start="00:20:12.760" video="mainVideo-gnus" id="subtitle"]]</div>[[!template text="""And why use nnimap specifically?""" start="00:20:12.760" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""As of now, the Maildir backend included with Gnus""" start="00:20:17.440" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""is very inefficient,""" start="00:20:27.400" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""especially when dealing with""" start="00:20:29.680" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""tens or hundreds of thousands of messages""" start="00:20:31.400" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""like some of us are.""" start="00:20:33.840" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""It just takes an eternity to try""" start="00:20:36.660" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""and index them and get going.""" start="00:20:38.760" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""In that case, what I recommend doing""" start="00:20:43.260" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""is instead of interfacing directly with Maildir,""" start="00:20:44.640" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""for Gnus, just install and run""" start="00:20:47.800" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""Dovecot, a local IMAP server,""" start="00:20:52.360" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""and point Gnus to that.""" start="00:20:54.360" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""I plan on writing tutorials or doing videos""" start="00:20:59.820" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""about these other aspects""" start="00:21:02.960" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""of configuring Gnus after the conference.""" start="00:21:06.640" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""That's about it for me,""" start="00:21:10.520" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""so I hope you find this helpful.""" start="00:21:11.440" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""If you have any questions,""" start="00:21:14.120" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""please feel free to email me""" start="00:21:16.680" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""at bandali@gnu.org or @kelar.org.""" start="00:21:18.240" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""You can take a look at my personal website""" start="00:21:23.760" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""where I plan on posting""" start="00:21:25.880" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""other Emacs and Gnus materials.""" start="00:21:26.840" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""And yeah, thank you for watching""" start="00:21:31.060" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""and I hope you enjoy the rest of the conference.""" start="00:21:33.040" video="mainVideo-gnus" id="subtitle"]]
+[[!template text="""Take care.""" start="00:21:35.160" video="mainVideo-gnus" id="subtitle"]]
+
+</div>
+
+Captioner: sachac
+
+Questions or comments? Please e-mail [bandali@gnu.org](mailto:bandali@gnu.org?subject=Comment%20for%20EmacsConf%202023%20gnus%3A%20Reading%20and%20writing%20emails%20in%20GNU%20Emacs%20with%20Gnus)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2025/info/gnus-before.md b/2025/info/gnus-before.md
new file mode 100644
index 00000000..4fd7221f
--- /dev/null
+++ b/2025/info/gnus-before.md
@@ -0,0 +1,37 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+
+The following image shows where the talk is in the schedule for Sat 2025-12-06. Solid lines show talks with Q&A via BigBlueButton. Dashed lines show talks with Q&A via IRC or Etherpad.<div class="schedule-in-context schedule-svg-container" data-slug="gnus">
+<svg width="700" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Schedule for Saturday</title> <rect width="700" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="/2025/talks/sat-open" title="Saturday opening remarks" data-slug="sat-open"> <title> 9:00- 9:10 Saturday opening remarks</title> <rect x="0" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(11,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="/2025/talks/org-babel" title="Making Org-Babel reactive" data-slug="org-babel"> <title> 9:10- 9:20 Making Org-Babel reactive</title> <rect x="13" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(24,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> org-babel</text></g></a> <a href="/2025/talks/reference" title="Emacs as a fully-fledged reference manager" data-slug="reference"> <title> 9:30- 9:55 Emacs as a fully-fledged reference manager</title> <rect x="41" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(73,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> reference</text></g></a> <a href="/2025/talks/gmail" title="org-gmail: A deep integration of Gmail into your Org Mode" data-slug="gmail"> <title> 10:15-10:40 org-gmail: A deep integration of Gmail into your Org Mode</title> <rect x="102" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(134,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gmail</text></g></a> <a href="/2025/talks/gnus" title="Reading and writing emails in GNU Emacs with Gnus" data-slug="gnus"> <title> 10:50-11:15 Reading and writing emails in GNU Emacs with Gnus</title> <rect stroke-width="3" x="150" y="15" opacity="0.8" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(182,73)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gnus</text></g></a> <a href="/2025/talks/latex" title="LaTeX export in org-mode: the overhaul" data-slug="latex"> <title> 11:25-11:45 LaTeX export in org-mode: the overhaul</title> <rect x="199" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(224,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> latex</text></g></a> <a href="/2025/talks/calc" title="Basic Calc functionality for engineering or electronics" data-slug="calc"> <title> 1:00- 1:25 Basic Calc functionality for engineering or electronics</title> <rect x="329" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(361,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> calc</text></g></a> <a href="/2025/talks/blee-lcnt" title="Blee-LCNT: An Emacs-centered content production and self-publication framework" data-slug="blee-lcnt"> <title> 1:35- 2:15 Blee-LCNT: An Emacs-centered content production and self-publication framework</title> <rect x="377" y="15" opacity="0.5" width="54" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(429,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> blee-lcnt</text></g></a> <a href="/2025/talks/greader" title="GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence" data-slug="greader"> <title> 2:35- 2:40 GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence</title> <rect x="459" y="15" opacity="0.5" width="6" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(463,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> greader</text></g></a> <a href="/2025/talks/open-mic" title="Open session" data-slug="open-mic"> <title> 2:50- 3:40 Open session</title> <rect x="480" y="15" opacity="0.5" width="68" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(546,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> open-mic</text></g></a> <a href="/2025/talks/sat-close" title="Saturday closing remarks / open session" data-slug="sat-close"> <title> 4:00- 4:10 Saturday closing remarks / open session</title> <rect x="576" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(587,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="/2025/talks/schemacs" title="One year progress update Schemacs (formerly Gypsum)" data-slug="schemacs"> <title> 9:30- 9:55 One year progress update Schemacs (formerly Gypsum)</title> <rect x="41" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(73,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> schemacs</text></g></a> <a href="/2025/talks/juicemacs" title="Juicemacs: exploring speculative JIT compilation for ELisp in Java" data-slug="juicemacs"> <title> 10:15-10:35 Juicemacs: exploring speculative JIT compilation for ELisp in Java</title> <rect x="102" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(127,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> juicemacs</text></g></a> <a href="/2025/talks/swanky" title="Swanky Python: Interactive development for Python" data-slug="swanky"> <title> 10:45-11:10 Swanky Python: Interactive development for Python</title> <rect x="144" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(176,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> swanky</text></g></a> <a href="/2025/talks/python" title="Interactive Python programming in Emacs" data-slug="python"> <title> 11:20-11:40 Interactive Python programming in Emacs</title> <rect x="192" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(217,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <a href="/2025/talks/llm" title="Emacs, editors, and LLM driven workflows" data-slug="llm"> <title> 1:00- 1:25 Emacs, editors, and LLM driven workflows</title> <rect x="329" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(361,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> llm</text></g></a> <a href="/2025/talks/private-ai" title="Emacs and private AI: a great match" data-slug="private-ai"> <title> 1:45- 2:05 Emacs and private AI: a great match</title> <rect x="391" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(416,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> private-ai</text></g></a> <a href="/2025/talks/commonlisp" title="Common Lisp images communicating like-a-human through shared Emacs slime and eev" data-slug="commonlisp"> <title> 2:25- 2:55 Common Lisp images communicating like-a-human through shared Emacs slime and eev</title> <rect x="446" y="75" opacity="0.5" width="41" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(485,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> commonlisp</text></g></a> <a href="/2025/talks/graphics" title="Modern Emacs/Elisp hardware/software accelerated graphics" data-slug="graphics"> <title> 3:05- 3:30 Modern Emacs/Elisp hardware/software accelerated graphics</title> <rect x="500" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(532,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> graphics</text></g></a> <g transform="translate(0,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(82,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(164,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(247,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(329,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(411,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(494,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(576,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(658,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 5 PM</text></g></svg>
+</div>
+
+[[!toc ]]
+Format: 22-min talk ; Q&A: BigBlueButton conference room <https://media.emacsconf.org/2025/current/bbb-gnus.html> Etherpad: <https://pad.emacsconf.org/2025-gnus>
+Etherpad: <https://pad.emacsconf.org/2025-gnus>
+Discuss on IRC: [#emacsconf-gen](https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen)
+Status: Q&A finished, IRC and pad will be archived on this page
+
+
+
+
+
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-gnus"><source src="https://media.emacsconf.org/2025/emacsconf-2025-gnus--reading-and-writing-emails-in-gnu-emacs-with-gnus--amin-bandali--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2025/captions/emacsconf-2025-gnus--reading-and-writing-emails-in-gnu-emacs-with-gnus--amin-bandali--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2025/captions/emacsconf-2025-gnus--reading-and-writing-emails-in-gnu-emacs-with-gnus--amin-bandali--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="mainVideo-gnus" data="""
+00:02.620 Introduction
+01:25.240 Demo
+02:49.960 Don't panic
+03:58.560 Configuring servers
+05:46.240 .authinfo
+06:26.600 Configuration
+08:25.720 Starting Gnus
+09:40.080 Always showing groups
+10:19.900 Reading messages
+11:30.120 Debugging IMAP
+12:55.160 Topics
+14:25.560 Customizing message display
+15:24.320 Sending emails
+17:26.660 Plans
+19:27.960 Wrapping up
+20:12.760 nnimap
+
+"""]]<div></div>Duration: 21:37 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2025-gnus">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2025/current/bbb-gnus.html">Open public Q&A</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-gnus--reading-and-writing-emails-in-gnu-emacs-with-gnus--amin-bandali--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-gnus--reading-and-writing-emails-in-gnu-emacs-with-gnus--amin-bandali--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-gnus--reading-and-writing-emails-in-gnu-emacs-with-gnus--amin-bandali--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-gnus--reading-and-writing-emails-in-gnu-emacs-with-gnus--amin-bandali--main.opus">Download --main.opus (19MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-gnus--reading-and-writing-emails-in-gnu-emacs-with-gnus--amin-bandali--main.png">Download --main.png</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-gnus--reading-and-writing-emails-in-gnu-emacs-with-gnus--amin-bandali--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-gnus--reading-and-writing-emails-in-gnu-emacs-with-gnus--amin-bandali--main.webm">Download --main.webm (60MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-gnus--reading-and-writing-emails-in-gnu-emacs-with-gnus--amin-bandali--split.txt">Download --split.txt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-gnus--reading-and-writing-emails-in-gnu-emacs-with-gnus--amin-bandali--split.vtt">Download --split.vtt</a></li><li><a href="https://youtu.be/0Pu8oqdsSig">View on Youtube</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2025/info/gnus-nav.md b/2025/info/gnus-nav.md
new file mode 100644
index 00000000..66b60f15
--- /dev/null
+++ b/2025/info/gnus-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by time: <a href="/2025/talks/swanky">Swanky Python: Interactive development for Python</a>
+Next by time: <a href="/2025/talks/python">Interactive Python programming in Emacs</a>
+Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2025/watch/gen">Watch</a></strong>
+</div>
diff --git a/2025/info/graphics-after.md b/2025/info/graphics-after.md
new file mode 100644
index 00000000..e3eda455
--- /dev/null
+++ b/2025/info/graphics-after.md
@@ -0,0 +1,15 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<div class="transcript transcript-mainVideo"><a name="graphics-mainVideo-transcript"></a><h1>Transcript</h1>
+
+[[!template text="""[ This video has no audio. ]""" start="00:00:00.000" video="mainVideo-graphics" id="subtitle"]]
+
+</div>
+
+Captioner: sachac
+
+Questions or comments? Please e-mail [incal@dataswamp.org](mailto:incal@dataswamp.org?subject=Comment%20for%20EmacsConf%202023%20graphics%3A%20Modern%20Emacs%2FElisp%20hardware%2Fsoftware%20accelerated%20graphics)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2025/info/graphics-before.md b/2025/info/graphics-before.md
new file mode 100644
index 00000000..5a9384ed
--- /dev/null
+++ b/2025/info/graphics-before.md
@@ -0,0 +1,19 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+
+The following image shows where the talk is in the schedule for Sat 2025-12-06. Solid lines show talks with Q&A via BigBlueButton. Dashed lines show talks with Q&A via IRC or Etherpad.<div class="schedule-in-context schedule-svg-container" data-slug="graphics">
+<svg width="700" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Schedule for Saturday</title> <rect width="700" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="/2025/talks/sat-open" title="Saturday opening remarks" data-slug="sat-open"> <title> 9:00- 9:10 Saturday opening remarks</title> <rect x="0" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(11,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="/2025/talks/org-babel" title="Making Org-Babel reactive" data-slug="org-babel"> <title> 9:10- 9:20 Making Org-Babel reactive</title> <rect x="13" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(24,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> org-babel</text></g></a> <a href="/2025/talks/reference" title="Emacs as a fully-fledged reference manager" data-slug="reference"> <title> 9:30- 9:55 Emacs as a fully-fledged reference manager</title> <rect x="41" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(73,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> reference</text></g></a> <a href="/2025/talks/gmail" title="org-gmail: A deep integration of Gmail into your Org Mode" data-slug="gmail"> <title> 10:15-10:40 org-gmail: A deep integration of Gmail into your Org Mode</title> <rect x="102" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(134,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gmail</text></g></a> <a href="/2025/talks/gnus" title="Reading and writing emails in GNU Emacs with Gnus" data-slug="gnus"> <title> 10:50-11:15 Reading and writing emails in GNU Emacs with Gnus</title> <rect x="150" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(182,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gnus</text></g></a> <a href="/2025/talks/latex" title="LaTeX export in org-mode: the overhaul" data-slug="latex"> <title> 11:25-11:45 LaTeX export in org-mode: the overhaul</title> <rect x="199" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(224,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> latex</text></g></a> <a href="/2025/talks/calc" title="Basic Calc functionality for engineering or electronics" data-slug="calc"> <title> 1:00- 1:25 Basic Calc functionality for engineering or electronics</title> <rect x="329" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(361,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> calc</text></g></a> <a href="/2025/talks/blee-lcnt" title="Blee-LCNT: An Emacs-centered content production and self-publication framework" data-slug="blee-lcnt"> <title> 1:35- 2:15 Blee-LCNT: An Emacs-centered content production and self-publication framework</title> <rect x="377" y="15" opacity="0.5" width="54" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(429,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> blee-lcnt</text></g></a> <a href="/2025/talks/greader" title="GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence" data-slug="greader"> <title> 2:35- 2:40 GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence</title> <rect x="459" y="15" opacity="0.5" width="6" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(463,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> greader</text></g></a> <a href="/2025/talks/open-mic" title="Open session" data-slug="open-mic"> <title> 2:50- 3:40 Open session</title> <rect x="480" y="15" opacity="0.5" width="68" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(546,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> open-mic</text></g></a> <a href="/2025/talks/sat-close" title="Saturday closing remarks / open session" data-slug="sat-close"> <title> 4:00- 4:10 Saturday closing remarks / open session</title> <rect x="576" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(587,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="/2025/talks/schemacs" title="One year progress update Schemacs (formerly Gypsum)" data-slug="schemacs"> <title> 9:30- 9:55 One year progress update Schemacs (formerly Gypsum)</title> <rect x="41" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(73,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> schemacs</text></g></a> <a href="/2025/talks/juicemacs" title="Juicemacs: exploring speculative JIT compilation for ELisp in Java" data-slug="juicemacs"> <title> 10:15-10:35 Juicemacs: exploring speculative JIT compilation for ELisp in Java</title> <rect x="102" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(127,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> juicemacs</text></g></a> <a href="/2025/talks/swanky" title="Swanky Python: Interactive development for Python" data-slug="swanky"> <title> 10:45-11:10 Swanky Python: Interactive development for Python</title> <rect x="144" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(176,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> swanky</text></g></a> <a href="/2025/talks/python" title="Interactive Python programming in Emacs" data-slug="python"> <title> 11:20-11:40 Interactive Python programming in Emacs</title> <rect x="192" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(217,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <a href="/2025/talks/llm" title="Emacs, editors, and LLM driven workflows" data-slug="llm"> <title> 1:00- 1:25 Emacs, editors, and LLM driven workflows</title> <rect x="329" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(361,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> llm</text></g></a> <a href="/2025/talks/private-ai" title="Emacs and private AI: a great match" data-slug="private-ai"> <title> 1:45- 2:05 Emacs and private AI: a great match</title> <rect x="391" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(416,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> private-ai</text></g></a> <a href="/2025/talks/commonlisp" title="Common Lisp images communicating like-a-human through shared Emacs slime and eev" data-slug="commonlisp"> <title> 2:25- 2:55 Common Lisp images communicating like-a-human through shared Emacs slime and eev</title> <rect x="446" y="75" opacity="0.5" width="41" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(485,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> commonlisp</text></g></a> <a href="/2025/talks/graphics" title="Modern Emacs/Elisp hardware/software accelerated graphics" data-slug="graphics"> <title> 3:05- 3:30 Modern Emacs/Elisp hardware/software accelerated graphics</title> <rect stroke-width="3" x="500" y="75" opacity="0.8" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(532,133)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> graphics</text></g></a> <g transform="translate(0,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(82,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(164,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(247,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(329,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(411,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(494,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(576,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(658,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 5 PM</text></g></svg>
+</div>
+
+[[!toc ]]
+Format: 23-min talk ; Q&A: BigBlueButton conference room <https://media.emacsconf.org/2025/current/bbb-graphics.html> Etherpad: <https://pad.emacsconf.org/2025-graphics>
+Etherpad: <https://pad.emacsconf.org/2025-graphics>
+Discuss on IRC: [#emacsconf-dev](https://chat.emacsconf.org/?join=emacsconf,emacsconf-dev)
+Status: Q&A finished, IRC and pad will be archived on this page
+
+
+
+
+
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-graphics"><source src="https://media.emacsconf.org/2025/emacsconf-2025-graphics--modern-emacselisp-hardwaresoftware-accelerated-graphics--emanuel-berg--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2025/captions/emacsconf-2025-graphics--modern-emacselisp-hardwaresoftware-accelerated-graphics--emanuel-berg--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 22:15 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2025-graphics">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2025/current/bbb-graphics.html">Open public Q&A</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-graphics--modern-emacselisp-hardwaresoftware-accelerated-graphics--emanuel-berg--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-graphics--modern-emacselisp-hardwaresoftware-accelerated-graphics--emanuel-berg--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-graphics--modern-emacselisp-hardwaresoftware-accelerated-graphics--emanuel-berg--main.opus">Download --main.opus (18MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-graphics--modern-emacselisp-hardwaresoftware-accelerated-graphics--emanuel-berg--main.png">Download --main.png</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-graphics--modern-emacselisp-hardwaresoftware-accelerated-graphics--emanuel-berg--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-graphics--modern-emacselisp-hardwaresoftware-accelerated-graphics--emanuel-berg--main.webm">Download --main.webm (56MB)</a></li><li><a href="https://youtu.be/RVoGcLNalJw">View on Youtube</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2025/info/graphics-nav.md b/2025/info/graphics-nav.md
new file mode 100644
index 00000000..ecf2bee5
--- /dev/null
+++ b/2025/info/graphics-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by time: <a href="/2025/talks/open-mic">Open session</a>
+Next by time: <a href="/2025/talks/sat-close">Saturday closing remarks / open session</a>
+Track: <span class="sched-track Development">Development</span> - <strong><a href="https://emacsconf.org/2025/watch/dev">Watch</a></strong>
+</div>
diff --git a/2025/info/greader-after.md b/2025/info/greader-after.md
new file mode 100644
index 00000000..ae172158
--- /dev/null
+++ b/2025/info/greader-after.md
@@ -0,0 +1,90 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<div class="transcript transcript-mainVideo"><a name="greader-mainVideo-transcript"></a><h1>Transcript</h1>
+
+
+<div class="transcript-heading">[[!template new="1" text="""Introduction""" start="00:00:01.460" video="mainVideo-greader" id="subtitle"]]</div>[[!template text="""Hi, I'm Yuval Langer.""" start="00:00:01.460" video="mainVideo-greader" id="subtitle"]]
+[[!template text="""Some may know me as cow_2001 on IRC.""" start="00:00:03.786" video="mainVideo-greader" id="subtitle"]]
+[[!template text="""I'd like to tell you about greader mode,""" start="00:00:09.480" video="mainVideo-greader" id="subtitle"]]
+[[!template text="""a versatile text-to-speech package""" start="00:00:12.120" video="mainVideo-greader" id="subtitle"]]
+[[!template text="""written by Michelangelo Rodriguez.""" start="00:00:14.520" video="mainVideo-greader" id="subtitle"]]
+[[!template text="""Sometimes you want to read a bunch""" start="00:00:18.400" video="mainVideo-greader" id="subtitle"]]
+[[!template text="""and cannot be bothered, right?""" start="00:00:20.400" video="mainVideo-greader" id="subtitle"]]
+[[!template text="""You'd rather plop on your chair""" start="00:00:23.040" video="mainVideo-greader" id="subtitle"]]
+[[!template text="""and let the words come to you.""" start="00:00:25.080" video="mainVideo-greader" id="subtitle"]]
+[[!template text="""You can do it using greader Mode.""" start="00:00:27.520" video="mainVideo-greader" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""What is greader mode?""" start="00:00:31.158" video="mainVideo-greader" id="subtitle"]]</div>[[!template text="""What is greader mode?""" start="00:00:31.158" video="mainVideo-greader" id="subtitle"]]
+[[!template text="""Greader mode is a text-to-speech minor mode""" start="00:00:33.120" video="mainVideo-greader" id="subtitle"]]
+[[!template text="""with which you can read any buffer using the point.""" start="00:00:36.320" video="mainVideo-greader" id="subtitle"]]
+[[!template text="""You move your point""" start="00:00:40.400" video="mainVideo-greader" id="subtitle"]]
+[[!template text="""right before the text you want to read""" start="00:00:41.603" video="mainVideo-greader" id="subtitle"]]
+[[!template text="""and run greader-read command.""" start="00:00:43.560" video="mainVideo-greader" id="subtitle"]]
+[[!template text="""You can then use the left and right arrow keys""" start="00:00:47.640" video="mainVideo-greader" id="subtitle"]]
+[[!template text="""to jump to the previous sentence or the next sentence.""" start="00:00:50.840" video="mainVideo-greader" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Installing Greader""" start="00:00:56.600" video="mainVideo-greader" id="subtitle"]]</div>[[!template text="""Installing GReader:""" start="00:00:56.600" video="mainVideo-greader" id="subtitle"]]
+[[!template text="""Greader is available on the GNU Emacs app store""" start="00:00:59.144" video="mainVideo-greader" id="subtitle"]]
+[[!template text="""and its copyright assigned to""" start="00:01:05.440" video="mainVideo-greader" id="subtitle"]]
+[[!template text="""the Free Software Foundation.""" start="00:01:07.286" video="mainVideo-greader" id="subtitle"]]
+[[!template text="""To install Greader,""" start="00:01:10.960" video="mainVideo-greader" id="subtitle"]]
+[[!template text="""you can run M-x list-packages RET.""" start="00:01:12.858" video="mainVideo-greader" id="subtitle"]]
+[[!template text="""look it up with C-s greader,""" start="00:01:19.280" video="mainVideo-greader" id="subtitle"]]
+[[!template text="""press i to mark it for installation,""" start="00:01:23.100" video="mainVideo-greader" id="subtitle"]]
+[[!template text="""and then press x to execute the installation.""" start="00:01:26.680" video="mainVideo-greader" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Basic usage""" start="00:01:31.760" video="mainVideo-greader" id="subtitle"]]</div>[[!template text="""Basic usage:""" start="00:01:31.760" video="mainVideo-greader" id="subtitle"]]
+[[!template text="""We can now open a text file and start reading.""" start="00:01:33.212" video="mainVideo-greader" id="subtitle"]]
+[[!template text="""Let's open The Willows by Algernon Blackwood.""" start="00:01:37.560" video="mainVideo-greader" id="subtitle"]]
+[[!template text="""I've never read the story,""" start="00:01:42.600" video="mainVideo-greader" id="subtitle"]]
+[[!template text="""but HP Lovecraft said it was the best horror story""" start="00:01:44.480" video="mainVideo-greader" id="subtitle"]]
+[[!template text="""he had ever read, so it is in my reading list.""" start="00:01:48.280" video="mainVideo-greader" id="subtitle"]]
+[[!template text="""Now load greader using M-x greader-mode.""" start="00:01:52.960" video="mainVideo-greader" id="subtitle"]]
+[[!template text="""To start reading, press C-r SPC.""" start="00:02:01.520" video="mainVideo-greader" id="subtitle"]]
+[[!template text="""The Project Gutenberg ebook of The willows.""" start="00:02:08.140" video="mainVideo-greader" id="subtitle"]]
+[[!template text="""This will run the greader-read command.""" start="00:02:10.560" video="mainVideo-greader" id="subtitle"]]
+[[!template text="""To stop, press the SPC key.""" start="00:02:14.080" video="mainVideo-greader" id="subtitle"]]
+[[!template text="""This will run the greader-stop command.""" start="00:02:16.800" video="mainVideo-greader" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Navigation""" start="00:02:20.820" video="mainVideo-greader" id="subtitle"]]</div>[[!template text="""Navigation:""" start="00:02:20.820" video="mainVideo-greader" id="subtitle"]]
+[[!template text="""You can navigate like you normally do,""" start="00:02:22.360" video="mainVideo-greader" id="subtitle"]]
+[[!template text="""but using the left or right arrow keys""" start="00:02:24.680" video="mainVideo-greader" id="subtitle"]]
+[[!template text="""will move the point between sentences""" start="00:02:27.560" video="mainVideo-greader" id="subtitle"]]
+[[!template text="""instead of characters.""" start="00:02:30.200" video="mainVideo-greader" id="subtitle"]]
+[[!template text="""So... This ebook is...""" start="00:02:33.088" video="mainVideo-greader" id="subtitle"]]
+[[!template text="""You may copy it, give it away,""" start="00:02:36.640" video="mainVideo-greader" id="subtitle"]]
+[[!template text="""or reuse it if you are not.""" start="00:02:38.096" video="mainVideo-greader" id="subtitle"]]
+[[!template text="""Let's move to the start of the story.""" start="00:02:41.480" video="mainVideo-greader" id="subtitle"]]
+[[!template text="""&quot;After leaving Vienna,""" start="00:02:57.040" video="mainVideo-greader" id="subtitle"]]
+[[!template text="""and long before you come to Budapest,""" start="00:02:58.089" video="mainVideo-greader" id="subtitle"]]
+[[!template text="""the Danube enters a region""" start="00:02:59.840" video="mainVideo-greader" id="subtitle"]]
+[[!template text="""of singular loneliness and desolation,""" start="00:03:00.920" video="mainVideo-greader" id="subtitle"]]
+[[!template text="""where its waters spread away on all sides,""" start="00:03:02.920" video="mainVideo-greader" id="subtitle"]]
+[[!template text="""regardless of a main channel,""" start="00:03:04.880" video="mainVideo-greader" id="subtitle"]]
+[[!template text="""and the country becomes a swamp for miles upon miles,""" start="00:03:06.200" video="mainVideo-greader" id="subtitle"]]
+[[!template text="""covered by a vast sea of low willow bushes.&quot;""" start="00:03:08.800" video="mainVideo-greader" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Reading rate""" start="00:03:12.380" video="mainVideo-greader" id="subtitle"]]</div>[[!template text="""Reading rate: this reading rate is rather slow.""" start="00:03:12.380" video="mainVideo-greader" id="subtitle"]]
+[[!template text="""Let's pick up the pace using the plus key.""" start="00:03:15.840" video="mainVideo-greader" id="subtitle"]]
+[[!template text="""This will run the greader-inc-rate command.""" start="00:03:19.520" video="mainVideo-greader" id="subtitle"]]
+[[!template text="""You must do that while greader is reading.""" start="00:03:23.520" video="mainVideo-greader" id="subtitle"]]
+[[!template text="""Now it is too fast.""" start="00:03:37.885" video="mainVideo-greader" id="subtitle"]]
+[[!template text="""We can slow down using the - key.""" start="00:03:39.780" video="mainVideo-greader" id="subtitle"]]
+[[!template text="""This will run the greader-dec-rate command.""" start="00:03:44.680" video="mainVideo-greader" id="subtitle"]]
+[[!template text="""&quot;In high flood this great acreage""" start="00:03:54.560" video="mainVideo-greader" id="subtitle"]]
+[[!template text="""of sand, shingle-beds, and willow-grown islands""" start="00:03:59.385" video="mainVideo-greader" id="subtitle"]]
+[[!template text="""is almost topped by the water,""" start="00:04:01.240" video="mainVideo-greader" id="subtitle"]]
+[[!template text="""but in normal seasons the bushes""" start="00:04:02.440" video="mainVideo-greader" id="subtitle"]]
+[[!template text="""bend and rustle in the free winds,""" start="00:04:03.610" video="mainVideo-greader" id="subtitle"]]
+[[!template text="""showing their silver leaves to the sunshine""" start="00:04:04.920" video="mainVideo-greader" id="subtitle"]]
+[[!template text="""in an ever-moving plain of bewildering beauty.&quot;""" start="00:04:06.400" video="mainVideo-greader" id="subtitle"]]
+
+</div>
+
+Captioner: sachac
+
+Questions or comments? Please e-mail [yuval.langer@gmail.com](mailto:yuval.langer@gmail.com?subject=Comment%20for%20EmacsConf%202023%20greader%3A%20GNU%20Emacs%20Greader%20%28Gnam%C3%B9%20Reader%29%20mode%20is%20the%20best%20Emacs%20mode%20in%20existence)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2025/info/greader-before.md b/2025/info/greader-before.md
new file mode 100644
index 00000000..5303089a
--- /dev/null
+++ b/2025/info/greader-before.md
@@ -0,0 +1,19 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+
+The following image shows where the talk is in the schedule for Sat 2025-12-06. Solid lines show talks with Q&A via BigBlueButton. Dashed lines show talks with Q&A via IRC or Etherpad.<div class="schedule-in-context schedule-svg-container" data-slug="greader">
+<svg width="700" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Schedule for Saturday</title> <rect width="700" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="/2025/talks/sat-open" title="Saturday opening remarks" data-slug="sat-open"> <title> 9:00- 9:10 Saturday opening remarks</title> <rect x="0" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(11,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="/2025/talks/org-babel" title="Making Org-Babel reactive" data-slug="org-babel"> <title> 9:10- 9:20 Making Org-Babel reactive</title> <rect x="13" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(24,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> org-babel</text></g></a> <a href="/2025/talks/reference" title="Emacs as a fully-fledged reference manager" data-slug="reference"> <title> 9:30- 9:55 Emacs as a fully-fledged reference manager</title> <rect x="41" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(73,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> reference</text></g></a> <a href="/2025/talks/gmail" title="org-gmail: A deep integration of Gmail into your Org Mode" data-slug="gmail"> <title> 10:15-10:40 org-gmail: A deep integration of Gmail into your Org Mode</title> <rect x="102" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(134,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gmail</text></g></a> <a href="/2025/talks/gnus" title="Reading and writing emails in GNU Emacs with Gnus" data-slug="gnus"> <title> 10:50-11:15 Reading and writing emails in GNU Emacs with Gnus</title> <rect x="150" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(182,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gnus</text></g></a> <a href="/2025/talks/latex" title="LaTeX export in org-mode: the overhaul" data-slug="latex"> <title> 11:25-11:45 LaTeX export in org-mode: the overhaul</title> <rect x="199" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(224,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> latex</text></g></a> <a href="/2025/talks/calc" title="Basic Calc functionality for engineering or electronics" data-slug="calc"> <title> 1:00- 1:25 Basic Calc functionality for engineering or electronics</title> <rect x="329" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(361,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> calc</text></g></a> <a href="/2025/talks/blee-lcnt" title="Blee-LCNT: An Emacs-centered content production and self-publication framework" data-slug="blee-lcnt"> <title> 1:35- 2:15 Blee-LCNT: An Emacs-centered content production and self-publication framework</title> <rect x="377" y="15" opacity="0.5" width="54" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(429,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> blee-lcnt</text></g></a> <a href="/2025/talks/greader" title="GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence" data-slug="greader"> <title> 2:35- 2:40 GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence</title> <rect stroke-width="3" x="459" y="15" opacity="0.8" width="6" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(463,73)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> greader</text></g></a> <a href="/2025/talks/open-mic" title="Open session" data-slug="open-mic"> <title> 2:50- 3:40 Open session</title> <rect x="480" y="15" opacity="0.5" width="68" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(546,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> open-mic</text></g></a> <a href="/2025/talks/sat-close" title="Saturday closing remarks / open session" data-slug="sat-close"> <title> 4:00- 4:10 Saturday closing remarks / open session</title> <rect x="576" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(587,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="/2025/talks/schemacs" title="One year progress update Schemacs (formerly Gypsum)" data-slug="schemacs"> <title> 9:30- 9:55 One year progress update Schemacs (formerly Gypsum)</title> <rect x="41" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(73,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> schemacs</text></g></a> <a href="/2025/talks/juicemacs" title="Juicemacs: exploring speculative JIT compilation for ELisp in Java" data-slug="juicemacs"> <title> 10:15-10:35 Juicemacs: exploring speculative JIT compilation for ELisp in Java</title> <rect x="102" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(127,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> juicemacs</text></g></a> <a href="/2025/talks/swanky" title="Swanky Python: Interactive development for Python" data-slug="swanky"> <title> 10:45-11:10 Swanky Python: Interactive development for Python</title> <rect x="144" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(176,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> swanky</text></g></a> <a href="/2025/talks/python" title="Interactive Python programming in Emacs" data-slug="python"> <title> 11:20-11:40 Interactive Python programming in Emacs</title> <rect x="192" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(217,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <a href="/2025/talks/llm" title="Emacs, editors, and LLM driven workflows" data-slug="llm"> <title> 1:00- 1:25 Emacs, editors, and LLM driven workflows</title> <rect x="329" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(361,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> llm</text></g></a> <a href="/2025/talks/private-ai" title="Emacs and private AI: a great match" data-slug="private-ai"> <title> 1:45- 2:05 Emacs and private AI: a great match</title> <rect x="391" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(416,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> private-ai</text></g></a> <a href="/2025/talks/commonlisp" title="Common Lisp images communicating like-a-human through shared Emacs slime and eev" data-slug="commonlisp"> <title> 2:25- 2:55 Common Lisp images communicating like-a-human through shared Emacs slime and eev</title> <rect x="446" y="75" opacity="0.5" width="41" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(485,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> commonlisp</text></g></a> <a href="/2025/talks/graphics" title="Modern Emacs/Elisp hardware/software accelerated graphics" data-slug="graphics"> <title> 3:05- 3:30 Modern Emacs/Elisp hardware/software accelerated graphics</title> <rect x="500" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(532,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> graphics</text></g></a> <g transform="translate(0,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(82,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(164,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(247,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(329,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(411,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(494,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(576,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(658,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 5 PM</text></g></svg>
+</div>
+
+[[!toc ]]
+Format: 5-min talk ; Q&A: IRC <https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen> Etherpad: <https://pad.emacsconf.org/2025-greader>
+Etherpad: <https://pad.emacsconf.org/2025-greader>
+Discuss on IRC: [#emacsconf-gen](https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen)
+Status: Q&A finished, IRC and pad will be archived on this page
+
+
+
+
+
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-greader"><source src="https://media.emacsconf.org/2025/emacsconf-2025-greader--gnu-emacs-greader-gnam-reader-mode-is-the-best-emacs-mode-in-existence--yuval-langer--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2025/captions/emacsconf-2025-greader--gnu-emacs-greader-gnam-reader-mode-is-the-best-emacs-mode-in-existence--yuval-langer--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 04:08 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2025-greader">Open Etherpad</a></li><li><a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen">Open public Q&A</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-greader--gnu-emacs-greader-gnam-reader-mode-is-the-best-emacs-mode-in-existence--yuval-langer--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-greader--gnu-emacs-greader-gnam-reader-mode-is-the-best-emacs-mode-in-existence--yuval-langer--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-greader--gnu-emacs-greader-gnam-reader-mode-is-the-best-emacs-mode-in-existence--yuval-langer--main.opus">Download --main.opus (3.5MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-greader--gnu-emacs-greader-gnam-reader-mode-is-the-best-emacs-mode-in-existence--yuval-langer--main.png">Download --main.png</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-greader--gnu-emacs-greader-gnam-reader-mode-is-the-best-emacs-mode-in-existence--yuval-langer--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-greader--gnu-emacs-greader-gnam-reader-mode-is-the-best-emacs-mode-in-existence--yuval-langer--main.webm">Download --main.webm (10MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-greader--gnu-emacs-greader-gnam-reader-mode-is-the-best-emacs-mode-in-existence--yuval-langer--split.txt">Download --split.txt</a></li><li><a href="https://youtu.be/q1gmFAKYWBk">View on Youtube</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2025/info/greader-nav.md b/2025/info/greader-nav.md
new file mode 100644
index 00000000..9be8ca29
--- /dev/null
+++ b/2025/info/greader-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by time: <a href="/2025/talks/commonlisp">Common Lisp images communicating like-a-human through shared Emacs slime and eev</a>
+Next by time: <a href="/2025/talks/open-mic">Open session</a>
+Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2025/watch/gen">Watch</a></strong>
+</div>
diff --git a/2025/info/hyperboleqa-after.md b/2025/info/hyperboleqa-after.md
new file mode 100644
index 00000000..3cadfccd
--- /dev/null
+++ b/2025/info/hyperboleqa-after.md
@@ -0,0 +1,7 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+Questions or comments? Please e-mail [rsw@gnu.org](mailto:rsw@gnu.org?subject=Comment%20for%20EmacsConf%202023%20hyperboleqa%3A%20Questions%20and%20answers%20to%20help%20you%20fly%20with%20Hyperbole)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2025/info/hyperboleqa-before.md b/2025/info/hyperboleqa-before.md
new file mode 100644
index 00000000..edd1ad33
--- /dev/null
+++ b/2025/info/hyperboleqa-before.md
@@ -0,0 +1,19 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+
+The following image shows where the talk is in the schedule for Sun 2025-12-07. Solid lines show talks with Q&A via BigBlueButton. Dashed lines show talks with Q&A via IRC or Etherpad.<div class="schedule-in-context schedule-svg-container" data-slug="hyperboleqa">
+<svg width="700" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Schedule for Sunday</title> <rect width="700" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="/2025/talks/sun-open" title="Sunday opening remarks" data-slug="sun-open"> <title> 9:00- 9:10 Sunday opening remarks</title> <rect x="0" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(11,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-open</text></g></a> <a href="/2025/talks/modern" title="Some problems of modernizing Emacs" data-slug="modern"> <title> 9:10- 9:30 Some problems of modernizing Emacs</title> <rect x="13" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(38,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> modern</text></g></a> <a href="/2025/talks/reader" title="An introduction to the Emacs Reader" data-slug="reader"> <title> 9:40-10:15 An introduction to the Emacs Reader</title> <rect x="54" y="15" opacity="0.5" width="48" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(100,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> reader</text></g></a> <a href="/2025/talks/weights" title="Weightlifting tracking with Emacs on Android" data-slug="weights"> <title> 10:35-10:45 Weightlifting tracking with Emacs on Android</title> <rect x="130" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(141,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> weights</text></g></a> <a href="/2025/talks/completion" title="corfu+yasnippet: Easier than I thought" data-slug="completion"> <title> 11:05-11:25 corfu+yasnippet: Easier than I thought</title> <rect x="171" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(196,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> completion</text></g></a> <a href="/2025/talks/zettelkasten" title="Zettelkasten for regular Emacs hackers" data-slug="zettelkasten"> <title> 1:00- 1:25 Zettelkasten for regular Emacs hackers</title> <rect x="329" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(361,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> zettelkasten</text></g></a> <a href="/2025/talks/hyperboleqa" title="Questions and answers to help you fly with Hyperbole" data-slug="hyperboleqa"> <title> 1:45- 2:15 Questions and answers to help you fly with Hyperbole</title> <rect stroke-width="3" x="391" y="15" opacity="0.8" width="41" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(430,73)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperboleqa</text></g></a> <a href="/2025/talks/gardening" title="Gardening in Emacs: A Windows user's tale of tending, tweaking, and triumph" data-slug="gardening"> <title> 2:15- 2:35 Gardening in Emacs: A Windows user's tale of tending, tweaking, and triumph</title> <rect x="432" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(457,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gardening</text></g></a> <a href="/2025/talks/bookclub-tapas" title="Bookclub tapas" data-slug="bookclub-tapas"> <title> 2:45- 3:20 Bookclub tapas</title> <rect x="473" y="15" opacity="0.5" width="48" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(519,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> bookclub-tapas</text></g></a> <a href="/2025/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"> <title> 3:40- 3:50 Sunday closing remarks</title> <rect x="549" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(560,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-close</text></g></a> <g transform="translate(0,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(82,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(164,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(247,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(329,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(411,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(494,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(576,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(658,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 5 PM</text></g></svg>
+</div>
+
+[[!toc ]]
+Format: 30-min talk ; Q&A: BigBlueButton conference room <https://media.emacsconf.org/2025/current/bbb-hyperboleqa.html> Etherpad: <https://pad.emacsconf.org/2025-hyperboleqa>
+Etherpad: <https://pad.emacsconf.org/2025-hyperboleqa>
+Discuss on IRC: [#emacsconf-gen](https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen)
+Status: Q&A open for participation
+<div>Times in different time zones:</div><div class="times" start="2025-12-07T18:45:00Z" end="2025-12-07T19:15:00Z"><div class="conf-time">Sunday, Dec 7 2025, ~1:45 PM - 2:15 PM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Sunday, Dec 7 2025, ~12:45 PM - 1:15 PM CST (US/Central)<br />Sunday, Dec 7 2025, ~11:45 AM - 12:15 PM MST (US/Mountain)<br />Sunday, Dec 7 2025, ~10:45 AM - 11:15 AM PST (US/Pacific)<br />Sunday, Dec 7 2025, ~6:45 PM - 7:15 PM UTC <br />Sunday, Dec 7 2025, ~7:45 PM - 8:15 PM CET (Europe/Paris)<br />Sunday, Dec 7 2025, ~8:45 PM - 9:15 PM EET (Europe/Athens)<br />Monday, Dec 8 2025, ~12:15 AM - 12:45 AM IST (Asia/Kolkata)<br />Monday, Dec 8 2025, ~2:45 AM - 3:15 AM +08 (Asia/Singapore)<br />Monday, Dec 8 2025, ~3:45 AM - 4:15 AM JST (Asia/Tokyo)</div></div><div><strong><a href="/2025/watch/gen/">Find out how to watch and participate</a></strong></div>
+
+
+
+
+<div class="vid mainVideo"><div></div><div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2025-hyperboleqa">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2025/current/bbb-hyperboleqa.html">Open public Q&A</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-hyperboleqa--questions-and-answers-to-help-you-fly-with-hyperbole--bob-weiner--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-hyperboleqa--questions-and-answers-to-help-you-fly-with-hyperbole--bob-weiner--intro.webm">Download --intro.webm</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2025/info/hyperboleqa-nav.md b/2025/info/hyperboleqa-nav.md
new file mode 100644
index 00000000..a0f7eb94
--- /dev/null
+++ b/2025/info/hyperboleqa-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by time: <a href="/2025/talks/zettelkasten">Zettelkasten for regular Emacs hackers</a>
+Next by time: <a href="/2025/talks/gardening">Gardening in Emacs: A Windows user's tale of tending, tweaking, and triumph</a>
+Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2025/watch/gen">Watch</a></strong>
+</div>
diff --git a/2025/info/juicemacs-after.md b/2025/info/juicemacs-after.md
new file mode 100644
index 00000000..ca649a57
--- /dev/null
+++ b/2025/info/juicemacs-after.md
@@ -0,0 +1,422 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<div class="transcript transcript-mainVideo"><a name="juicemacs-mainVideo-transcript"></a><h1>Transcript</h1>
+
+[[!template text="""Hello! This is Kana!""" start="00:00:01.200" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""And today I'll be talking about""" start="00:00:02.903" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""<b>J</b>ust-<b>I</b>n-<b>T</b>ime compilation, or JIT,""" start="00:00:04.368" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""for Emacs Lisp,""" start="00:00:06.068" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""based on my work-in-progress Emacs clone, Juicemacs.""" start="00:00:07.463" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""Juicemacs aims to explore a few things""" start="00:00:11.263" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""that I've been wondering about for a while.""" start="00:00:13.534" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""For exmaple, what if we had better or even""" start="00:00:15.943" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""transparent concurrency in ELisp?""" start="00:00:18.568" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""Or, can we have a concurrent GUI?""" start="00:00:21.323" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""One that does not block, or is blocked by Lisp code?""" start="00:00:23.343" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""And finally what can JIT compilation do for ELisp?""" start="00:00:26.883" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""Will it provide better performance?""" start="00:00:31.068" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""However, a main problem with explorations""" start="00:00:34.183" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""in Emacs clones is that,""" start="00:00:37.401" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""Emacs is a whole universe.""" start="00:00:38.723" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""And that means, to make these explorations""" start="00:00:40.963" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""meaningful for Emacs users,""" start="00:00:43.601" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""we need to cover a lot of Emacs features,""" start="00:00:45.483" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""before we can ever begin.""" start="00:00:47.968" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""For example, one of the features of Emacs is that,""" start="00:00:50.643" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""it supports a lot of encodings.""" start="00:00:54.023" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""Let's look at this string: it can be encoded""" start="00:00:56.103" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""in both Unicode and Shift-JIS, a Japanese encoding system.""" start="00:00:59.268" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""But currently, Unicode does not have""" start="00:01:03.743" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""an official mapping for this &quot;ki&quot; (﨑) character.""" start="00:01:07.068" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""So when we map from Shift-JIS to Unicode,""" start="00:01:09.903" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""in most programming languages,""" start="00:01:12.768" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""you end up with something like this:""" start="00:01:14.523" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""it's a replacement character.""" start="00:01:16.534" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""But in Emacs, it actually extends""" start="00:01:19.243" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""the Unicode range by threefold,""" start="00:01:22.068" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""and uses the extra range to losslessly""" start="00:01:23.983" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""support characters like this.""" start="00:01:26.834" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""So if you want to support this feature,""" start="00:01:29.583" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""that basically rules out all string""" start="00:01:32.023" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""libraries with Unicode assumptions.""" start="00:01:34.034" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""For another, you need to support""" start="00:01:37.843" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""the regular expressions in Emacs,""" start="00:01:40.068" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""which are, really irregular.""" start="00:01:41.983" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""For example, it supports asserting""" start="00:01:45.123" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""about the user cursor position.""" start="00:01:46.901" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""And it also uses some character tables,""" start="00:01:49.503" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""that can be modified from Lisp code,""" start="00:01:52.034" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""to determine to case mappings.""" start="00:01:53.983" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""And all that makes it really hard, or even""" start="00:01:56.263" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""impossible to use any existing regexp libraries.""" start="00:01:59.568" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""Also, you need a functional garbage collector.""" start="00:02:05.223" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""You need threading primitives, because""" start="00:02:07.983" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""Emacs has already had some threading support.""" start="00:02:09.868" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""And you might want the performance of your clone""" start="00:02:12.423" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""to match Emacs, even with its native compilation enabled.""" start="00:02:14.534" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""Not to mention you also need a GUI for an editor.""" start="00:02:19.063" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""And so on.""" start="00:02:21.501" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""For Juicemacs, building on Java and""" start="00:02:23.643" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""a compiler framework called Truffle,""" start="00:02:25.634" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""helps in getting better performance;""" start="00:02:27.663" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""and by choosing a language with a good GC,""" start="00:02:30.603" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""we can actually focus more on the challenges above.""" start="00:02:32.934" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""Currently, Juicemacs has implemented three out of,""" start="00:02:38.163" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""at least four of the interpreters in Emacs.""" start="00:02:41.434" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""One for lisp code, one for bytecode,""" start="00:02:44.083" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""and one for regular expressions,""" start="00:02:46.463" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""all of them JIT-capable.""" start="00:02:48.568" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""Other than these, Emacs also has around""" start="00:02:51.003" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""two thousand built-in functions in C code.""" start="00:02:53.668" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""And Juicemacs has around""" start="00:02:56.183" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""four hundred of them implemented.""" start="00:02:57.334" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""It's not that many, but it is surprisingly enough""" start="00:02:59.863" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""to bootstrap Emacs and run""" start="00:03:03.703" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""the portable dumper, or pdump, in short.""" start="00:03:05.201" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""Let's have a try.""" start="00:03:08.583" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""""" start="00:03:11.343" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""So this is the binary produced by Java native image.""" start="00:03:11.803" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""And it's loading all the files""" start="00:03:15.023" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""needed for bootstrapping.""" start="00:03:17.168" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""Then it dumps the memory to a file to""" start="00:03:18.863" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""be loaded later, giving us fast startup.""" start="00:03:22.234" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""As we can see here, it throws some frame errors""" start="00:03:25.023" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""because Juicemacs doesn't have an editor UI""" start="00:03:28.823" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""or functional frames yet.""" start="00:03:31.401" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""But otherwise, it can already run""" start="00:03:33.383" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""quite some lisp code.""" start="00:03:35.368" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""For example, this code uses the benchmark library""" start="00:03:36.743" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""to measure the performance of this Fibonacci function.""" start="00:03:40.401" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""And we can see here, the JIT engine is""" start="00:03:44.503" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""already kicking in and makes the execution faster.""" start="00:03:47.068" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""In addition to that, with a bit of workaround,""" start="00:03:51.263" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""Juicemacs can also run some of the ERT,""" start="00:03:53.583" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""or, <b>E</b>macs <b>R</b>egression <b>T</b>est suite, that comes with Emacs.""" start="00:03:56.468" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""So... Yes, there are a bunch of test failures,""" start="00:04:01.143" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""which means we are not that compatible""" start="00:04:05.923" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""with Emacs and need more work.""" start="00:04:07.934" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""But the whole testing procedure runs fine,""" start="00:04:09.623" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""and it has proper stack traces,""" start="00:04:12.903" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""which is quite useful for debugging Juicemacs.""" start="00:04:14.768" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""So with that, a rather functional JIT runtime,""" start="00:04:17.903" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""let's now try look into today's topic, JIT compilation for ELisp.""" start="00:04:21.034" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""So, you probably know that Emacs has supported""" start="00:04:26.083" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""native-compilation, or nativecomp in short, for some time now.""" start="00:04:28.534" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""It mainly uses GCC to compile Lisp code""" start="00:04:32.183" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""into native code, ahead of time.""" start="00:04:35.034" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""And during runtime, Emacs loads those compiled files,""" start="00:04:37.463" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""and gets the performance of native code.""" start="00:04:41.434" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""However, for example, for installed packages,""" start="00:04:44.623" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""we might want to compile them when we""" start="00:04:47.743" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""actually use them instead of ahead of time.""" start="00:04:49.060" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""And Emacs supports this through""" start="00:04:51.923" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""this <i>native-comp-jit-compilation</i> flag.""" start="00:04:53.734" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""What it does is, during runtime, Emacs sends""" start="00:04:55.783" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""loaded files to external Emacs worker processes,""" start="00:04:59.768" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""which will then compile those files asynchronously.""" start="00:05:03.303" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""And when the compilation is done,""" start="00:05:07.003" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""the current Emacs session will load the compiled code back""" start="00:05:09.143" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""and improves its performance, on the fly.""" start="00:05:11.968" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""When you look at this procedure, however, it is,""" start="00:05:16.423" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""ahead-of-time compilation, done at runtime.""" start="00:05:18.743" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""And it is what current Emacs calls JIT compilation.""" start="00:05:21.663" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""But if you look at some other JIT engines,""" start="00:05:25.223" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""you'll see much more complex architectures.""" start="00:05:27.868" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""So, take luaJIT for an example,""" start="00:05:31.903" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""in addition to this red line here,""" start="00:05:34.234" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""which leads us from an interpreted state""" start="00:05:36.263" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""to a compiled native state,""" start="00:05:38.768" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""which is also what Emacs does,""" start="00:05:40.743" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""LuaJIT also supports going from""" start="00:05:42.263" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""a compiled state back to its interpreter.""" start="00:05:44.334" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""And this process is called &quot;deoptimization&quot;.""" start="00:05:47.623" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""In contrast to its name, deoptimization here actually""" start="00:05:51.583" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""enables a huge category of JIT optimizations.""" start="00:05:55.301" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""They are called speculation.""" start="00:05:58.663" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""Basically, with speculation, the compiler""" start="00:06:01.463" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""can use runtime statistics to speculate,""" start="00:06:04.601" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""to make bolder assumptions in the compiled code.""" start="00:06:07.783" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""And when the assumptions are invalidated,""" start="00:06:11.543" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""the runtime deoptimizes the code, updates statistics,""" start="00:06:14.083" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""and then recompile the code based on new assumptions,""" start="00:06:18.423" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""and that will make the code more performant.""" start="00:06:21.134" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""Let's look at an example.""" start="00:06:24.543" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""So, here is a really simple function,""" start="00:06:28.463" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""that adds one to the input number.""" start="00:06:30.968" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""But in Emacs, it is not that simple,""" start="00:06:33.183" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""because Emacs has three categories of numbers,""" start="00:06:36.168" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""that is, fix numbers, or machine-word-sized integers,""" start="00:06:38.303" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""floating numbers, and big integers.""" start="00:06:42.701" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""And when we compile this, we need""" start="00:06:45.703" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""to handle all three cases.""" start="00:06:47.601" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""And if we analyze the code produced by Emacs,""" start="00:06:49.463" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""as is shown by this gray graph here,""" start="00:06:52.601" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""we can see that it has, two paths:""" start="00:06:54.783" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""One fast path, that does fast fix number addition;""" start="00:06:58.183" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""and one for slow paths, that calls out""" start="00:07:01.503" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""to an external plus-one function,""" start="00:07:03.968" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""to handle floating number and big integers.""" start="00:07:06.623" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""Now, if we pass integers into this function,""" start="00:07:09.783" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""it's pretty fast because it's on the fast path.""" start="00:07:13.168" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""However, if we pass in a floating number,""" start="00:07:16.383" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""then it has to go through the slow path,""" start="00:07:19.768" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""doing an extra function call, which is slow.""" start="00:07:21.943" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""What speculation might help here is that,""" start="00:07:25.663" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""it can have flexible fast paths.""" start="00:07:28.734" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""When we pass a floating number into this function,""" start="00:07:31.543" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""which currently has only fixnumbers on the fast path,""" start="00:07:34.663" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""it also has to go through the slow path.""" start="00:07:37.401" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""But the difference is that, a speculative runtime can""" start="00:07:40.823" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""deoptimize and recompile the code to adapt to this.""" start="00:07:44.568" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""And when it recompiles, it might add""" start="00:07:47.863" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""floating number onto the fast path,""" start="00:07:50.368" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""and now floating number operations are also fast.""" start="00:07:52.743" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""And this kind of speculation is why""" start="00:07:55.103" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""speculative runtime can be really fast.""" start="00:07:58.568" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""Let's take a look at some benchmarks.""" start="00:08:03.703" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""They're obtained with the <i>elisp-benchmarks</i> library on ELPA.""" start="00:08:05.823" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""The blue line here is for nativecomp,""" start="00:08:09.523" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""and these blue areas mean that nativecomp is slower.""" start="00:08:12.601" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""And, likewise, green areas mean that""" start="00:08:16.143" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""Juicemacs is slower.""" start="00:08:19.134" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""At a glance, the two (or four)""" start="00:08:20.623" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""actually seems somehow on par, to me.""" start="00:08:22.868" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""But, let's take a closer look at some of them.""" start="00:08:25.243" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""So, the first few benchmarks are the classic,""" start="00:08:30.483" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""Fibonacci benchmarks.""" start="00:08:32.668" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""We know that, the series is formed by""" start="00:08:34.083" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""adding the previous two numbers in the series.""" start="00:08:36.934" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""And looking at this expression here,""" start="00:08:39.303" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""Fibonacci benchmarks are quite intensive""" start="00:08:41.701" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""in number additions, subtractions,""" start="00:08:44.143" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""and function calls, if you use recursions.""" start="00:08:46.801" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""And it is exactly why""" start="00:08:49.203" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""Fibonacci series is a good benchmark.""" start="00:08:51.001" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""And looking at the results here... wow.""" start="00:08:54.423" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""Emacs nativecomp executes instantaneously.""" start="00:08:57.343" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""It's a total defeat for Juicemacs, seemingly.""" start="00:08:59.943" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""Now, if you're into benchmarks, you know something is wrong here:""" start="00:09:04.623" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""we are comparing the different things.""" start="00:09:08.143" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""So let's look under the hood""" start="00:09:11.783" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""and disassemble the function""" start="00:09:14.201" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""with this convenient Emacs command""" start="00:09:15.583" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""called <i>disassemble</i>...""" start="00:09:17.568" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""And these two lines of code is what we got.""" start="00:09:19.163" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""So, we already can see""" start="00:09:23.143" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""what's going on here:""" start="00:09:24.701" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""GCC sees Fibonacci is a pure function,""" start="00:09:26.223" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""because it returns the same value""" start="00:09:30.063" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""for the same arguments,""" start="00:09:31.868" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""so GCC chooses to do the computation""" start="00:09:33.343" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""at compile time""" start="00:09:35.701" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""and inserts the final number directly""" start="00:09:36.823" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""into the compiled code.""" start="00:09:39.134" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""It is actually great!""" start="00:09:41.823" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""Because it shows that nativecomp""" start="00:09:43.703" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""knows about pure functions,""" start="00:09:45.401" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""and can do all kinds of things""" start="00:09:47.383" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""like removing or constant-folding them.""" start="00:09:48.701" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""And Juicemacs just does not do that.""" start="00:09:51.303" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""However, we are also concerned about""" start="00:09:54.503" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""the things we mentioned earlier:""" start="00:09:57.368" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""the performance of number additions,""" start="00:09:59.103" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""or function calls.""" start="00:10:00.901" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""So, in order to let the benchmarks""" start="00:10:03.083" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""show some extra things,""" start="00:10:05.634" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""we need to modify it a bit...""" start="00:10:06.963" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""by simply making things non-constant.""" start="00:10:08.368" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""With that, Emacs gets much slower now.""" start="00:10:11.423" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""And again, let's look what's""" start="00:10:15.303" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""happening behind these numbers.""" start="00:10:17.134" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""Similarly, with the <i>disassemble</i> command,""" start="00:10:21.183" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""we can look into the assembly.""" start="00:10:23.501" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""And again, we can already see""" start="00:10:25.743" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""what's happening here.""" start="00:10:28.020" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""So, Juicemacs, due to its speculation nature,""" start="00:10:29.403" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""supports fast paths for all three kind of numbers.""" start="00:10:32.183" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""However, currently, Emacs nativecomp""" start="00:10:35.543" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""does not have any fast path""" start="00:10:39.234" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""for the operations here like additions,""" start="00:10:41.343" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""or subtractions, or comparisons,""" start="00:10:43.434" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""which is exactly what""" start="00:10:45.903" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""Fibonacci benchmarks are measuring.""" start="00:10:48.068" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""Emacs, at this time, has to call some generic,""" start="00:10:51.063" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""external functions for them, and this is slow.""" start="00:10:53.801" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""But is nativecomp really that slow?""" start="00:11:00.063" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""So, I also ran the same benchmark""" start="00:11:03.303" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""in Common Lisp, with SBCL.""" start="00:11:04.968" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""And nativecomp is already fast,""" start="00:11:07.183" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""compared to untyped SBCL.""" start="00:11:09.001" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""It's because SBCL also emits call instructions""" start="00:11:11.103" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""when it comes to no type info.""" start="00:11:15.501" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""However, once we declare the types,""" start="00:11:18.583" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""SBCL is able to compile a fast path for fix numbers,""" start="00:11:21.701" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""which makes its performance on par""" start="00:11:25.383" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""with speculative JIT engines (that is, Juicemacs),""" start="00:11:27.468" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""because, now both of us are now on fast paths.""" start="00:11:30.783" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""Additionally, if we are bold enough""" start="00:11:36.063" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""to pass this safety zero flag to SBCL,""" start="00:11:38.401" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""it will remove all the slow paths""" start="00:11:41.303" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""and type checks,""" start="00:11:43.701" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""and its performance is close""" start="00:11:45.063" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""to what you get with C.""" start="00:11:46.368" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""Well, probably we don't want safety zero""" start="00:11:48.743" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""most of the time.""" start="00:11:51.300" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""But even then, if nativecomp were to""" start="00:11:52.163" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""get fast paths for more constructs,""" start="00:11:55.134" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""there certainly is quite""" start="00:11:57.863" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""some room for performance improvement.""" start="00:11:59.868" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""Let's look at some more benchmarks.""" start="00:12:04.063" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""For example, for this inclist,""" start="00:12:06.903" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""or increment-list, benchmark,""" start="00:12:08.934" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""Juicemacs is really slow here. Partly,""" start="00:12:11.023" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""it comes from the cost of Java boxing integers.""" start="00:12:14.334" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""On the other hand, for Emacs nativecomp,""" start="00:12:17.703" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""for this particular benchmark,""" start="00:12:20.301" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""it actually has fast paths""" start="00:12:22.143" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""for all of the operations.""" start="00:12:23.668" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""And that's why it can be so fast,""" start="00:12:25.623" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""and that also proves the nativecomp""" start="00:12:27.823" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""has a lot potential for improvement.""" start="00:12:30.668" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""There is another benchmark here""" start="00:12:33.943" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""that use advices.""" start="00:12:35.834" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""So Emacs Lisp supports using""" start="00:12:38.063" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""advices to override functions""" start="00:12:40.501" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""by wrapping the original function, and an advice""" start="00:12:42.303" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""function, two of them, inside a glue function.""" start="00:12:44.834" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""And in this benchmark, we advice the Fibonacci function""" start="00:12:47.543" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""to cache the first ten entries to speed up computation,""" start="00:12:51.468" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""as can be seen in the speed-up in the Juicemacs results.""" start="00:12:54.623" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""However, it seems that nativecomp does not yet""" start="00:13:00.103" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""compile glue functions, and that makes advices slower.""" start="00:13:02.901" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""With these benchmarks, let's discuss this big question:""" start="00:13:08.623" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""Should GNU Emacs adopt speculative JIT compilation?""" start="00:13:12.143" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""Well, the hidden question is actually,""" start="00:13:16.663" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""is it worth it?""" start="00:13:18.968" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""And, my personal answer is, maybe not.""" start="00:13:21.323" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""The first reason is that, slow paths, like, floating numbers,""" start="00:13:24.263" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""are actually not that frequent in Emacs.""" start="00:13:28.134" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""And optimizing for fast paths like fix numbers""" start="00:13:31.143" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""can already get us very good performance already.""" start="00:13:34.101" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""And the second or main reason is that,""" start="00:13:38.083" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""speculative JIT is very hard.""" start="00:13:40.334" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""LuaJIT, for example, took a genius to build.""" start="00:13:43.263" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""Even with the help of GCC, we need to hand-write""" start="00:13:46.943" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""all those fast path or slow path or switching logic.""" start="00:13:50.968" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""We need to find a way to deoptimize, which requires""" start="00:13:54.383" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""mapping machine registers back to interpreter stack.""" start="00:13:58.134" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""And also, speculation needs runtime info,""" start="00:14:01.903" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""which also costs us extra memory.""" start="00:14:04.068" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""Moreover, as is shown by some benchmarks above,""" start="00:14:07.423" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""there's some low-hanging fruits in nativecomp that""" start="00:14:10.863" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""might get us better performance with relatively lower effort.""" start="00:14:13.334" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""Compared to this, a JIT engine is a huge, huge undertaking.""" start="00:14:17.443" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""But, for Juicemacs, the JIT engine comes a lot cheaper,""" start="00:14:22.263" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""because, we are cheating by building on""" start="00:14:26.223" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""an existing compiler framework called Truffle.""" start="00:14:29.068" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""Truffle is a meta-compiler framework,""" start="00:14:33.543" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""which means that it lets you write""" start="00:14:35.983" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""an interpreter, add required annotations,""" start="00:14:37.634" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""and it will automatically turn the""" start="00:14:40.203" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""interpreter into a JIT runtime.""" start="00:14:42.501" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""So for example, here is a typical bytecode interpreter.""" start="00:14:45.743" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""After you add the required annotations,""" start="00:14:49.183" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""Truffle will know that,""" start="00:14:51.234" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""the bytecode here is constant, and it should""" start="00:14:52.623" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""unroll this loop here, to inline all those bytecode.""" start="00:14:55.534" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""And then, when Truffle""" start="00:14:59.223" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""compiles the code, it knows that:""" start="00:15:00.468" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""the first loop here does: x plus one,""" start="00:15:02.343" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""and the second does: return.""" start="00:15:05.234" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""And then it will compile all that into,""" start="00:15:07.823" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""return x plus 1,""" start="00:15:09.534" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""which is exactly what we would expect""" start="00:15:11.463" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""when compiling this pseudo code.""" start="00:15:14.068" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""Building on that, we can also easily implement speculation,""" start="00:15:17.783" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""by using this <i>transferToInterpreterAndInvalidate</i> function""" start="00:15:21.183" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""provided by Truffle.""" start="00:15:24.868" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""And Truffle will automatically turn that""" start="00:15:26.223" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""into deoptimization.""" start="00:15:28.534" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""Now, for example, when this add function""" start="00:15:30.783" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""is supplied with, two floating numbers.""" start="00:15:32.701" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""It will go through the slow path here,""" start="00:15:35.823" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""which might lead to a compiled slow path,""" start="00:15:38.343" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""or deoptimization.""" start="00:15:40.961" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""And going this deoptimization way,""" start="00:15:43.303" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""it can then update the runtime stats.""" start="00:15:45.734" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""And now, when the code is compiled again,""" start="00:15:48.323" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""Truffle will know,""" start="00:15:50.401" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""that these compilation stats, suggests that,""" start="00:15:51.703" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""we have floating numbers.""" start="00:15:54.101" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""And this floating point addition branch will""" start="00:15:55.663" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""then be incorporated into the fast path.""" start="00:15:58.734" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""To put it into Java code...""" start="00:16:02.703" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""Most operations are just as simple as this.""" start="00:16:06.103" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""And it supports fast paths for integers,""" start="00:16:08.823" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""floating numbers, and big integers.""" start="00:16:11.034" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""And the simplicity of this not only saves us work,""" start="00:16:14.063" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""but also enables Juicemacs to explore more things more rapidly.""" start="00:16:17.134" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""And actually, I have done some silly explorations.""" start="00:16:22.343" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""For example, I tried to constant-fold more things.""" start="00:16:26.583" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""Many of us have an Emacs config that stays""" start="00:16:30.303" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""largely unchanged, at least during one Emacs session.""" start="00:16:32.768" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""And that means many of the global variables""" start="00:16:36.783" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""in ELisp are constant.""" start="00:16:39.668" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""And with speculation, we can""" start="00:16:42.423" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""speculate about the stable ones,""" start="00:16:44.601" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""and try to inline them as constants.""" start="00:16:46.783" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""And this might improve performance,""" start="00:16:49.663" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""or maybe not?""" start="00:16:51.734" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""Because, we will need a full editor""" start="00:16:53.183" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""to get real world data.""" start="00:16:55.368" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""I also tried changing cons lists to be backed""" start="00:16:58.223" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""by some arrays, because, maybe arrays are faster, I guess?""" start="00:17:01.734" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""But in the end, <i>setcdr</i> requires some kind of indirection,""" start="00:17:05.343" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""and that actually makes the performance worse.""" start="00:17:09.034" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""And for regular expressions,""" start="00:17:12.983" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""I also tried borrowing techniques from PCRE JIT,""" start="00:17:14.734" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""which is quite fast in itself, but it is""" start="00:17:18.023" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""unfortunately unsupported by Java Truffle runtime.""" start="00:17:20.668" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""So, looking at these, well,""" start="00:17:24.263" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""explorations can fail, certainly.""" start="00:17:27.334" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""But, with Truffle and Java, these,""" start="00:17:30.343" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""for now, are not that hard to implement,""" start="00:17:32.801" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""and also very often, they teach us something""" start="00:17:34.983" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""in return, whether or not they fail.""" start="00:17:37.668" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""Finally, let's talk about some explorations""" start="00:17:42.463" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""that we might get into in the future.""" start="00:17:45.334" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""For the JIT engine, for example,""" start="00:17:47.983" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""currently I'm looking into the implementation of""" start="00:17:49.783" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""nativecomp to maybe reuse some of its optimizations.""" start="00:17:52.634" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""For the GUI, I'm very very slowly working on one.""" start="00:17:56.983" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""If it ever completes, I have one thing""" start="00:18:01.423" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""I'm really looking forward to implementing.""" start="00:18:03.734" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""That is, inlining widgets, or even""" start="00:18:06.703" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""other buffers, directly into a buffer.""" start="00:18:08.901" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""Well, it's because, people sometimes complain""" start="00:18:11.863" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""about Emacs's GUI capabilities,""" start="00:18:13.968" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""But I personally think that supporting inlining,""" start="00:18:16.103" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""like a whole buffer inside another buffer as a rectangle,""" start="00:18:19.768" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""could get us very far in layout abilities.""" start="00:18:23.143" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""And this approach should also""" start="00:18:26.983" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""be compatible with terminals.""" start="00:18:28.568" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""And I really want to see how this idea""" start="00:18:30.943" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""plays out with Juicemacs.""" start="00:18:32.934" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""And of course, there's Lisp concurrency.""" start="00:18:36.103" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""And currently i'm thinking of a JavaScript-like,""" start="00:18:39.063" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""transparent, single-thread model, using Java's virtual threads.""" start="00:18:42.168" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""But anyway, if you are interested in JIT compilation,""" start="00:18:46.383" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""Truffle, or anything above,""" start="00:18:49.968" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""or maybe you have your own ideas,""" start="00:18:51.763" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""you are very welcome to reach out!""" start="00:18:53.868" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""Juicemacs does need to implement many more built-in functions,""" start="00:18:56.383" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""and any help would be very appreciated.""" start="00:19:00.034" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""And I promise, it can be a very fun playground""" start="00:19:03.163" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""to learn about Emacs and do crazy things.""" start="00:19:05.801" video="mainVideo-juicemacs" id="subtitle"]]
+[[!template text="""Thank you!""" start="00:19:08.443" video="mainVideo-juicemacs" id="subtitle"]]
+
+</div>Questions or comments? Please e-mail [kana@iroiro.party](mailto:kana@iroiro.party?subject=Comment%20for%20EmacsConf%202023%20juicemacs%3A%20Juicemacs%3A%20exploring%20speculative%20JIT%20compilation%20for%20ELisp%20in%20Java)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2025/info/juicemacs-before.md b/2025/info/juicemacs-before.md
new file mode 100644
index 00000000..f3092d8c
--- /dev/null
+++ b/2025/info/juicemacs-before.md
@@ -0,0 +1,19 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+
+The following image shows where the talk is in the schedule for Sat 2025-12-06. Solid lines show talks with Q&A via BigBlueButton. Dashed lines show talks with Q&A via IRC or Etherpad.<div class="schedule-in-context schedule-svg-container" data-slug="juicemacs">
+<svg width="700" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Schedule for Saturday</title> <rect width="700" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="/2025/talks/sat-open" title="Saturday opening remarks" data-slug="sat-open"> <title> 9:00- 9:10 Saturday opening remarks</title> <rect x="0" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(11,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="/2025/talks/org-babel" title="Making Org-Babel reactive" data-slug="org-babel"> <title> 9:10- 9:20 Making Org-Babel reactive</title> <rect x="13" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(24,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> org-babel</text></g></a> <a href="/2025/talks/reference" title="Emacs as a fully-fledged reference manager" data-slug="reference"> <title> 9:30- 9:55 Emacs as a fully-fledged reference manager</title> <rect x="41" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(73,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> reference</text></g></a> <a href="/2025/talks/gmail" title="org-gmail: A deep integration of Gmail into your Org Mode" data-slug="gmail"> <title> 10:15-10:40 org-gmail: A deep integration of Gmail into your Org Mode</title> <rect x="102" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(134,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gmail</text></g></a> <a href="/2025/talks/gnus" title="Reading and writing emails in GNU Emacs with Gnus" data-slug="gnus"> <title> 10:50-11:15 Reading and writing emails in GNU Emacs with Gnus</title> <rect x="150" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(182,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gnus</text></g></a> <a href="/2025/talks/latex" title="LaTeX export in org-mode: the overhaul" data-slug="latex"> <title> 11:25-11:45 LaTeX export in org-mode: the overhaul</title> <rect x="199" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(224,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> latex</text></g></a> <a href="/2025/talks/calc" title="Basic Calc functionality for engineering or electronics" data-slug="calc"> <title> 1:00- 1:25 Basic Calc functionality for engineering or electronics</title> <rect x="329" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(361,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> calc</text></g></a> <a href="/2025/talks/blee-lcnt" title="Blee-LCNT: An Emacs-centered content production and self-publication framework" data-slug="blee-lcnt"> <title> 1:35- 2:15 Blee-LCNT: An Emacs-centered content production and self-publication framework</title> <rect x="377" y="15" opacity="0.5" width="54" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(429,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> blee-lcnt</text></g></a> <a href="/2025/talks/greader" title="GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence" data-slug="greader"> <title> 2:35- 2:40 GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence</title> <rect x="459" y="15" opacity="0.5" width="6" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(463,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> greader</text></g></a> <a href="/2025/talks/open-mic" title="Open session" data-slug="open-mic"> <title> 2:50- 3:40 Open session</title> <rect x="480" y="15" opacity="0.5" width="68" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(546,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> open-mic</text></g></a> <a href="/2025/talks/sat-close" title="Saturday closing remarks / open session" data-slug="sat-close"> <title> 4:00- 4:10 Saturday closing remarks / open session</title> <rect x="576" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(587,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="/2025/talks/schemacs" title="One year progress update Schemacs (formerly Gypsum)" data-slug="schemacs"> <title> 9:30- 9:55 One year progress update Schemacs (formerly Gypsum)</title> <rect x="41" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(73,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> schemacs</text></g></a> <a href="/2025/talks/juicemacs" title="Juicemacs: exploring speculative JIT compilation for ELisp in Java" data-slug="juicemacs"> <title> 10:15-10:35 Juicemacs: exploring speculative JIT compilation for ELisp in Java</title> <rect stroke-width="3" x="102" y="75" opacity="0.8" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(127,133)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> juicemacs</text></g></a> <a href="/2025/talks/swanky" title="Swanky Python: Interactive development for Python" data-slug="swanky"> <title> 10:45-11:10 Swanky Python: Interactive development for Python</title> <rect x="144" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(176,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> swanky</text></g></a> <a href="/2025/talks/python" title="Interactive Python programming in Emacs" data-slug="python"> <title> 11:20-11:40 Interactive Python programming in Emacs</title> <rect x="192" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(217,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <a href="/2025/talks/llm" title="Emacs, editors, and LLM driven workflows" data-slug="llm"> <title> 1:00- 1:25 Emacs, editors, and LLM driven workflows</title> <rect x="329" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(361,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> llm</text></g></a> <a href="/2025/talks/private-ai" title="Emacs and private AI: a great match" data-slug="private-ai"> <title> 1:45- 2:05 Emacs and private AI: a great match</title> <rect x="391" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(416,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> private-ai</text></g></a> <a href="/2025/talks/commonlisp" title="Common Lisp images communicating like-a-human through shared Emacs slime and eev" data-slug="commonlisp"> <title> 2:25- 2:55 Common Lisp images communicating like-a-human through shared Emacs slime and eev</title> <rect x="446" y="75" opacity="0.5" width="41" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(485,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> commonlisp</text></g></a> <a href="/2025/talks/graphics" title="Modern Emacs/Elisp hardware/software accelerated graphics" data-slug="graphics"> <title> 3:05- 3:30 Modern Emacs/Elisp hardware/software accelerated graphics</title> <rect x="500" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(532,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> graphics</text></g></a> <g transform="translate(0,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(82,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(164,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(247,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(329,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(411,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(494,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(576,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(658,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 5 PM</text></g></svg>
+</div>
+
+[[!toc ]]
+Format: 20-min talk ; Q&A: Etherpad <https://pad.emacsconf.org/2025-juicemacs>
+Etherpad: <https://pad.emacsconf.org/2025-juicemacs>
+Discuss on IRC: [#emacsconf-dev](https://chat.emacsconf.org/?join=emacsconf,emacsconf-dev)
+Status: Q&A finished, IRC and pad will be archived on this page
+
+
+
+
+
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-juicemacs"><source src="https://media.emacsconf.org/2025/emacsconf-2025-juicemacs--juicemacs-exploring-speculative-jit-compilation-for-elisp-in-java--kana--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2025/captions/emacsconf-2025-juicemacs--juicemacs-exploring-speculative-jit-compilation-for-elisp-in-java--kana--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 19:10 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2025-juicemacs">Open Etherpad</a></li><li><a href="https://pad.emacsconf.org/2025-juicemacs">Open public Q&A</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-juicemacs--juicemacs-exploring-speculative-jit-compilation-for-elisp-in-java--kana--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-juicemacs--juicemacs-exploring-speculative-jit-compilation-for-elisp-in-java--kana--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-juicemacs--juicemacs-exploring-speculative-jit-compilation-for-elisp-in-java--kana--main.opus">Download --main.opus (17MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-juicemacs--juicemacs-exploring-speculative-jit-compilation-for-elisp-in-java--kana--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-juicemacs--juicemacs-exploring-speculative-jit-compilation-for-elisp-in-java--kana--main.webm">Download --main.webm (38MB)</a></li><li><a href="https://youtu.be/Lm-a7eZO5jk">View on Youtube</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2025/info/juicemacs-nav.md b/2025/info/juicemacs-nav.md
new file mode 100644
index 00000000..b49eb432
--- /dev/null
+++ b/2025/info/juicemacs-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by time: <a href="/2025/talks/gmail">org-gmail: A deep integration of Gmail into your Org Mode</a>
+Next by time: <a href="/2025/talks/swanky">Swanky Python: Interactive development for Python</a>
+Track: <span class="sched-track Development">Development</span> - <strong><a href="https://emacsconf.org/2025/watch/dev">Watch</a></strong>
+</div>
diff --git a/2025/info/languages-after.md b/2025/info/languages-after.md
new file mode 100644
index 00000000..950f78ba
--- /dev/null
+++ b/2025/info/languages-after.md
@@ -0,0 +1,7 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+Questions or comments? Please e-mail [nospam.keram@gmail.com](mailto:nospam.keram@gmail.com?subject=Comment%20for%20EmacsConf%202023%20languages%3A%20Studying%20foreign%20languages%20with%20Emacs%2C%20Org%20Mode%20and%20gptel)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2025/info/languages-before.md b/2025/info/languages-before.md
new file mode 100644
index 00000000..a24ee5fd
--- /dev/null
+++ b/2025/info/languages-before.md
@@ -0,0 +1,13 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+[[!toc ]]
+Format: 10-min talk cancelled
+Discuss on IRC: [#emacsconf](https://chat.emacsconf.org/?join=emacsconf)
+Status: Sorry, this talk has been cancelled
+
+
+
+
+
+
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2025/info/languages-nav.md b/2025/info/languages-nav.md
new file mode 100644
index 00000000..35ed938a
--- /dev/null
+++ b/2025/info/languages-nav.md
@@ -0,0 +1,4 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+</div> \ No newline at end of file
diff --git a/2025/info/latex-after.md b/2025/info/latex-after.md
new file mode 100644
index 00000000..bb59217b
--- /dev/null
+++ b/2025/info/latex-after.md
@@ -0,0 +1,7 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+Questions or comments? Please e-mail [paaguti@gmail.com](mailto:paaguti@gmail.com?subject=Comment%20for%20EmacsConf%202023%20latex%3A%20LaTeX%20export%20in%20org-mode%3A%20the%20overhaul)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2025/info/latex-before.md b/2025/info/latex-before.md
new file mode 100644
index 00000000..92d8b976
--- /dev/null
+++ b/2025/info/latex-before.md
@@ -0,0 +1,19 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+
+The following image shows where the talk is in the schedule for Sat 2025-12-06. Solid lines show talks with Q&A via BigBlueButton. Dashed lines show talks with Q&A via IRC or Etherpad.<div class="schedule-in-context schedule-svg-container" data-slug="latex">
+<svg width="700" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Schedule for Saturday</title> <rect width="700" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="/2025/talks/sat-open" title="Saturday opening remarks" data-slug="sat-open"> <title> 9:00- 9:10 Saturday opening remarks</title> <rect x="0" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(11,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="/2025/talks/org-babel" title="Making Org-Babel reactive" data-slug="org-babel"> <title> 9:10- 9:20 Making Org-Babel reactive</title> <rect x="13" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(24,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> org-babel</text></g></a> <a href="/2025/talks/reference" title="Emacs as a fully-fledged reference manager" data-slug="reference"> <title> 9:30- 9:55 Emacs as a fully-fledged reference manager</title> <rect x="41" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(73,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> reference</text></g></a> <a href="/2025/talks/gmail" title="org-gmail: A deep integration of Gmail into your Org Mode" data-slug="gmail"> <title> 10:15-10:40 org-gmail: A deep integration of Gmail into your Org Mode</title> <rect x="102" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(134,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gmail</text></g></a> <a href="/2025/talks/gnus" title="Reading and writing emails in GNU Emacs with Gnus" data-slug="gnus"> <title> 10:50-11:15 Reading and writing emails in GNU Emacs with Gnus</title> <rect x="150" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(182,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gnus</text></g></a> <a href="/2025/talks/latex" title="LaTeX export in org-mode: the overhaul" data-slug="latex"> <title> 11:25-11:45 LaTeX export in org-mode: the overhaul</title> <rect stroke-width="3" x="199" y="15" opacity="0.8" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(224,73)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> latex</text></g></a> <a href="/2025/talks/calc" title="Basic Calc functionality for engineering or electronics" data-slug="calc"> <title> 1:00- 1:25 Basic Calc functionality for engineering or electronics</title> <rect x="329" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(361,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> calc</text></g></a> <a href="/2025/talks/blee-lcnt" title="Blee-LCNT: An Emacs-centered content production and self-publication framework" data-slug="blee-lcnt"> <title> 1:35- 2:15 Blee-LCNT: An Emacs-centered content production and self-publication framework</title> <rect x="377" y="15" opacity="0.5" width="54" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(429,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> blee-lcnt</text></g></a> <a href="/2025/talks/greader" title="GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence" data-slug="greader"> <title> 2:35- 2:40 GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence</title> <rect x="459" y="15" opacity="0.5" width="6" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(463,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> greader</text></g></a> <a href="/2025/talks/open-mic" title="Open session" data-slug="open-mic"> <title> 2:50- 3:40 Open session</title> <rect x="480" y="15" opacity="0.5" width="68" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(546,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> open-mic</text></g></a> <a href="/2025/talks/sat-close" title="Saturday closing remarks / open session" data-slug="sat-close"> <title> 4:00- 4:10 Saturday closing remarks / open session</title> <rect x="576" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(587,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="/2025/talks/schemacs" title="One year progress update Schemacs (formerly Gypsum)" data-slug="schemacs"> <title> 9:30- 9:55 One year progress update Schemacs (formerly Gypsum)</title> <rect x="41" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(73,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> schemacs</text></g></a> <a href="/2025/talks/juicemacs" title="Juicemacs: exploring speculative JIT compilation for ELisp in Java" data-slug="juicemacs"> <title> 10:15-10:35 Juicemacs: exploring speculative JIT compilation for ELisp in Java</title> <rect x="102" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(127,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> juicemacs</text></g></a> <a href="/2025/talks/swanky" title="Swanky Python: Interactive development for Python" data-slug="swanky"> <title> 10:45-11:10 Swanky Python: Interactive development for Python</title> <rect x="144" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(176,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> swanky</text></g></a> <a href="/2025/talks/python" title="Interactive Python programming in Emacs" data-slug="python"> <title> 11:20-11:40 Interactive Python programming in Emacs</title> <rect x="192" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(217,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <a href="/2025/talks/llm" title="Emacs, editors, and LLM driven workflows" data-slug="llm"> <title> 1:00- 1:25 Emacs, editors, and LLM driven workflows</title> <rect x="329" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(361,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> llm</text></g></a> <a href="/2025/talks/private-ai" title="Emacs and private AI: a great match" data-slug="private-ai"> <title> 1:45- 2:05 Emacs and private AI: a great match</title> <rect x="391" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(416,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> private-ai</text></g></a> <a href="/2025/talks/commonlisp" title="Common Lisp images communicating like-a-human through shared Emacs slime and eev" data-slug="commonlisp"> <title> 2:25- 2:55 Common Lisp images communicating like-a-human through shared Emacs slime and eev</title> <rect x="446" y="75" opacity="0.5" width="41" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(485,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> commonlisp</text></g></a> <a href="/2025/talks/graphics" title="Modern Emacs/Elisp hardware/software accelerated graphics" data-slug="graphics"> <title> 3:05- 3:30 Modern Emacs/Elisp hardware/software accelerated graphics</title> <rect x="500" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(532,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> graphics</text></g></a> <g transform="translate(0,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(82,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(164,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(247,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(329,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(411,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(494,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(576,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(658,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 5 PM</text></g></svg>
+</div>
+
+[[!toc ]]
+Format: 20-min talk ; Q&A: BigBlueButton conference room <https://media.emacsconf.org/2025/current/bbb-latex.html> Etherpad: <https://pad.emacsconf.org/2025-latex>
+Etherpad: <https://pad.emacsconf.org/2025-latex>
+Discuss on IRC: [#emacsconf-gen](https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen)
+Status: Q&A finished, IRC and pad will be archived on this page
+
+
+
+
+
+<div class="vid mainVideo"><div></div><div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2025-latex">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2025/current/bbb-latex.html">Open public Q&A</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-latex--latex-export-in-orgmode-the-overhaul--pedro-a-aranda-gutirrez--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-latex--latex-export-in-orgmode-the-overhaul--pedro-a-aranda-gutirrez--intro.webm">Download --intro.webm</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2025/info/latex-nav.md b/2025/info/latex-nav.md
new file mode 100644
index 00000000..cec53563
--- /dev/null
+++ b/2025/info/latex-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by time: <a href="/2025/talks/python">Interactive Python programming in Emacs</a>
+Next by time: <a href="/2025/talks/calc">Basic Calc functionality for engineering or electronics</a>
+Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2025/watch/gen">Watch</a></strong>
+</div>
diff --git a/2025/info/life-after.md b/2025/info/life-after.md
new file mode 100644
index 00000000..d94ed0da
--- /dev/null
+++ b/2025/info/life-after.md
@@ -0,0 +1,7 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+Questions or comments? Please e-mail [adougher9@gmail.com](mailto:adougher9@gmail.com?subject=Comment%20for%20EmacsConf%202023%20life%3A%20From%20FRDCSA%20to%20FLP2%3A%20Building%20AI-Powered%20Life%20Planning%20Systems%20in%20Emacs%20-%20A%20Journey%20from%20Research%20to%20Real-World%20Impact)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2025/info/life-before.md b/2025/info/life-before.md
new file mode 100644
index 00000000..d9c35617
--- /dev/null
+++ b/2025/info/life-before.md
@@ -0,0 +1,13 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+[[!toc ]]
+Format: 20-min talk cancelled
+Discuss on IRC: [#emacsconf](https://chat.emacsconf.org/?join=emacsconf)
+Status: Sorry, this talk has been cancelled
+
+
+
+
+
+
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2025/info/life-nav.md b/2025/info/life-nav.md
new file mode 100644
index 00000000..35ed938a
--- /dev/null
+++ b/2025/info/life-nav.md
@@ -0,0 +1,4 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+</div> \ No newline at end of file
diff --git a/2025/info/llm-after.md b/2025/info/llm-after.md
new file mode 100644
index 00000000..91904dd7
--- /dev/null
+++ b/2025/info/llm-after.md
@@ -0,0 +1,373 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<div class="transcript transcript-mainVideo"><a name="llm-mainVideo-transcript"></a><h1>Transcript</h1>
+
+
+<div class="transcript-heading">[[!template new="1" text="""Introduction""" start="00:00:01.040" video="mainVideo-llm" id="subtitle"]]</div>[[!template text="""Hi, I'm Andrew Hyatt.""" start="00:00:01.040" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""I'm going to talk to you today about Emacs and AI,""" start="00:00:03.080" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""and where things are right now""" start="00:00:09.400" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""in the world of Emacs and AI,""" start="00:00:10.880" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""via large language models,""" start="00:00:12.120" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""and where things might be going,""" start="00:00:14.160" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""and what it means for the future of Emacs.""" start="00:00:17.000" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""I think what we're seeing with Emacs is interesting.""" start="00:00:22.700" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""We've seen a lot of different things""" start="00:00:27.280" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""come around in the past year,""" start="00:00:29.400" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""in the past several years.""" start="00:00:31.560" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""There's lots of different solutions.""" start="00:00:33.120" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""But in the past year, things have been very interesting.""" start="00:00:35.080" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""I think there's new and interesting questions""" start="00:00:36.760" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""about what does it mean to use Emacs?""" start="00:00:39.680" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""What does it mean to use any editor?""" start="00:00:43.280" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""I'm going to be talking about Emacs,""" start="00:00:45.480" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""and I'm going to show you various Emacs packages""" start="00:00:47.280" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""as demonstrations of these ideas.""" start="00:00:50.360" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""But there's the general question of""" start="00:00:53.080" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""what does it mean to use any editor, not just Emacs?""" start="00:00:59.840" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""What does it mean to do work?""" start="00:01:03.720" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""And I think the industry in general is facing these challenges""" start="00:01:06.240" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""of we don't really know where things are going to end up,""" start="00:01:10.720" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""but we do know the direction they're going.""" start="00:01:13.280" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""Emacs is a reflection of that.""" start="00:01:16.920" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""I think the answer for Emacs might be""" start="00:01:20.040" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""a little bit different than everything else,""" start="00:01:23.240" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""but I do want to show you what's out there""" start="00:01:25.720" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""so we can explore what are the possibilities""" start="00:01:28.600" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""of Emacs, AI, and generally how we get things done.""" start="00:01:33.320" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""Thanks. Let's dive right into it.""" start="00:01:41.120" video="mainVideo-llm" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Copilot""" start="00:01:44.720" video="mainVideo-llm" id="subtitle"]]</div>[[!template text="""We're going to start by showing you""" start="00:01:44.720" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""some things that are pretty well integrated,""" start="00:01:48.080" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""that look a lot like what you see in Emacs""" start="00:01:51.040" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""and fit in with the kinds of editing""" start="00:01:55.280" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""that you normally do in Emacs.""" start="00:01:58.680" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""So this is just kind of like, it's well integrated.""" start="00:02:02.640" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""So we're going to talk about Copilot and Semext.""" start="00:02:06.580" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""Copilot is by Microsoft via GitHub,""" start="00:02:08.780" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""and Semext is just my personal demo,""" start="00:02:12.680" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""but they're both showing you, you know,""" start="00:02:14.760" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""this kind of thing. Let's start with Copilot.""" start="00:02:18.040" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""Let's try out Copilot on just a standard bit of Elisp.""" start="00:02:24.400" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""We're going to write a Fibonacci function.""" start="00:02:31.920" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""Let's try out Emacs on a standard bit of Elisp.""" start="00:02:38.440" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""We're going to write a Fibonacci function.""" start="00:02:43.080" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""And you can see like as soon as we even start typing it,""" start="00:02:49.280" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""we get everything as a completion.""" start="00:02:53.160" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""So you can just press Tab here,""" start="00:02:56.340" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""and you've just completed""" start="00:02:59.880" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""a significant bunch of Emacs Lisp code.""" start="00:03:02.160" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""It will do this no matter where you are.""" start="00:03:06.800" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""So, pretty useful. It will just keep suggesting things.""" start="00:03:09.920" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""Do you want to do this?""" start="00:03:14.800" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""I'm not sure.""" start="00:03:16.440" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""But it usually is offering pretty reasonable things.""" start="00:03:17.480" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""So you could do this with code,""" start="00:03:22.840" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""of course, any code.""" start="00:03:29.300" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""You don't really even have to have a mode for it, right?""" start="00:03:32.120" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""That's kind of the beauty of AI is that""" start="00:03:33.920" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""you don't need any Emacs functionality for this,""" start="00:03:36.680" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""except for Copilot.""" start="00:03:38.520" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""It doesn't need to know the structure of your code.""" start="00:03:39.520" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""It doesn't need anything except for the text itself""" start="00:03:41.680" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""and whatever AI integration that this is.""" start="00:03:45.280" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""We can look at, you can do the same thing with Org-mode.""" start="00:03:51.240" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""So we could say create, no,""" start="00:03:53.740" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""how about let's, let's do, you know, spring cleaning.""" start="00:03:58.000" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""It's actually the fall, but still we'll say spring cleaning.""" start="00:04:02.920" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""And it'll start suggesting things that, you know,""" start="00:04:10.840" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""maybe at first, it doesn't really know what to do to""" start="00:04:12.768" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""clean up all code.""" start="00:04:15.440" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""It thinks I need to clean up code, but no,""" start="00:04:16.434" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""this is going to be actual, you know,""" start="00:04:18.401" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""clean hood over range. Clean out pantry.""" start="00:04:21.840" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""These are all really reasonable suggestions.""" start="00:04:31.568" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""You just keep going here.""" start="00:04:33.880" video="mainVideo-llm" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Semext""" start="00:04:38.320" video="mainVideo-llm" id="subtitle"]]</div>[[!template text="""I'm going to demonstrate Semext,""" start="00:04:38.320" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""which is a package I have on GNU Elpa,""" start="00:04:40.560" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""that is designed to integrate AI in a very Emacs-like way.""" start="00:04:43.880" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""And so what you could do is you could do a""" start="00:04:48.720" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""semext-search-forward.""" start="00:04:51.000" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""The UI looks just like other Emacs commands,""" start="00:04:54.800" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""but you can search for anything.""" start="00:04:58.720" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""There's really no way to express what I'm about to,""" start="00:05:02.380" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""what I'm trying to demonstrate""" start="00:05:06.280" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""in Emacs's normal search commands.""" start="00:05:08.680" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""You could really ask for anything.""" start="00:05:12.360" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""And it takes a little while, which is not Emacs-like,""" start="00:05:15.400" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""but everything else is sort of like""" start="00:05:18.760" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""it's designed to be like Emacs,""" start="00:05:20.034" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""except way more powerful.""" start="00:05:21.720" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""You don't need any mode to be active for this.""" start="00:05:23.520" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""You just need the library""" start="00:05:27.120" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""and an AI provider of some sort, either locally""" start="00:05:32.040" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""or, you know, your favorite cloud provider.""" start="00:05:34.760" video="mainVideo-llm" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Integrated AI experiences: gptel, ellama, chatgpt-shell, etc.""" start="00:05:41.200" video="mainVideo-llm" id="subtitle"]]</div>[[!template text="""Now we're going to move on to a different way""" start="00:05:41.200" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""of interacting with AI and Emacs.""" start="00:05:43.680" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""This way is less like the normal editing experience.""" start="00:05:46.400" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""So you lose some familiarity. However, in exchange,""" start="00:05:52.320" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""it is a lot more powerful.""" start="00:05:57.000" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""And there's a whole suite of these tools.""" start="00:05:58.080" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""I'm going to demonstrate gptel,""" start="00:06:00.120" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""which is the most popular one.""" start="00:06:02.480" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""But there are many.""" start="00:06:05.780" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""And I think different people have""" start="00:06:06.400" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""their own preferences of what they like to use.""" start="00:06:08.480" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""We're going to try now something""" start="00:06:11.760" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""that is a step away from just editing.""" start="00:06:13.000" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""And we're going to, I'm actually using gptel.""" start="00:06:15.080" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""There are several packages that are going to be""" start="00:06:19.840" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""doing the same sort of thing as I'm going to show you.""" start="00:06:22.800" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""gptel has sort of become the most popular one.""" start="00:06:25.960" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""So that's why I'm showing that to you.""" start="00:06:30.000" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""But let's just highlight everything and say gptel rewrite.""" start="00:06:32.200" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""And gptel basically just has a few things.""" start="00:06:39.320" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""There's different ways of thinking about this.""" start="00:06:42.400" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""With just a few very configurable menus,""" start="00:06:45.120" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""you can do a large variety of things.""" start="00:06:50.000" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""So let's give rewrite instructions.""" start="00:06:53.960" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""&quot;Turn this into an iterative program""" start="00:06:59.820" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""instead of a recursive program.&quot;""" start="00:07:06.601" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""In Elisp, you really should not be using recursion.""" start="00:07:12.200" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""So we could say &quot;return to be ready&quot;.""" start="00:07:17.800" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""Do we accept it?""" start="00:07:20.360" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""Yes, we accept it. Or we could iterate and say, no, no,""" start="00:07:21.120" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""that's not what we meant. We meant something else.""" start="00:07:24.520" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""Or you did something a little something wrong.""" start="00:07:26.800" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""Please fix it.""" start="00:07:29.160" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""So this is all very powerful.""" start="00:07:29.880" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""Is this editing?""" start="00:07:31.880" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""Well, it's in the editor.""" start="00:07:33.800" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""You could do this while editing, while deleting,""" start="00:07:40.280" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""you could be doing some sort of traditional editing.""" start="00:07:42.760" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""And then this, which is editing""" start="00:07:44.960" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""in the sense that it's in your editor,""" start="00:07:47.680" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""you might have to highlight""" start="00:07:48.920" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""some parts of the file and do things,""" start="00:07:51.040" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""but generally you don't even need to,""" start="00:07:52.800" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""or you go to a spot and you say, put code at this spot.""" start="00:07:54.720" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""It's kind of like editing.""" start="00:07:59.880" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""I would say it's not exactly editing,""" start="00:08:01.960" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""but it's at least something that must happen in an editor""" start="00:08:05.840" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""and it's well integrated into Emacs.""" start="00:08:10.160" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""As you can tell, it used very sort of""" start="00:08:12.360" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""modern standard Emacs UI paradigms""" start="00:08:14.760" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""and it's all written in Elisp.""" start="00:08:18.240" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""Everything is happening in Elisp here.""" start="00:08:20.760" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""So this is just very much an Emacs experience.""" start="00:08:23.780" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""It's just not exactly editing""" start="00:08:25.960" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""because the thing doing the editing""" start="00:08:27.680" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""is the AI and not you.""" start="00:08:29.880" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""You're just kind of telling it what to do.""" start="00:08:32.520" video="mainVideo-llm" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Outside the editor""" start="00:08:36.040" video="mainVideo-llm" id="subtitle"]]</div>[[!template text="""Now we're going to go and look at a way of interaction""" start="00:08:36.040" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""that's even more powerful""" start="00:08:41.120" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""and even more disconnected from the normal editing experience.""" start="00:08:43.240" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""In fact, it's so disconnected""" start="00:08:46.280" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""that most people are using this without an editor.""" start="00:08:47.920" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""These are things like Claude Code""" start="00:08:52.400" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""or the sort of open source equivalent, Aider.""" start="00:08:57.880" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""There's a few other things that follow this pattern as well.""" start="00:09:01.080" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""But it's very interesting in the sense""" start="00:09:05.040" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""that while you can integrate these with the editors,""" start="00:09:07.480" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""and I'm going to show you an Emacs integration,""" start="00:09:09.840" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""you don't need to.""" start="00:09:12.040" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""And that's not the way most people are using them.""" start="00:09:13.520" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""And I find it very interesting that sort of""" start="00:09:16.940" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""we're going back kind of full circle where, you know,""" start="00:09:19.760" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""in the 1960s or 70s, we were using Ed from the terminal""" start="00:09:23.720" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""to edit files, but then we created editors,""" start="00:09:31.960" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""and that was a really good idea.""" start="00:09:35.640" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""It is a lot easier to edit files""" start="00:09:37.960" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""when you have an actual UI.""" start="00:09:40.168" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""But now it's 2025, and we're back in the terminal,""" start="00:09:42.500" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""and we're editing files through the terminal,""" start="00:09:46.880" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""and you know what, it's great,""" start="00:09:50.800" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""but I think it's even better with Emacs.""" start="00:09:53.600" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""On the other hand, it comes with some trade-offs,""" start="00:09:56.900" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""as you can see, as we will see.""" start="00:10:00.280" video="mainVideo-llm" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Outside Experiences: claude-code.el, aidermacs, eca""" start="00:10:04.734" video="mainVideo-llm" id="subtitle"]]</div>[[!template text="""Okay, we're going to look at""" start="00:10:04.734" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""[audio glitch] Claude Code IDE, aidermacs, ECA.""" start="00:10:07.468" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""Last time, I didn't show you all the variants.""" start="00:10:20.321" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""I do want to show you eca, which points to,""" start="00:10:22.640" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""it is a very similar tool in what it does,""" start="00:10:26.840" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""but does have a different""" start="00:10:29.800" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""and I think better type of Emacs integration.""" start="00:10:32.740" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""All right, we're going to demonstrate Claude Code IDE,""" start="00:10:37.240" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""which is one of three Claude Code packages.""" start="00:10:42.600" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""It's a bit confusing.""" start="00:10:46.840" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""One of them will be demoed by another presenter""" start="00:10:47.720" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""at the Emacs conference, so stay tuned for that.""" start="00:10:52.040" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""Here I'm just going to give you a little taste""" start="00:10:54.640" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""of what these packages look like.""" start="00:10:56.440" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""So if we say Claude Code IDE,""" start="00:10:58.760" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""it presents us with basically""" start="00:11:03.340" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""almost exactly what you would get""" start="00:11:06.840" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""when you're running this in the terminal.""" start="00:11:09.040" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""And essentially there's a terminal interface.""" start="00:11:11.520" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""You can see that there's a vterm.""" start="00:11:13.934" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""But here we're going to say, &quot;In scratch.el&quot;...""" start="00:11:16.660" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""let's say what we want to happen.""" start="00:11:20.700" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""[In scratch.el, there is a fibonacci function.""" start="00:11:23.401" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""Can you add all normal elisp headers""" start="00:11:32.134" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""and footers to this file?]""" start="00:11:39.568" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""So, we just say what's going to happen,""" start="00:11:43.860" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""and this is going to do things in the background.""" start="00:11:45.841" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""It's not going to do things through Emacs.""" start="00:11:48.400" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""That said, there is an integration with Emacs,""" start="00:11:50.980" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""so that it can do things like show you these nice ediffs.""" start="00:11:54.080" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""My screen is not really wide enough""" start="00:12:00.660" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""to show you a really great ediff here,""" start="00:12:03.200" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""but you can kind of see what it's doing,""" start="00:12:04.700" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""and you can see, yeah, that looks good,""" start="00:12:06.240" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""so you could say yes, yes, accept the changes,""" start="00:12:09.080" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""and if we... Just need to revert the buffer.""" start="00:12:14.121" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""We can quit the printout of this.""" start="00:12:25.300" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""We see that it just did everything I asked it to.""" start="00:12:28.460" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""Is everything exactly right?""" start="00:12:33.020" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""Probably not. It's reasonable for a start though.""" start="00:12:36.140" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""But you could ask it to do anything.""" start="00:12:39.160" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""You could say, write unit tests for this, and it will.""" start="00:12:40.960" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""You could say, write me a suite of functions""" start="00:12:45.340" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""like Fibonacci, and it'll probably do something reasonable.""" start="00:12:49.020" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""But you can see this is not editing.""" start="00:12:52.580" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""There's nothing editing-like about this.""" start="00:12:54.901" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""That said, there is something that is editing.""" start="00:12:58.660" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""You need to give it instructions.""" start="00:13:07.160" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""You need to tell it what to do.""" start="00:13:08.600" video="mainVideo-llm" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Org files""" start="00:13:10.960" video="mainVideo-llm" id="subtitle"]]</div>[[!template text="""And what you could do is... You could have a project.org,""" start="00:13:10.960" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""and what you could do is you could have functions.""" start="00:13:19.620" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""The way I've done things often is ....""" start="00:13:23.900" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""You could say something like,""" start="00:13:26.660" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""unit tests for Fibonacci. How do you spell Fibonacci?""" start="00:13:28.440" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""I don't remember. But then you could say that this is,""" start="00:13:36.200" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""you could clock it, basically. org-clock.""" start="00:13:40.480" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""What I've done is...""" start="00:13:47.160" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""You could add custom commands to Claude Code,""" start="00:13:48.880" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""and you could just say, look, here's my Org file,""" start="00:13:50.400" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""read it and do the thing that I'm clocked in as.""" start="00:13:53.120" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""And then you can write a bunch of instructions here, like,""" start="00:13:57.880" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""I like to use ert for tests. Tests should, like, whatever.""" start="00:14:01.160" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""You should just say... everything""" start="00:14:07.040" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""you need to kind of specify.""" start="00:14:08.640" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""As you get to more complicated tasks,""" start="00:14:11.000" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""it's harder and harder to give it all the context""" start="00:14:13.200" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""it needs for a task,""" start="00:14:16.680" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""and Org Mode is actually a pretty good way to do this.""" start="00:14:17.800" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""I find that this works pretty well,""" start="00:14:22.300" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""and you can even have it instruct Claude""" start="00:14:24.080" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""to just mark things done in your Org file""" start="00:14:26.700" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""when they're done.""" start="00:14:29.334" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""And it knows how to do this, of course.""" start="00:14:30.680" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""So, let's just clock out.""" start="00:14:32.868" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""That's one way to do things.""" start="00:14:37.960" video="mainVideo-llm" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""ECA""" start="00:14:45.240" video="mainVideo-llm" id="subtitle"]]</div>[[!template text="""So one other thing I'd like to show you is eca,""" start="00:14:45.240" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""which, compared to Claude Code, ECA is open source.""" start="00:14:49.500" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""It's very nice in that respect.""" start="00:14:52.880" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""It doesn't have to use Anthropic's models.""" start="00:14:54.240" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""You can use local models,""" start="00:14:57.840" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""but it has the advantage of integrating very well with Emacs.""" start="00:15:00.280" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""I'm not going to demonstrate it,""" start="00:15:07.620" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""because it works essentially the same thing you could do""" start="00:15:08.560" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""approximately the same kinds of things""" start="00:15:11.160" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""you could do with Claude Code.""" start="00:15:14.120" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""You just write what you want to happen""" start="00:15:15.480" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""and it will make it happen.""" start="00:15:17.440" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""It again does not do this through Emacs,""" start="00:15:18.640" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""but what it does do is""" start="00:15:21.880" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""it gives you a much better Emacs interface""" start="00:15:23.040" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""that's not terminal-based,""" start="00:15:25.120" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""because you're not using it through the terminal,""" start="00:15:26.920" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""or not even through comint,""" start="00:15:29.640" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""you are using it through a backend""" start="00:15:31.240" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""that is exchanging structured information""" start="00:15:35.600" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""with this process that is doing all the work.""" start="00:15:37.500" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""But other than that,""" start="00:15:41.000" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""it's the same model as Claude Code""" start="00:15:41.901" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""and projects of that nature.""" start="00:15:44.520" video="mainVideo-llm" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Editing""" start="00:15:52.060" video="mainVideo-llm" id="subtitle"]]</div>[[!template text="""We've seen in the demos that I gave""" start="00:15:52.060" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""that there are AI experiences""" start="00:15:56.160" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""that are very natural in the world of editing.""" start="00:15:58.640" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""because they, like Copilot, just offers completion,""" start="00:16:01.280" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""it fits very well with what we all do in Emacs.""" start="00:16:05.340" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""And it's truly, yes, it's kind of a cheat in a sense""" start="00:16:09.480" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""for editing experiences,""" start="00:16:14.280" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""because it can do so much, but it's just editing.""" start="00:16:15.640" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""Whereas things like gptel and those kinds of tools,""" start="00:16:20.160" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""they are clearly in an editor and using editor,""" start="00:16:25.260" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""they're using Emacs, but they represent sort of like, well,""" start="00:16:29.800" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""you can edit for a while, then you could use these tools""" start="00:16:35.320" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""to do something that is not editing,""" start="00:16:37.760" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""this AI just changing the buffer for you. And that's fine.""" start="00:16:39.480" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""It's still... It may not be editing,""" start="00:16:45.900" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""but it's still clearly something that""" start="00:16:48.400" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""is useful to do in Emacs""" start="00:16:52.034" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""and belongs in Emacs.""" start="00:16:55.568" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""But the new tools like Claude Code and things like that""" start="00:16:57.040" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""are kind of different.""" start="00:17:01.860" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""Yes, they will get better integrated with Emacs,""" start="00:17:02.640" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""but it's not clear that they really need to.""" start="00:17:06.640" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""They can do a lot of things without editing.""" start="00:17:11.640" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""In a sense, editing is obsolete in some sense.""" start="00:17:15.480" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""For as many tasks, you don't need to edit anymore.""" start="00:17:19.240" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""And that's a nice thing.""" start="00:17:23.460" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""No one really knows when all this will end,""" start="00:17:26.440" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""how far things will go. It could be that in a decade or so,""" start="00:17:30.580" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""no one's really editing for work anymore.""" start="00:17:36.880" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""Maybe you're just writing instructions.""" start="00:17:41.040" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""You could do that with anything.""" start="00:17:43.160" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""You don't need Emacs or any special editor.""" start="00:17:44.320" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""We could all be using Notepad. That would be bad.""" start="00:17:47.440" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""But... I think it could go that far,""" start="00:17:50.440" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""but it could be that, well, for many specialized things,""" start="00:17:58.040" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""people are still using editing for certain tasks,""" start="00:18:01.840" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""but most tasks are getting fed to just...""" start="00:18:04.360" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""AI is just doing those things.""" start="00:18:07.001" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""In any case, I think it's clear that editing is diminishing,""" start="00:18:08.840" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""the need for editing itself is diminishing.""" start="00:18:15.760" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""And in such a world, It's interesting to think""" start="00:18:17.960" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""where Emacs is headed, especially in relation to""" start="00:18:21.880" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""all the other editors.""" start="00:18:24.800" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""I think people will use Emacs less.""" start="00:18:26.360" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""But I think other editors, like VS Code,""" start="00:18:28.600" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""may simply disappear or be a relatively fringe tool.""" start="00:18:31.640" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""And Emacs is going to follow its own path.""" start="00:18:38.000" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""It's very extensible. It could do anything.""" start="00:18:42.720" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""If there's one thing Emacs can do, it's adapt.""" start="00:18:44.680" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""Emacs has been around for a long time.""" start="00:18:47.920" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""It's pretty clear that Emacs will be around for a long time.""" start="00:18:51.680" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""It might be that in the future,""" start="00:18:54.800" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""editing is some sort of like an artisanal activity that we do.""" start="00:18:58.880" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""It's kind of weird to think about it.""" start="00:19:04.340" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""It's not like baking bread.""" start="00:19:05.600" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""But it is the sense that AI might be""" start="00:19:07.680" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""churning out code in the way, you know,""" start="00:19:10.080" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""the factories are turning out bread,""" start="00:19:12.400" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""but if you really want the good stuff,""" start="00:19:14.200" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""you'll have to do it yourself.""" start="00:19:17.140" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""I don't know if it'll be exactly like that,""" start="00:19:21.000" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""but it could be that Emacs survives and thrives""" start="00:19:23.960" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""in a very kind of specialized ecosystem of people""" start="00:19:29.520" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""who contribute and use it in the way""" start="00:19:33.560" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""it has survived and thrive right now.""" start="00:19:35.600" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""And I think that's a really nice way for all this to end up.""" start="00:19:39.540" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""There's the whole sense of how society will end up""" start="00:19:46.140" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""if all this happens. I don't know,""" start="00:19:48.720" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""but Emacs will be there for us when whatever happens.""" start="00:19:50.760" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""So thank you, and let's help make Emacs the best it can be""" start="00:19:54.640" video="mainVideo-llm" id="subtitle"]]
+[[!template text="""to survive and thrive in the next decade.""" start="00:20:00.080" video="mainVideo-llm" id="subtitle"]]
+
+</div>
+
+Captioner: amitav
+
+Questions or comments? Please e-mail [ahyatt@gmail.com](mailto:ahyatt@gmail.com?subject=Comment%20for%20EmacsConf%202023%20llm%3A%20Emacs%2C%20editors%2C%20and%20LLM%20driven%20workflows)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2025/info/llm-before.md b/2025/info/llm-before.md
new file mode 100644
index 00000000..45c12a80
--- /dev/null
+++ b/2025/info/llm-before.md
@@ -0,0 +1,19 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+
+The following image shows where the talk is in the schedule for Sat 2025-12-06. Solid lines show talks with Q&A via BigBlueButton. Dashed lines show talks with Q&A via IRC or Etherpad.<div class="schedule-in-context schedule-svg-container" data-slug="llm">
+<svg width="700" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Schedule for Saturday</title> <rect width="700" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="/2025/talks/sat-open" title="Saturday opening remarks" data-slug="sat-open"> <title> 9:00- 9:10 Saturday opening remarks</title> <rect x="0" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(11,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="/2025/talks/org-babel" title="Making Org-Babel reactive" data-slug="org-babel"> <title> 9:10- 9:20 Making Org-Babel reactive</title> <rect x="13" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(24,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> org-babel</text></g></a> <a href="/2025/talks/reference" title="Emacs as a fully-fledged reference manager" data-slug="reference"> <title> 9:30- 9:55 Emacs as a fully-fledged reference manager</title> <rect x="41" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(73,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> reference</text></g></a> <a href="/2025/talks/gmail" title="org-gmail: A deep integration of Gmail into your Org Mode" data-slug="gmail"> <title> 10:15-10:40 org-gmail: A deep integration of Gmail into your Org Mode</title> <rect x="102" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(134,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gmail</text></g></a> <a href="/2025/talks/gnus" title="Reading and writing emails in GNU Emacs with Gnus" data-slug="gnus"> <title> 10:50-11:15 Reading and writing emails in GNU Emacs with Gnus</title> <rect x="150" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(182,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gnus</text></g></a> <a href="/2025/talks/latex" title="LaTeX export in org-mode: the overhaul" data-slug="latex"> <title> 11:25-11:45 LaTeX export in org-mode: the overhaul</title> <rect x="199" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(224,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> latex</text></g></a> <a href="/2025/talks/calc" title="Basic Calc functionality for engineering or electronics" data-slug="calc"> <title> 1:00- 1:25 Basic Calc functionality for engineering or electronics</title> <rect x="329" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(361,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> calc</text></g></a> <a href="/2025/talks/blee-lcnt" title="Blee-LCNT: An Emacs-centered content production and self-publication framework" data-slug="blee-lcnt"> <title> 1:35- 2:15 Blee-LCNT: An Emacs-centered content production and self-publication framework</title> <rect x="377" y="15" opacity="0.5" width="54" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(429,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> blee-lcnt</text></g></a> <a href="/2025/talks/greader" title="GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence" data-slug="greader"> <title> 2:35- 2:40 GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence</title> <rect x="459" y="15" opacity="0.5" width="6" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(463,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> greader</text></g></a> <a href="/2025/talks/open-mic" title="Open session" data-slug="open-mic"> <title> 2:50- 3:40 Open session</title> <rect x="480" y="15" opacity="0.5" width="68" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(546,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> open-mic</text></g></a> <a href="/2025/talks/sat-close" title="Saturday closing remarks / open session" data-slug="sat-close"> <title> 4:00- 4:10 Saturday closing remarks / open session</title> <rect x="576" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(587,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="/2025/talks/schemacs" title="One year progress update Schemacs (formerly Gypsum)" data-slug="schemacs"> <title> 9:30- 9:55 One year progress update Schemacs (formerly Gypsum)</title> <rect x="41" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(73,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> schemacs</text></g></a> <a href="/2025/talks/juicemacs" title="Juicemacs: exploring speculative JIT compilation for ELisp in Java" data-slug="juicemacs"> <title> 10:15-10:35 Juicemacs: exploring speculative JIT compilation for ELisp in Java</title> <rect x="102" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(127,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> juicemacs</text></g></a> <a href="/2025/talks/swanky" title="Swanky Python: Interactive development for Python" data-slug="swanky"> <title> 10:45-11:10 Swanky Python: Interactive development for Python</title> <rect x="144" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(176,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> swanky</text></g></a> <a href="/2025/talks/python" title="Interactive Python programming in Emacs" data-slug="python"> <title> 11:20-11:40 Interactive Python programming in Emacs</title> <rect x="192" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(217,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <a href="/2025/talks/llm" title="Emacs, editors, and LLM driven workflows" data-slug="llm"> <title> 1:00- 1:25 Emacs, editors, and LLM driven workflows</title> <rect stroke-width="3" x="329" y="75" opacity="0.8" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(361,133)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> llm</text></g></a> <a href="/2025/talks/private-ai" title="Emacs and private AI: a great match" data-slug="private-ai"> <title> 1:45- 2:05 Emacs and private AI: a great match</title> <rect x="391" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(416,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> private-ai</text></g></a> <a href="/2025/talks/commonlisp" title="Common Lisp images communicating like-a-human through shared Emacs slime and eev" data-slug="commonlisp"> <title> 2:25- 2:55 Common Lisp images communicating like-a-human through shared Emacs slime and eev</title> <rect x="446" y="75" opacity="0.5" width="41" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(485,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> commonlisp</text></g></a> <a href="/2025/talks/graphics" title="Modern Emacs/Elisp hardware/software accelerated graphics" data-slug="graphics"> <title> 3:05- 3:30 Modern Emacs/Elisp hardware/software accelerated graphics</title> <rect x="500" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(532,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> graphics</text></g></a> <g transform="translate(0,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(82,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(164,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(247,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(329,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(411,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(494,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(576,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(658,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 5 PM</text></g></svg>
+</div>
+
+[[!toc ]]
+Format: 21-min talk ; Q&A: BigBlueButton conference room <https://media.emacsconf.org/2025/current/bbb-llm.html> Etherpad: <https://pad.emacsconf.org/2025-llm>
+Etherpad: <https://pad.emacsconf.org/2025-llm>
+Discuss on IRC: [#emacsconf-dev](https://chat.emacsconf.org/?join=emacsconf,emacsconf-dev)
+Status: Q&A finished, IRC and pad will be archived on this page
+
+
+
+
+
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-llm"><source src="https://media.emacsconf.org/2025/emacsconf-2025-llm--emacs-editors-and-llm-driven-workflows--andrew-hyatt--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2025/captions/emacsconf-2025-llm--emacs-editors-and-llm-driven-workflows--andrew-hyatt--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 20:04 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2025-llm">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2025/current/bbb-llm.html">Open public Q&A</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-llm--emacs-editors-and-llm-driven-workflows--andrew-hyatt--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-llm--emacs-editors-and-llm-driven-workflows--andrew-hyatt--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-llm--emacs-editors-and-llm-driven-workflows--andrew-hyatt--main.opus">Download --main.opus (17MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-llm--emacs-editors-and-llm-driven-workflows--andrew-hyatt--main.png">Download --main.png</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-llm--emacs-editors-and-llm-driven-workflows--andrew-hyatt--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-llm--emacs-editors-and-llm-driven-workflows--andrew-hyatt--main.webm">Download --main.webm (45MB)</a></li><li><a href="https://youtu.be/U3kbEabBJ_s">View on Youtube</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2025/info/llm-nav.md b/2025/info/llm-nav.md
new file mode 100644
index 00000000..fcfbb800
--- /dev/null
+++ b/2025/info/llm-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by time: <a href="/2025/talks/calc">Basic Calc functionality for engineering or electronics</a>
+Next by time: <a href="/2025/talks/blee-lcnt">Blee-LCNT: An Emacs-centered content production and self-publication framework</a>
+Track: <span class="sched-track Development">Development</span> - <strong><a href="https://emacsconf.org/2025/watch/dev">Watch</a></strong>
+</div>
diff --git a/2025/info/modern-after.md b/2025/info/modern-after.md
new file mode 100644
index 00000000..4518aec2
--- /dev/null
+++ b/2025/info/modern-after.md
@@ -0,0 +1,251 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<div class="transcript transcript-mainVideo"><a name="modern-mainVideo-transcript"></a><h1>Transcript (unedited)</h1>
+
+[[!template text="""""" start="00:00:54.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""Hi! My name is Eduardo Ochs. I'm the""" start="00:00:55.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""author of an Emacs package called eev and""" start="00:00:57.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""the title of this video is""" start="00:01:00.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""&quot;Some problems of modernizing Emacs&quot;.""" start="00:01:03.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""Here is a summary of the main themes""" start="00:01:05.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""of this video. I'm going to talk mainly""" start="00:01:08.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""about these four things here. The first""" start="00:01:10.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""one is that Emacs has changed a lot in its""" start="00:01:12.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""recent versions, and now it has lots of""" start="00:01:15.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""types... so if we want to look under the""" start="00:01:18.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""hood and to understand what Emacs""" start="00:01:21.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""really does we are going to stumble on""" start="00:01:24.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""lots of types... and the""" start="00:01:27.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""current tree of classes and types""" start="00:01:30.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""looks like this... that is,""" start="00:01:34.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""is quite big.""" start="00:01:37.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""The second theme is that people used""" start="00:01:46.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""to say things like &quot;Anyone can learn Lisp""" start="00:01:49.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""in one day&quot;... I'm going to explain""" start="00:01:53.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""this quote, and I'm also going to show""" start="00:01:56.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""that now this is gone... anyway. This is a""" start="00:02:01.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""very short summary... details soon.""" start="00:02:04.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""I will also show how to display""" start="00:02:08.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""better &quot;inner views&quot; of Emacs objects...""" start="00:02:10.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""I'm going to Define what is an inner view,""" start="00:02:13.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""of course.""" start="00:02:16.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""The main trick is that we are going""" start="00:02:18.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""to use one of the ways of displaying""" start="00:02:20.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""internal objects, that is the `cl-print'""" start="00:02:24.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""family of functions, for example,""" start="00:02:29.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""`cl-prin1-to-string', and here are some""" start="00:02:32.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""examples of the kind of output that we""" start="00:02:35.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""are going to see...""" start="00:02:37.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""for example, if we run these two lines""" start="00:02:38.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""here the first line defines a function `foo'""" start="00:02:44.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""and the second line sets `o' to the""" start="00:02:47.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""internal view of the definition of `foo'.""" start="00:02:52.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""In older Emacses `o' would be just a""" start="00:02:54.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""list that looks... that would look very""" start="00:02:59.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""similar to this line here... but in newer""" start="00:03:02.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""Emacses the result of this - I mean, the""" start="00:03:05.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""the contents of `o' is this thing here,""" start="00:03:09.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""that looks quite different""" start="00:03:12.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""from this definition.""" start="00:03:15.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""So, in older Emacses""" start="00:03:18.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""the contents of the""" start="00:03:21.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""function cell of `o'...""" start="00:03:25.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""sorry, of the function cell of `foo',""" start="00:03:28.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""would be an &quot;old-style lambda&quot;,""" start="00:03:30.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""that would be just a list like this...""" start="00:03:32.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""and in newer Emacses uh the contents of O would""" start="00:03:35.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""be a &quot;vector-like lambda&quot;... look for the""" start="00:03:39.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""square brackets here - this is a""" start="00:03:42.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""vector, but it is preceded by a hash sign.""" start="00:03:44.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""So this is what we call""" start="00:03:47.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""a &quot;vector-like lambda&quot;,""" start="00:03:49.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""and vector-like lambas do not""" start="00:03:51.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""have a canonical printed representation -""" start="00:03:53.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""they have at least two semicanonical""" start="00:03:55.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""printed representations...""" start="00:03:57.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""The first semicanonical""" start="00:03:59.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""printed representation is this one, that is""" start="00:04:01.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""generated by a family of functions with""" start="00:04:04.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""names like `prin1'...""" start="00:04:07.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""and the second semicanonical printed""" start="00:04:09.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""representation is like this -""" start="00:04:13.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""it looks like a list...""" start="00:04:17.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""it looks somewhat like this definition""" start="00:04:20.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""of `foo' here, but it has this""" start="00:04:23.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""`:dynbind' symbol here...""" start="00:04:27.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""and it turns out that when we use""" start="00:04:29.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""the `cl-print' family of functions we can""" start="00:04:32.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""reconfigure how things are printed...""" start="00:04:35.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""and I'm going to show several interesting""" start="00:04:37.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""ways of reconfiguring how lambdas are printed,""" start="00:04:40.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""and one of the ways is going to""" start="00:04:47.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""be like this.""" start="00:04:49.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""We can also use the `cl-print'""" start="00:04:52.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""functions with my indentation tricks to""" start="00:04:56.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""to display how types, or classes, are""" start="00:04:59.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""viewed internally by Emacs, and this is a""" start="00:05:04.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""big example...""" start="00:05:07.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""This is what Emacs considers as being""" start="00:05:10.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""the definition of the type""" start="00:05:14.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""`cl-structure-class',""" start="00:05:16.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""class and it is this big thing here.""" start="00:05:18.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""I edited it very lightly...""" start="00:05:21.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""I just uh deleted some line breaks here.""" start="00:05:24.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""And another thing that I want to to""" start="00:05:30.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""explain is that Emacs""" start="00:05:33.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""has some help functions that""" start="00:05:35.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""I have never liked...""" start="00:05:37.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""for most people they are good enough,""" start="00:05:39.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""but for me they aren't... they...""" start="00:05:41.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""uh, well - I'm going to say""" start="00:05:44.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""more about this later...""" start="00:05:48.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""and, for example,""" start="00:05:50.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""if we want a description of what is""" start="00:05:52.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""this type here, that we just saw in""" start="00:05:54.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""its internal view here...""" start="00:05:58.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""we can run either `describe-type'""" start="00:06:00.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""or my variant of `describe-type',""" start="00:06:02.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""and we get a help buffer""" start="00:06:04.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""that looks like this, in which""" start="00:06:07.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""these blue things that are underlined""" start="00:06:10.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""are &quot;buttons&quot;, in the classical sense...""" start="00:06:13.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""you can click on these buttons, or type""" start="00:06:15.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""RET on these buttons, and you will be""" start="00:06:17.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""taken to another help page, that is""" start="00:06:19.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""generated dynamically...""" start="00:06:22.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""and you can navigate back and forth...""" start="00:06:24.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""and well, whatever...""" start="00:06:28.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""and I'm going to explain my""" start="00:06:30.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""problems with these kinds of help buffers""" start="00:06:33.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""and what I'm trying to do to""" start="00:06:35.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""overcome these problems...""" start="00:06:37.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""One of my slogans in this video""" start="00:06:41.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""is going to be this one:""" start="00:06:43.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""&quot;Anyone can learn Lisp in one day&quot;.""" start="00:06:43.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""this is a part of a bigger quote""" start="00:06:45.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""that I took from a keynote presentation""" start="00:06:49.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""by Abelson and Sussman, who""" start="00:06:51.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""are two dinosaurs of Computer Science...""" start="00:06:54.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""Here is the full quote:""" start="00:06:58.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""&quot;Anyone can learn Lisp in one day -""" start="00:07:00.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""except that if they already know Fortran""" start="00:07:04.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""then it would take three days.&quot;""" start="00:07:06.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""This is a frame of the video...""" start="00:07:11.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""By the way I am going to to add""" start="00:07:24.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""this... &quot;and if the person is starting""" start="00:07:28.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""with Doom Emacs then it would take 5 years.&quot;""" start="00:07:32.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""why? I'm going to explain why.""" start="00:07:34.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""This is how Emacs used to be.""" start="00:07:39.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""If we execute these two expressions here""" start="00:07:43.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""the first one... sorry, each symbol can""" start="00:07:46.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""have two &quot;values&quot;,""" start="00:07:51.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""one is its &quot;value as a variable&quot;""" start="00:07:53.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""and another one is its &quot;value as a function&quot;...""" start="00:07:54.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""and if we run this we store 42""" start="00:07:58.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""in the &quot;value cell&quot; of the symbol `foo', and""" start="00:08:02.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""if we run this defun here it stores a""" start="00:08:07.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""certain anonymous function in the""" start="00:08:11.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""&quot;function cell&quot; of the symbol `foo'...""" start="00:08:14.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""and in Emacs, until some time ago""" start="00:08:18.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""if we did that and and if we ran""" start="00:08:22.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""this expression here the result""" start="00:08:27.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""would be 42,""" start="00:08:30.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""because of this line here, and if we""" start="00:08:31.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""ran this line here the result would be""" start="00:08:35.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""the anonymous function corresponding to""" start="00:08:37.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""this defun here...""" start="00:08:40.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""but now this has changed...""" start="00:08:41.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""the result of this thing here is this""" start="00:08:45.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""vector-like lambda here - but that doesn't""" start="00:08:48.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""matter much now...""" start="00:08:51.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""So, until some time ago""" start="00:08:54.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""if we did that and if we ran""" start="00:08:56.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""this expression here, (foo foo)...""" start="00:08:58.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""Emacs would do this: it would""" start="00:09:01.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""replace the first `foo' by this""" start="00:09:04.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""anonymous function here, it would replace""" start="00:09:06.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""the second `foo' by the value of `foo' as a""" start="00:09:09.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""variable, that is 42,""" start="00:09:11.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""and it would evaluate this, and the""" start="00:09:13.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""result would be 420.""" start="00:09:16.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""So, again, we used to have this slogan""" start="00:09:20.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""here, &quot;anyone can learn Lisp in one day&quot;...""" start="00:09:23.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""but now this is gone.""" start="00:09:26.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""Let me show... let me talk""" start="00:09:28.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""a bit more about why...""" start="00:09:30.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""the title of this slide is""" start="00:09:34.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""&quot;Lambdas for beginners broken&quot;...""" start="00:09:36.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""if we run this, as I've shown""" start="00:09:38.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""in the previous slide...""" start="00:09:41.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""in the old style, in old Emacses,""" start="00:09:43.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""the result of (symbol-function 'foo)""" start="00:09:45.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""would be this anonymous function here...""" start="00:09:47.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""and now we get this strange thing here.""" start="00:09:49.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""So, this is an &quot;old-style lambda&quot;,""" start="00:09:54.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""this is a &quot;vector-like lambda&quot;,""" start="00:09:58.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""and until the middle of 2024""" start="00:10:02.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""beginners could learn a lot of Lisp""" start="00:10:05.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""by thinking only in terms of""" start="00:10:08.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""objects like these...""" start="00:10:11.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""this is a function and this""" start="00:10:13.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""is an anonymous function, and""" start="00:10:15.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""they would learn how to draw cons cell""" start="00:10:17.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""diagrams like this thing here and this""" start="00:10:20.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""thing here...""" start="00:10:23.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""they would think on lists as""" start="00:10:25.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""being these trees here, and they""" start="00:10:27.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""would be able to understand a lot of""" start="00:10:29.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""Lisp just by thinking in these terms...""" start="00:10:32.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""and then vector-like lambdas started""" start="00:10:35.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""to appear in many places... and if we use""" start="00:10:39.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""&quot;vector-like lambdas&quot; in a wide sense,""" start="00:10:43.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""to mean all the new objects,""" start="00:10:46.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""these new objects, that are""" start="00:10:50.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""difficult to visualize... they also started""" start="00:10:54.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""to appear in many places.""" start="00:10:56.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""This is a continuation of the""" start="00:10:58.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""previous slide - this part here is a copy""" start="00:11:01.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""of things that were in the previous slide...""" start="00:11:04.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""before 2024 beginners could""" start="00:11:06.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""open black boxes like this...""" start="00:11:12.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""they could try to see what was in the""" start="00:11:17.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""function cell of the symbol `foo'...""" start="00:11:20.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""and they would see something elegant and""" start="00:11:24.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""mind-blowing... and they would start to love""" start="00:11:27.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""Lisp immediately.""" start="00:11:29.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""Now what they get - what they see -""" start="00:11:31.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""is a tiny part of a very complex structure""" start="00:11:33.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""that is very powerful but that is""" start="00:11:35.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""very difficult to understand...""" start="00:11:39.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""and now our beginners are overwhelmed""" start="00:11:41.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""instead of mind-blown.""" start="00:11:44.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""Note that I said &quot;black box&quot; here.""" start="00:11:46.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""Let me explain the term.""" start="00:11:48.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""We can open what's inside of `foo'...""" start="00:11:52.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""we can open `foo' to see the contents of""" start="00:11:57.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""the symbol `foo', and we can try to see""" start="00:11:59.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""what's in the function cell of the""" start="00:12:02.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""symbol `foo'...""" start="00:12:06.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""so we can open the box, but what we get""" start="00:12:08.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""is something very difficult to understand,""" start="00:12:10.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""and so I'm going to say that""" start="00:12:13.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""when this happens that box is black.""" start="00:12:17.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""It is not totally black - we can open open it -""" start="00:12:21.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""but we don't understand what is going on there,""" start="00:12:23.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""so we declare that that is black.""" start="00:12:26.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""And... when these things started to happen""" start="00:12:30.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""_I_ was overwhelmed -""" start="00:12:33.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""and in this video I'm going to pretend""" start="00:12:38.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""that I was not the only person""" start="00:12:40.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""that was overwhelmed""" start="00:12:44.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""by these new structures""" start="00:12:46.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""that are not so elegant""" start="00:12:50.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""as the ones that we had before.""" start="00:12:52.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""Anyway...""" start="00:12:54.000" video="mainVideo-modern" id="subtitle"]]
+[[!template text="""""" start="00:12:56.000" video="mainVideo-modern" id="subtitle"]]
+
+</div>Questions or comments? Please e-mail [eduardoochs@gmail.com](mailto:eduardoochs@gmail.com?subject=Comment%20for%20EmacsConf%202023%20modern%3A%20Some%20problems%20of%20modernizing%20Emacs)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2025/info/modern-before.md b/2025/info/modern-before.md
new file mode 100644
index 00000000..86b09fda
--- /dev/null
+++ b/2025/info/modern-before.md
@@ -0,0 +1,19 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+
+The following image shows where the talk is in the schedule for Sun 2025-12-07. Solid lines show talks with Q&A via BigBlueButton. Dashed lines show talks with Q&A via IRC or Etherpad.<div class="schedule-in-context schedule-svg-container" data-slug="modern">
+<svg width="700" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Schedule for Sunday</title> <rect width="700" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="/2025/talks/sun-open" title="Sunday opening remarks" data-slug="sun-open"> <title> 9:00- 9:10 Sunday opening remarks</title> <rect x="0" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(11,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-open</text></g></a> <a href="/2025/talks/modern" title="Some problems of modernizing Emacs" data-slug="modern"> <title> 9:10- 9:30 Some problems of modernizing Emacs</title> <rect stroke-width="3" x="13" y="15" opacity="0.8" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(38,73)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> modern</text></g></a> <a href="/2025/talks/reader" title="An introduction to the Emacs Reader" data-slug="reader"> <title> 9:40-10:15 An introduction to the Emacs Reader</title> <rect x="54" y="15" opacity="0.5" width="48" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(100,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> reader</text></g></a> <a href="/2025/talks/weights" title="Weightlifting tracking with Emacs on Android" data-slug="weights"> <title> 10:35-10:45 Weightlifting tracking with Emacs on Android</title> <rect x="130" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(141,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> weights</text></g></a> <a href="/2025/talks/completion" title="corfu+yasnippet: Easier than I thought" data-slug="completion"> <title> 11:05-11:25 corfu+yasnippet: Easier than I thought</title> <rect x="171" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(196,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> completion</text></g></a> <a href="/2025/talks/zettelkasten" title="Zettelkasten for regular Emacs hackers" data-slug="zettelkasten"> <title> 1:00- 1:25 Zettelkasten for regular Emacs hackers</title> <rect x="329" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(361,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> zettelkasten</text></g></a> <a href="/2025/talks/hyperboleqa" title="Questions and answers to help you fly with Hyperbole" data-slug="hyperboleqa"> <title> 1:45- 2:15 Questions and answers to help you fly with Hyperbole</title> <rect x="391" y="15" opacity="0.5" width="41" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(430,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperboleqa</text></g></a> <a href="/2025/talks/gardening" title="Gardening in Emacs: A Windows user's tale of tending, tweaking, and triumph" data-slug="gardening"> <title> 2:15- 2:35 Gardening in Emacs: A Windows user's tale of tending, tweaking, and triumph</title> <rect x="432" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(457,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gardening</text></g></a> <a href="/2025/talks/bookclub-tapas" title="Bookclub tapas" data-slug="bookclub-tapas"> <title> 2:45- 3:20 Bookclub tapas</title> <rect x="473" y="15" opacity="0.5" width="48" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(519,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> bookclub-tapas</text></g></a> <a href="/2025/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"> <title> 3:40- 3:50 Sunday closing remarks</title> <rect x="549" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(560,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-close</text></g></a> <g transform="translate(0,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(82,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(164,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(247,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(329,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(411,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(494,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(576,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(658,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 5 PM</text></g></svg>
+</div>
+
+[[!toc ]]
+Format: 20-min talk ; Q&A: IRC <https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen> Etherpad: <https://pad.emacsconf.org/2025-modern>
+Etherpad: <https://pad.emacsconf.org/2025-modern>
+Discuss on IRC: [#emacsconf-gen](https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen)
+Status: Q&A open for participation
+<div>Times in different time zones:</div><div class="times" start="2025-12-07T14:10:00Z" end="2025-12-07T14:30:00Z"><div class="conf-time">Sunday, Dec 7 2025, ~9:10 AM - 9:30 AM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Sunday, Dec 7 2025, ~8:10 AM - 8:30 AM CST (US/Central)<br />Sunday, Dec 7 2025, ~7:10 AM - 7:30 AM MST (US/Mountain)<br />Sunday, Dec 7 2025, ~6:10 AM - 6:30 AM PST (US/Pacific)<br />Sunday, Dec 7 2025, ~2:10 PM - 2:30 PM UTC <br />Sunday, Dec 7 2025, ~3:10 PM - 3:30 PM CET (Europe/Paris)<br />Sunday, Dec 7 2025, ~4:10 PM - 4:30 PM EET (Europe/Athens)<br />Sunday, Dec 7 2025, ~7:40 PM - 8:00 PM IST (Asia/Kolkata)<br />Sunday, Dec 7 2025, ~10:10 PM - 10:30 PM +08 (Asia/Singapore)<br />Sunday, Dec 7 2025, ~11:10 PM - 11:30 PM JST (Asia/Tokyo)</div></div><div><strong><a href="/2025/watch/gen/">Find out how to watch and participate</a></strong></div>
+
+
+
+
+<div class="vid mainVideo"><div></div><div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2025-modern">Open Etherpad</a></li><li><a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen">Open public Q&A</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-modern--some-problems-of-modernizing-emacs--eduardo-ochs--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-modern--some-problems-of-modernizing-emacs--eduardo-ochs--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-modern--some-problems-of-modernizing-emacs--eduardo-ochs--main.vtt">Download --main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-modern--some-problems-of-modernizing-emacs--eduardo-ochs--original.mp4">Download --original.mp4 (35MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-modern--some-problems-of-modernizing-emacs--eduardo-ochs--original.vtt">Download --original.vtt</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2025/info/modern-nav.md b/2025/info/modern-nav.md
new file mode 100644
index 00000000..48855c90
--- /dev/null
+++ b/2025/info/modern-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by time: <a href="/2025/talks/sun-open">Sunday opening remarks</a>
+Next by time: <a href="/2025/talks/reader">An introduction to the Emacs Reader</a>
+Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2025/watch/gen">Watch</a></strong>
+</div>
diff --git a/2025/info/n-angulator-after.md b/2025/info/n-angulator-after.md
new file mode 100644
index 00000000..a1f2fa21
--- /dev/null
+++ b/2025/info/n-angulator-after.md
@@ -0,0 +1,7 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+Questions or comments? Please e-mail [kevinbanjo@gmail.com](mailto:kevinbanjo@gmail.com?subject=Comment%20for%20EmacsConf%202023%20n-angulator%3A%20Org-mode%20GTD%20vs%20N-angulator%20GTD)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2025/info/n-angulator-before.md b/2025/info/n-angulator-before.md
new file mode 100644
index 00000000..a24ee5fd
--- /dev/null
+++ b/2025/info/n-angulator-before.md
@@ -0,0 +1,13 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+[[!toc ]]
+Format: 10-min talk cancelled
+Discuss on IRC: [#emacsconf](https://chat.emacsconf.org/?join=emacsconf)
+Status: Sorry, this talk has been cancelled
+
+
+
+
+
+
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2025/info/n-angulator-nav.md b/2025/info/n-angulator-nav.md
new file mode 100644
index 00000000..35ed938a
--- /dev/null
+++ b/2025/info/n-angulator-nav.md
@@ -0,0 +1,4 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+</div> \ No newline at end of file
diff --git a/2025/info/open-mic-after.md b/2025/info/open-mic-after.md
new file mode 100644
index 00000000..7caff151
--- /dev/null
+++ b/2025/info/open-mic-after.md
@@ -0,0 +1,7 @@
+<!-- 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%20open-mic%3A%20Open%20session)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2025/info/open-mic-before.md b/2025/info/open-mic-before.md
new file mode 100644
index 00000000..ab9982a3
--- /dev/null
+++ b/2025/info/open-mic-before.md
@@ -0,0 +1,19 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+
+The following image shows where the talk is in the schedule for Sat 2025-12-06. Solid lines show talks with Q&A via BigBlueButton. Dashed lines show talks with Q&A via IRC or Etherpad.<div class="schedule-in-context schedule-svg-container" data-slug="open-mic">
+<svg width="700" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Schedule for Saturday</title> <rect width="700" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="/2025/talks/sat-open" title="Saturday opening remarks" data-slug="sat-open"> <title> 9:00- 9:10 Saturday opening remarks</title> <rect x="0" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(11,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="/2025/talks/org-babel" title="Making Org-Babel reactive" data-slug="org-babel"> <title> 9:10- 9:20 Making Org-Babel reactive</title> <rect x="13" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(24,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> org-babel</text></g></a> <a href="/2025/talks/reference" title="Emacs as a fully-fledged reference manager" data-slug="reference"> <title> 9:30- 9:55 Emacs as a fully-fledged reference manager</title> <rect x="41" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(73,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> reference</text></g></a> <a href="/2025/talks/gmail" title="org-gmail: A deep integration of Gmail into your Org Mode" data-slug="gmail"> <title> 10:15-10:40 org-gmail: A deep integration of Gmail into your Org Mode</title> <rect x="102" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(134,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gmail</text></g></a> <a href="/2025/talks/gnus" title="Reading and writing emails in GNU Emacs with Gnus" data-slug="gnus"> <title> 10:50-11:15 Reading and writing emails in GNU Emacs with Gnus</title> <rect x="150" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(182,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gnus</text></g></a> <a href="/2025/talks/latex" title="LaTeX export in org-mode: the overhaul" data-slug="latex"> <title> 11:25-11:45 LaTeX export in org-mode: the overhaul</title> <rect x="199" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(224,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> latex</text></g></a> <a href="/2025/talks/calc" title="Basic Calc functionality for engineering or electronics" data-slug="calc"> <title> 1:00- 1:25 Basic Calc functionality for engineering or electronics</title> <rect x="329" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(361,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> calc</text></g></a> <a href="/2025/talks/blee-lcnt" title="Blee-LCNT: An Emacs-centered content production and self-publication framework" data-slug="blee-lcnt"> <title> 1:35- 2:15 Blee-LCNT: An Emacs-centered content production and self-publication framework</title> <rect x="377" y="15" opacity="0.5" width="54" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(429,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> blee-lcnt</text></g></a> <a href="/2025/talks/greader" title="GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence" data-slug="greader"> <title> 2:35- 2:40 GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence</title> <rect x="459" y="15" opacity="0.5" width="6" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(463,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> greader</text></g></a> <a href="/2025/talks/open-mic" title="Open session" data-slug="open-mic"> <title> 2:50- 3:40 Open session</title> <rect stroke-width="3" x="480" y="15" opacity="0.8" width="68" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(546,73)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> open-mic</text></g></a> <a href="/2025/talks/sat-close" title="Saturday closing remarks / open session" data-slug="sat-close"> <title> 4:00- 4:10 Saturday closing remarks / open session</title> <rect x="576" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(587,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="/2025/talks/schemacs" title="One year progress update Schemacs (formerly Gypsum)" data-slug="schemacs"> <title> 9:30- 9:55 One year progress update Schemacs (formerly Gypsum)</title> <rect x="41" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(73,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> schemacs</text></g></a> <a href="/2025/talks/juicemacs" title="Juicemacs: exploring speculative JIT compilation for ELisp in Java" data-slug="juicemacs"> <title> 10:15-10:35 Juicemacs: exploring speculative JIT compilation for ELisp in Java</title> <rect x="102" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(127,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> juicemacs</text></g></a> <a href="/2025/talks/swanky" title="Swanky Python: Interactive development for Python" data-slug="swanky"> <title> 10:45-11:10 Swanky Python: Interactive development for Python</title> <rect x="144" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(176,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> swanky</text></g></a> <a href="/2025/talks/python" title="Interactive Python programming in Emacs" data-slug="python"> <title> 11:20-11:40 Interactive Python programming in Emacs</title> <rect x="192" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(217,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <a href="/2025/talks/llm" title="Emacs, editors, and LLM driven workflows" data-slug="llm"> <title> 1:00- 1:25 Emacs, editors, and LLM driven workflows</title> <rect x="329" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(361,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> llm</text></g></a> <a href="/2025/talks/private-ai" title="Emacs and private AI: a great match" data-slug="private-ai"> <title> 1:45- 2:05 Emacs and private AI: a great match</title> <rect x="391" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(416,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> private-ai</text></g></a> <a href="/2025/talks/commonlisp" title="Common Lisp images communicating like-a-human through shared Emacs slime and eev" data-slug="commonlisp"> <title> 2:25- 2:55 Common Lisp images communicating like-a-human through shared Emacs slime and eev</title> <rect x="446" y="75" opacity="0.5" width="41" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(485,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> commonlisp</text></g></a> <a href="/2025/talks/graphics" title="Modern Emacs/Elisp hardware/software accelerated graphics" data-slug="graphics"> <title> 3:05- 3:30 Modern Emacs/Elisp hardware/software accelerated graphics</title> <rect x="500" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(532,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> graphics</text></g></a> <g transform="translate(0,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(82,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(164,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(247,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(329,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(411,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(494,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(576,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(658,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 5 PM</text></g></svg>
+</div>
+
+[[!toc ]]
+Format: 50-min talk ; Q&A: BigBlueButton conference room <https://media.emacsconf.org/2025/current/bbb-open-mic.html> Etherpad: <https://pad.emacsconf.org/2025-open-mic>
+Etherpad: <https://pad.emacsconf.org/2025-open-mic>
+Discuss on IRC: [#emacsconf-gen](https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen)
+Status: Q&A finished, IRC and pad will be archived on this page
+
+
+
+
+
+<div class="vid mainVideo"><div></div><div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2025-open-mic">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2025/current/bbb-open-mic.html">Open public Q&A</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-open-mic--open-session--participants--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-open-mic--open-session--participants--intro.webm">Download --intro.webm</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2025/info/open-mic-nav.md b/2025/info/open-mic-nav.md
new file mode 100644
index 00000000..1fea380b
--- /dev/null
+++ b/2025/info/open-mic-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by time: <a href="/2025/talks/greader">GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence</a>
+Next by time: <a href="/2025/talks/graphics">Modern Emacs/Elisp hardware/software accelerated graphics</a>
+Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2025/watch/gen">Watch</a></strong>
+</div>
diff --git a/2025/info/org-babel-after.md b/2025/info/org-babel-after.md
new file mode 100644
index 00000000..f788e2a1
--- /dev/null
+++ b/2025/info/org-babel-after.md
@@ -0,0 +1,221 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<div class="transcript transcript-mainVideo"><a name="org-babel-mainVideo-transcript"></a><h1>Transcript</h1>
+
+
+<div class="transcript-heading">[[!template new="1" text="""What are reactive notebooks?""" start="00:00:01.120" video="mainVideo-org-babel" id="subtitle"]]</div>[[!template text="""Hello, everyone. My name is Abhinav,""" start="00:00:01.120" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""and I'm going to talk about""" start="00:00:03.034" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""how to make Org Babel reactive. So reactivity here""" start="00:00:03.901" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""means reactivity in the sense of reactive notebooks.""" start="00:00:07.240" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""So if you used Org Babel,""" start="00:00:10.001" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""you might also have used Jupyter notebooks,""" start="00:00:11.601" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""which are basically notebooks primarily for""" start="00:00:13.934" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""Python programming,""" start="00:00:16.200" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""where you have these text and code blocks interleaved,""" start="00:00:16.934" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""and then you can execute every code block independently,""" start="00:00:20.101" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""and then you control the order of execution manually,""" start="00:00:23.158" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""or you can just run the code blocks""" start="00:00:25.859" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""from top to bottom. But with reactive notebooks,""" start="00:00:27.200" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""what happens is that there's another way of running""" start="00:00:29.700" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""which is basically by having all these""" start="00:00:32.928" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""dependent code blocks automatically get""" start="00:00:35.330" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""executed whenever you make a change.""" start="00:00:37.000" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""So for example, if you change a variable,""" start="00:00:38.901" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""everything else that's dependent on""" start="00:00:40.775" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""that variable will be executed automatically.""" start="00:00:42.160" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""I'll show you an example of what that looks like.""" start="00:00:44.434" video="mainVideo-org-babel" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Reactivity demo""" start="00:00:49.042" video="mainVideo-org-babel" id="subtitle"]]</div>[[!template text="""Right, here's an example reactive Notebook.""" start="00:00:49.042" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""So this is called Observable.""" start="00:00:51.763" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""Observable is this tool made by""" start="00:00:53.560" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""the creator of d3.js which is""" start="00:00:54.864" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""a famous JavaScript charting library. So here, the""" start="00:00:57.680" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""interface is very similar to Jupyter Notebook.""" start="00:01:01.500" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""You basically are having these cells""" start="00:01:03.668" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""and each cell could be a text cell, like here,""" start="00:01:06.408" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""this is a Markdown cell""" start="00:01:08.509" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""and then there are these code blocks.""" start="00:01:09.589" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""Now each code cell is basically defining a variable.""" start="00:01:11.610" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""This is important in reactive notebooks because""" start="00:01:15.251" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""each cell is connected to other cell via this variable""" start="00:01:17.840" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""usage. So here data is defined,""" start="00:01:21.240" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""then there is filtered which is defined""" start="00:01:23.553" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""which is dependent on data, and then this plot is""" start="00:01:25.013" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""dependent on filtered.""" start="00:01:27.720" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""So now, in a classical notebook, what I will do is""" start="00:01:29.134" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""if I change something here, let's say from 1 to 2,""" start="00:01:31.154" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""I will have to run this, and then run this plot block again""" start="00:01:34.395" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""to make the change be visible.""" start="00:01:34.855" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""But in a reactive notebook, what happens is""" start="00:01:40.336" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""I can just change this from some value""" start="00:01:42.056" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""to some value, and then execute,""" start="00:01:44.397" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""and then every descendant is also executed,""" start="00:01:46.257" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""because that's how the reactivity works.""" start="00:01:48.818" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""You change this variable,""" start="00:01:51.040" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""so this should also be changed,""" start="00:01:51.938" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""because this is dependent on this variable.""" start="00:01:53.081" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""Now this is really helpful""" start="00:01:55.239" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""if you have a very complex and messy notebook""" start="00:01:56.859" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""which is what actually happens in reality.""" start="00:01:59.000" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""You end up doing an exploratory analysis,""" start="00:02:01.200" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""and you have these code blocks lying here and there.""" start="00:02:03.481" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""Then you change something""" start="00:02:05.960" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""and then you have to keep something in your mind""" start="00:02:07.102" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""that if I change this, I need to run""" start="00:02:09.282" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""these five code blocks again""" start="00:02:11.363" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""to finally get to the result that I want to see.""" start="00:02:13.024" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""Stale state causes a lot of issues in Jupyter Notebooks.""" start="00:02:15.605" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""So this is really good for reactivity, sorry reproducibility,""" start="00:02:20.468" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""but this is also really good for""" start="00:02:23.789" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""just having this exploration""" start="00:02:26.631" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""that you're trying to do. For example,""" start="00:02:28.600" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""you're changing something and it's really easy""" start="00:02:30.118" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""to just see that change happening in real time""" start="00:02:31.762" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""in your outcome variables, right?""" start="00:02:34.888" video="mainVideo-org-babel" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Org-Babel""" start="00:02:38.499" video="mainVideo-org-babel" id="subtitle"]]</div>[[!template text="""So I was wondering how to introduce this reactivity in Org Mode.""" start="00:02:38.499" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""And here's how it will look like.""" start="00:02:41.921" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""So this is a demo Org Mode file.""" start="00:02:43.201" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""There are many Org Babel blocks here.""" start="00:02:46.303" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""So you start from here.""" start="00:02:48.604" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""Let's say this is a code block. It has a name.""" start="00:02:49.564" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""And then there's another code block,""" start="00:02:52.086" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""which is dependent on the previous one,""" start="00:02:53.666" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""as you can see here, and so on.""" start="00:02:55.427" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""And then finally, there's a plot here,""" start="00:02:57.808" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""which is a gnuplot code.""" start="00:02:59.369" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""And you can see the image here.""" start="00:03:00.890" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""Now, what happens usually is that""" start="00:03:02.551" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""if I change this value from,""" start="00:03:04.132" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""let's say, 113 to 112, nothing happens on its own right?""" start="00:03:05.197" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""There's an extra step of execution that I will have to do""" start="00:03:09.200" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""so I will do that, and then the value is changed.""" start="00:03:12.200" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""Now the problem is that only this value is changed and""" start="00:03:15.080" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""if I go down and see the image, nothing will have changed.""" start="00:03:17.700" video="mainVideo-org-babel" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Running the whole buffer""" start="00:03:21.080" video="mainVideo-org-babel" id="subtitle"]]</div>[[!template text="""So what I can do is basically,""" start="00:03:21.080" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""a really simple thing is that,""" start="00:03:23.080" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""a simple trick is to basically""" start="00:03:24.819" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""enable a hook, like, add a hook""" start="00:03:26.600" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""whenever you're saving the buffer,""" start="00:03:29.446" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""you just run the full buffer again,""" start="00:03:30.526" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""like run all the code blocks automatically.""" start="00:03:31.867" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""Now if you do that, you can basically make a change somewhere""" start="00:03:34.288" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""and then you can, you know,""" start="00:03:36.850" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""see how everything else is changing""" start="00:03:37.890" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""which gives you some sort of reactivity,""" start="00:03:41.072" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""but there's still a lot of computation""" start="00:03:42.713" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""that's being wasted.""" start="00:03:43.973" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""You might not want to change or run this code block again""" start="00:03:45.974" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""when something down there is changing.""" start="00:03:49.596" video="mainVideo-org-babel" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Caching""" start="00:03:51.901" video="mainVideo-org-babel" id="subtitle"]]</div>[[!template text="""So to counter that, you can actually add caching.""" start="00:03:51.901" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""So if you add caching to any code block,""" start="00:03:54.568" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""that code block will only be executed again""" start="00:03:57.134" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""if that code has changed or""" start="00:03:59.801" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""the input variables have changed.""" start="00:04:02.400" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""But the other problem is that""" start="00:04:04.756" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""you don't want caching to be enabled for a lot of cases""" start="00:04:06.337" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""where the code block is actually dependent on""" start="00:04:08.660" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""external state, like for example,""" start="00:04:10.841" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""some sort of randomness or time.""" start="00:04:12.723" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""So caching also is, you know, kind of,""" start="00:04:15.025" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""it's, like, an important thing to use,""" start="00:04:17.434" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""but it's probably not giving you the complete answer.""" start="00:04:18.968" video="mainVideo-org-babel" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Computation dependencies""" start="00:04:21.760" video="mainVideo-org-babel" id="subtitle"]]</div>[[!template text="""So what we can instead do is basically figure out""" start="00:04:21.760" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""the whole computation dependencies here.""" start="00:04:25.974" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""So let's say if I look at this buffer,""" start="00:04:28.555" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""here's how all the blocks are connected.""" start="00:04:31.276" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""So as you can see the plot code block""" start="00:04:35.077" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""is dependent on c and then legendpg,""" start="00:04:37.657" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""and they themselves are dependent on these other nodes.""" start="00:04:40.118" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""So when I make a change in b, I only want b to run""" start="00:04:43.919" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""and then c and then plot. I don't want anything else to run.""" start="00:04:47.280" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""So what I did was I wrote a small minor mode for Org Mode""" start="00:04:50.845" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""which does exactly this.""" start="00:04:54.268" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""So whenever you are in a code block""" start="00:04:55.369" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""and you are making a change and then you save it,""" start="00:04:57.770" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""it will just follow the trail from that code block""" start="00:04:59.872" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""to every other descendant which is going to be impacted,""" start="00:05:01.914" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""and it just runs all of them, and nothing else gets executed.""" start="00:05:05.356" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""So to see it in action, I will just enable that mode.""" start="00:05:09.720" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""Yeah, right. So now here, if I change this 113 to 112""" start="00:05:13.120" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""and I save, this code, this variable gets changed.""" start="00:05:17.022" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""It's the same value because I did not update it again.""" start="00:05:21.244" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""And you can also see b also got changed""" start="00:05:23.745" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""because it's just following all the execution order and so on.""" start="00:05:25.720" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""The plot also got updated.""" start="00:05:29.668" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""We will be able to see more clearly""" start="00:05:31.728" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""once I change something more substantial.""" start="00:05:34.069" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""So here's another variable.""" start="00:05:36.402" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""So I added a small toggle button here,""" start="00:05:36.403" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""which is again part of the minor mode.""" start="00:05:41.333" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""So since this is nil, if I toggle it,""" start="00:05:43.469" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""it will become true. And this variable dictates whether""" start="00:05:45.210" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""the plot will have the legend or not.""" start="00:05:49.400" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""So if I toggle it to be t, now it's t""" start="00:05:51.175" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""and you can see that the plot has legend that's visible.""" start="00:05:54.458" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""If I toggle it back again to nil, the legend is gone.""" start="00:05:57.901" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""Now this is nice, this...""" start="00:06:03.140" video="mainVideo-org-babel" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Making this even better""" start="00:06:04.534" video="mainVideo-org-babel" id="subtitle"]]</div>[[!template text="""This is already pretty helpful for me""" start="00:06:04.534" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""but what we can do is we can make it even better.""" start="00:06:06.480" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""So one of the nicer ideas""" start="00:06:10.180" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""from these reactive notebooks""" start="00:06:11.401" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""is this idea of having an infinite canvas""" start="00:06:13.016" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""where you don't look at the document model,""" start="00:06:16.079" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""you look at the whole document""" start="00:06:19.023" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""as a canvas of multiple connected documents.""" start="00:06:20.624" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""One good thing that happens there is that""" start="00:06:25.009" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""you can basically have a piece of code somewhere""" start="00:06:26.590" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""and then piece of code""" start="00:06:29.551" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""somewhere very different position in the document,""" start="00:06:30.411" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""but you can put them together in the canvas""" start="00:06:32.500" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""and then see them side by side.""" start="00:06:34.733" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""So here also, let's say""" start="00:06:36.934" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""if I want to just have this image shown up at the top,""" start="00:06:38.295" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""what I can do is like I can pop this out,""" start="00:06:41.997" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""which opens a child frame, and then I can just go here.""" start="00:06:45.858" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""This child frame is showing the same image.""" start="00:06:49.939" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""So there's no change. So if I toggle this variable here,""" start="00:06:52.461" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""you can see that the image is updated.""" start="00:06:55.503" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""If I toggle it back to nil, the image, the legend is gone.""" start="00:06:58.424" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""And you can obviously, you know,""" start="00:07:02.200" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""you can make a lot of things come up as child frames.""" start="00:07:03.368" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""This is the same image.""" start="00:07:08.691" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""So even if you go down to the document,""" start="00:07:09.431" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""you will see the same image.""" start="00:07:11.292" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""So yeah, this is what I have right now.""" start="00:07:13.811" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""I'm definitely looking forward to making it more useful,""" start="00:07:18.175" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""probably including more kinds of child frames,""" start="00:07:21.957" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""maybe like making the whole document an infinite canvas.""" start="00:07:25.600" video="mainVideo-org-babel" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Wrapping up""" start="00:07:29.966" video="mainVideo-org-babel" id="subtitle"]]</div>[[!template text="""Alright, so that's the talk.""" start="00:07:29.966" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""If you're interested in the codebase,""" start="00:07:32.100" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""here's the homepage""" start="00:07:33.347" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""for the project [https://dev.lepisma.xyz/git/ob-rx].""" start="00:07:34.447" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""So the next steps for me are basically""" start="00:07:35.547" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""making my workflow easier in matplotlib,""" start="00:07:37.567" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""which is a Python-based library,""" start="00:07:40.648" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""and d3.js, which is for JavaScript.""" start="00:07:42.588" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""For the JS thing, I might have to add""" start="00:07:45.349" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""the interactive JS child frames,""" start="00:07:47.889" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""and I am also looking forward to building something""" start="00:07:49.640" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""which can replicate the work""" start="00:07:51.830" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""of the Observable's infinite canvas,""" start="00:07:53.970" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""because that's something""" start="00:07:56.751" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""which I found really useful in my work with""" start="00:07:57.491" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""just JS visualizations.""" start="00:08:00.620" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""So yeah, happy to take questions on Etherpad""" start="00:08:02.340" video="mainVideo-org-babel" id="subtitle"]]
+[[!template text="""and thank you for your time.""" start="00:08:05.560" video="mainVideo-org-babel" id="subtitle"]]
+
+</div>
+
+Captioner: abhinav
+
+Questions or comments? Please e-mail [abhinav@lepisma.xyz](mailto:abhinav@lepisma.xyz?subject=Comment%20for%20EmacsConf%202023%20org-babel%3A%20Making%20Org-Babel%20reactive)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2025/info/org-babel-before.md b/2025/info/org-babel-before.md
new file mode 100644
index 00000000..abe568f9
--- /dev/null
+++ b/2025/info/org-babel-before.md
@@ -0,0 +1,29 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+
+The following image shows where the talk is in the schedule for Sat 2025-12-06. Solid lines show talks with Q&A via BigBlueButton. Dashed lines show talks with Q&A via IRC or Etherpad.<div class="schedule-in-context schedule-svg-container" data-slug="org-babel">
+<svg width="700" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Schedule for Saturday</title> <rect width="700" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="/2025/talks/sat-open" title="Saturday opening remarks" data-slug="sat-open"> <title> 9:00- 9:10 Saturday opening remarks</title> <rect x="0" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(11,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="/2025/talks/org-babel" title="Making Org-Babel reactive" data-slug="org-babel"> <title> 9:10- 9:20 Making Org-Babel reactive</title> <rect stroke-width="3" x="13" y="15" opacity="0.8" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(24,73)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> org-babel</text></g></a> <a href="/2025/talks/reference" title="Emacs as a fully-fledged reference manager" data-slug="reference"> <title> 9:30- 9:55 Emacs as a fully-fledged reference manager</title> <rect x="41" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(73,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> reference</text></g></a> <a href="/2025/talks/gmail" title="org-gmail: A deep integration of Gmail into your Org Mode" data-slug="gmail"> <title> 10:15-10:40 org-gmail: A deep integration of Gmail into your Org Mode</title> <rect x="102" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(134,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gmail</text></g></a> <a href="/2025/talks/gnus" title="Reading and writing emails in GNU Emacs with Gnus" data-slug="gnus"> <title> 10:50-11:15 Reading and writing emails in GNU Emacs with Gnus</title> <rect x="150" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(182,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gnus</text></g></a> <a href="/2025/talks/latex" title="LaTeX export in org-mode: the overhaul" data-slug="latex"> <title> 11:25-11:45 LaTeX export in org-mode: the overhaul</title> <rect x="199" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(224,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> latex</text></g></a> <a href="/2025/talks/calc" title="Basic Calc functionality for engineering or electronics" data-slug="calc"> <title> 1:00- 1:25 Basic Calc functionality for engineering or electronics</title> <rect x="329" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(361,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> calc</text></g></a> <a href="/2025/talks/blee-lcnt" title="Blee-LCNT: An Emacs-centered content production and self-publication framework" data-slug="blee-lcnt"> <title> 1:35- 2:15 Blee-LCNT: An Emacs-centered content production and self-publication framework</title> <rect x="377" y="15" opacity="0.5" width="54" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(429,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> blee-lcnt</text></g></a> <a href="/2025/talks/greader" title="GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence" data-slug="greader"> <title> 2:35- 2:40 GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence</title> <rect x="459" y="15" opacity="0.5" width="6" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(463,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> greader</text></g></a> <a href="/2025/talks/open-mic" title="Open session" data-slug="open-mic"> <title> 2:50- 3:40 Open session</title> <rect x="480" y="15" opacity="0.5" width="68" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(546,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> open-mic</text></g></a> <a href="/2025/talks/sat-close" title="Saturday closing remarks / open session" data-slug="sat-close"> <title> 4:00- 4:10 Saturday closing remarks / open session</title> <rect x="576" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(587,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="/2025/talks/schemacs" title="One year progress update Schemacs (formerly Gypsum)" data-slug="schemacs"> <title> 9:30- 9:55 One year progress update Schemacs (formerly Gypsum)</title> <rect x="41" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(73,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> schemacs</text></g></a> <a href="/2025/talks/juicemacs" title="Juicemacs: exploring speculative JIT compilation for ELisp in Java" data-slug="juicemacs"> <title> 10:15-10:35 Juicemacs: exploring speculative JIT compilation for ELisp in Java</title> <rect x="102" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(127,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> juicemacs</text></g></a> <a href="/2025/talks/swanky" title="Swanky Python: Interactive development for Python" data-slug="swanky"> <title> 10:45-11:10 Swanky Python: Interactive development for Python</title> <rect x="144" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(176,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> swanky</text></g></a> <a href="/2025/talks/python" title="Interactive Python programming in Emacs" data-slug="python"> <title> 11:20-11:40 Interactive Python programming in Emacs</title> <rect x="192" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(217,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <a href="/2025/talks/llm" title="Emacs, editors, and LLM driven workflows" data-slug="llm"> <title> 1:00- 1:25 Emacs, editors, and LLM driven workflows</title> <rect x="329" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(361,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> llm</text></g></a> <a href="/2025/talks/private-ai" title="Emacs and private AI: a great match" data-slug="private-ai"> <title> 1:45- 2:05 Emacs and private AI: a great match</title> <rect x="391" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(416,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> private-ai</text></g></a> <a href="/2025/talks/commonlisp" title="Common Lisp images communicating like-a-human through shared Emacs slime and eev" data-slug="commonlisp"> <title> 2:25- 2:55 Common Lisp images communicating like-a-human through shared Emacs slime and eev</title> <rect x="446" y="75" opacity="0.5" width="41" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(485,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> commonlisp</text></g></a> <a href="/2025/talks/graphics" title="Modern Emacs/Elisp hardware/software accelerated graphics" data-slug="graphics"> <title> 3:05- 3:30 Modern Emacs/Elisp hardware/software accelerated graphics</title> <rect x="500" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(532,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> graphics</text></g></a> <g transform="translate(0,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(82,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(164,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(247,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(329,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(411,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(494,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(576,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(658,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 5 PM</text></g></svg>
+</div>
+
+[[!toc ]]
+Format: 9-min talk ; Q&A: Etherpad <https://pad.emacsconf.org/2025-org-babel>
+Etherpad: <https://pad.emacsconf.org/2025-org-babel>
+Discuss on IRC: [#emacsconf-gen](https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen)
+Status: Q&A finished, IRC and pad will be archived on this page
+
+
+
+
+
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-org-babel"><source src="https://media.emacsconf.org/2025/emacsconf-2025-org-babel--making-orgbabel-reactive--abhinav-tushar--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2025/captions/emacsconf-2025-org-babel--making-orgbabel-reactive--abhinav-tushar--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2025/captions/emacsconf-2025-org-babel--making-orgbabel-reactive--abhinav-tushar--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="mainVideo-org-babel" data="""
+00:01.120 What are reactive notebooks?
+00:49.042 Reactivity demo
+02:38.499 Org-Babel
+03:21.080 Running the whole buffer
+03:51.901 Caching
+04:21.760 Computation dependencies
+06:04.534 Making this even better
+07:29.966 Wrapping up
+
+"""]]<div></div>Duration: 08:08 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2025-org-babel">Open Etherpad</a></li><li><a href="https://pad.emacsconf.org/2025-org-babel">Open public Q&A</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-org-babel--making-orgbabel-reactive--abhinav-tushar--edited.vtt">Download --edited.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-org-babel--making-orgbabel-reactive--abhinav-tushar--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-org-babel--making-orgbabel-reactive--abhinav-tushar--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-org-babel--making-orgbabel-reactive--abhinav-tushar--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-org-babel--making-orgbabel-reactive--abhinav-tushar--main.opus">Download --main.opus (7.1MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-org-babel--making-orgbabel-reactive--abhinav-tushar--main.png">Download --main.png</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-org-babel--making-orgbabel-reactive--abhinav-tushar--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-org-babel--making-orgbabel-reactive--abhinav-tushar--main.webm">Download --main.webm (17MB)</a></li><li><a href="https://youtu.be/1dWWi3xfmug">View on Youtube</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2025/info/org-babel-nav.md b/2025/info/org-babel-nav.md
new file mode 100644
index 00000000..024f36ce
--- /dev/null
+++ b/2025/info/org-babel-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by time: <a href="/2025/talks/sat-open">Saturday opening remarks</a>
+Next by time: <a href="/2025/talks/schemacs">One year progress update Schemacs (formerly Gypsum)</a>
+Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2025/watch/gen">Watch</a></strong>
+</div>
diff --git a/2025/info/private-ai-after.md b/2025/info/private-ai-after.md
new file mode 100644
index 00000000..33a2289a
--- /dev/null
+++ b/2025/info/private-ai-after.md
@@ -0,0 +1,7 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+Questions or comments? Please e-mail [ajgrothe@yahoo.com](mailto:ajgrothe@yahoo.com?subject=Comment%20for%20EmacsConf%202023%20private-ai%3A%20Emacs%20and%20private%20AI%3A%20a%20great%20match)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2025/info/private-ai-before.md b/2025/info/private-ai-before.md
new file mode 100644
index 00000000..acdc3861
--- /dev/null
+++ b/2025/info/private-ai-before.md
@@ -0,0 +1,19 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+
+The following image shows where the talk is in the schedule for Sat 2025-12-06. Solid lines show talks with Q&A via BigBlueButton. Dashed lines show talks with Q&A via IRC or Etherpad.<div class="schedule-in-context schedule-svg-container" data-slug="private-ai">
+<svg width="700" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Schedule for Saturday</title> <rect width="700" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="/2025/talks/sat-open" title="Saturday opening remarks" data-slug="sat-open"> <title> 9:00- 9:10 Saturday opening remarks</title> <rect x="0" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(11,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="/2025/talks/org-babel" title="Making Org-Babel reactive" data-slug="org-babel"> <title> 9:10- 9:20 Making Org-Babel reactive</title> <rect x="13" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(24,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> org-babel</text></g></a> <a href="/2025/talks/reference" title="Emacs as a fully-fledged reference manager" data-slug="reference"> <title> 9:30- 9:55 Emacs as a fully-fledged reference manager</title> <rect x="41" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(73,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> reference</text></g></a> <a href="/2025/talks/gmail" title="org-gmail: A deep integration of Gmail into your Org Mode" data-slug="gmail"> <title> 10:15-10:40 org-gmail: A deep integration of Gmail into your Org Mode</title> <rect x="102" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(134,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gmail</text></g></a> <a href="/2025/talks/gnus" title="Reading and writing emails in GNU Emacs with Gnus" data-slug="gnus"> <title> 10:50-11:15 Reading and writing emails in GNU Emacs with Gnus</title> <rect x="150" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(182,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gnus</text></g></a> <a href="/2025/talks/latex" title="LaTeX export in org-mode: the overhaul" data-slug="latex"> <title> 11:25-11:45 LaTeX export in org-mode: the overhaul</title> <rect x="199" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(224,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> latex</text></g></a> <a href="/2025/talks/calc" title="Basic Calc functionality for engineering or electronics" data-slug="calc"> <title> 1:00- 1:25 Basic Calc functionality for engineering or electronics</title> <rect x="329" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(361,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> calc</text></g></a> <a href="/2025/talks/blee-lcnt" title="Blee-LCNT: An Emacs-centered content production and self-publication framework" data-slug="blee-lcnt"> <title> 1:35- 2:15 Blee-LCNT: An Emacs-centered content production and self-publication framework</title> <rect x="377" y="15" opacity="0.5" width="54" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(429,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> blee-lcnt</text></g></a> <a href="/2025/talks/greader" title="GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence" data-slug="greader"> <title> 2:35- 2:40 GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence</title> <rect x="459" y="15" opacity="0.5" width="6" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(463,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> greader</text></g></a> <a href="/2025/talks/open-mic" title="Open session" data-slug="open-mic"> <title> 2:50- 3:40 Open session</title> <rect x="480" y="15" opacity="0.5" width="68" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(546,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> open-mic</text></g></a> <a href="/2025/talks/sat-close" title="Saturday closing remarks / open session" data-slug="sat-close"> <title> 4:00- 4:10 Saturday closing remarks / open session</title> <rect x="576" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(587,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="/2025/talks/schemacs" title="One year progress update Schemacs (formerly Gypsum)" data-slug="schemacs"> <title> 9:30- 9:55 One year progress update Schemacs (formerly Gypsum)</title> <rect x="41" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(73,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> schemacs</text></g></a> <a href="/2025/talks/juicemacs" title="Juicemacs: exploring speculative JIT compilation for ELisp in Java" data-slug="juicemacs"> <title> 10:15-10:35 Juicemacs: exploring speculative JIT compilation for ELisp in Java</title> <rect x="102" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(127,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> juicemacs</text></g></a> <a href="/2025/talks/swanky" title="Swanky Python: Interactive development for Python" data-slug="swanky"> <title> 10:45-11:10 Swanky Python: Interactive development for Python</title> <rect x="144" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(176,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> swanky</text></g></a> <a href="/2025/talks/python" title="Interactive Python programming in Emacs" data-slug="python"> <title> 11:20-11:40 Interactive Python programming in Emacs</title> <rect x="192" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(217,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <a href="/2025/talks/llm" title="Emacs, editors, and LLM driven workflows" data-slug="llm"> <title> 1:00- 1:25 Emacs, editors, and LLM driven workflows</title> <rect x="329" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(361,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> llm</text></g></a> <a href="/2025/talks/private-ai" title="Emacs and private AI: a great match" data-slug="private-ai"> <title> 1:45- 2:05 Emacs and private AI: a great match</title> <rect stroke-width="3" x="391" y="75" opacity="0.8" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(416,133)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> private-ai</text></g></a> <a href="/2025/talks/commonlisp" title="Common Lisp images communicating like-a-human through shared Emacs slime and eev" data-slug="commonlisp"> <title> 2:25- 2:55 Common Lisp images communicating like-a-human through shared Emacs slime and eev</title> <rect x="446" y="75" opacity="0.5" width="41" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(485,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> commonlisp</text></g></a> <a href="/2025/talks/graphics" title="Modern Emacs/Elisp hardware/software accelerated graphics" data-slug="graphics"> <title> 3:05- 3:30 Modern Emacs/Elisp hardware/software accelerated graphics</title> <rect x="500" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(532,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> graphics</text></g></a> <g transform="translate(0,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(82,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(164,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(247,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(329,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(411,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(494,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(576,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(658,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 5 PM</text></g></svg>
+</div>
+
+[[!toc ]]
+Format: 20-min talk ; Q&A: BigBlueButton conference room <https://media.emacsconf.org/2025/current/bbb-private-ai.html> Etherpad: <https://pad.emacsconf.org/2025-private-ai>
+Etherpad: <https://pad.emacsconf.org/2025-private-ai>
+Discuss on IRC: [#emacsconf-dev](https://chat.emacsconf.org/?join=emacsconf,emacsconf-dev)
+Status: Q&A finished, IRC and pad will be archived on this page
+
+
+
+
+
+<div class="vid mainVideo"><div></div><div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2025-private-ai">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2025/current/bbb-private-ai.html">Open public Q&A</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-private-ai--emacs-and-private-ai-a-great-match--aaron-grothe--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-private-ai--emacs-and-private-ai-a-great-match--aaron-grothe--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-private-ai--emacs-and-private-ai-a-great-match--aaron-grothe--slides.pdf">Download --slides.pdf</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2025/info/private-ai-nav.md b/2025/info/private-ai-nav.md
new file mode 100644
index 00000000..7add07e0
--- /dev/null
+++ b/2025/info/private-ai-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by time: <a href="/2025/talks/blee-lcnt">Blee-LCNT: An Emacs-centered content production and self-publication framework</a>
+Next by time: <a href="/2025/talks/commonlisp">Common Lisp images communicating like-a-human through shared Emacs slime and eev</a>
+Track: <span class="sched-track Development">Development</span> - <strong><a href="https://emacsconf.org/2025/watch/dev">Watch</a></strong>
+</div>
diff --git a/2025/info/python-after.md b/2025/info/python-after.md
new file mode 100644
index 00000000..4233580a
--- /dev/null
+++ b/2025/info/python-after.md
@@ -0,0 +1,259 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<div class="transcript transcript-mainVideo"><a name="python-mainVideo-transcript"></a><h1>Transcript</h1>
+
+[[!template text="""Okay, so welcome to this session about interactive Python""" start="00:00:00.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""programming. My name is David Vujic and I live and work in""" start="00:00:04.440" video="mainVideo-python" id="subtitle"]]
+[[!template text="""Stockholm, Sweden. a developer and today I focus""" start="00:00:09.680" video="mainVideo-python" id="subtitle"]]
+[[!template text="""mainly on Python software development. So I do this at work""" start="00:00:15.320" video="mainVideo-python" id="subtitle"]]
+[[!template text="""and I also do this on my spare time in my open source projects.""" start="00:00:20.440" video="mainVideo-python" id="subtitle"]]
+[[!template text="""Before that, I've been part of the Lisp community. I've""" start="00:00:26.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""been a Clojure developer, and also, like, way back,""" start="00:00:30.480" video="mainVideo-python" id="subtitle"]]
+[[!template text="""I was in the Microsoft world and developed C# and .NET stuff.""" start="00:00:33.701" video="mainVideo-python" id="subtitle"]]
+[[!template text="""What I've been doing lately is to try to improve the""" start="00:00:40.280" video="mainVideo-python" id="subtitle"]]
+[[!template text="""developer experience when you write Python code. So what I""" start="00:00:46.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""want to talk about is this, but also I want to begin with""" start="00:00:52.400" video="mainVideo-python" id="subtitle"]]
+[[!template text="""feedback loops because I think it's very related to this""" start="00:00:56.160" video="mainVideo-python" id="subtitle"]]
+[[!template text="""interactive programming style, like having this nice""" start="00:01:00.840" video="mainVideo-python" id="subtitle"]]
+[[!template text="""feedback when you write code.""" start="00:01:05.360" video="mainVideo-python" id="subtitle"]]
+[[!template text="""So I'm going to begin with that.""" start="00:01:07.068" video="mainVideo-python" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Feedback loops""" start="00:01:10.534" video="mainVideo-python" id="subtitle"]]</div>[[!template text="""So this image, you know, this circle is supposed to be a""" start="00:01:10.534" video="mainVideo-python" id="subtitle"]]
+[[!template text="""visualization of a feedback loop. Let's say we write our""" start="00:01:14.200" video="mainVideo-python" id="subtitle"]]
+[[!template text="""code and then we deploy it to production. Then when it's""" start="00:01:19.880" video="mainVideo-python" id="subtitle"]]
+[[!template text="""running there, we can check if things work, or if maybe someone""" start="00:01:25.240" video="mainVideo-python" id="subtitle"]]
+[[!template text="""else will let us know. Maybe our customers will let us know.""" start="00:01:29.640" video="mainVideo-python" id="subtitle"]]
+[[!template text="""That's a pretty slow feedback loop with potential risks of""" start="00:01:35.320" video="mainVideo-python" id="subtitle"]]
+[[!template text="""damaging your business or whatever.""" start="00:01:39.640" video="mainVideo-python" id="subtitle"]]
+[[!template text="""This is obvious, of course.""" start="00:01:41.868" video="mainVideo-python" id="subtitle"]]
+[[!template text="""So a faster feedback loop probably is to have""" start="00:01:44.168" video="mainVideo-python" id="subtitle"]]
+[[!template text="""some kind of automation when you do commits""" start="00:01:50.001" video="mainVideo-python" id="subtitle"]]
+[[!template text="""or maybe you have this pull request things and even reviews.""" start="00:01:54.067" video="mainVideo-python" id="subtitle"]]
+[[!template text="""So maybe not always as fast as deploy,""" start="00:01:59.734" video="mainVideo-python" id="subtitle"]]
+[[!template text="""don't deploy directly to production, but""" start="00:02:02.934" video="mainVideo-python" id="subtitle"]]
+[[!template text="""it's probably safer and often you get this automated""" start="00:02:05.840" video="mainVideo-python" id="subtitle"]]
+[[!template text="""feedback faster anyway. But it's still kind of slow. You""" start="00:02:10.540" video="mainVideo-python" id="subtitle"]]
+[[!template text="""have to wait. You have to push things to GitHub maybe and""" start="00:02:16.200" video="mainVideo-python" id="subtitle"]]
+[[!template text="""wait. So there's faster ways for sure to get feedback.""" start="00:02:20.240" video="mainVideo-python" id="subtitle"]]
+[[!template text="""So a much faster way is to write code,""" start="00:02:24.280" video="mainVideo-python" id="subtitle"]]
+[[!template text="""and write some unit tests, and run those unit tests.""" start="00:02:27.968" video="mainVideo-python" id="subtitle"]]
+[[!template text="""So then you do everything on your local machine""" start="00:02:31.368" video="mainVideo-python" id="subtitle"]]
+[[!template text="""and you will fairly quickly learn if your code does""" start="00:02:33.468" video="mainVideo-python" id="subtitle"]]
+[[!template text="""what you think it does or if it doesn't. I want to zoom in to""" start="00:02:39.040" video="mainVideo-python" id="subtitle"]]
+[[!template text="""this test write code and test flow a bit. Let's do that.""" start="00:02:47.160" video="mainVideo-python" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Test-driven development""" start="00:02:56.000" video="mainVideo-python" id="subtitle"]]</div>[[!template text="""As a developer, I have used a thing called test-driven""" start="00:02:56.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""development for quite some time. I find that this way of""" start="00:02:59.760" video="mainVideo-python" id="subtitle"]]
+[[!template text="""working is very fast when it comes to getting feedback on""" start="00:03:06.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""what your code does and how you should continue the""" start="00:03:11.260" video="mainVideo-python" id="subtitle"]]
+[[!template text="""development. So, test-driven development,""" start="00:03:14.520" video="mainVideo-python" id="subtitle"]]
+[[!template text="""basically that you start writing a test for""" start="00:03:19.981" video="mainVideo-python" id="subtitle"]]
+[[!template text="""something that you want to develop, and then you continue""" start="00:03:24.221" video="mainVideo-python" id="subtitle"]]
+[[!template text="""developing that, and then you go back to the test, and modify""" start="00:03:27.021" video="mainVideo-python" id="subtitle"]]
+[[!template text="""and modify the code, and you go back and forth between the""" start="00:03:31.020" video="mainVideo-python" id="subtitle"]]
+[[!template text="""tests and the code.""" start="00:03:35.080" video="mainVideo-python" id="subtitle"]]
+[[!template text="""It's sort of like a ping-pong game. I find this very""" start="00:03:36.960" video="mainVideo-python" id="subtitle"]]
+[[!template text="""effective when you want to get feedback and to know how to""" start="00:03:44.420" video="mainVideo-python" id="subtitle"]]
+[[!template text="""continue the development. The most important thing""" start="00:03:50.520" video="mainVideo-python" id="subtitle"]]
+[[!template text="""that I feel is that you know what the code does.""" start="00:03:57.234" video="mainVideo-python" id="subtitle"]]
+[[!template text="""You learn very quickly.""" start="00:04:01.701" video="mainVideo-python" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""REPL-driven development""" start="00:04:05.560" video="mainVideo-python" id="subtitle"]]</div>[[!template text="""Let's zoom into this TDD flow a little bit. The last couple of""" start="00:04:05.560" video="mainVideo-python" id="subtitle"]]
+[[!template text="""years, I've been doing a slightly different thing which is""" start="00:04:12.200" video="mainVideo-python" id="subtitle"]]
+[[!template text="""called REPL-driven development. REPL-driven""" start="00:04:17.380" video="mainVideo-python" id="subtitle"]]
+[[!template text="""development is very similar to test-driven development,""" start="00:04:21.980" video="mainVideo-python" id="subtitle"]]
+[[!template text="""but I find it even quicker. You get feedback even quicker""" start="00:04:25.720" video="mainVideo-python" id="subtitle"]]
+[[!template text="""than with a regular TDD setup. So REPL-driven development""" start="00:04:31.160" video="mainVideo-python" id="subtitle"]]
+[[!template text="""is about writing and evaluating code in a REPL basically.""" start="00:04:34.980" video="mainVideo-python" id="subtitle"]]
+[[!template text="""And you can do experiments and you can refactor and""" start="00:04:41.200" video="mainVideo-python" id="subtitle"]]
+[[!template text="""re-evaluate and you get instant feedback on what the code""" start="00:04:46.840" video="mainVideo-python" id="subtitle"]]
+[[!template text="""does and what you need to change. So I think that's even""" start="00:04:51.700" video="mainVideo-python" id="subtitle"]]
+[[!template text="""faster than test-driven development.""" start="00:04:54.800" video="mainVideo-python" id="subtitle"]]
+[[!template text="""Okay, REPL driven development. Let's go back. What's the""" start="00:04:59.520" video="mainVideo-python" id="subtitle"]]
+[[!template text="""REPL? Most of developers know what a REPL is. The most common""" start="00:05:02.900" video="mainVideo-python" id="subtitle"]]
+[[!template text="""setup is you open this shell and you use the REPL for your""" start="00:05:10.760" video="mainVideo-python" id="subtitle"]]
+[[!template text="""programming language. In this case I'm using the Python""" start="00:05:16.400" video="mainVideo-python" id="subtitle"]]
+[[!template text="""REPL or the IPython REPL which is an enhanced REPL for Python""" start="00:05:19.360" video="mainVideo-python" id="subtitle"]]
+[[!template text="""development. So what happens here is that we start a REPL""" start="00:05:25.620" video="mainVideo-python" id="subtitle"]]
+[[!template text="""session in isolation. So this session knows about the""" start="00:05:30.680" video="mainVideo-python" id="subtitle"]]
+[[!template text="""Python environment. So it knows about the Python language""" start="00:05:34.920" video="mainVideo-python" id="subtitle"]]
+[[!template text="""basically. So as soon as we start writing things, adding""" start="00:05:38.120" video="mainVideo-python" id="subtitle"]]
+[[!template text="""variables or creating writing functions or even doing""" start="00:05:42.360" video="mainVideo-python" id="subtitle"]]
+[[!template text="""imports. Then the session will be more and more aware of the""" start="00:05:47.360" video="mainVideo-python" id="subtitle"]]
+[[!template text="""code so we will add things to the to the session and then that""" start="00:05:51.680" video="mainVideo-python" id="subtitle"]]
+[[!template text="""means that we can run functions we can print out these""" start="00:05:55.820" video="mainVideo-python" id="subtitle"]]
+[[!template text="""variables and things like that. But with REPL driven""" start="00:06:00.520" video="mainVideo-python" id="subtitle"]]
+[[!template text="""development it's not really that well at least not what I""" start="00:06:05.860" video="mainVideo-python" id="subtitle"]]
+[[!template text="""mean with REPL driven development. So what I'm thinking of""" start="00:06:09.840" video="mainVideo-python" id="subtitle"]]
+[[!template text="""is that you are in your code editor where you have your""" start="00:06:14.040" video="mainVideo-python" id="subtitle"]]
+[[!template text="""autocomplete, and you have your syntax highlighting and""" start="00:06:19.640" video="mainVideo-python" id="subtitle"]]
+[[!template text="""your favorite theme, color theme, and all of those things. But""" start="00:06:22.800" video="mainVideo-python" id="subtitle"]]
+[[!template text="""instead, you have this running REPL in the background or in a""" start="00:06:30.460" video="mainVideo-python" id="subtitle"]]
+[[!template text="""smaller window or buffer. So that means that you write code""" start="00:06:34.980" video="mainVideo-python" id="subtitle"]]
+[[!template text="""and you can send that code to the running REPL, to the REPL""" start="00:06:41.140" video="mainVideo-python" id="subtitle"]]
+[[!template text="""session. You write and do everything as you would do when""" start="00:06:45.320" video="mainVideo-python" id="subtitle"]]
+[[!template text="""writing your code basically. In this case, in this""" start="00:06:50.400" video="mainVideo-python" id="subtitle"]]
+[[!template text="""example, I have evaluated these two functions. I've sent""" start="00:06:55.220" video="mainVideo-python" id="subtitle"]]
+[[!template text="""them to the REPL session so it's aware of these functions.""" start="00:07:00.600" video="mainVideo-python" id="subtitle"]]
+[[!template text="""Then I switched to a separate different module and""" start="00:07:05.820" video="mainVideo-python" id="subtitle"]]
+[[!template text="""evaluated that one. So the REPL session now knows about""" start="00:07:10.400" video="mainVideo-python" id="subtitle"]]
+[[!template text="""these two functions and also these two variables. That""" start="00:07:14.040" video="mainVideo-python" id="subtitle"]]
+[[!template text="""means that I can evaluate the state of those variables and""" start="00:07:19.040" video="mainVideo-python" id="subtitle"]]
+[[!template text="""change code and re-evaluate and things like that. So in this""" start="00:07:24.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""example if you look in the smaller area there you see that I""" start="00:07:29.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""have evaluated this res variable on line 6 and the output was""" start="00:07:33.640" video="mainVideo-python" id="subtitle"]]
+[[!template text="""that it's a dictionary with two keys and two values""" start="00:07:39.640" video="mainVideo-python" id="subtitle"]]
+[[!template text="""basically. So this setup works in basically any of your""" start="00:07:42.400" video="mainVideo-python" id="subtitle"]]
+[[!template text="""favorite code editors. So you can do this in Visual Studio""" start="00:07:51.220" video="mainVideo-python" id="subtitle"]]
+[[!template text="""Code, you can do this in PyCharm or Vim. But what I have done is""" start="00:07:54.080" video="mainVideo-python" id="subtitle"]]
+[[!template text="""that... More like what I have missed is that when I write code""" start="00:08:01.240" video="mainVideo-python" id="subtitle"]]
+[[!template text="""and do this evaluation, this is really cool, but then I need""" start="00:08:07.120" video="mainVideo-python" id="subtitle"]]
+[[!template text="""to switch context if I want to see the result. I have to switch""" start="00:08:10.240" video="mainVideo-python" id="subtitle"]]
+[[!template text="""context to this other window. I""" start="00:08:15.460" video="mainVideo-python" id="subtitle"]]
+[[!template text="""have my focus on the code and then I have to look in a different""" start="00:08:21.980" video="mainVideo-python" id="subtitle"]]
+[[!template text="""place to know the results. And if it's a larger output, then""" start="00:08:25.760" video="mainVideo-python" id="subtitle"]]
+[[!template text="""maybe I need to scroll. So I wanted to find out if it was""" start="00:08:31.800" video="mainVideo-python" id="subtitle"]]
+[[!template text="""possible to make this even smoother and faster, this""" start="00:08:37.480" video="mainVideo-python" id="subtitle"]]
+[[!template text="""feedback loop even faster, so I don't have to switch""" start="00:08:43.480" video="mainVideo-python" id="subtitle"]]
+[[!template text="""context. What I've done here is that... I can select a row or a""" start="00:08:45.480" video="mainVideo-python" id="subtitle"]]
+[[!template text="""region and I can evaluate and then an overlay, a small pop-up""" start="00:08:52.120" video="mainVideo-python" id="subtitle"]]
+[[!template text="""shows up with the evaluated result right next to it. So I can""" start="00:08:58.080" video="mainVideo-python" id="subtitle"]]
+[[!template text="""change code and re-evaluate and quickly see the result of it""" start="00:09:03.120" video="mainVideo-python" id="subtitle"]]
+[[!template text="""without doing this context switching. So the way I've done""" start="00:09:07.520" video="mainVideo-python" id="subtitle"]]
+[[!template text="""it is that I wanted to reuse the existing tooling that I""" start="00:09:12.641" video="mainVideo-python" id="subtitle"]]
+[[!template text="""already had. I know that my in-editor REPL, the IPython""" start="00:09:20.680" video="mainVideo-python" id="subtitle"]]
+[[!template text="""REPL, already does this evaluation. So I figured maybe I can""" start="00:09:27.740" video="mainVideo-python" id="subtitle"]]
+[[!template text="""extract the data and do this visualization as a separate""" start="00:09:31.560" video="mainVideo-python" id="subtitle"]]
+[[!template text="""thing. That's how I've done it. What I've done is that""" start="00:09:35.360" video="mainVideo-python" id="subtitle"]]
+[[!template text="""I've created this overlay and placed it where my cursor""" start="00:09:40.840" video="mainVideo-python" id="subtitle"]]
+[[!template text="""currently is, right next to the code. Then I've""" start="00:09:47.200" video="mainVideo-python" id="subtitle"]]
+[[!template text="""extracted the evaluated result and put it in this overlay.""" start="00:09:50.860" video="mainVideo-python" id="subtitle"]]
+[[!template text="""I also want this overlay to have this nice looking syntax,""" start="00:09:55.720" video="mainVideo-python" id="subtitle"]]
+[[!template text="""so I've set it to this Python mode, so we get this syntax""" start="00:10:01.040" video="mainVideo-python" id="subtitle"]]
+[[!template text="""highlighting. Make it look very readable. And as a nice""" start="00:10:04.760" video="mainVideo-python" id="subtitle"]]
+[[!template text="""developer experience thing,""" start="00:10:10.560" video="mainVideo-python" id="subtitle"]]
+[[!template text="""when you move the cursor, of course you don't want the""" start="00:10:16.880" video="mainVideo-python" id="subtitle"]]
+[[!template text="""overlay to be there. You want it to disappear. So those kinds""" start="00:10:20.380" video="mainVideo-python" id="subtitle"]]
+[[!template text="""of things I've added. So putting the overlay at the right""" start="00:10:25.680" video="mainVideo-python" id="subtitle"]]
+[[!template text="""place and feed it with the evaluated data and then make it""" start="00:10:29.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""disappear when it's not interesting to look at anymore.""" start="00:10:33.280" video="mainVideo-python" id="subtitle"]]
+[[!template text="""What I've described so far is something that I use on a""" start="00:10:39.840" video="mainVideo-python" id="subtitle"]]
+[[!template text="""daily basis, and it covers most of my needs while doing Python""" start="00:10:44.640" video="mainVideo-python" id="subtitle"]]
+[[!template text="""development. But one thing I still miss, and I miss it from my""" start="00:10:50.640" video="mainVideo-python" id="subtitle"]]
+[[!template text="""days as a Clojure developer, because over there we could""" start="00:10:56.120" video="mainVideo-python" id="subtitle"]]
+[[!template text="""have a running app on our local machine and we can have our""" start="00:11:03.480" video="mainVideo-python" id="subtitle"]]
+[[!template text="""editor, and the app and the editor were connected. So when I""" start="00:11:07.920" video="mainVideo-python" id="subtitle"]]
+[[!template text="""did some changes in the code, the app would change without""" start="00:11:12.720" video="mainVideo-python" id="subtitle"]]
+[[!template text="""any restarts or anything like that. And the same if I would""" start="00:11:17.200" video="mainVideo-python" id="subtitle"]]
+[[!template text="""change the state of the app, I can inspect the state from the""" start="00:11:20.560" video="mainVideo-python" id="subtitle"]]
+[[!template text="""code. So they were connected. They are connected. So I was""" start="00:11:24.680" video="mainVideo-python" id="subtitle"]]
+[[!template text="""thinking, hey, this would be really cool if we could have""" start="00:11:28.920" video="mainVideo-python" id="subtitle"]]
+[[!template text="""something like this in Python. And that reminded me of""" start="00:11:32.840" video="mainVideo-python" id="subtitle"]]
+[[!template text="""Jupyter and Jupyter notebooks because I think notebooks,""" start="00:11:39.200" video="mainVideo-python" id="subtitle"]]
+[[!template text="""the way you do things there, is very similar to what I was""" start="00:11:43.840" video="mainVideo-python" id="subtitle"]]
+[[!template text="""trying to achieve. So I was reading up a little bit on how this""" start="00:11:49.660" video="mainVideo-python" id="subtitle"]]
+[[!template text="""notebook thing works. It turns out that a notebook is a""" start="00:11:56.880" video="mainVideo-python" id="subtitle"]]
+[[!template text="""client that talks to a server, that communicates with a""" start="00:12:00.920" video="mainVideo-python" id="subtitle"]]
+[[!template text="""server. It's on the server that all this Python""" start="00:12:05.280" video="mainVideo-python" id="subtitle"]]
+[[!template text="""evaluation and all this thing happens. Then what I've""" start="00:12:08.800" video="mainVideo-python" id="subtitle"]]
+[[!template text="""done is that instead of starting up IPython in my editor, I""" start="00:12:14.160" video="mainVideo-python" id="subtitle"]]
+[[!template text="""start the Jupyter console instead. And then I can give it""" start="00:12:19.660" video="mainVideo-python" id="subtitle"]]
+[[!template text="""that unique ID and it will be connected to that running""" start="00:12:23.520" video="mainVideo-python" id="subtitle"]]
+[[!template text="""kernel.""" start="00:12:27.160" video="mainVideo-python" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""FastAPI CRUD""" start="00:12:30.920" video="mainVideo-python" id="subtitle"]]</div>[[!template text="""In this example, I've created this FastAPI CRUD app that""" start="00:12:30.920" video="mainVideo-python" id="subtitle"]]
+[[!template text="""has this create, read, update, and delete endpoints. It""" start="00:12:37.200" video="mainVideo-python" id="subtitle"]]
+[[!template text="""has this, it's locally running, it has this database where""" start="00:12:41.920" video="mainVideo-python" id="subtitle"]]
+[[!template text="""you can do all these things. I'm running this FastAPI app""" start="00:12:46.400" video="mainVideo-python" id="subtitle"]]
+[[!template text="""in the kernel and then I've connected to, I've connected to""" start="00:12:51.640" video="mainVideo-python" id="subtitle"]]
+[[!template text="""the kernel in my editor too. Both of them are connected to""" start="00:12:58.060" video="mainVideo-python" id="subtitle"]]
+[[!template text="""the kernel. What I do now is that I want to initially create""" start="00:13:03.240" video="mainVideo-python" id="subtitle"]]
+[[!template text="""some data. I'm going to add this, creating this message.""" start="00:13:09.720" video="mainVideo-python" id="subtitle"]]
+[[!template text="""What I get back is a message ID. I want to experiment in""" start="00:13:15.240" video="mainVideo-python" id="subtitle"]]
+[[!template text="""my browser. What do I get with that message ID? I'm""" start="00:13:19.900" video="mainVideo-python" id="subtitle"]]
+[[!template text="""evaluating the read function. I instantly get this""" start="00:13:24.360" video="mainVideo-python" id="subtitle"]]
+[[!template text="""evaluated result, which was this hello world text. So what""" start="00:13:30.240" video="mainVideo-python" id="subtitle"]]
+[[!template text="""happens if I do some changes in this app? I'm going to grab""" start="00:13:34.780" video="mainVideo-python" id="subtitle"]]
+[[!template text="""this message ID and write something else.""" start="00:13:39.920" video="mainVideo-python" id="subtitle"]]
+[[!template text="""Now I can evaluate the same thing again, and you can see that""" start="00:13:49.660" video="mainVideo-python" id="subtitle"]]
+[[!template text="""the content has changed to this new value. My editor isn't""" start="00:13:53.760" video="mainVideo-python" id="subtitle"]]
+[[!template text="""in any debug mode or something like that. It doesn't know""" start="00:14:02.400" video="mainVideo-python" id="subtitle"]]
+[[!template text="""what database it is. It doesn't have any environment""" start="00:14:07.720" video="mainVideo-python" id="subtitle"]]
+[[!template text="""variables set up or something like that. It is only""" start="00:14:11.240" video="mainVideo-python" id="subtitle"]]
+[[!template text="""connected to the kernel, and the kernel is aware of that. It's""" start="00:14:14.480" video="mainVideo-python" id="subtitle"]]
+[[!template text="""running the app. It has the connection strings and""" start="00:14:17.600" video="mainVideo-python" id="subtitle"]]
+[[!template text="""everything that is needed. So that's how this thing works.""" start="00:14:20.480" video="mainVideo-python" id="subtitle"]]
+[[!template text="""Now I want to do some inline hacking because I want to store""" start="00:14:28.800" video="mainVideo-python" id="subtitle"]]
+[[!template text="""this input that is sent from this app because I want to work""" start="00:14:34.200" video="mainVideo-python" id="subtitle"]]
+[[!template text="""with it afterwards. I can add this dictionary that stores""" start="00:14:37.800" video="mainVideo-python" id="subtitle"]]
+[[!template text="""this message. I'm updating the source code of this app, and""" start="00:14:42.040" video="mainVideo-python" id="subtitle"]]
+[[!template text="""when I run any of these endpoints again, you will see that""" start="00:14:48.760" video="mainVideo-python" id="subtitle"]]
+[[!template text="""the state changes, and the new inputs, I can grab and I can use""" start="00:15:03.080" video="mainVideo-python" id="subtitle"]]
+[[!template text="""them for quick evaluation or testing. This example is""" start="00:15:08.760" video="mainVideo-python" id="subtitle"]]
+[[!template text="""really simple. It was just an integer. For example, if you""" start="00:15:14.400" video="mainVideo-python" id="subtitle"]]
+[[!template text="""are sending a more complex object, maybe a pydantic schema""" start="00:15:18.520" video="mainVideo-python" id="subtitle"]]
+[[!template text="""or something, and you want to inspect what's coming in, and if""" start="00:15:23.520" video="mainVideo-python" id="subtitle"]]
+[[!template text="""you have some sort of validation that you want to test out.""" start="00:15:28.200" video="mainVideo-python" id="subtitle"]]
+[[!template text="""The configuration or the code that I wrote to make this work""" start="00:15:34.200" video="mainVideo-python" id="subtitle"]]
+[[!template text="""is a little bit different than just adding an overlay. I'm""" start="00:15:38.400" video="mainVideo-python" id="subtitle"]]
+[[!template text="""using this overlay just like with the IPython example, but in""" start="00:15:44.160" video="mainVideo-python" id="subtitle"]]
+[[!template text="""this case, when I change code, I have to think about where that""" start="00:15:51.000" video="mainVideo-python" id="subtitle"]]
+[[!template text="""code lives, because it's the app that runs the code. So it's""" start="00:15:57.840" video="mainVideo-python" id="subtitle"]]
+[[!template text="""in the app context I need to manipulate with the data. If you""" start="00:16:02.160" video="mainVideo-python" id="subtitle"]]
+[[!template text="""have started the app from maybe a main function and that""" start="00:16:07.040" video="mainVideo-python" id="subtitle"]]
+[[!template text="""module imports namespaces, then you need to, if you want to""" start="00:16:11.920" video="mainVideo-python" id="subtitle"]]
+[[!template text="""update a function or something like that, you need to update""" start="00:16:17.880" video="mainVideo-python" id="subtitle"]]
+[[!template text="""it in the correct namespace. What I did before in IPython""" start="00:16:22.360" video="mainVideo-python" id="subtitle"]]
+[[!template text="""by adding and changing things, everything ends up in the""" start="00:16:26.680" video="mainVideo-python" id="subtitle"]]
+[[!template text="""global namespace. But here, if you want the app to actually""" start="00:16:29.920" video="mainVideo-python" id="subtitle"]]
+[[!template text="""react to the changes, you need to put it in the right""" start="00:16:34.440" video="mainVideo-python" id="subtitle"]]
+[[!template text="""namespace. So that's what I do here. I do some lookups, where""" start="00:16:38.480" video="mainVideo-python" id="subtitle"]]
+[[!template text="""is this function, and then I do this reload of this function or""" start="00:16:43.480" video="mainVideo-python" id="subtitle"]]
+[[!template text="""module. And when I was developing this, I was thinking, hey,""" start="00:16:49.140" video="mainVideo-python" id="subtitle"]]
+[[!template text="""this is really ugly. I'm in this REPL and do some""" start="00:16:54.800" video="mainVideo-python" id="subtitle"]]
+[[!template text="""manipulation of the imports and things like that. That""" start="00:16:59.320" video="mainVideo-python" id="subtitle"]]
+[[!template text="""didn't feel good. Then I was reminded of the IPython. And""" start="00:17:03.560" video="mainVideo-python" id="subtitle"]]
+[[!template text="""IPython has this feature to reload any updated""" start="00:17:09.760" video="mainVideo-python" id="subtitle"]]
+[[!template text="""submodules. I was curious how do they do it. I looked in the""" start="00:17:15.520" video="mainVideo-python" id="subtitle"]]
+[[!template text="""IPython source code and saw that they also use importlib and""" start="00:17:19.120" video="mainVideo-python" id="subtitle"]]
+[[!template text="""reloading of this module. Once I've learned that, then I""" start="00:17:24.080" video="mainVideo-python" id="subtitle"]]
+[[!template text="""stopped thinking that my code was hacky. I thought it was""" start="00:17:28.360" video="mainVideo-python" id="subtitle"]]
+[[!template text="""good enough at least.""" start="00:17:32.600" video="mainVideo-python" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Testing with an LLM""" start="00:17:37.160" video="mainVideo-python" id="subtitle"]]</div>[[!template text="""But one thing that has bothered me for a long time is I quite""" start="00:17:37.160" video="mainVideo-python" id="subtitle"]]
+[[!template text="""often want to test out and evaluate individual rows that""" start="00:17:45.060" video="mainVideo-python" id="subtitle"]]
+[[!template text="""lives in a function. Quite often, this code uses the input""" start="00:17:50.200" video="mainVideo-python" id="subtitle"]]
+[[!template text="""to that function like the input parameters. To be able to""" start="00:17:58.560" video="mainVideo-python" id="subtitle"]]
+[[!template text="""do that, I need to manually type some fake data and set it to""" start="00:18:02.640" video="mainVideo-python" id="subtitle"]]
+[[!template text="""this variable, and then I can evaluate the code. But I think""" start="00:18:07.720" video="mainVideo-python" id="subtitle"]]
+[[!template text="""that takes... That slows me down. I was thinking, maybe I can""" start="00:18:12.280" video="mainVideo-python" id="subtitle"]]
+[[!template text="""do this in a quicker way, so I have this quicker feedback, so I""" start="00:18:17.780" video="mainVideo-python" id="subtitle"]]
+[[!template text="""can run this or evaluate this code much quicker.""" start="00:18:23.440" video="mainVideo-python" id="subtitle"]]
+[[!template text="""So my idea was maybe I""" start="00:18:27.934" video="mainVideo-python" id="subtitle"]]
+[[!template text="""can use an LLM for this. If I give it the parameters, maybe it""" start="00:18:29.440" video="mainVideo-python" id="subtitle"]]
+[[!template text="""can return some random data so I don't have to write it""" start="00:18:35.240" video="mainVideo-python" id="subtitle"]]
+[[!template text="""myself. I ended up doing that. I have this source code.""" start="00:18:41.120" video="mainVideo-python" id="subtitle"]]
+[[!template text="""I'm loading the REPL with the code. Then I select this""" start="00:18:44.120" video="mainVideo-python" id="subtitle"]]
+[[!template text="""function name and the parameters with its data type. I""" start="00:18:50.400" video="mainVideo-python" id="subtitle"]]
+[[!template text="""have this prompt that instructs the LLM to come up with fake""" start="00:18:56.720" video="mainVideo-python" id="subtitle"]]
+[[!template text="""data based on the tag name and on the data type. And then I can""" start="00:19:02.840" video="mainVideo-python" id="subtitle"]]
+[[!template text="""send that to the REPL. I do that with a key command. Then""" start="00:19:06.240" video="mainVideo-python" id="subtitle"]]
+[[!template text="""I can proceed by running the code within the function that""" start="00:19:10.100" video="mainVideo-python" id="subtitle"]]
+[[!template text="""uses these inputs. This works for all the data types. If""" start="00:19:16.020" video="mainVideo-python" id="subtitle"]]
+[[!template text="""there's a custom data type, you need to give the LLM extra""" start="00:19:21.720" video="mainVideo-python" id="subtitle"]]
+[[!template text="""context. So that's something to think about. Once it knows""" start="00:19:26.280" video="mainVideo-python" id="subtitle"]]
+[[!template text="""the context, it can generate this fake data that very often is""" start="00:19:30.400" video="mainVideo-python" id="subtitle"]]
+[[!template text="""good enough just to test out, you know, like I've done here, like""" start="00:19:35.680" video="mainVideo-python" id="subtitle"]]
+[[!template text="""string... sorry, list destructuring and parsing and things""" start="00:19:39.840" video="mainVideo-python" id="subtitle"]]
+[[!template text="""like that. I think that was all I had, and thank you for""" start="00:19:45.400" video="mainVideo-python" id="subtitle"]]
+[[!template text="""listening!""" start="00:19:51.880" video="mainVideo-python" id="subtitle"]]
+
+</div>
+
+Captioner: sachac
+
+Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202023%20python%3A%20Interactive%20Python%20programming%20in%20Emacs)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2025/info/python-before.md b/2025/info/python-before.md
new file mode 100644
index 00000000..bf3dfc48
--- /dev/null
+++ b/2025/info/python-before.md
@@ -0,0 +1,19 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+
+The following image shows where the talk is in the schedule for Sat 2025-12-06. Solid lines show talks with Q&A via BigBlueButton. Dashed lines show talks with Q&A via IRC or Etherpad.<div class="schedule-in-context schedule-svg-container" data-slug="python">
+<svg width="700" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Schedule for Saturday</title> <rect width="700" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="/2025/talks/sat-open" title="Saturday opening remarks" data-slug="sat-open"> <title> 9:00- 9:10 Saturday opening remarks</title> <rect x="0" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(11,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="/2025/talks/org-babel" title="Making Org-Babel reactive" data-slug="org-babel"> <title> 9:10- 9:20 Making Org-Babel reactive</title> <rect x="13" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(24,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> org-babel</text></g></a> <a href="/2025/talks/reference" title="Emacs as a fully-fledged reference manager" data-slug="reference"> <title> 9:30- 9:55 Emacs as a fully-fledged reference manager</title> <rect x="41" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(73,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> reference</text></g></a> <a href="/2025/talks/gmail" title="org-gmail: A deep integration of Gmail into your Org Mode" data-slug="gmail"> <title> 10:15-10:40 org-gmail: A deep integration of Gmail into your Org Mode</title> <rect x="102" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(134,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gmail</text></g></a> <a href="/2025/talks/gnus" title="Reading and writing emails in GNU Emacs with Gnus" data-slug="gnus"> <title> 10:50-11:15 Reading and writing emails in GNU Emacs with Gnus</title> <rect x="150" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(182,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gnus</text></g></a> <a href="/2025/talks/latex" title="LaTeX export in org-mode: the overhaul" data-slug="latex"> <title> 11:25-11:45 LaTeX export in org-mode: the overhaul</title> <rect x="199" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(224,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> latex</text></g></a> <a href="/2025/talks/calc" title="Basic Calc functionality for engineering or electronics" data-slug="calc"> <title> 1:00- 1:25 Basic Calc functionality for engineering or electronics</title> <rect x="329" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(361,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> calc</text></g></a> <a href="/2025/talks/blee-lcnt" title="Blee-LCNT: An Emacs-centered content production and self-publication framework" data-slug="blee-lcnt"> <title> 1:35- 2:15 Blee-LCNT: An Emacs-centered content production and self-publication framework</title> <rect x="377" y="15" opacity="0.5" width="54" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(429,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> blee-lcnt</text></g></a> <a href="/2025/talks/greader" title="GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence" data-slug="greader"> <title> 2:35- 2:40 GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence</title> <rect x="459" y="15" opacity="0.5" width="6" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(463,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> greader</text></g></a> <a href="/2025/talks/open-mic" title="Open session" data-slug="open-mic"> <title> 2:50- 3:40 Open session</title> <rect x="480" y="15" opacity="0.5" width="68" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(546,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> open-mic</text></g></a> <a href="/2025/talks/sat-close" title="Saturday closing remarks / open session" data-slug="sat-close"> <title> 4:00- 4:10 Saturday closing remarks / open session</title> <rect x="576" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(587,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="/2025/talks/schemacs" title="One year progress update Schemacs (formerly Gypsum)" data-slug="schemacs"> <title> 9:30- 9:55 One year progress update Schemacs (formerly Gypsum)</title> <rect x="41" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(73,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> schemacs</text></g></a> <a href="/2025/talks/juicemacs" title="Juicemacs: exploring speculative JIT compilation for ELisp in Java" data-slug="juicemacs"> <title> 10:15-10:35 Juicemacs: exploring speculative JIT compilation for ELisp in Java</title> <rect x="102" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(127,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> juicemacs</text></g></a> <a href="/2025/talks/swanky" title="Swanky Python: Interactive development for Python" data-slug="swanky"> <title> 10:45-11:10 Swanky Python: Interactive development for Python</title> <rect x="144" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(176,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> swanky</text></g></a> <a href="/2025/talks/python" title="Interactive Python programming in Emacs" data-slug="python"> <title> 11:20-11:40 Interactive Python programming in Emacs</title> <rect stroke-width="3" x="192" y="75" opacity="0.8" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(217,133)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <a href="/2025/talks/llm" title="Emacs, editors, and LLM driven workflows" data-slug="llm"> <title> 1:00- 1:25 Emacs, editors, and LLM driven workflows</title> <rect x="329" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(361,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> llm</text></g></a> <a href="/2025/talks/private-ai" title="Emacs and private AI: a great match" data-slug="private-ai"> <title> 1:45- 2:05 Emacs and private AI: a great match</title> <rect x="391" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(416,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> private-ai</text></g></a> <a href="/2025/talks/commonlisp" title="Common Lisp images communicating like-a-human through shared Emacs slime and eev" data-slug="commonlisp"> <title> 2:25- 2:55 Common Lisp images communicating like-a-human through shared Emacs slime and eev</title> <rect x="446" y="75" opacity="0.5" width="41" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(485,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> commonlisp</text></g></a> <a href="/2025/talks/graphics" title="Modern Emacs/Elisp hardware/software accelerated graphics" data-slug="graphics"> <title> 3:05- 3:30 Modern Emacs/Elisp hardware/software accelerated graphics</title> <rect x="500" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(532,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> graphics</text></g></a> <g transform="translate(0,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(82,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(164,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(247,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(329,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(411,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(494,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(576,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(658,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 5 PM</text></g></svg>
+</div>
+
+[[!toc ]]
+Format: 20-min talk ; Q&A: BigBlueButton conference room <https://media.emacsconf.org/2025/current/bbb-python.html> Etherpad: <https://pad.emacsconf.org/2025-python>
+Etherpad: <https://pad.emacsconf.org/2025-python>
+Discuss on IRC: [#emacsconf-dev](https://chat.emacsconf.org/?join=emacsconf,emacsconf-dev)
+Status: Q&A finished, IRC and pad will be archived on this page
+
+
+
+
+
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-python"><source src="https://media.emacsconf.org/2025/emacsconf-2025-python--interactive-python-programming-in-emacs--david-vujic--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2025/captions/emacsconf-2025-python--interactive-python-programming-in-emacs--david-vujic--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 19:52 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2025-python">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2025/current/bbb-python.html">Open public Q&A</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-python--interactive-python-programming-in-emacs--david-vujic--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-python--interactive-python-programming-in-emacs--david-vujic--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-python--interactive-python-programming-in-emacs--david-vujic--main.opus">Download --main.opus (11MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-python--interactive-python-programming-in-emacs--david-vujic--main.png">Download --main.png</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-python--interactive-python-programming-in-emacs--david-vujic--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-python--interactive-python-programming-in-emacs--david-vujic--main.webm">Download --main.webm (37MB)</a></li><li><a href="https://youtu.be/uACM4a5MPQM">View on Youtube</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2025/info/python-nav.md b/2025/info/python-nav.md
new file mode 100644
index 00000000..78e9400e
--- /dev/null
+++ b/2025/info/python-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by time: <a href="/2025/talks/gnus">Reading and writing emails in GNU Emacs with Gnus</a>
+Next by time: <a href="/2025/talks/latex">LaTeX export in org-mode: the overhaul</a>
+Track: <span class="sched-track Development">Development</span> - <strong><a href="https://emacsconf.org/2025/watch/dev">Watch</a></strong>
+</div>
diff --git a/2025/info/reader-after.md b/2025/info/reader-after.md
new file mode 100644
index 00000000..de969ba2
--- /dev/null
+++ b/2025/info/reader-after.md
@@ -0,0 +1,829 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<div class="transcript transcript-mainVideo"><a name="reader-mainVideo-transcript"></a><h1>Transcript</h1>
+
+
+<div class="transcript-heading">[[!template new="1" text="""An introduction to the Emacs reader""" start="00:00:00.720" video="mainVideo-reader" id="subtitle"]]</div>[[!template text="""Hello EmacsConf!""" start="00:00:00.720" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""Today I'm here to introduce you to the Emacs Reader.""" start="00:00:02.880" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""It is a general-purpose document viewer""" start="00:00:06.640" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""that lives inside our beloved Emacs.""" start="00:00:08.760" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""It tries to prioritize memory""" start="00:00:12.320" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""and performance efficiency as much as possible""" start="00:00:14.160" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""even when you're using a lower-end hardware.""" start="00:00:17.160" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""And, most importantly,""" start="00:00:20.520" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""it tries to do things in an Emacs manner.""" start="00:00:22.120" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""That is, it tries to integrate""" start="00:00:25.440" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""with existing packages as much as possible""" start="00:00:27.000" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""instead of reinventing the wheel.""" start="00:00:29.720" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""And architecturally, it tries to take the advantage""" start="00:00:32.240" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""of dynamic or native modules""" start="00:00:36.120" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""which were introduced back in 2015 into Emacs.""" start="00:00:38.480" video="mainVideo-reader" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Yet another document viewer in Emacs?""" start="00:00:44.760" video="mainVideo-reader" id="subtitle"]]</div>[[!template text="""You would ask, why exactly do we need""" start="00:00:44.760" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""another document viewer in Emacs?""" start="00:00:46.760" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""Don't we already have the built-in DocView""" start="00:00:49.200" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""and the notorious pdf-tools?""" start="00:00:51.840" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""Well, the built-in DocView has unusable latency,""" start="00:00:55.200" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""and I'm going to show you this later""" start="00:00:59.440" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""when I compare this with Emacs Reader.""" start="00:01:01.400" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""The famous pdf-tools has actually multiple issues.""" start="00:01:04.600" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""One, it is extremely memory-hungry""" start="00:01:08.080" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""regardless of what kind of PDFs you're reading.""" start="00:01:10.640" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""And, well, it can only read PDFs.""" start="00:01:14.400" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""Poppler, the library which pdf-tools uses,""" start="00:01:17.940" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""is actually sub-optimal,""" start="00:01:22.200" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""especially relative to MuPDF,""" start="00:01:23.880" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""which is what Emacs Reader is based on.""" start="00:01:25.800" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""pdf-tools is also extremely painful to install.""" start="00:01:28.560" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""If you've ever installed pdf-tools,""" start="00:01:31.920" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""you know that it has a bunch of dependencies,""" start="00:01:34.280" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""including a server that is supposedly packaged.""" start="00:01:38.480" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""across package managers, system package managers.""" start="00:01:42.320" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""It's extremely difficult to install""" start="00:01:45.062" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""and painful to install.""" start="00:01:47.738" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""And of course, pdf-tools""" start="00:01:50.280" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""since the last couple of years""" start="00:01:52.840" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""has not been maintained as much.""" start="00:01:54.560" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""There's huge PRs that have been unnoticed and unmerged.""" start="00:01:56.560" video="mainVideo-reader" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Architecture of Emacs Reader""" start="00:02:05.760" video="mainVideo-reader" id="subtitle"]]</div>[[!template text="""Architecturally, Emacs Reader takes a distance""" start="00:02:05.760" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""from both DocView and pdf-tools.""" start="00:02:09.000" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""So how DocView works is that""" start="00:02:12.560" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""it basically wraps around""" start="00:02:15.400" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""a tool called mutool.""" start="00:02:18.680" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""mutool is actually""" start="00:02:20.880" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""a command line tool from MuPDF itself.""" start="00:02:22.320" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""It relies on mutool and a bunch""" start="00:02:26.120" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""of other similar command line tools,""" start="00:02:28.200" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""and basically makes process calls""" start="00:02:30.580" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""from Elisp to the CLI tools.""" start="00:02:34.200" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""That's how DocView works,""" start="00:02:36.520" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""and that's why it sort of has latency issues""" start="00:02:38.640" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""because that's the best you can do""" start="00:02:41.320" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""by literally calling CLI tools""" start="00:02:42.520" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""and outputting the images into Emacs.""" start="00:02:45.020" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""How pdf-tools works is that it tries""" start="00:02:50.680" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""to have a server-client model.""" start="00:02:55.040" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""So the client is Emacs""" start="00:02:57.480" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""and the server is basically""" start="00:02:59.000" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""something they call epdfinfo.""" start="00:03:00.560" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""It's supposed to render the images using Poppler""" start="00:03:03.000" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""and then send the images to Emacs""" start="00:03:07.241" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""which then tries to display.""" start="00:03:10.920" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""I think the server client model is terrible.""" start="00:03:13.280" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""One, for latency purposes,""" start="00:03:16.280" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""and two, it makes things""" start="00:03:18.080" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""unnecessarily more complicated.""" start="00:03:19.840" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""Here is where we come""" start="00:03:21.800" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""and introduce dynamic modules.""" start="00:03:24.200" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""So Emacs Reader is based on""" start="00:03:26.680" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""the concept of dynamic modules""" start="00:03:30.580" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""which I'm going to talk about in a bit.""" start="00:03:32.280" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""But how it works is that we have C modules.""" start="00:03:34.280" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""So we have the emacs-module.h,""" start="00:03:37.160" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""that's the dynamic module header""" start="00:03:39.040" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""which every dynamic module package must have.""" start="00:03:40.680" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""And then we have our C files.""" start="00:03:43.160" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""And these C files essentially define functions""" start="00:03:45.480" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""that are going to be used in Emacs but in C.""" start="00:03:52.580" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""We then load these C modules""" start="00:03:56.440" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""using simple (require ...) in our Elisp modules.""" start="00:03:59.320" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""And then whenever we call""" start="00:04:03.800" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""something in the Emacs runtime,""" start="00:04:05.080" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""say I'm going to open""" start="00:04:07.120" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""PDF files in (find-file) or (reader-open-doc),""" start="00:04:09.160" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""what it does is that""" start="00:04:13.560" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""it tries to use one of the functions""" start="00:04:15.800" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""that is wrapped in Elisp,""" start="00:04:19.040" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""but actually tries to call a function in C.""" start="00:04:21.000" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""And then the C module is actually""" start="00:04:24.840" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""going to make calls to the MuPDF.""" start="00:04:26.840" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""Here the MuPDF system package,""" start="00:04:29.280" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""this is actually a system package""" start="00:04:31.600" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""that is dynamically linked to the C modules.""" start="00:04:33.400" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""So we're basically""" start="00:04:35.840" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""just using it as a shared library.""" start="00:04:36.920" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""So you have the fz_load_page, for example,""" start="00:04:39.800" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""it's a MuPDF function""" start="00:04:43.360" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""that we're going to be using in the C modules.""" start="00:04:44.840" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""So it's going to make""" start="00:04:47.400" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""a shared dynamic call to MuPDF""" start="00:04:50.080" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""and then render the page""" start="00:04:53.280" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""and then show this to Emacs.""" start="00:04:55.120" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""This pipeline, I argue,""" start="00:04:59.180" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""is much better and leaner and efficient""" start="00:05:01.840" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""than a server-client model.""" start="00:05:05.600" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""One, because we don't really need""" start="00:05:07.640" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""the server-client model.""" start="00:05:09.480" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""So back when Politza""" start="00:05:10.840" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""first introduced pdf-tools,""" start="00:05:12.360" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""that was like 10 years ago in 2015,""" start="00:05:14.760" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""the concept of dynamic modules""" start="00:05:19.760" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""were not integrated into Emacs.""" start="00:05:21.241" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""I think they came around""" start="00:05:23.280" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""like one or two years late, 2017.""" start="00:05:24.360" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""So that's the best he could go with.""" start="00:05:28.080" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""We don't really have to, today,""" start="00:05:31.220" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""because, since we can use MuPDF""" start="00:05:33.080" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""as a shared library""" start="00:05:35.720" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""which can render things in real-time""" start="00:05:37.000" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""and just give us the rendered images""" start="00:05:39.480" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""which we can then display,""" start="00:05:41.760" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""there's no reason for a server to do things for us.""" start="00:05:43.600" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""So that's the main architectural difference""" start="00:05:49.660" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""that Emacs Reader introduces""" start="00:05:53.360" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""compared to pdf-tools and DocView.""" start="00:05:55.480" video="mainVideo-reader" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""A word on dynamic modules""" start="00:06:00.280" video="mainVideo-reader" id="subtitle"]]</div>[[!template text="""What exactly are dynamic modules?""" start="00:06:00.280" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""Well, I can't really give you""" start="00:06:02.480" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""a full-fledged explanation,""" start="00:06:04.120" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""but essentially dynamic modules""" start="00:06:06.200" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""let you evaluate""" start="00:06:08.640" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""native compiled code""" start="00:06:10.520" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""in other languages like C, C++, Rust""" start="00:06:12.040" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""that behaves like regular Emacs Lisp.""" start="00:06:15.120" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""So when our Emacs C modules,""" start="00:06:18.520" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""the render-core.c or render-theme.c,""" start="00:06:23.640" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""when all of these are compiled,""" start="00:06:26.040" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""and they're called from the Elisp modules.""" start="00:06:28.300" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""They behave like Elisp even though""" start="00:06:30.840" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""they're as fast as a C function""" start="00:06:34.440" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""because they're compiled C code.""" start="00:06:37.040" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""But you essentially call them""" start="00:06:39.360" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""just like Elisp functions.""" start="00:06:41.400" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""You can find them using C-h f and so on.""" start="00:06:42.760" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""So you can call any function""" start="00:06:47.820" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""from any language that supports""" start="00:06:49.680" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""the C ABI, which is virtually everything,""" start="00:06:51.720" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""without leaving Emacs""" start="00:06:53.520" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""and without losing any performance.""" start="00:06:54.920" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""This is extremely helpful""" start="00:06:56.760" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""when you want to use""" start="00:06:58.480" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""existing libraries like MuPDF""" start="00:06:59.920" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""or any other cryptographic library""" start="00:07:02.120" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""that is written in C""" start="00:07:04.080" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""and you don't want to rewrite""" start="00:07:06.040" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""the entire thing in Elisp,""" start="00:07:07.038" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""but you can just use it as a native library.""" start="00:07:08.538" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""You can read more""" start="00:07:11.740" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""on how dynamic modules work""" start="00:07:13.040" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""and how you can write one in this blog.""" start="00:07:14.680" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""This is something that I wrote myself""" start="00:07:17.760" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""just after starting this package""" start="00:07:19.480" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""and it will give you a bit more guidance""" start="00:07:22.240" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""on how to use dynamic modules more efficiently.""" start="00:07:25.440" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""I think dynamic modules""" start="00:07:27.520" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""should be used more and more in Emacs""" start="00:07:28.680" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""and I think their advantages""" start="00:07:32.300" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""have not been exploited""" start="00:07:34.520" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""as much as they should.""" start="00:07:36.080" video="mainVideo-reader" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Features of Emacs Reader""" start="00:07:39.560" video="mainVideo-reader" id="subtitle"]]</div>[[!template text="""Now we're going to talk a bit about""" start="00:07:39.560" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""the core features of Emacs Reader.""" start="00:07:42.320" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""And these are the following features""" start="00:07:46.720" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""that we're going to talk about.""" start="00:07:48.880" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""And finally, to talk about""" start="00:07:50.400" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""some challenges that we faced.""" start="00:07:51.960" video="mainVideo-reader" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Memory efficiency""" start="00:07:56.760" video="mainVideo-reader" id="subtitle"]]</div>[[!template text="""First is memory efficiency.""" start="00:07:56.760" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""I already told you that""" start="00:07:58.520" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""Emacs Reader's first priority""" start="00:08:00.820" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""is to make sure that we are not slow""" start="00:08:03.240" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""and we are not taking""" start="00:08:06.440" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""a bunch of memory unnecessarily.""" start="00:08:07.960" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""So here's a graph of the heap memory size""" start="00:08:10.320" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""as it grows for DocView.""" start="00:08:14.440" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""So this is again in emacs -Q.""" start="00:08:17.920" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""So this is a fresh Emacs session""" start="00:08:20.638" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""with just DocView.""" start="00:08:22.400" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""It grows up to 900MB""" start="00:08:25.280" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""for a very small PDF that is a LaTeX PDF.""" start="00:08:27.820" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""No scanned huge PDF. It's a 2MB PDF.""" start="00:08:31.560" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""But when I scrolled from the beginning""" start="00:08:36.780" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""of the PDF to the end,""" start="00:08:39.680" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""it went up to 900MB.""" start="00:08:41.620" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""That's the memory heap size.""" start="00:08:43.640" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""Does pdf-tools make this any better?""" start="00:08:46.820" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""It actually doesn't.""" start="00:08:49.700" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""So, pdf-tools pretty much""" start="00:08:51.920" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""does the same thing.""" start="00:08:55.040" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""if you look at it here""" start="00:08:57.220" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""just so if you're going to ask me""" start="00:08:58.440" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""are they two different graphs,""" start="00:09:01.360" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""or are you just showing me the same graph,""" start="00:09:02.940" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""they're actually two different graphs,""" start="00:09:04.840" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""because if you look at the DocView graph""" start="00:09:06.120" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""it uses cairo and it uses librsvg""" start="00:09:08.780" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""because docview by default""" start="00:09:11.560" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""converts the images into SVG.""" start="00:09:13.440" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""The rendered images are SVGs.""" start="00:09:16.120" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""pdf-tools doesn't, so you don't see""" start="00:09:18.000" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""any librsvg calls here or anything""" start="00:09:20.560" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""So this is pdf-tools""" start="00:09:24.040" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""and it basically takes up""" start="00:09:25.440" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""the same amount of memory, 900MB,""" start="00:09:27.080" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""and exactly the same operation,""" start="00:09:29.080" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""exactly the same PDF,""" start="00:09:30.920" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""exactly scrolling from first to the last.""" start="00:09:32.480" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""Where do we stand?""" start="00:09:36.140" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""Well, we actually do much better.""" start="00:09:37.720" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""So let me zoom in this.""" start="00:09:40.560" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""So if you see, we stand within""" start="00:09:42.600" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""at a peak of 72MB.""" start="00:09:46.320" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""Exactly the same PDF,""" start="00:09:49.260" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""exactly the same operation""" start="00:09:51.280" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""from the beginning to the end,""" start="00:09:53.040" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""around 285 pages scrolled.""" start="00:09:54.560" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""We take much less than 80 MB.""" start="00:09:57.600" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""And actually, to be very frank,""" start="00:10:03.240" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""the only memory that we're storing in Emacs,""" start="00:10:05.072" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""oh, sorry, not in Emacs,""" start="00:10:09.205" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""in the MuPDF heap is just about 30 MB.""" start="00:10:12.440" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""It's this dark red one.""" start="00:10:16.600" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""That's the cache that we're storing.""" start="00:10:19.120" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""That's the memory that we're interacting with""" start="00:10:22.560" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""in real time.""" start="00:10:24.760" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""This is stuff that Emacs adds on top of it""" start="00:10:25.480" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""and a bit of libmupdf.""" start="00:10:29.200" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""So you can see, in terms of memory,""" start="00:10:32.920" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""we're saving...""" start="00:10:35.200" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""we're literally down,""" start="00:10:37.240" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""what, a fraction of 10!""" start="00:10:41.120" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""This was a priority for us""" start="00:10:45.360" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""since the beginning,""" start="00:10:48.520" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""because when I was starting to use pdf-tools,""" start="00:10:49.280" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""it was unusable for me""" start="00:10:52.000" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""because I was on a lower-end hardware""" start="00:10:53.360" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""and I thought it should not be""" start="00:10:55.160" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""really that difficult""" start="00:10:57.600" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""for a document reader""" start="00:10:58.960" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""to not take a gigabyte of memory.""" start="00:11:00.880" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""It really shouldn't because""" start="00:11:04.100" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""you're not really doing that much,""" start="00:11:05.920" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""you're just displaying images.""" start="00:11:07.360" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""So that's how efficient""" start="00:11:10.920" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""we are in terms of memory.""" start="00:11:12.240" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""Let's see how efficient""" start="00:11:13.640" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""we are in terms of speed.""" start="00:11:15.372" video="mainVideo-reader" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Performance and speed""" start="00:11:18.720" video="mainVideo-reader" id="subtitle"]]</div>[[!template text="""So Emacs Reader is actually""" start="00:11:18.720" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""as fast as pdf-tools,""" start="00:11:21.100" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""and it is actually""" start="00:11:23.120" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""way more faster than DocView.""" start="00:11:24.080" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""In some cases,""" start="00:11:27.240" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""it actually beats existing""" start="00:11:28.560" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""standalone document readers and browsers.""" start="00:11:31.680" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""So let's actually see this in action.""" start="00:11:34.860" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""So here we are with""" start="00:11:41.120" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""a few emacs -Q sessions.""" start="00:11:42.320" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""I'm using emacs -Q so as to give you...""" start="00:11:46.040" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""that this is actually""" start="00:11:50.720" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""as less overhead possible.""" start="00:11:52.160" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""So we have first DocView.""" start="00:11:55.140" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""All of these tests""" start="00:11:57.360" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""are going to be done on the same PDF.""" start="00:12:01.138" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""It's the documentation manual from MuPDF.""" start="00:12:03.040" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""So if I scroll, this is fine.""" start="00:12:07.200" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""I'm just pressing n""" start="00:12:10.560" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""and it seems to work fine.""" start="00:12:12.860" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""If I press and hold n,""" start="00:12:15.160" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""I have pressed n and I'm holding.""" start="00:12:19.520" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""And Emacs is stuck.""" start="00:12:21.800" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""And it's going to stay stuck""" start="00:12:26.420" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""because it's making calls""" start="00:12:27.560" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""to the CLI tool that I said, mutool.""" start="00:12:28.800" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""And after it's done getting stuck,""" start="00:12:31.280" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""it is going to get back.""" start="00:12:35.520" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""As you can see, if you go back,""" start="00:12:40.180" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""you're able to go back fine.""" start="00:12:43.040" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""It does not get stuck""" start="00:12:45.080" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""because what Emacs does""" start="00:12:46.200" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""is it basically calls mutool,""" start="00:12:48.440" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""like fetches a bunch of pages,""" start="00:12:51.520" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""essentially all the pages""" start="00:12:53.240" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""that you asked for it,""" start="00:12:54.920" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""and it puts them into the memory.""" start="00:12:56.200" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""And that's it.""" start="00:12:59.160" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""It puts them into the memory""" start="00:12:59.880" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""and then scrolls through it.""" start="00:13:01.200" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""So going back, you will most likely""" start="00:13:03.140" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""not have any stuck issues.""" start="00:13:05.840" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""Sometimes you do""" start="00:13:07.240" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""because some images do get GC'd.""" start="00:13:07.840" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""But that's the idea.""" start="00:13:10.920" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""Whenever there's no image in memory,""" start="00:13:13.600" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""it gets stuck.""" start="00:13:16.640" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""And it gets stuck good.""" start="00:13:18.740" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""That's DocView.""" start="00:13:21.240" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""pdf-tools is actually""" start="00:13:23.580" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""not problematic here.""" start="00:13:25.200" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""pdf-tools is extremely efficient""" start="00:13:27.360" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""and extremely fast.""" start="00:13:29.040" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""So we can go through the pages""" start="00:13:30.200" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""without any issues.""" start="00:13:32.840" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""We can zoom.""" start="00:13:34.480" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""The zoom did get stuck a bit,""" start="00:13:37.160" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""but that's relatively fine.""" start="00:13:39.880" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""Emacs Reader is exactly as fast""" start="00:13:44.040" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""as pdf-tools here.""" start="00:13:46.960" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""So this is pdf-view,""" start="00:13:49.200" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""this is Emacs Reader.""" start="00:13:50.280" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""Let's scroll through the pages.""" start="00:13:51.860" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""As you can see, nothing is getting stuck""" start="00:13:55.760" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""because we're not really waiting""" start="00:13:59.160" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""for any tool to send us any images.""" start="00:14:00.920" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""We just have a little cache""" start="00:14:06.360" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""and we're scrolling through them""" start="00:14:08.300" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""and rendering images in real time.""" start="00:14:09.400" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""Zooming also works fine.""" start="00:14:13.960" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""So, with regards to this,""" start="00:14:17.280" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""we're in parity with pdf-tools.""" start="00:14:19.520" video="mainVideo-reader" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Scanned PDFs""" start="00:14:23.680" video="mainVideo-reader" id="subtitle"]]</div>[[!template text="""Now, where pdf-tools and actually""" start="00:14:23.680" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""a lot of readers have issues""" start="00:14:26.320" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""is when they're dealing with scanned PDF.""" start="00:14:28.080" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""So, we have this PDF which is notorious""" start="00:14:32.500" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""for being really difficult to render""" start="00:14:36.840" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""because this is entirely built""" start="00:14:40.600" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""with scanned images.""" start="00:14:42.600" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""This is the kind of PDF""" start="00:14:43.480" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""that you get from Internet Archive.""" start="00:14:44.620" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""This is essentially someone""" start="00:14:46.520" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""took photos of the book in a camera""" start="00:14:47.840" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""and literally turned them into a PDF.""" start="00:14:50.920" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""Emacs Reader actually does not have""" start="00:14:56.660" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""any issues rendering this.""" start="00:14:58.720" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""As you can see, it renders it smoothly""" start="00:15:01.080" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""and fine without any halts.""" start="00:15:05.120" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""I can change Emacs even while it's doing so,""" start="00:15:09.680" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""and it does not have any issues.""" start="00:15:13.960" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""pdf-tools are the same.""" start="00:15:17.140" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""PDF also does not have any issues.""" start="00:15:20.072" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""Sorry. Click pdf-view-mode.""" start="00:15:21.760" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""pdf-view (pdf-tools) is a bit slower""" start="00:15:26.580" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""but does not have any issues. It works.""" start="00:15:29.860" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""Here, actually, pdf-tools and Emacs Reader""" start="00:15:35.620" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""are more efficient than even browsers.""" start="00:15:40.701" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""So, if I try to open""" start="00:15:46.100" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""the same page in a browser,""" start="00:15:47.200" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""I'm trying to scroll.""" start="00:15:50.840" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""And after I've scrolled and I leave,""" start="00:15:52.920" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""scrolling is going to load""" start="00:15:54.920" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""for a bunch of seconds""" start="00:15:58.120" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""to give me the page.""" start="00:15:59.840" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""It's more than five seconds,""" start="00:16:03.140" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""as you can see,""" start="00:16:04.680" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""and this is actually totally not usable.""" start="00:16:05.480" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""If you're going to read this book,""" start="00:16:08.640" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""an electromagnetics book,""" start="00:16:10.200" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""you're going to have a terrible time""" start="00:16:12.000" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""reading this in a browser,""" start="00:16:13.600" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""which is supposed to be""" start="00:16:14.760" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""the fastest thing alive.""" start="00:16:15.480" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""You sort of have the same experience""" start="00:16:17.160" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""in Okular. So this is Okular.""" start="00:16:19.120" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""If I try to scroll through this,""" start="00:16:20.560" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""it will do the same thing.""" start="00:16:22.440" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""And while it is better than the browser,""" start="00:16:25.420" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""it still takes a while""" start="00:16:28.520" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""and it still has, like, if you zoom,""" start="00:16:31.120" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""you're going to have a bit of a delay.""" start="00:16:34.120" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""You don't really face that in Emacs Reader.""" start="00:16:36.800" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""We zoom in and out just fine.""" start="00:16:41.580" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""And even with using mouse,""" start="00:16:45.260" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""you can zoom in and out just fine.""" start="00:16:47.240" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""So this is how Emacs Reader performs""" start="00:16:51.840" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""in terms of speed with these other tools.""" start="00:16:54.800" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""Now we will go back to the original presentation.""" start="00:17:01.120" video="mainVideo-reader" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""System-level multi-threading""" start="00:17:08.960" video="mainVideo-reader" id="subtitle"]]</div>[[!template text="""Now, how exactly is Emacs Reader""" start="00:17:08.960" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""able to do a lot of this?""" start="00:17:11.920" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""I wish I could sort of spend""" start="00:17:14.080" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""an entire session""" start="00:17:17.840" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""just talking about this, but I can't.""" start="00:17:19.000" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""So I'm just going to make this short.""" start="00:17:21.240" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""When you load Emacs Reader,""" start="00:17:22.920" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""in the standard output,""" start="00:17:24.800" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""it's going to say this:""" start="00:17:26.320" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""that eight threads have been initialized.""" start="00:17:27.440" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""Now, what we did with Emacs here""" start="00:17:29.280" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""is that we enabled""" start="00:17:32.680" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""system-level multithreading.""" start="00:17:33.800" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""Now, Emacs is not multithreaded.""" start="00:17:35.040" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""We all know that notoriously.""" start="00:17:36.640" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""It is single-threaded.""" start="00:17:38.200" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""But we don't really""" start="00:17:39.520" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""need Emacs to be multithreaded, though.""" start="00:17:41.480" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""Emacs does not need to be multithreaded.""" start="00:17:43.820" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""What needs to be multithreaded""" start="00:17:45.760" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""is the rendering part""" start="00:17:47.200" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""because that's the most expensive part.""" start="00:17:48.520" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""In Emacs, we're only just displaying images.""" start="00:17:50.760" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""Emacs itself does not have a PDF engine""" start="00:17:53.520" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""that is rendering stuff.""" start="00:17:56.480" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""MuPDF is supposed to take care of that.""" start="00:17:57.920" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""So if I can do multithreading""" start="00:18:00.560" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""in the rendering pipeline,""" start="00:18:03.200" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""that is when I'm rendering pages""" start="00:18:05.080" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""instead of displaying them,""" start="00:18:07.120" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""that's fine for me because""" start="00:18:08.720" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""the rendering part most of the time,""" start="00:18:10.280" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""especially in scanned PDFs,""" start="00:18:11.680" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""is the most expensive part.""" start="00:18:12.960" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""So if you look at this graph,""" start="00:18:14.680" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""we have two parts here.""" start="00:18:16.440" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""We have the display pipeline""" start="00:18:17.960" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""and we have the rendering pipeline.""" start="00:18:19.680" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""In the display pipeline,""" start="00:18:22.280" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""we have just the Emacs session""" start="00:18:23.640" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""which has the reader loaded""" start="00:18:26.520" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""and that's the main thread.""" start="00:18:29.360" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""Then we have the rendering pipeline""" start="00:18:31.580" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""which has the MuPDF system package""" start="00:18:33.320" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""dynamically linked.""" start="00:18:35.560" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""So when you load Emacs Reader,""" start="00:18:38.460" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""we initialize a thread pool with eight threads.""" start="00:18:40.400" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""Now what you do is let's say we are at page 50.""" start="00:18:45.160" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""At page 50, the Emacs Reader""" start="00:18:48.760" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""maintains a cache.""" start="00:18:51.760" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""It's like a stack of pages""" start="00:18:54.000" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""that we keep in memory all the time.""" start="00:18:56.520" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""This cache is entirely outside of Emacs.""" start="00:18:58.480" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""It is not inside Emacs environment.""" start="00:19:02.520" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""It is in the C memory heap,""" start="00:19:04.560" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""in the MuPDF memory heap""" start="00:19:07.571" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""that is outside of Emacs environment.""" start="00:19:09.120" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""It does not make any calls to Emacs anything.""" start="00:19:11.120" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""It does not have a single Elisp line.""" start="00:19:13.840" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""So this cache is stored outside.""" start="00:19:15.800" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""Now when I want to retrieve""" start="00:19:20.120" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""anything from this cache,""" start="00:19:22.080" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""let's say, so I have cached""" start="00:19:23.440" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""up until 55, from 45 to 55.""" start="00:19:26.200" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""So what happens is that""" start="00:19:29.360" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""when you're at page 50,""" start="00:19:31.080" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""you always have a cache""" start="00:19:32.760" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""that's n + 5 and n - 5.""" start="00:19:34.360" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""So you have cache of 5 pages forward""" start="00:19:36.720" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""and 5 pages backward.""" start="00:19:39.720" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""But let's say I want to go to page 56.""" start="00:19:41.960" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""So I will ask an Emacs render page 56.""" start="00:19:45.140" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""And I'm not going to ask it""" start="00:19:50.080" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""to MuPDF directly.""" start="00:19:51.400" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""I'm going to ask it""" start="00:19:53.080" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""to the thread pool that do this job.""" start="00:19:54.400" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""And thread pool is going to""" start="00:19:56.720" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""assign one thread to it.""" start="00:19:58.120" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""Let's say the thread 1""" start="00:19:59.720" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""which is going to render page 56.""" start="00:20:00.960" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""So this thread is going to make calls to MuPDF""" start="00:20:03.240" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""through our code dynamic module.""" start="00:20:06.560" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""And MuPDF after rendering it""" start="00:20:08.920" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""is going to store it in the cache.""" start="00:20:11.840" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""So we're going to add another 56 page to this.""" start="00:20:13.440" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""Now, while this is happening,""" start="00:20:18.060" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""Emacs Reader does not, like Emacs itself,""" start="00:20:21.760" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""the session is not going to be stuck""" start="00:20:24.680" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""because we just made a call to the thread.""" start="00:20:27.380" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""We just asked the thread.""" start="00:20:30.240" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""So like this, this call, like it's done.""" start="00:20:32.280" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""So you just assign something to a thread""" start="00:20:35.360" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""and then this is fine.""" start="00:20:38.160" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""Like, you're not waiting for the thread""" start="00:20:40.960" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""to complete or anything.""" start="00:20:42.480" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""Emacs is not waiting for the thread to complete.""" start="00:20:43.720" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""The dynamic module or the C side""" start="00:20:46.520" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""might wait to complete""" start="00:20:48.520" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""but that is entirely different from""" start="00:20:49.480" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""the Emacs session.""" start="00:20:51.280" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""So Emacs viewer can continue to""" start="00:20:52.160" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""display the page 50""" start="00:20:54.840" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""while the rendering pipeline""" start="00:20:56.280" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""is still rendering the 56th page.""" start="00:20:58.600" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""And when Emacs asks to display page 56,""" start="00:21:01.980" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""it's going to ask it to a thread pool.""" start="00:21:05.760" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""Then thread pool is going to assign""" start="00:21:09.620" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""another thread, let's say this one,""" start="00:21:11.537" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""to retrieve page 56 from the memory cache.""" start="00:21:13.320" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""And then the 56 page is going to be sent""" start="00:21:17.000" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""to the Emacs to be displayed.""" start="00:21:20.040" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""Again, the retrieval part""" start="00:21:24.560" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""is entirely independent of Emacs.""" start="00:21:26.040" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""Emacs does not have to wait for it.""" start="00:21:28.520" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""Emacs only needs to wait to display it.""" start="00:21:30.160" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""So, the displaying part""" start="00:21:34.720" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""and the rendering pipeline""" start="00:21:36.620" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""are entirely asynchronous, so to speak.""" start="00:21:37.920" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""And in the diagram, if you see,""" start="00:21:41.560" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""all the arrows that are""" start="00:21:43.640" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""magenta in color,""" start="00:21:46.400" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""they are native to the Emacs runtime.""" start="00:21:48.840" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""That is, they are single-threaded.""" start="00:21:51.640" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""They are connected to Emacs.""" start="00:21:53.960" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""And all the arrows that are red in color,""" start="00:21:55.680" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""they are totally asynchronous.""" start="00:21:58.760" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""They can be multi-threaded if you want.""" start="00:22:01.860" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""They are multi-threaded by default""" start="00:22:03.520" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""because they interact""" start="00:22:05.760" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""only with the MuPDF shared library""" start="00:22:07.680" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""and the C heap.""" start="00:22:09.520" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""They do not touch anything""" start="00:22:11.400" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""in the Emacs runtime.""" start="00:22:12.720" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""This is how we're able to switch quickly""" start="00:22:14.640" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""between these huge scanned PDFs""" start="00:22:18.960" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""that have huge images""" start="00:22:22.520" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""in each of their pages""" start="00:22:23.960" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""because we don't really wait for""" start="00:22:25.360" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""each page to be rendered.""" start="00:22:28.080" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""And Emacs does not wait for that.""" start="00:22:31.380" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""So that's another architectural feature""" start="00:22:35.360" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""of Emacs Reader""" start="00:22:39.240" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""that we are system-level multithreaded.""" start="00:22:40.320" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""Now Emacs viewer also supports""" start="00:22:43.200" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""almost all document formats.""" start="00:22:47.400" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""It supports PDF, EPUB, MOBI, XPS, CPZ comics,""" start="00:22:49.320" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""and it even supports""" start="00:22:54.760" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""other non-ebook formats""" start="00:22:56.440" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""like document format,""" start="00:22:59.971" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""so you can open""" start="00:23:00.840" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""LibreOffice documents in it,""" start="00:23:01.840" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""and even stuff like PPT and Excel in it,""" start="00:23:04.800" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""even though they're not going to be""" start="00:23:07.080" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""supported in a as nice manner.""" start="00:23:08.760" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""And we can do that because MuPDF does this.""" start="00:23:13.860" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""MuPDF has support for all of this""" start="00:23:16.240" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""and it treats them just as it treats PDF.""" start="00:23:18.080" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""Nothing special.""" start="00:23:22.680" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""The only thing that we don't support right now""" start="00:23:24.540" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""is DejaVu, so that is not supported right now.""" start="00:23:26.520" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""I'm going to work on making it supported""" start="00:23:30.160" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""at the upstream MuPDF.""" start="00:23:33.320" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""That's going to take a long time,""" start="00:23:36.020" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""but it's in the plans.""" start="00:23:38.440" video="mainVideo-reader" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Native Emacs integrations""" start="00:23:44.240" video="mainVideo-reader" id="subtitle"]]</div>[[!template text="""Now with Emacs Reader,""" start="00:23:44.240" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""we also integrate""" start="00:23:45.440" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""with existing Emacs packages""" start="00:23:46.680" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""as much as possible.""" start="00:23:48.620" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""So bookmarks, C-x r b,""" start="00:23:50.040" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""you can do it natively.""" start="00:23:53.000" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""So you can save a page as a bookmark""" start="00:23:54.360" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""just as you save anything else in Emacs""" start="00:23:57.560" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""as a bookmark.""" start="00:23:59.640" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""There's also saveplace integration.""" start="00:24:00.520" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""So you can scroll a PDF, close it,""" start="00:24:02.600" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""and then come back to it""" start="00:24:06.160" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""at the same page that you saved it at.""" start="00:24:07.600" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""Sorry, that you closed it at.""" start="00:24:10.160" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""And it's going to work just out of the box""" start="00:24:12.880" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""because of the saveplace""" start="00:24:14.920" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""package in Emacs that is built in.""" start="00:24:16.400" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""We also have imenu integration""" start="00:24:19.000" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""for table of contents.""" start="00:24:20.920" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""So if you see this, this is imenu""" start="00:24:22.480" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""and you can scroll through the contents""" start="00:24:26.720" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""just like you scroll through any imenu.""" start="00:24:28.680" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""You can also do it in the menu bar by clicking.""" start="00:24:30.560" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""It works just as nice.""" start="00:24:39.500" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""We also have something like""" start="00:24:40.680" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""the outline mode that pdf-tools has.""" start="00:24:42.740" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""So if you press O in a document,""" start="00:24:44.800" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""it's going to give you this outline.""" start="00:24:48.040" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""And these are buttons that are clickable.""" start="00:24:49.960" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""You can click them.""" start="00:24:53.400" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""You can press Enter at them.""" start="00:24:54.440" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""And this is the menu bar item that I was looking at.""" start="00:24:56.520" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""If you click here, index,""" start="00:25:00.360" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""it's going to show you""" start="00:25:02.000" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""the exact same thing""" start="00:25:03.280" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""but in a different interface.""" start="00:25:05.340" video="mainVideo-reader" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""(Naive) dark mode""" start="00:25:10.340" video="mainVideo-reader" id="subtitle"]]</div>[[!template text="""We also have a naive dark mode,""" start="00:25:10.340" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""which is not really as nice as""" start="00:25:15.260" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""we would like it to be,""" start="00:25:17.800" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""and dark mode fanatics""" start="00:25:18.600" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""I'm sure will have issues with it,""" start="00:25:20.800" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""but we're going to improve it in time.""" start="00:25:22.200" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""For now, this is what we have.""" start="00:25:24.200" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""And it can be enabled per document,""" start="00:25:27.380" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""so you can have one, like,""" start="00:25:30.360" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""one document that is in dark mode,""" start="00:25:33.100" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""but another one that is not.""" start="00:25:34.880" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""That is nice to have.""" start="00:25:36.440" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""Eventually we're going to work on more themes.""" start="00:25:39.280" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""You should be able to actually integrate it""" start="00:25:42.680" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""with Emacs themes as much as possible.""" start="00:25:46.480" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""You can make it default so that""" start="00:25:49.440" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""it inherits colors from the Emacs theme.""" start="00:25:52.680" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""That is one of the things""" start="00:25:54.840" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""that we also have planned.""" start="00:25:56.360" video="mainVideo-reader" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Challenges and further improvements""" start="00:26:01.140" video="mainVideo-reader" id="subtitle"]]</div>[[!template text="""We did face a bunch of challenges""" start="00:26:01.140" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""while trying to implement these features.""" start="00:26:03.440" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""One of the initial challenges was that""" start="00:26:05.520" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""SVGs were actually a bad idea.""" start="00:26:07.520" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""They're huge, especially in scanned PDFs,""" start="00:26:09.320" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""and they make things much slower.""" start="00:26:12.160" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""So we chose to actually have PPMs,""" start="00:26:14.680" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""which is the simplest image format ever possible.""" start="00:26:18.120" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""Now, it was also very difficult""" start="00:26:24.100" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""to make reader-mode be window-specific.""" start="00:26:26.440" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""So, you know, while you're scrolling""" start="00:26:29.560" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""the same document in one window,""" start="00:26:31.560" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""the other window with the same document""" start="00:26:34.280" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""should not change.""" start="00:26:36.200" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""We should be able to have multiple pages""" start="00:26:37.040" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""in different windows of the same document.""" start="00:26:39.080" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""That was very difficult""" start="00:26:42.320" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""because as I told you about the cache,""" start="00:26:44.680" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""the cache works in an idiosyncratic manner""" start="00:26:46.680" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""and we needed to make it so that each window""" start="00:26:50.600" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""will have its own cache""" start="00:26:54.080" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""instead of having a global cache for each file.""" start="00:26:56.560" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""That took some rewrite.""" start="00:27:01.200" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""And now, because we needed to do""" start="00:27:03.800" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""this sort of multithreading,""" start="00:27:06.880" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""system-level multithreading,""" start="00:27:07.800" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""we needed to use""" start="00:27:09.000" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""a specific package of MuPDF""" start="00:27:10.920" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""that had a bug for this which got fixed.""" start="00:27:13.040" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""And that's 1.26.0.""" start="00:27:16.440" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""Because we did that,""" start="00:27:20.720" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""a lot of the GNU/Linux distributions did not""" start="00:27:23.337" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""really have this latest package.""" start="00:27:26.463" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""So we had to actually""" start="00:27:28.872" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""package it in-tree.""" start="00:27:30.772" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""as a git sub-module.""" start="00:27:33.805" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""That was a horror! But eventually... now""" start="00:27:36.972" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""I think most GNU/Linux distributions""" start="00:27:40.738" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""already have this [version].""" start="00:27:43.605" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""The upcoming features that we have planned""" start="00:27:46.341" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""are the first one is that we need to rewrite""" start="00:27:48.640" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""the display mechanism entirely from scratch""" start="00:27:52.800" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""to use a tiled rendering approach.""" start="00:27:55.360" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""So right now we just take an image""" start="00:27:57.560" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""and display it inside an Emacs buffer""" start="00:28:00.000" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""just like that.""" start="00:28:02.960" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""But it will be changed so that the image""" start="00:28:03.960" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""will be displayed in the tiled manner""" start="00:28:08.760" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""so there will be multiple tiles""" start="00:28:10.760" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""but it'll be pixel perfect""" start="00:28:12.480" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""so you won't really see a difference.""" start="00:28:14.720" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""The reason to do this is to implement features""" start="00:28:16.400" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""for text selection, actually.""" start="00:28:19.840" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""So we can't really do text selection""" start="00:28:21.000" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""without running into a bunch of memory""" start="00:28:24.240" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""and other issues latency issues""" start="00:28:27.080" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""if we don't do tiling.""" start="00:28:30.000" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""So we need to do those two things,""" start="00:28:33.020" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""they are at the highest priority right now.""" start="00:28:35.680" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""And then, once we're done with that,""" start="00:28:38.880" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""we're going to support annotations,""" start="00:28:40.280" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""highlighting, everything that you're used to""" start="00:28:42.280" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""in pdf-tools and org-noter.""" start="00:28:45.440" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""And once we're done with that,""" start="00:28:47.320" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""we're going to also integrate with AucTeX and SyncTeX.""" start="00:28:50.120" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""Because right now, when a PDF gets updated,""" start="00:28:55.020" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""especially a LaTeX PDF,""" start="00:28:58.520" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""since there is no SyncTeX integration,""" start="00:29:00.240" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""it can't really do it nicely""" start="00:29:03.438" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""and it sometimes even crashes Emacs.""" start="00:29:05.772" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""So that's something that""" start="00:29:08.661" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""we will be planning to implement.""" start="00:29:11.538" video="mainVideo-reader" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""What Emacs can learn?""" start="00:29:14.272" video="mainVideo-reader" id="subtitle"]]</div>[[!template text="""Now, from this experiment,""" start="00:29:14.272" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""what exactly can Emacs,""" start="00:29:16.160" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""the Emacs core devs and others""" start="00:29:17.920" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""who are building packages can learn?""" start="00:29:20.520" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""Well, the first thing is that all of this""" start="00:29:22.400" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""should not be really this difficult""" start="00:29:24.920" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""because all we're asking from Emacs""" start="00:29:27.160" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""is to display images in real-time""" start="00:29:30.360" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""and update them in real-time.""" start="00:29:32.440" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""That should not be that difficult""" start="00:29:36.280" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""of a thing to do, but apparently it is.""" start="00:29:37.760" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""And that's why Emacs's graphical interface""" start="00:29:40.280" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""needs to be more modular, more composable,""" start="00:29:43.280" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""and flexible for real-time graphics.""" start="00:29:47.960" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""If it is supposed to have things like,""" start="00:29:51.000" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""again, a document reader,""" start="00:29:54.220" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""something like a video editor,""" start="00:29:56.180" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""and something like that,""" start="00:29:57.280" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""Emacs's graphical interface""" start="00:29:58.980" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""needs to grow and be more mature.""" start="00:30:00.480" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""One of the things""" start="00:30:05.240" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""that's stopping it from doing that""" start="00:30:06.240" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""is actually Emacs's overlay functionality.""" start="00:30:08.080" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""So right now, the way we display""" start="00:30:10.320" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""an image in a buffer""" start="00:30:13.940" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""is using an overlay,""" start="00:30:16.520" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""actually multiple overlays.""" start="00:30:18.901" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""Overlays are static in the sense that""" start="00:30:22.020" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""if I attach to one image to one overlay,""" start="00:30:25.840" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""I need to have an entirely different image""" start="00:30:29.740" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""updated for that overlay.""" start="00:30:34.040" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""So I need to create another different image,""" start="00:30:37.200" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""change it in the memory,""" start="00:30:39.640" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""and then display it to update it.""" start="00:30:41.180" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""I can't change the image data""" start="00:30:43.640" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""in real time of the overlay.""" start="00:30:46.640" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""And that is a big issue.""" start="00:30:49.240" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""I've actually made an emacs-devel""" start="00:30:54.000" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""mailing list thread about it.""" start="00:30:56.260" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""I talked to Eli about it as well.""" start="00:30:58.280" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""And he said there's a possibility""" start="00:31:01.120" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""that this can be changed,""" start="00:31:04.640" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""but it's going to take""" start="00:31:05.360" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""a certain amount of rewrite.""" start="00:31:06.960" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""There's also issues with Emacs GC.""" start="00:31:09.920" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""Emacs GC sometimes leaks memory""" start="00:31:12.320" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""when you update images too quickly.""" start="00:31:14.640" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""That is, when you have a bunch of images""" start="00:31:16.440" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""that are getting churned out too quickly,""" start="00:31:18.600" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""Emacs GC starts leaking""" start="00:31:21.360" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""and it just goes up to""" start="00:31:23.040" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""a huge number of gigabytes in RAM.""" start="00:31:25.160" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""That's also a huge problem.""" start="00:31:29.680" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""The dynamic module API,""" start="00:31:32.400" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""the emacs-module.h header,""" start="00:31:33.760" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""needs to have more helpers.""" start="00:31:37.140" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""It's really bare bones,""" start="00:31:38.800" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""and I like that it is bare bones""" start="00:31:41.720" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""so that other languages can use it,""" start="00:31:43.440" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""but at the same time, I think""" start="00:31:45.000" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""it'll be really good""" start="00:31:46.960" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""if we can have some helpers""" start="00:31:47.880" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""that can do better memory interaction,""" start="00:31:49.840" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""like strings and so on,""" start="00:31:53.880" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""which we also faced some issues with.""" start="00:31:57.260" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""Emacs's fractional scaling system""" start="00:32:00.380" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""seems to be broken across different toolkits.""" start="00:32:02.320" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""We have bug reports that say in pgtk in Wayland,""" start="00:32:05.360" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""something seems to render differently""" start="00:32:11.000" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""because they have fractional scaling enabled.""" start="00:32:13.560" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""So that's something""" start="00:32:17.260" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""that I think Emacs, overall,""" start="00:32:18.440" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""I think Emacs needs to focus on improving""" start="00:32:21.240" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""the graphical interface pipeline""" start="00:32:24.360" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""to be a much more mature one.""" start="00:32:28.240" video="mainVideo-reader" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Contributing to the development""" start="00:32:32.300" video="mainVideo-reader" id="subtitle"]]</div>[[!template text="""And finally, how can you contribute""" start="00:32:32.300" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""to the development of Emacs Reader?""" start="00:32:34.240" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""Well, we are on Codeberg.""" start="00:32:35.800" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""We are not on GitHub, sorry.""" start="00:32:37.360" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""You can go there,""" start="00:32:40.280" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""you can look through the issues""" start="00:32:41.640" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""and send us a PR if you're interested.""" start="00:32:43.080" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""The next major release""" start="00:32:45.280" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""is going to go to GNU ELPA.""" start="00:32:46.880" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""Finally, we are not yet at GNU ELPA,""" start="00:32:49.840" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""so you can't really do M-x package-install""" start="00:32:52.260" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""and install our package.""" start="00:32:54.440" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""you would need to install it""" start="00:32:56.120" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""through use-package :vc.""" start="00:32:58.200" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""And since we're going to go to GNU ELPA,""" start="00:33:04.940" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""we request you to assign""" start="00:33:07.500" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""your copyright to Emacs""" start="00:33:09.120" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""because GNU ELPA is essentially part of GNU Emacs.""" start="00:33:10.520" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""So you would need to do copyright assignment""" start="00:33:13.960" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""if you make non-trivial contribution.""" start="00:33:16.720" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""You can join us at IRC""" start="00:33:20.580" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""at #phi-mu-lambda.""" start="00:33:22.480" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""And I also stream the development""" start="00:33:24.360" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""of this package""" start="00:33:27.200" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""bi-weekly on Sundays""" start="00:33:28.040" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""at PeerTube at the following channel.""" start="00:33:29.840" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""Feel free to join us.""" start="00:33:31.640" video="mainVideo-reader" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Acknowledgements""" start="00:33:35.520" video="mainVideo-reader" id="subtitle"]]</div>[[!template text="""Finally, I want to thank Tushar,""" start="00:33:35.520" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""who has been persistently contributing""" start="00:33:38.500" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""to the project since 0.1.0,""" start="00:33:40.640" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""and I'm very, very thankful for him,""" start="00:33:42.840" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""for his suggestions,""" start="00:33:46.520" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""and for his code contributions as well.""" start="00:33:47.760" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""I would also like to thank Prom,""" start="00:33:50.880" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""who fixed a major bug""" start="00:33:53.320" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""in the Windows build,""" start="00:33:55.800" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""since I don't really use Windows anymore,""" start="00:33:56.860" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""so that was really nice,""" start="00:33:58.840" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""and for Teeoius, for fixing a pthread bug.""" start="00:33:59.920" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""I would also like to thank others""" start="00:34:05.460" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""who helped fix little things,""" start="00:34:06.920" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""who come to the stream to chat,""" start="00:34:09.560" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""who sort of see me bang my head""" start="00:34:13.180" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""across these C memory bugs.""" start="00:34:16.600" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""So thank you to all of those.""" start="00:34:19.240" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""And thank you finally to the viewers""" start="00:34:21.600" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""and to EmacsConf organizers as well.""" start="00:34:24.400" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""This is a splendid opportunity.""" start="00:34:28.080" video="mainVideo-reader" id="subtitle"]]
+[[!template text="""Thank you.""" start="00:34:31.940" video="mainVideo-reader" id="subtitle"]]
+
+</div>
+
+Captioner: jay_bird
+
+Questions or comments? Please e-mail [divya@subvertising.org](mailto:divya@subvertising.org?subject=Comment%20for%20EmacsConf%202023%20reader%3A%20An%20introduction%20to%20the%20Emacs%20Reader)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2025/info/reader-before.md b/2025/info/reader-before.md
new file mode 100644
index 00000000..5721f1b0
--- /dev/null
+++ b/2025/info/reader-before.md
@@ -0,0 +1,36 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+
+The following image shows where the talk is in the schedule for Sun 2025-12-07. Solid lines show talks with Q&A via BigBlueButton. Dashed lines show talks with Q&A via IRC or Etherpad.<div class="schedule-in-context schedule-svg-container" data-slug="reader">
+<svg width="700" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Schedule for Sunday</title> <rect width="700" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="/2025/talks/sun-open" title="Sunday opening remarks" data-slug="sun-open"> <title> 9:00- 9:10 Sunday opening remarks</title> <rect x="0" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(11,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-open</text></g></a> <a href="/2025/talks/modern" title="Some problems of modernizing Emacs" data-slug="modern"> <title> 9:10- 9:30 Some problems of modernizing Emacs</title> <rect x="13" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(38,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> modern</text></g></a> <a href="/2025/talks/reader" title="An introduction to the Emacs Reader" data-slug="reader"> <title> 9:40-10:15 An introduction to the Emacs Reader</title> <rect stroke-width="3" x="54" y="15" opacity="0.8" width="48" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(100,73)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> reader</text></g></a> <a href="/2025/talks/weights" title="Weightlifting tracking with Emacs on Android" data-slug="weights"> <title> 10:35-10:45 Weightlifting tracking with Emacs on Android</title> <rect x="130" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(141,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> weights</text></g></a> <a href="/2025/talks/completion" title="corfu+yasnippet: Easier than I thought" data-slug="completion"> <title> 11:05-11:25 corfu+yasnippet: Easier than I thought</title> <rect x="171" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(196,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> completion</text></g></a> <a href="/2025/talks/zettelkasten" title="Zettelkasten for regular Emacs hackers" data-slug="zettelkasten"> <title> 1:00- 1:25 Zettelkasten for regular Emacs hackers</title> <rect x="329" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(361,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> zettelkasten</text></g></a> <a href="/2025/talks/hyperboleqa" title="Questions and answers to help you fly with Hyperbole" data-slug="hyperboleqa"> <title> 1:45- 2:15 Questions and answers to help you fly with Hyperbole</title> <rect x="391" y="15" opacity="0.5" width="41" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(430,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperboleqa</text></g></a> <a href="/2025/talks/gardening" title="Gardening in Emacs: A Windows user's tale of tending, tweaking, and triumph" data-slug="gardening"> <title> 2:15- 2:35 Gardening in Emacs: A Windows user's tale of tending, tweaking, and triumph</title> <rect x="432" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(457,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gardening</text></g></a> <a href="/2025/talks/bookclub-tapas" title="Bookclub tapas" data-slug="bookclub-tapas"> <title> 2:45- 3:20 Bookclub tapas</title> <rect x="473" y="15" opacity="0.5" width="48" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(519,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> bookclub-tapas</text></g></a> <a href="/2025/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"> <title> 3:40- 3:50 Sunday closing remarks</title> <rect x="549" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(560,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-close</text></g></a> <g transform="translate(0,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(82,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(164,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(247,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(329,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(411,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(494,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(576,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(658,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 5 PM</text></g></svg>
+</div>
+
+[[!toc ]]
+Format: 35-min talk ; Q&A: BigBlueButton conference room <https://media.emacsconf.org/2025/current/bbb-reader.html> Etherpad: <https://pad.emacsconf.org/2025-reader>
+Etherpad: <https://pad.emacsconf.org/2025-reader>
+Discuss on IRC: [#emacsconf-gen](https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen)
+Status: Q&A open for participation
+<div>Times in different time zones:</div><div class="times" start="2025-12-07T14:40:00Z" end="2025-12-07T15:15:00Z"><div class="conf-time">Sunday, Dec 7 2025, ~9:40 AM - 10:15 AM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Sunday, Dec 7 2025, ~8:40 AM - 9:15 AM CST (US/Central)<br />Sunday, Dec 7 2025, ~7:40 AM - 8:15 AM MST (US/Mountain)<br />Sunday, Dec 7 2025, ~6:40 AM - 7:15 AM PST (US/Pacific)<br />Sunday, Dec 7 2025, ~2:40 PM - 3:15 PM UTC <br />Sunday, Dec 7 2025, ~3:40 PM - 4:15 PM CET (Europe/Paris)<br />Sunday, Dec 7 2025, ~4:40 PM - 5:15 PM EET (Europe/Athens)<br />Sunday, Dec 7 2025, ~8:10 PM - 8:45 PM IST (Asia/Kolkata)<br />Sunday, Dec 7 2025, ~10:40 PM - 11:15 PM +08 (Asia/Singapore)<br />Sunday, Dec 7 2025, ~11:40 PM - 12:15 AM JST (Asia/Tokyo)</div></div><div><strong><a href="/2025/watch/gen/">Find out how to watch and participate</a></strong></div>
+
+
+
+
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-reader"><source src="https://media.emacsconf.org/2025/emacsconf-2025-reader--an-introduction-to-the-emacs-reader--divy--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2025/captions/emacsconf-2025-reader--an-introduction-to-the-emacs-reader--divy--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2025/captions/emacsconf-2025-reader--an-introduction-to-the-emacs-reader--divy--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="mainVideo-reader" data="""
+00:00:00.720 An introduction to the Emacs reader
+00:44.760 Yet another document viewer in Emacs?
+02:05.760 Architecture of Emacs Reader
+06:00.280 A word on dynamic modules
+07:39.560 Features of Emacs Reader
+07:56.760 Memory efficiency
+11:18.720 Performance and speed
+14:23.680 Scanned PDFs
+17:08.960 System-level multi-threading
+23:44.240 Native Emacs integrations
+25:10.340 (Naive) dark mode
+26:01.140 Challenges and further improvements
+29:14.272 What Emacs can learn?
+32:32.300 Contributing to the development
+33:35.520 Acknowledgements
+
+"""]]<div></div>Duration: 34:37 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2025-reader">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2025/current/bbb-reader.html">Open public Q&A</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-reader--an-introduction-to-the-emacs-reader--divy--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-reader--an-introduction-to-the-emacs-reader--divy--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-reader--an-introduction-to-the-emacs-reader--divy--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-reader--an-introduction-to-the-emacs-reader--divy--main.opus">Download --main.opus (30MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-reader--an-introduction-to-the-emacs-reader--divy--main.png">Download --main.png</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-reader--an-introduction-to-the-emacs-reader--divy--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-reader--an-introduction-to-the-emacs-reader--divy--main.webm">Download --main.webm (101MB)</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2025/info/reader-nav.md b/2025/info/reader-nav.md
new file mode 100644
index 00000000..3811de7f
--- /dev/null
+++ b/2025/info/reader-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by time: <a href="/2025/talks/modern">Some problems of modernizing Emacs</a>
+Next by time: <a href="/2025/talks/weights">Weightlifting tracking with Emacs on Android</a>
+Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2025/watch/gen">Watch</a></strong>
+</div>
diff --git a/2025/info/reference-after.md b/2025/info/reference-after.md
new file mode 100644
index 00000000..00456b05
--- /dev/null
+++ b/2025/info/reference-after.md
@@ -0,0 +1,358 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<div class="transcript transcript-mainVideo"><a name="reference-mainVideo-transcript"></a><h1>Transcript</h1>
+
+
+<div class="transcript-heading">[[!template new="1" text="""Introduction""" start="00:00:00.820" video="mainVideo-reference" id="subtitle"]]</div>[[!template text="""So, hello everyone, welcome to EmacsConf.""" start="00:00:00.820" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""My name is Vidianos, and I'm a PhD student in KU Leuven,""" start="00:00:03.080" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""and today I'm going to be showing you""" start="00:00:06.520" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""how I managed to use Emacs as a reference manager,""" start="00:00:08.280" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""replacing what was for me Zotero,""" start="00:00:12.680" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""to a fully fledged approach inside Emacs.""" start="00:00:17.220" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""So, what is my typical reference workflow?""" start="00:00:24.440" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""First I need to find literature,""" start="00:00:26.640" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""then I need to collect and organize it,""" start="00:00:28.480" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""which I originally did with Zotero,""" start="00:00:30.440" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""but now with Emacs centered tools""" start="00:00:32.600" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""such as zotra and ebib.""" start="00:00:36.612" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""Then I create a reading list.""" start="00:00:39.880" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""This is a new addition to my workflow""" start="00:00:41.280" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""I started doing after moving this approach to Emacs""" start="00:00:43.440" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""because now everything is well integrated.""" start="00:00:47.680" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""I have made a very nice reading list implementation""" start="00:00:50.120" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""inside org-roam which I am going to be showing today.""" start="00:00:53.840" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""Then obviously I need to read the literature, take notes,""" start="00:00:57.760" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""organize the notes, and ensure I am actually learning""" start="00:01:01.200" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""from what I am reading. This is then done through packages""" start="00:01:04.240" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""such as org-noter and org-roam""" start="00:01:06.540" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""and is not going to be the focus of this talk.""" start="00:01:09.160" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""I already gave a talk about this part of my workflow,""" start="00:01:11.360" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""which I've been doing for many years now.""" start="00:01:14.240" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""You can find that""" start="00:01:17.960" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""or you can find many other people's approaches""" start="00:01:20.440" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""to reading literature and taking notes""" start="00:01:23.240" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""as it is quite a popular topic in the Emacs community.""" start="00:01:26.000" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""Lastly, I will have a short section""" start="00:01:31.040" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""about how I ensure that I can recall the knowledge""" start="00:01:32.760" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""from this literature very easily""" start="00:01:37.040" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""through this reference management system.""" start="00:01:39.680" video="mainVideo-reference" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Capture""" start="00:01:43.600" video="mainVideo-reference" id="subtitle"]]</div>[[!template text="""So, how can we capture an article in Emacs?""" start="00:01:43.600" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""One of the most commonly known packages is doi-utils""" start="00:01:48.200" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""where doi-utils has a lot of useful things to do""" start="00:01:52.100" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""and one of them is to capture a paper,""" start="00:01:58.880" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""but you need a DOI, and for me, that is a bit inconvenient,""" start="00:02:03.520" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""because what I want to do is that""" start="00:02:06.460" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""I have a URL here of a paper,""" start="00:02:08.880" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""I want to just copy this URL, not copy the DOI,""" start="00:02:12.000" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""and be able to save it immediately to my bib file.""" start="00:02:16.520" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""And that can now be done""" start="00:02:23.200" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""through this function zotra-add-entry.""" start="00:02:24.312" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""And as you can see here,""" start="00:02:27.720" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""there is also a zotra-download-attachment""" start="00:02:28.680" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""that sometimes works, but not always.""" start="00:02:31.080" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""I don't personally recommend it.""" start="00:02:34.160" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""But the problem is that due to articles being""" start="00:02:35.880" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""locked behind paywalls in many cases,""" start="00:02:39.600" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""downloading attachments doesn't work""" start="00:02:42.640" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""through Emacs. Sometimes it doesn't work""" start="00:02:45.640" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""through Zotero. Sometimes you just need to go to the browser,""" start="00:02:47.480" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""say download PDF, and that's the only solution""" start="00:02:51.120" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""that will properly work.""" start="00:02:54.260" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""So how do I then add this to the paper?""" start="00:02:58.400" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""I need to find this paper that is here""" start="00:03:01.520" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""through ivy-bibtex.""" start="00:03:04.712" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""This is the bib file manager I use.""" start="00:03:05.880" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""There is also others like citar.""" start="00:03:10.240" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""I think citar has much better coding and integration""" start="00:03:11.760" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""with other packages, but I haven't really bothered""" start="00:03:15.560" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""to move from ivy-bibtex""" start="00:03:18.160" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""because it does basically everything I want perfectly.""" start="00:03:19.640" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""So I go here, say add pdf to library.""" start="00:03:24.440" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""I find where I saved it,""" start="00:03:28.280" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""and it will suggest to automatically name it something""" start="00:03:31.720" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""which is in full integration""" start="00:03:35.400" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""with the rest of my Emacs packages,""" start="00:03:37.446" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""and all the literature management stuff""" start="00:03:40.920" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""knows to find it with this exact name.""" start="00:03:43.840" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""So it iss saved and now""" start="00:03:46.800" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""when I try to create a file from this,""" start="00:03:49.046" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""which I will show later,""" start="00:03:53.320" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""you will see that the file will already appear there.""" start="00:03:55.200" video="mainVideo-reference" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Organizing""" start="00:04:00.920" video="mainVideo-reference" id="subtitle"]]</div>[[!template text="""So now let's go to organizing.""" start="00:04:00.920" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""Organizing in Zotero is typically done through a""" start="00:04:06.520" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""hierarchical folder structure.""" start="00:04:09.120" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""This is very familiar to most people and generally works,""" start="00:04:10.520" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""but being someone that takes notes using the Zettelkasten method,""" start="00:04:15.000" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""which has a fully flat hierarchy, nothing goes in folders,""" start="00:04:19.520" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""everything is in the same folder,""" start="00:04:24.320" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""and you find everything because it's connected to other things.""" start="00:04:27.960" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""We have some basic indexes,""" start="00:04:31.960" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""from where you can jump to different points.""" start="00:04:34.840" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""I love this structure, so I also wanted to include it""" start="00:04:37.800" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""in my bibliography management,""" start="00:04:41.360" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""because with folders you have problems like,""" start="00:04:42.920" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""this article can go in that folder, can go in that folder,""" start="00:04:45.580" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""can go in that folder. Where do I actually put it?""" start="00:04:48.360" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""Do I put copies of it in different folders?""" start="00:04:51.080" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""It's just confusing and not really practical in my opinion.""" start="00:04:54.440" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""So I tried to do this approach inside Emacs.""" start="00:04:59.280" video="mainVideo-reference" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Ebib""" start="00:05:03.479" video="mainVideo-reference" id="subtitle"]]</div>[[!template text="""And how? With Ebib.""" start="00:05:03.479" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""Ebib is an amazing software built inside Emacs.""" start="00:05:08.240" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""It's a reference manager and it works absolutely amazing""" start="00:05:11.720" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""if you configure it to your liking.""" start="00:05:15.680" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""So let's open ebib first.""" start="00:05:18.200" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""This is the interface you will see when opening.""" start="00:05:21.120" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""Actually, by default you will not see anything,""" start="00:05:23.520" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""but I have open three bib files.""" start="00:05:27.160" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""These are opened by default on boot of ebib for me.""" start="00:05:30.800" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""These are my three main master bib files.""" start="00:05:36.120" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""This is the Zotero master bib file,""" start="00:05:39.840" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""which only Zotero can touch. If I change it,""" start="00:05:41.720" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""it will be overwritten. This is my new master bib,""" start="00:05:44.600" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""where I save all the files that I have now started using""" start="00:05:47.960" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""after switching to this approach.""" start="00:05:53.760" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""And then this is the master bib file""" start="00:05:55.600" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""for literature related to my PhD""" start="00:05:59.120" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""and things that I have already read.""" start="00:06:02.520" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""It's a very convenient interface.""" start="00:06:07.480" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""There is also search. There is one searching tool,""" start="00:06:09.760" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""the jump to entry, ebib-jump-to-entry,""" start="00:06:14.141" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""which searches through all open bib files for the title.""" start="00:06:16.520" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""So for example, I can search for membrane fabrication,""" start="00:06:23.040" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""because that's something I am currently doing,""" start="00:06:29.320" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""and go to this. There is another searching tool,""" start="00:06:35.840" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""the ebib-search, which searches through the database""" start="00:06:41.920" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""that you're on right now""" start="00:06:45.640" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""and it does a full text search,""" start="00:06:48.360" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""not only in the titles, but everywhere.""" start="00:06:50.400" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""So, for example, I see that in this paper""" start="00:06:53.460" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""if I go to the abstract and search for the word FTIR,""" start="00:06:57.040" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""which is a chemical analysis,""" start="00:07:04.760" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""it will tell me that it's here.""" start="00:07:06.880" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""Can it find it anywhere else? It cannot. That's okay.""" start="00:07:09.880" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""Let's search for something""" start="00:07:16.540" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""that we'll be able to find more easily,""" start="00:07:18.112" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""like, for example, membrane crystallization""" start="00:07:21.680" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""which is a main focus of my PhD.""" start="00:07:24.800" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""Then it will be able to find it many times,""" start="00:07:27.540" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""many, many times.""" start="00:07:30.320" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""I can also search on the next database""" start="00:07:35.160" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""or on this database and see where is everything that I want.""" start="00:07:40.300" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""So this is different searching tools which are very useful.""" start="00:07:49.480" video="mainVideo-reference" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Filters""" start="00:07:55.480" video="mainVideo-reference" id="subtitle"]]</div>[[!template text="""Then there's also another tool, that is, filters.""" start="00:07:55.480" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""So I can filter on any field.""" start="00:08:01.701" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""Like, for example, let's say on any field,""" start="00:08:06.200" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""and let's say I'm looking now again""" start="00:08:09.740" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""for membrane crystallization.""" start="00:08:13.160" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""This will now filter to all entries.""" start="00:08:16.280" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""You can see right now there's 18 entries here""" start="00:08:19.880" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""that mention these two words together in any field.""" start="00:08:22.120" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""Sometimes this is easier, because this is permanent.""" start="00:08:28.020" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""It's not like the search that we find one""" start="00:08:31.760" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""and then if you move, you've lost it,""" start="00:08:33.700" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""and you need to find it again.""" start="00:08:35.219" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""This is permanent until I say,""" start="00:08:37.886" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""okay, cancel the filter.""" start="00:08:39.680" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""I mostly work with filters,""" start="00:08:41.800" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""I think they're the most convenient.""" start="00:08:43.480" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""Then there's also the ebib-list-recent""" start="00:08:47.060" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""which is another very useful command.""" start="00:08:49.680" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""It asks you for a number of days""" start="00:08:51.480" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""and it will show you the files that were added""" start="00:08:53.360" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""in the most recent.""" start="00:08:56.560" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""So for example, show me the literature files""" start="00:08:58.480" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""that were added to this bib file in the last month.""" start="00:09:02.160" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""I will see five files in this case,""" start="00:09:05.840" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""because in this bib file, I have mostly entries""" start="00:09:09.800" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""that I have read, these are the files""" start="00:09:12.700" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""I have most recently read and added here.""" start="00:09:15.240" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""While if I go for example here and say that,""" start="00:09:18.960" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""these are files that maybe I haven't read yet,""" start="00:09:21.600" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""but I was planning to read. So this is something useful.""" start="00:09:25.800" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""Although for things I'm planning to read,""" start="00:09:31.100" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""I mostly use the reading list""" start="00:09:33.000" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""that I'm going to show next.""" start="00:09:34.440" video="mainVideo-reference" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Dependent databases""" start="00:09:36.179" video="mainVideo-reference" id="subtitle"]]</div>[[!template text="""But before that,""" start="00:09:36.179" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""a few more neat things that you can do in Ebib.""" start="00:09:37.400" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""So I have a list of dependent databases.""" start="00:09:41.760" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""For ease, I have already opened them here.""" start="00:09:45.020" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""These, as you can see, have two brackets here,""" start="00:09:48.820" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""indicating that they're dependent on phd_literature_1.bib,""" start="00:09:52.600" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""and these, in my case, act as the sort of index file,""" start="00:09:59.440" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""where I am tagging things based on the structure""" start="00:10:06.379" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""that I wanted to have for the organization.""" start="00:10:10.912" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""So all the organization is flat,""" start="00:10:14.652" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""all the literature is in phd_literature_1,""" start="00:10:16.479" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""however, I have this file""" start="00:10:20.146" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""that has 14 entries.""" start="00:10:23.420" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""I have another file here that has 20 entries.""" start="00:10:25.840" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""And these are smaller indexes""" start="00:10:32.900" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""where I can find things easier,""" start="00:10:35.720" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""but things are not limited to one of these.""" start="00:10:38.520" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""Things can be in all of these, or probably not all of these,""" start="00:10:41.160" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""but can be in three or four of these very easily.""" start="00:10:45.600" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""And how you add things is that I go here,""" start="00:10:50.480" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""and I say not r, it's... M for the dependent databases,""" start="00:10:55.220" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""and I add entry, and it will tell me""" start="00:11:00.080" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""&quot;Where do you want to add this?&quot;""" start="00:11:02.080" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""So when I read a new paper,""" start="00:11:03.160" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""I can say okay, this is related to these three tags,""" start="00:11:05.160" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""and this is sort of like, again,""" start="00:11:09.840" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""it's tagging it and it's putting it""" start="00:11:11.240" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""there, there, and there.""" start="00:11:13.186" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""And then this creates a flat structure""" start="00:11:15.060" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""that however has a great organization,""" start="00:11:17.600" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""similar to how Zettelkasten works""" start="00:11:21.620" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""and I really like working with something like this,""" start="00:11:23.800" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""with dependent databases.""" start="00:11:27.880" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""Another feature that I really like,""" start="00:11:33.720" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""another feature that exists by default... But if I tag,""" start="00:11:36.540" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""this tagging is done through &quot;m&quot;,""" start="00:11:41.920" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""and then I can tag different files here,""" start="00:11:45.280" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""and this is to do different actions with these together,""" start="00:11:49.020" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""such as, for example,""" start="00:11:52.160" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""copy them to a different file,""" start="00:11:53.586" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""with &quot;x&quot; I can export the entries somewhere else,""" start="00:11:55.586" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""there are many things that you can do""" start="00:11:59.460" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""when you mark them.""" start="00:12:00.686" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""By the way, one of them is this function,""" start="00:12:01.440" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""which sees everything that I have marked""" start="00:12:05.320" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""and shows me an org-roam-node-find entry""" start="00:12:08.940" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""that is filtered to just these files.""" start="00:12:14.786" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""I can select one and it will take me""" start="00:12:18.053" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""to my notes on this specific paper.""" start="00:12:20.886" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""I find this very useful,""" start="00:12:24.400" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""because I can be looking for something""" start="00:12:25.720" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""and I can say, okay I remember,""" start="00:12:27.160" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""or I did some filtering,""" start="00:12:30.019" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""and I know it's in one of these files""" start="00:12:31.400" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""and now I want to see my in-depth notes on each one""" start="00:12:34.100" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""to remember where exactly I found it.""" start="00:12:37.240" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""So I find this kind of filtering,""" start="00:12:41.080" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""this org-roam related filtering, to be also very effective.""" start="00:12:43.420" video="mainVideo-reference" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Reading lists""" start="00:12:50.540" video="mainVideo-reference" id="subtitle"]]</div>[[!template text="""So now let's finally move to reading list.""" start="00:12:50.540" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""The reading list in ebib""" start="00:12:54.080" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""reminds me a lot of the philosophy that Emacs uses.""" start="00:12:55.400" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""By default, it is extremely bare bones, not very usable,""" start="00:13:00.260" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""but it is so customizable, to where you can do""" start="00:13:05.120" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""anything that you can imagine through it""" start="00:13:10.720" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""because the limit truly is your imagination.""" start="00:13:13.020" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""It's how much you can code into this""" start="00:13:16.480" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""that actually makes sense""" start="00:13:21.040" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""and you can actually imagine it working.""" start="00:13:22.520" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""Besides that, you can do anything really.""" start="00:13:25.480" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""So we can open ebib and try to find this paper""" start="00:13:31.700" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""that I just added here.""" start="00:13:36.800" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""Then we can create a reading list entry from it.""" start="00:13:42.700" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""Here, my reading list prompts me""" start="00:13:48.680" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""for a priority for this.""" start="00:13:52.000" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""How urgent it is for me to read this.""" start="00:13:53.419" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""It adds a TO-READ, which is a todo entry,""" start="00:13:57.240" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""which helps with organizing my reading list,""" start="00:14:02.220" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""because as you may also be able to see, this has an ID,""" start="00:14:04.480" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""because this is an org-roam node,""" start="00:14:08.680" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""so the TO-READ allows me to organize it inside org-roam.""" start="00:14:11.580" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""It saves the citekey, the link to the paper,""" start="00:14:16.840" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""and also tags it with the parent file node""" start="00:14:21.840" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""because I don't like having orphan nodes in my Zettelkasten.""" start="00:14:25.980" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""I like everything to be linked to at least one thing.""" start="00:14:30.380" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""So everything in the reading list""" start="00:14:33.840" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""is linked to the parent file.""" start="00:14:35.800" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""And now I can find this in the org-roam-node-find menu,""" start="00:14:39.300" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""here. However, that's not very interesting.""" start="00:14:47.520" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""In practice, my typical org-roam-node-find""" start="00:14:53.720" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""does not even include these reading list files""" start="00:14:56.240" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""because I don't really care to have them there.""" start="00:14:59.760" video="mainVideo-reference" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Special org-roam-node-find""" start="00:15:02.440" video="mainVideo-reference" id="subtitle"]]</div>[[!template text="""I have a special org-roam-node-find""" start="00:15:02.440" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""that is designed to find these in particular.""" start="00:15:06.160" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""And here these have 22. These are the amount of files""" start="00:15:13.440" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""that are currently in my reading list.""" start="00:15:16.460" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""So for example, let's try and press here.""" start="00:15:21.680" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""And magically, this prompts me to select a capture template,""" start="00:15:29.900" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""because what it's doing is that I selected this,""" start="00:15:33.480" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""and because of the citekey, it knows""" start="00:15:39.120" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""that it wants to create a new node for that.""" start="00:15:42.120" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""So I select the capture template.""" start="00:15:46.540" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""It knows that it wants to create this new node for this.""" start="00:15:47.960" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""And now, if I for a second close the reading list,""" start="00:15:56.100" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""now I can already go ahead and take notes on this.""" start="00:16:01.360" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""This is org-noter, in particular,""" start="00:16:07.120" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""and it makes it all very easy""" start="00:16:09.760" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""because it's all integrated in one place.""" start="00:16:11.600" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""If I then close this and open a new Emacs,""" start="00:16:15.720" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""we have this, and the reading list allows me to very quickly""" start="00:16:22.540" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""go from this being reading this item to initializing it.""" start="00:16:27.940" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""Another thing that is very useful is that""" start="00:16:32.540" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""everything is sorted by priority.""" start="00:16:35.040" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""So I need to increase the font size again""" start="00:16:38.740" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""because I closed the previous Emacs.""" start="00:16:41.360" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""So here, I can select what is high priority,""" start="00:16:48.900" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""what is low priority. I can also change the priority""" start="00:16:52.320" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""without needing to be in this file.""" start="00:16:56.400" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""Let's leave this file. I can say, okay, I decided""" start="00:16:58.800" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""that this file is priority B. It needs to be A,""" start="00:17:05.480" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""which is more urgent.""" start="00:17:08.640" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""In my system, there's five different priority levels.""" start="00:17:11.900" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""You can get away with less""" start="00:17:16.080" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""but I like to have the very much low ones""" start="00:17:18.000" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""as this is not urgent at all""" start="00:17:20.960" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""but I want to keep it somewhere. A is very urgent""" start="00:17:23.000" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""and B is urgent but just below A.""" start="00:17:27.160" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""And then the C in the middle is just""" start="00:17:31.780" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""I will eventually read this""" start="00:17:34.620" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""but not something I want to focus my attention on right now.""" start="00:17:36.000" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""So this is mostly about reading list.""" start="00:17:41.920" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""I can also show, for example,""" start="00:17:45.440" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""I have this if I finalize something,""" start="00:17:46.640" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""if I read it. For example, I created a note for this new thing.""" start="00:17:50.680" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""Let's say I finished reading it.""" start="00:17:56.800" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""I want to remove from my reading list.""" start="00:17:59.080" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""It's also just one command and it's done.""" start="00:18:02.180" video="mainVideo-reference" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Annotations""" start="00:18:05.640" video="mainVideo-reference" id="subtitle"]]</div>[[!template text="""If we now return to the presentation,""" start="00:18:05.640" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""the last thing I want to show is annotations.""" start="00:18:08.740" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""So for annotations, it's the idea that sometimes""" start="00:18:11.700" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""you just need to find something in Ebib quickly.""" start="00:18:17.120" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""So I'm here and I'm looking for something.""" start="00:18:23.140" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""I said I'm here and I'm looking for something.""" start="00:18:26.680" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""And as you can see, there's the annote file everywhere,""" start="00:18:31.000" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""the annote entry, which is a very very small description""" start="00:18:35.200" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""of things that I want to remember for this paper.""" start="00:18:40.840" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""So I can be scrolling here or scrolling""" start="00:18:43.800" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""in one of the smaller files""" start="00:18:48.040" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""and saying this was in this subsection,""" start="00:18:51.812" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""and which paper was it, and I can scroll,""" start="00:18:56.860" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""read all these annotes.""" start="00:18:59.520" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""Each annote takes like 15 seconds to read,""" start="00:19:01.712" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""and really decide, okay,""" start="00:19:04.920" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""it was this paper that I wanted, good.""" start="00:19:07.360" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""Now I can open the note for it, go there, and it's very easy.""" start="00:19:09.800" video="mainVideo-reference" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Wrapping up""" start="00:19:21.820" video="mainVideo-reference" id="subtitle"]]</div>[[!template text="""So I think that's all. I would like to thank you for your time.""" start="00:19:21.820" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""I would love to see your questions either in IRC,""" start="00:19:25.720" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""I will be, maybe I've already answered""" start="00:19:29.320" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""some of your questions there in the Etherpad,""" start="00:19:32.200" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""or right now, we're going to the live Q&A""" start="00:19:35.040" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""where I'd love to interact with everyone and have a discussion.""" start="00:19:37.600" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""However, if you don't have any questions right now,""" start="00:19:42.160" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""but you have a question later on, feel free to send me an email.""" start="00:19:44.480" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""My mail is also on the site.""" start="00:19:48.560" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""And if you're curious how all this &quot;magic&quot; worked,""" start="00:19:51.740" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""feel free to go to my Github and see the ebib section""" start="00:19:54.600" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""here that will also be linked in the doc page,""" start="00:20:00.840" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""where you can see all the configuration""" start="00:20:04.040" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""that I have done in Ebib for everything to work.""" start="00:20:06.280" video="mainVideo-reference" id="subtitle"]]
+[[!template text="""Thank you again and have a wonderful EmacsConf!""" start="00:20:10.920" video="mainVideo-reference" id="subtitle"]]
+
+</div>Questions or comments? Please e-mail [vidianosgiannitsis@gmail.com](mailto:vidianosgiannitsis@gmail.com?subject=Comment%20for%20EmacsConf%202023%20reference%3A%20Emacs%20as%20a%20fully-fledged%20reference%20manager)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2025/info/reference-before.md b/2025/info/reference-before.md
new file mode 100644
index 00000000..713e80d7
--- /dev/null
+++ b/2025/info/reference-before.md
@@ -0,0 +1,31 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+
+The following image shows where the talk is in the schedule for Sat 2025-12-06. Solid lines show talks with Q&A via BigBlueButton. Dashed lines show talks with Q&A via IRC or Etherpad.<div class="schedule-in-context schedule-svg-container" data-slug="reference">
+<svg width="700" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Schedule for Saturday</title> <rect width="700" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="/2025/talks/sat-open" title="Saturday opening remarks" data-slug="sat-open"> <title> 9:00- 9:10 Saturday opening remarks</title> <rect x="0" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(11,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="/2025/talks/org-babel" title="Making Org-Babel reactive" data-slug="org-babel"> <title> 9:10- 9:20 Making Org-Babel reactive</title> <rect x="13" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(24,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> org-babel</text></g></a> <a href="/2025/talks/reference" title="Emacs as a fully-fledged reference manager" data-slug="reference"> <title> 9:30- 9:55 Emacs as a fully-fledged reference manager</title> <rect stroke-width="3" x="41" y="15" opacity="0.8" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(73,73)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> reference</text></g></a> <a href="/2025/talks/gmail" title="org-gmail: A deep integration of Gmail into your Org Mode" data-slug="gmail"> <title> 10:15-10:40 org-gmail: A deep integration of Gmail into your Org Mode</title> <rect x="102" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(134,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gmail</text></g></a> <a href="/2025/talks/gnus" title="Reading and writing emails in GNU Emacs with Gnus" data-slug="gnus"> <title> 10:50-11:15 Reading and writing emails in GNU Emacs with Gnus</title> <rect x="150" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(182,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gnus</text></g></a> <a href="/2025/talks/latex" title="LaTeX export in org-mode: the overhaul" data-slug="latex"> <title> 11:25-11:45 LaTeX export in org-mode: the overhaul</title> <rect x="199" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(224,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> latex</text></g></a> <a href="/2025/talks/calc" title="Basic Calc functionality for engineering or electronics" data-slug="calc"> <title> 1:00- 1:25 Basic Calc functionality for engineering or electronics</title> <rect x="329" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(361,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> calc</text></g></a> <a href="/2025/talks/blee-lcnt" title="Blee-LCNT: An Emacs-centered content production and self-publication framework" data-slug="blee-lcnt"> <title> 1:35- 2:15 Blee-LCNT: An Emacs-centered content production and self-publication framework</title> <rect x="377" y="15" opacity="0.5" width="54" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(429,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> blee-lcnt</text></g></a> <a href="/2025/talks/greader" title="GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence" data-slug="greader"> <title> 2:35- 2:40 GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence</title> <rect x="459" y="15" opacity="0.5" width="6" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(463,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> greader</text></g></a> <a href="/2025/talks/open-mic" title="Open session" data-slug="open-mic"> <title> 2:50- 3:40 Open session</title> <rect x="480" y="15" opacity="0.5" width="68" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(546,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> open-mic</text></g></a> <a href="/2025/talks/sat-close" title="Saturday closing remarks / open session" data-slug="sat-close"> <title> 4:00- 4:10 Saturday closing remarks / open session</title> <rect x="576" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(587,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="/2025/talks/schemacs" title="One year progress update Schemacs (formerly Gypsum)" data-slug="schemacs"> <title> 9:30- 9:55 One year progress update Schemacs (formerly Gypsum)</title> <rect x="41" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(73,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> schemacs</text></g></a> <a href="/2025/talks/juicemacs" title="Juicemacs: exploring speculative JIT compilation for ELisp in Java" data-slug="juicemacs"> <title> 10:15-10:35 Juicemacs: exploring speculative JIT compilation for ELisp in Java</title> <rect x="102" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(127,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> juicemacs</text></g></a> <a href="/2025/talks/swanky" title="Swanky Python: Interactive development for Python" data-slug="swanky"> <title> 10:45-11:10 Swanky Python: Interactive development for Python</title> <rect x="144" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(176,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> swanky</text></g></a> <a href="/2025/talks/python" title="Interactive Python programming in Emacs" data-slug="python"> <title> 11:20-11:40 Interactive Python programming in Emacs</title> <rect x="192" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(217,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <a href="/2025/talks/llm" title="Emacs, editors, and LLM driven workflows" data-slug="llm"> <title> 1:00- 1:25 Emacs, editors, and LLM driven workflows</title> <rect x="329" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(361,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> llm</text></g></a> <a href="/2025/talks/private-ai" title="Emacs and private AI: a great match" data-slug="private-ai"> <title> 1:45- 2:05 Emacs and private AI: a great match</title> <rect x="391" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(416,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> private-ai</text></g></a> <a href="/2025/talks/commonlisp" title="Common Lisp images communicating like-a-human through shared Emacs slime and eev" data-slug="commonlisp"> <title> 2:25- 2:55 Common Lisp images communicating like-a-human through shared Emacs slime and eev</title> <rect x="446" y="75" opacity="0.5" width="41" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(485,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> commonlisp</text></g></a> <a href="/2025/talks/graphics" title="Modern Emacs/Elisp hardware/software accelerated graphics" data-slug="graphics"> <title> 3:05- 3:30 Modern Emacs/Elisp hardware/software accelerated graphics</title> <rect x="500" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(532,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> graphics</text></g></a> <g transform="translate(0,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(82,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(164,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(247,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(329,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(411,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(494,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(576,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(658,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 5 PM</text></g></svg>
+</div>
+
+[[!toc ]]
+Format: 21-min talk ; Q&A: BigBlueButton conference room <https://media.emacsconf.org/2025/current/bbb-reference.html> Etherpad: <https://pad.emacsconf.org/2025-reference>
+Etherpad: <https://pad.emacsconf.org/2025-reference>
+Discuss on IRC: [#emacsconf-gen](https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen)
+Status: Q&A finished, IRC and pad will be archived on this page
+
+
+
+
+
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-reference"><source src="https://media.emacsconf.org/2025/emacsconf-2025-reference--emacs-as-a-fullyfledged-reference-manager--vidianos-giannitsis--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2025/captions/emacsconf-2025-reference--emacs-as-a-fullyfledged-reference-manager--vidianos-giannitsis--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2025/captions/emacsconf-2025-reference--emacs-as-a-fullyfledged-reference-manager--vidianos-giannitsis--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="mainVideo-reference" data="""
+00:00:00.820 Introduction
+01:43.600 Capture
+04:00.920 Organizing
+05:03.479 Ebib
+07:55.480 Filters
+09:36.179 Dependent databases
+12:50.540 Reading lists
+15:02.440 Special org-roam-node-find
+18:05.640 Annotations
+19:21.820 Wrapping up
+
+"""]]<div></div>Duration: 20:14 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2025-reference">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2025/current/bbb-reference.html">Open public Q&A</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-reference--emacs-as-a-fullyfledged-reference-manager--vidianos-giannitsis--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-reference--emacs-as-a-fullyfledged-reference-manager--vidianos-giannitsis--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-reference--emacs-as-a-fullyfledged-reference-manager--vidianos-giannitsis--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-reference--emacs-as-a-fullyfledged-reference-manager--vidianos-giannitsis--main.opus">Download --main.opus (18MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-reference--emacs-as-a-fullyfledged-reference-manager--vidianos-giannitsis--main.png">Download --main.png</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-reference--emacs-as-a-fullyfledged-reference-manager--vidianos-giannitsis--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-reference--emacs-as-a-fullyfledged-reference-manager--vidianos-giannitsis--main.webm">Download --main.webm (103MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-reference--emacs-as-a-fullyfledged-reference-manager--vidianos-giannitsis--script.org">Download --script.org</a></li><li><a href="https://youtu.be/XjhnY4WuQRQ">View on Youtube</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2025/info/reference-nav.md b/2025/info/reference-nav.md
new file mode 100644
index 00000000..699b7825
--- /dev/null
+++ b/2025/info/reference-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by time: <a href="/2025/talks/schemacs">One year progress update Schemacs (formerly Gypsum)</a>
+Next by time: <a href="/2025/talks/gmail">org-gmail: A deep integration of Gmail into your Org Mode</a>
+Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2025/watch/gen">Watch</a></strong>
+</div>
diff --git a/2025/info/sat-close-after.md b/2025/info/sat-close-after.md
new file mode 100644
index 00000000..c37a7f60
--- /dev/null
+++ b/2025/info/sat-close-after.md
@@ -0,0 +1,7 @@
+<!-- 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)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2025/info/sat-close-before.md b/2025/info/sat-close-before.md
new file mode 100644
index 00000000..7633a02e
--- /dev/null
+++ b/2025/info/sat-close-before.md
@@ -0,0 +1,19 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+
+The following image shows where the talk is in the schedule for Sat 2025-12-06. Solid lines show talks with Q&A via BigBlueButton. Dashed lines show talks with Q&A via IRC or Etherpad.<div class="schedule-in-context schedule-svg-container" data-slug="sat-close">
+<svg width="700" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Schedule for Saturday</title> <rect width="700" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="/2025/talks/sat-open" title="Saturday opening remarks" data-slug="sat-open"> <title> 9:00- 9:10 Saturday opening remarks</title> <rect x="0" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(11,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="/2025/talks/org-babel" title="Making Org-Babel reactive" data-slug="org-babel"> <title> 9:10- 9:20 Making Org-Babel reactive</title> <rect x="13" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(24,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> org-babel</text></g></a> <a href="/2025/talks/reference" title="Emacs as a fully-fledged reference manager" data-slug="reference"> <title> 9:30- 9:55 Emacs as a fully-fledged reference manager</title> <rect x="41" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(73,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> reference</text></g></a> <a href="/2025/talks/gmail" title="org-gmail: A deep integration of Gmail into your Org Mode" data-slug="gmail"> <title> 10:15-10:40 org-gmail: A deep integration of Gmail into your Org Mode</title> <rect x="102" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(134,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gmail</text></g></a> <a href="/2025/talks/gnus" title="Reading and writing emails in GNU Emacs with Gnus" data-slug="gnus"> <title> 10:50-11:15 Reading and writing emails in GNU Emacs with Gnus</title> <rect x="150" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(182,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gnus</text></g></a> <a href="/2025/talks/latex" title="LaTeX export in org-mode: the overhaul" data-slug="latex"> <title> 11:25-11:45 LaTeX export in org-mode: the overhaul</title> <rect x="199" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(224,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> latex</text></g></a> <a href="/2025/talks/calc" title="Basic Calc functionality for engineering or electronics" data-slug="calc"> <title> 1:00- 1:25 Basic Calc functionality for engineering or electronics</title> <rect x="329" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(361,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> calc</text></g></a> <a href="/2025/talks/blee-lcnt" title="Blee-LCNT: An Emacs-centered content production and self-publication framework" data-slug="blee-lcnt"> <title> 1:35- 2:15 Blee-LCNT: An Emacs-centered content production and self-publication framework</title> <rect x="377" y="15" opacity="0.5" width="54" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(429,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> blee-lcnt</text></g></a> <a href="/2025/talks/greader" title="GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence" data-slug="greader"> <title> 2:35- 2:40 GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence</title> <rect x="459" y="15" opacity="0.5" width="6" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(463,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> greader</text></g></a> <a href="/2025/talks/open-mic" title="Open session" data-slug="open-mic"> <title> 2:50- 3:40 Open session</title> <rect x="480" y="15" opacity="0.5" width="68" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(546,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> open-mic</text></g></a> <a href="/2025/talks/sat-close" title="Saturday closing remarks / open session" data-slug="sat-close"> <title> 4:00- 4:10 Saturday closing remarks / open session</title> <rect stroke-width="3" x="576" y="15" opacity="0.8" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(587,73)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="/2025/talks/schemacs" title="One year progress update Schemacs (formerly Gypsum)" data-slug="schemacs"> <title> 9:30- 9:55 One year progress update Schemacs (formerly Gypsum)</title> <rect x="41" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(73,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> schemacs</text></g></a> <a href="/2025/talks/juicemacs" title="Juicemacs: exploring speculative JIT compilation for ELisp in Java" data-slug="juicemacs"> <title> 10:15-10:35 Juicemacs: exploring speculative JIT compilation for ELisp in Java</title> <rect x="102" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(127,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> juicemacs</text></g></a> <a href="/2025/talks/swanky" title="Swanky Python: Interactive development for Python" data-slug="swanky"> <title> 10:45-11:10 Swanky Python: Interactive development for Python</title> <rect x="144" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(176,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> swanky</text></g></a> <a href="/2025/talks/python" title="Interactive Python programming in Emacs" data-slug="python"> <title> 11:20-11:40 Interactive Python programming in Emacs</title> <rect x="192" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(217,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <a href="/2025/talks/llm" title="Emacs, editors, and LLM driven workflows" data-slug="llm"> <title> 1:00- 1:25 Emacs, editors, and LLM driven workflows</title> <rect x="329" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(361,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> llm</text></g></a> <a href="/2025/talks/private-ai" title="Emacs and private AI: a great match" data-slug="private-ai"> <title> 1:45- 2:05 Emacs and private AI: a great match</title> <rect x="391" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(416,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> private-ai</text></g></a> <a href="/2025/talks/commonlisp" title="Common Lisp images communicating like-a-human through shared Emacs slime and eev" data-slug="commonlisp"> <title> 2:25- 2:55 Common Lisp images communicating like-a-human through shared Emacs slime and eev</title> <rect x="446" y="75" opacity="0.5" width="41" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(485,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> commonlisp</text></g></a> <a href="/2025/talks/graphics" title="Modern Emacs/Elisp hardware/software accelerated graphics" data-slug="graphics"> <title> 3:05- 3:30 Modern Emacs/Elisp hardware/software accelerated graphics</title> <rect x="500" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(532,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> graphics</text></g></a> <g transform="translate(0,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(82,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(164,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(247,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(329,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(411,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(494,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(576,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(658,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 5 PM</text></g></svg>
+</div>
+
+[[!toc ]]
+Format: 10-min talk ; Q&A: BigBlueButton conference room <https://media.emacsconf.org/2025/current/bbb-sat-close.html> Etherpad: <https://pad.emacsconf.org/2025-sat-close>
+Etherpad: <https://pad.emacsconf.org/2025-sat-close>
+Discuss on IRC: [#emacsconf-gen](https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen)
+Status: Q&A finished, IRC and pad will be archived on this page
+
+
+
+
+
+<div class="vid mainVideo"><div></div><div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2025-sat-close">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2025/current/bbb-sat-close.html">Open public Q&A</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-sat-close--saturday-closing-remarks--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-sat-close--saturday-closing-remarks--intro.webm">Download --intro.webm</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2025/info/sat-close-nav.md b/2025/info/sat-close-nav.md
new file mode 100644
index 00000000..fe14f1b1
--- /dev/null
+++ b/2025/info/sat-close-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by time: <a href="/2025/talks/graphics">Modern Emacs/Elisp hardware/software accelerated graphics</a>
+Next by time: <a href="/2025/talks/sun-open">Sunday opening remarks</a>
+Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2025/watch/gen">Watch</a></strong>
+</div>
diff --git a/2025/info/sat-open-after.md b/2025/info/sat-open-after.md
new file mode 100644
index 00000000..2b428ad8
--- /dev/null
+++ b/2025/info/sat-open-after.md
@@ -0,0 +1,143 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<div class="transcript transcript-mainVideo"><a name="sat-open-mainVideo-transcript"></a><h1>Transcript (unedited)</h1>
+
+
+<div class="transcript-heading">[[!template new="1" text="""Tracks""" start="00:00:00.000" video="mainVideo-sat-open" id="subtitle"]]</div>[[!template text="""Welcome to EmacsConf, where we have fun""" start="00:00:00.000" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""exploring just how much we can do with a text editor.""" start="00:00:02.247" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""There's a General track and a Development track,""" start="00:00:05.485" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""but really, you'll probably find""" start="00:00:07.925" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""interesting things on both tracks""" start="00:00:09.484" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""no matter what your level of experience is,""" start="00:00:11.079" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""so don't feel limited to one or the other.""" start="00:00:13.216" video="mainVideo-sat-open" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Watching and participating""" start="00:00:16.000" video="mainVideo-sat-open" id="subtitle"]]</div>[[!template text="""The best parts of EmacsConf are the conversations.""" start="00:00:16.000" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""The wiki has a page on how to watch and participate,""" start="00:00:19.393" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""and I'll give you a quick overview as well.""" start="00:00:22.486" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""You can watch both streams at live.emacsconf.org""" start="00:00:24.910" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""using free and open source software.""" start="00:00:28.885" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""Using a streaming media player like mpv""" start="00:00:31.186" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""seems to be the best way to watch in terms of performance""" start="00:00:34.388" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""but there are also web-based players""" start="00:00:37.275" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""just in case that's all you've got.""" start="00:00:39.241" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""The schedule shows the General track on top""" start="00:00:41.378" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""and the Development track on the bottom,""" start="00:00:44.064" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""so you can see what else is going on.""" start="00:00:45.603" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""As you're watching the talks,""" start="00:00:47.820" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""you can refer to the schedule in another window.""" start="00:00:49.819" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""Hover over the boxes to see the times and titles,""" start="00:00:52.355" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""and click on the boxes in the schedule""" start="00:00:55.601" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""to jump to the talk's page for more details.""" start="00:00:57.614" video="mainVideo-sat-open" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Other schedule formats""" start="00:01:00.607" video="mainVideo-sat-open" id="subtitle"]]</div>[[!template text="""You can also get the schedule as an iCalendar file""" start="00:01:00.607" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""or as an Org file in different time zones.""" start="00:01:03.587" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""The Org file has some links to talk resources""" start="00:01:05.621" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""and might be handy as a starting point for your notes.""" start="00:01:08.255" video="mainVideo-sat-open" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""BigBlueButton""" start="00:01:10.601" video="mainVideo-sat-open" id="subtitle"]]</div>[[!template text="""Many talks will be followed by""" start="00:01:10.601" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""live Q&A web conferences with the speaker,""" start="00:01:12.145" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""which will be done in BigBlueButton or BBB.""" start="00:01:14.572" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""These are indicated with a solid border on the schedule""" start="00:01:17.734" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""and by Q&A: BBB on the schedule page.""" start="00:01:20.819" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""You can join the web conference room""" start="00:01:24.001" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""by clicking on the BBB link""" start="00:01:25.901" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""on the schedule page or the talk's webpage.""" start="00:01:27.467" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""Then you can ask your questions yourself when the Q&A starts.""" start="00:01:30.176" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""To improve performance, please keep your webcam off""" start="00:01:34.215" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""and stay muted until it's your turn to talk.""" start="00:01:37.211" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""If you don't like Javascript,""" start="00:01:39.890" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""you can still ask questions via IRC""" start="00:01:41.692" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""and the hosts can read them out for you.""" start="00:01:43.643" video="mainVideo-sat-open" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""On and off the stream""" start="00:01:46.036" video="mainVideo-sat-open" id="subtitle"]]</div>[[!template text="""We're probably going to automatically switch""" start="00:01:46.036" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""between talks and Q&A sessions,""" start="00:01:47.895" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""so the transitions on the stream might be a little sudden.""" start="00:01:49.483" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""People in the BigBlueButton room""" start="00:01:52.897" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""can continue the conversation""" start="00:01:54.439" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""even after the talk moves off-stream,""" start="00:01:55.862" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""and you can also reach out to the speakers""" start="00:01:58.220" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""using the contact information on the talk page.""" start="00:02:00.271" video="mainVideo-sat-open" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Etherpad and IRC""" start="00:02:03.217" video="mainVideo-sat-open" id="subtitle"]]</div>[[!template text="""Other talks will have Q&A via Etherpad or IRC,""" start="00:02:03.217" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""depending on what the speakers prefer.""" start="00:02:06.302" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""This is indicated in the schedule with a dashed border""" start="00:02:08.542" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""and on the schedule page as well.""" start="00:02:11.380" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""The schedule pages have quick shortcuts so that you can""" start="00:02:13.510" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""find out more about talks, open the Etherpads,""" start="00:02:16.543" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""and join the Q&A sessions.""" start="00:02:19.053" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""The watch page has more tips""" start="00:02:21.204" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""on how to make the most of Q&A.""" start="00:02:23.366" video="mainVideo-sat-open" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Etherpad""" start="00:02:25.456" video="mainVideo-sat-open" id="subtitle"]]</div>[[!template text="""If you can, please add notes and ask questions""" start="00:02:25.456" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""in the Etherpad for the talk.""" start="00:02:28.330" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""That makes it easier""" start="00:02:30.133" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""for everyone to share their notes,""" start="00:02:31.598" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""and speakers and hosts can read the questions from there.""" start="00:02:33.130" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""We'll copy the notes to the talk pages afterwards.""" start="00:02:36.355" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""We have one pad for each talk,""" start="00:02:39.622" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""so you can follow the links to get to the next one""" start="00:02:41.497" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""or go back to the schedule and get the link from there.""" start="00:02:43.773" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""If you have general feedback about""" start="00:02:46.828" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""the conference itself, please put it in""" start="00:02:48.423" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""pad.emacsconf.org/emacsconf.""" start="00:02:50.668" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""You can also use this as a community message board""" start="00:02:54.593" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""for things like Help Wanted.""" start="00:02:57.550" video="mainVideo-sat-open" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""IRC""" start="00:02:59.440" video="mainVideo-sat-open" id="subtitle"]]</div>[[!template text="""Internet Relay Chat or IRC can be another great way""" start="00:02:59.440" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""to be part of lots of conversations.""" start="00:03:02.800" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""You can use chat.emacsconf.org to join the IRC channels""" start="00:03:05.176" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""through your web browser.""" start="00:03:09.451" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""The tabs on the left can help you""" start="00:03:11.046" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""switch between the different channels.""" start="00:03:12.857" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""There's #emacsconf-gen for the General track""" start="00:03:14.892" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""and #emacsconf-dev for the Development track.""" start="00:03:17.611" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""If you need to reach us, you can join #emacsconf-org""" start="00:03:20.490" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""or e-mail emacsconf-org-private@gnu.org.""" start="00:03:23.957" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""You can use #emacsconf for hallway conversations.""" start="00:03:29.475" video="mainVideo-sat-open" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Captions""" start="00:03:32.778" video="mainVideo-sat-open" id="subtitle"]]</div>[[!template text="""Once again, we're going to be streaming with open captions""" start="00:03:32.778" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""for most of the talks this year, thanks to our speakers and""" start="00:03:35.588" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""captioning volunteers.""" start="00:03:38.480" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""The captioned talks are indicated on the schedule,""" start="00:03:39.896" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""and with any luck, we'll be posting""" start="00:03:42.523" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""videos and transcripts on talk pages""" start="00:03:44.313" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""shortly after the talks start.""" start="00:03:46.124" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""If you need additional accommodations, please let us know""" start="00:03:47.884" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""in #emacsconf-org and we'll see""" start="00:03:51.070" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""if we can make things happen.""" start="00:03:54.017" video="mainVideo-sat-open" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""status.emacsconf.org""" start="00:03:55.238" video="mainVideo-sat-open" id="subtitle"]]</div>[[!template text="""If something goes down, we'll update status.emacsconf.org.""" start="00:03:55.238" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""If it doesn't look like we've noticed yet,""" start="00:03:59.918" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""please let us know in the #emacsconf-org IRC channel,""" start="00:04:01.744" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""where we will be quietly panicking.""" start="00:04:05.263" video="mainVideo-sat-open" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Guidelines for conduct""" start="00:04:07.282" video="mainVideo-sat-open" id="subtitle"]]</div>[[!template text="""In all of these conversations, please keep in mind""" start="00:04:07.282" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""our guidelines for conduct.""" start="00:04:09.705" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""You can find them on the wiki,""" start="00:04:11.239" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""and they basically boil down to: please be nice. Thank you!""" start="00:04:12.620" video="mainVideo-sat-open" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Videos""" start="00:04:16.020" video="mainVideo-sat-open" id="subtitle"]]</div>[[!template text="""If all goes well, the prerecorded talks and transcripts""" start="00:04:16.020" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""should be available from the talk pages""" start="00:04:18.892" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""shortly after they start playing,""" start="00:04:20.538" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""and we'll post the recordings of live talks""" start="00:04:22.039" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""and Q&A sessions within the next few weeks.""" start="00:04:24.144" video="mainVideo-sat-open" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Let's get started!""" start="00:04:26.776" video="mainVideo-sat-open" id="subtitle"]]</div>[[!template text="""All right, let's get going.""" start="00:04:26.776" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""You might see Leo Vivier, Corwin Brust,""" start="00:04:28.248" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""and Amin Bandali hosting the various tracks.""" start="00:04:31.215" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""I will run around mostly backstage,""" start="00:04:33.954" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""and you'll probably meet us in the closing remarks.""" start="00:04:35.768" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""That's also where we get to thank""" start="00:04:37.794" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""all the people and organizations""" start="00:04:39.244" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""who make EmacsConf possible.""" start="00:04:40.660" video="mainVideo-sat-open" id="subtitle"]]
+[[!template text="""Let's have fun at EmacsConf!""" start="00:04:42.550" video="mainVideo-sat-open" id="subtitle"]]
+
+</div>
+
+Captioner: sachac
+
+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)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2025/info/sat-open-before.md b/2025/info/sat-open-before.md
new file mode 100644
index 00000000..178d7516
--- /dev/null
+++ b/2025/info/sat-open-before.md
@@ -0,0 +1,34 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+
+The following image shows where the talk is in the schedule for Sat 2025-12-06. Solid lines show talks with Q&A via BigBlueButton. Dashed lines show talks with Q&A via IRC or Etherpad.<div class="schedule-in-context schedule-svg-container" data-slug="sat-open">
+<svg width="700" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Schedule for Saturday</title> <rect width="700" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="/2025/talks/sat-open" title="Saturday opening remarks" data-slug="sat-open"> <title> 9:00- 9:10 Saturday opening remarks</title> <rect stroke-width="3" x="0" y="15" opacity="0.8" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(11,73)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="/2025/talks/org-babel" title="Making Org-Babel reactive" data-slug="org-babel"> <title> 9:10- 9:20 Making Org-Babel reactive</title> <rect x="13" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(24,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> org-babel</text></g></a> <a href="/2025/talks/reference" title="Emacs as a fully-fledged reference manager" data-slug="reference"> <title> 9:30- 9:55 Emacs as a fully-fledged reference manager</title> <rect x="41" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(73,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> reference</text></g></a> <a href="/2025/talks/gmail" title="org-gmail: A deep integration of Gmail into your Org Mode" data-slug="gmail"> <title> 10:15-10:40 org-gmail: A deep integration of Gmail into your Org Mode</title> <rect x="102" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(134,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gmail</text></g></a> <a href="/2025/talks/gnus" title="Reading and writing emails in GNU Emacs with Gnus" data-slug="gnus"> <title> 10:50-11:15 Reading and writing emails in GNU Emacs with Gnus</title> <rect x="150" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(182,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gnus</text></g></a> <a href="/2025/talks/latex" title="LaTeX export in org-mode: the overhaul" data-slug="latex"> <title> 11:25-11:45 LaTeX export in org-mode: the overhaul</title> <rect x="199" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(224,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> latex</text></g></a> <a href="/2025/talks/calc" title="Basic Calc functionality for engineering or electronics" data-slug="calc"> <title> 1:00- 1:25 Basic Calc functionality for engineering or electronics</title> <rect x="329" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(361,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> calc</text></g></a> <a href="/2025/talks/blee-lcnt" title="Blee-LCNT: An Emacs-centered content production and self-publication framework" data-slug="blee-lcnt"> <title> 1:35- 2:15 Blee-LCNT: An Emacs-centered content production and self-publication framework</title> <rect x="377" y="15" opacity="0.5" width="54" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(429,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> blee-lcnt</text></g></a> <a href="/2025/talks/greader" title="GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence" data-slug="greader"> <title> 2:35- 2:40 GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence</title> <rect x="459" y="15" opacity="0.5" width="6" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(463,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> greader</text></g></a> <a href="/2025/talks/open-mic" title="Open session" data-slug="open-mic"> <title> 2:50- 3:40 Open session</title> <rect x="480" y="15" opacity="0.5" width="68" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(546,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> open-mic</text></g></a> <a href="/2025/talks/sat-close" title="Saturday closing remarks / open session" data-slug="sat-close"> <title> 4:00- 4:10 Saturday closing remarks / open session</title> <rect x="576" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(587,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="/2025/talks/schemacs" title="One year progress update Schemacs (formerly Gypsum)" data-slug="schemacs"> <title> 9:30- 9:55 One year progress update Schemacs (formerly Gypsum)</title> <rect x="41" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(73,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> schemacs</text></g></a> <a href="/2025/talks/juicemacs" title="Juicemacs: exploring speculative JIT compilation for ELisp in Java" data-slug="juicemacs"> <title> 10:15-10:35 Juicemacs: exploring speculative JIT compilation for ELisp in Java</title> <rect x="102" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(127,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> juicemacs</text></g></a> <a href="/2025/talks/swanky" title="Swanky Python: Interactive development for Python" data-slug="swanky"> <title> 10:45-11:10 Swanky Python: Interactive development for Python</title> <rect x="144" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(176,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> swanky</text></g></a> <a href="/2025/talks/python" title="Interactive Python programming in Emacs" data-slug="python"> <title> 11:20-11:40 Interactive Python programming in Emacs</title> <rect x="192" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(217,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <a href="/2025/talks/llm" title="Emacs, editors, and LLM driven workflows" data-slug="llm"> <title> 1:00- 1:25 Emacs, editors, and LLM driven workflows</title> <rect x="329" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(361,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> llm</text></g></a> <a href="/2025/talks/private-ai" title="Emacs and private AI: a great match" data-slug="private-ai"> <title> 1:45- 2:05 Emacs and private AI: a great match</title> <rect x="391" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(416,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> private-ai</text></g></a> <a href="/2025/talks/commonlisp" title="Common Lisp images communicating like-a-human through shared Emacs slime and eev" data-slug="commonlisp"> <title> 2:25- 2:55 Common Lisp images communicating like-a-human through shared Emacs slime and eev</title> <rect x="446" y="75" opacity="0.5" width="41" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(485,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> commonlisp</text></g></a> <a href="/2025/talks/graphics" title="Modern Emacs/Elisp hardware/software accelerated graphics" data-slug="graphics"> <title> 3:05- 3:30 Modern Emacs/Elisp hardware/software accelerated graphics</title> <rect x="500" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(532,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> graphics</text></g></a> <g transform="translate(0,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(82,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(164,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(247,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(329,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(411,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(494,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(576,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(658,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 5 PM</text></g></svg>
+</div>
+
+[[!toc ]]
+Format: 5-min talk ; Q&A: Etherpad <https://pad.emacsconf.org/2025-sat-open>
+Etherpad: <https://pad.emacsconf.org/2025-sat-open>
+Discuss on IRC: [#emacsconf-gen](https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen)
+Status: Q&A finished, IRC and pad will be archived on this page
+
+
+
+
+
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-sat-open"><source src="https://media.emacsconf.org/2025/emacsconf-2025-sat-open--saturday-opening-remarks--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2025/captions/emacsconf-2025-sat-open--saturday-opening-remarks--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2025/captions/emacsconf-2025-sat-open--saturday-opening-remarks--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="mainVideo-sat-open" data="""
+00:00.000 Tracks
+00:16.000 Watching and participating
+01:00.607 Other schedule formats
+01:10.601 BigBlueButton
+01:46.036 On and off the stream
+02:03.217 Etherpad and IRC
+02:25.456 Etherpad
+02:59.440 IRC
+03:32.778 Captions
+03:55.238 status.emacsconf.org
+04:07.282 Guidelines for conduct
+04:16.020 Videos
+04:26.776 Let's get started!
+
+"""]]<div></div>Duration: 04:51 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2025-sat-open">Open Etherpad</a></li><li><a href="https://pad.emacsconf.org/2025-sat-open">Open public Q&A</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-sat-open--saturday-opening-remarks--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-sat-open--saturday-opening-remarks--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-sat-open--saturday-opening-remarks--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-sat-open--saturday-opening-remarks--main.opus">Download --main.opus (2.5MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-sat-open--saturday-opening-remarks--main.vtt">Download --main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-sat-open--saturday-opening-remarks--main.webm">Download --main.webm (15MB)</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2025/info/sat-open-nav.md b/2025/info/sat-open-nav.md
new file mode 100644
index 00000000..00816f18
--- /dev/null
+++ b/2025/info/sat-open-nav.md
@@ -0,0 +1,6 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Next by time: <a href="/2025/talks/org-babel">Making Org-Babel reactive</a>
+Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2025/watch/gen">Watch</a></strong>
+</div>
diff --git a/2025/info/schemacs-after.md b/2025/info/schemacs-after.md
new file mode 100644
index 00000000..595a5d18
--- /dev/null
+++ b/2025/info/schemacs-after.md
@@ -0,0 +1,411 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<div class="transcript transcript-mainVideo"><a name="schemacs-mainVideo-transcript"></a><h1>Transcript</h1>
+
+[[!template text="""Hi, EmacsConf 2025. My name is Ramin Honary,""" start="00:00:01.060" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""and I'd like to talk to you today""" start="00:00:05.640" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""about my project called Schemacs""" start="00:00:07.560" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""which I presented last year.""" start="00:00:10.400" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""Back then it was called &quot;Gypsum&quot;""" start="00:00:12.080" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""and the name has since changed.""" start="00:00:13.880" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""So my name is Ramin Honary.""" start="00:00:18.320" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""I'm an Emacs enthusiast, have been since 2017 or so.""" start="00:00:20.240" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""I'm a full stack software developer.""" start="00:00:25.000" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""I love Haskell, Scheme,""" start="00:00:27.760" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""anything functional programming related,""" start="00:00:29.301" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""and of course Emacs.""" start="00:00:31.434" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""I started learning Scheme about three years ago,""" start="00:00:32.960" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""and this is my third time presenting""" start="00:00:36.200" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""at EmacsConf.""" start="00:00:38.000" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""So the Schemacs project that I'm talking to,""" start="00:00:40.800" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""I'm talking about to you today,""" start="00:00:46.480" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""was originally called &quot;Gypsum&quot;.""" start="00:00:48.160" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""The reason I did not call it &quot;Schemacs&quot;""" start="00:00:50.280" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""was that the name &quot;Schemacs&quot; was taken on GitHub.""" start="00:00:53.360" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""But in the past year,""" start="00:00:58.120" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""I was able to get the permission""" start="00:00:59.568" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""of the author of GitHub's Schemacs""" start="00:01:02.120" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""project to name my project the same thing,""" start="00:01:04.480" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""even though it's a very similar project.""" start="00:01:08.841" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""So I changed the name.""" start="00:01:11.321" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""Let me see if I can quickly show the screen.""" start="00:01:14.720" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""So yeah, I have archived the old project.""" start="00:01:19.701" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""It's still there, but there's an explanation in""" start="00:01:24.960" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""the readme file and a screen grab""" start="00:01:27.720" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""of the conversation I had""" start="00:01:30.168" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""with the original author of GitHub Schemacs.""" start="00:01:31.600" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""My Schemacs is not on GitHub at all.""" start="00:01:36.120" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""It's only on Codeberg. So please don't get confused.""" start="00:01:38.680" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""But yes, I received permission""" start="00:01:43.880" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""to change the name and so I did.""" start="00:01:46.000" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""And I would like to give a quick shout-out to""" start="00:01:50.200" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""user &quot;Tusharhero&quot; for helping me with that.""" start="00:01:52.840" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""This person really helped make that name change happen.""" start="00:01:57.240" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""So back to the slides.""" start="00:02:02.640" video="mainVideo-schemacs" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""The scope of the project""" start="00:02:07.200" video="mainVideo-schemacs" id="subtitle"]]</div>[[!template text="""And so now I'd like to clarify the scope of the project.""" start="00:02:07.200" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""I don't think I quite made it clear""" start="00:02:11.320" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""well enough last year,""" start="00:02:13.001" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""but... Although I'm definitely cloning""" start="00:02:14.920" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""the Emacs Lisp programming language,""" start="00:02:18.401" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""the actual scope of the Schemacs project""" start="00:02:20.168" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""is to make an Emacs-like app platform for Scheme.""" start="00:02:25.268" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""I don't consider Emacs to be a text editor.""" start="00:02:29.760" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""I consider Emacs to be a Lisp app platform.""" start="00:02:32.960" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""So it's similar to something like the""" start="00:02:38.200" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""World Wide Web, or Microsoft's .NET app platform, or Java.""" start="00:02:39.840" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""These are all examples of app platforms.""" start="00:02:48.540" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""I would like Schemacs to make it easy""" start="00:02:52.560" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""for not only people to use it for""" start="00:02:55.120" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""things like editing text or, you know, for""" start="00:02:59.400" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""using your computer through a command line""" start="00:03:03.480" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""or manipulating your Git repository.""" start="00:03:06.440" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""I'd also like you to be able to create simple""" start="00:03:10.600" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""GUIs or TUIs using Scheme.""" start="00:03:13.160" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""So that's also one of the goals of this project.""" start="00:03:16.120" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""It will of course have an Emacs-like text editor,""" start="00:03:19.320" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""and I will clone Emacs Lisp.""" start="00:03:23.080" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""So hopefully GNU Emacs users""" start="00:03:25.000" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""will feel comfortable moving over to Schemacs""" start="00:03:29.880" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""because they'll be able to use your init.""" start="00:03:32.780" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""You'll be able to use your init.el file.""" start="00:03:35.680" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""So configuring and scripting Schemacs""" start="00:03:40.400" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""should be done in Scheme.""" start="00:03:43.240" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""I'd like to encourage scripting in Scheme""" start="00:03:44.480" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""and creating new workflows and macros in Scheme.""" start="00:03:47.680" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""It will support Emacs Lisp depending on""" start="00:03:51.200" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""how much of the Emacs Lisp interpreter I can clone.""" start="00:03:54.268" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""That will be supported but not encouraged.""" start="00:03:59.320" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""But you should still be able to run your init.el.""" start="00:04:03.040" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""And I would like it to be good enough,""" start="00:04:06.320" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""this Emacs Lisp interpreter""" start="00:04:08.840" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""should be good enough to run packages from ELPA.""" start="00:04:10.000" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""Although it will probably be some time""" start="00:04:13.000" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""before it will be able to run""" start="00:04:15.880" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""something as large as Org Mode or Magit.""" start="00:04:17.560" video="mainVideo-schemacs" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Difference with Robin Templeton's project (Guile-Emacs)""" start="00:04:24.760" video="mainVideo-schemacs" id="subtitle"]]</div>[[!template text="""It is slightly different from the Guile-Emacs project.""" start="00:04:24.760" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""This is the work of Robin Templeton""" start="00:04:27.440" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""who presented last year.""" start="00:04:30.334" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""Guile-Emacs links the Guile runtime""" start="00:04:32.220" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""into the Emacs executable.""" start="00:04:36.034" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""It's not a Scheme application. Emacs,""" start="00:04:38.501" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""the core of Emacs is written in C.""" start="00:04:41.581" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""Guile, the core of Guile is written in C.""" start="00:04:44.201" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""What Robin Templeton has done is, at the C level, linked""" start="00:04:48.121" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""&quot;libguile.so&quot; into Emacs and then provided""" start="00:04:53.701" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""a programming layer where you can""" start="00:04:56.834" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""call the Scheme interpreter from Emacs Lisp""" start="00:04:59.501" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""so that you can run Scheme programs from within Emacs""" start="00:05:04.760" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""without having to launch a separate process""" start="00:05:11.280" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""and communicate over a channel such as a socket.""" start="00:05:13.920" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""You won't need &quot;SLIME&quot; or anything.""" start="00:05:18.040" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""The Guile interpreter is just right there inside of Emacs.""" start="00:05:19.840" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""But my project is not like this at all.""" start="00:05:23.420" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""Schemacs is written completely from the ground up""" start="00:05:26.000" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""in R7RS-compliant Scheme. And because it's R7RS-compliant,""" start="00:05:28.880" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""it's not bound to any one particular Scheme implementation,""" start="00:05:35.000" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""although Guile is the reference implementation.""" start="00:05:38.000" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""One goal of this project is to be able to run""" start="00:05:39.880" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""Schemacs on any R7RS-compliant Scheme implementation.""" start="00:05:42.360" video="mainVideo-schemacs" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Progress made since last year""" start="00:05:49.720" video="mainVideo-schemacs" id="subtitle"]]</div>[[!template text="""The work that I've done this past year mostly is internal.""" start="00:05:49.720" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""There's not much that you can see on the surface.""" start="00:05:56.260" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""But the most... One of the most important things that I""" start="00:06:00.940" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""did was I rewrote the parser in R7RS Scheme,""" start="00:06:04.520" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""so it no longer depends on""" start="00:06:06.840" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""the Guile regular expressions library.""" start="00:06:07.920" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""The parser now also provides source locations,""" start="00:06:12.000" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""so if an error occurs in Emacs Lisp,""" start="00:06:14.960" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""there will be a stack trace""" start="00:06:18.940" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""and it will show you where in the source code""" start="00:06:20.568" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""the error occured. This was not possible last year.""" start="00:06:23.634" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""And because it no longer depends on Guile,""" start="00:06:28.320" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""I can make it work on multiple Scheme implementations.""" start="00:06:30.861" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""So far, I've been able to get it to run on""" start="00:06:34.521" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""the Chibi Scheme interpreter""" start="00:06:36.821" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""and the Gauche Scheme interpreter, as well as""" start="00:06:38.921" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""Guile, which is the reference implementation.""" start="00:06:41.281" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""For a short time, it did work also on Chez Scheme,""" start="00:06:44.280" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""the Chez Scheme compiler, using Gwen Weinholt's &quot;Akku,&quot;""" start="00:06:48.560" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""which is a program that translates R7RS Scheme to R6RS Scheme.""" start="00:06:53.180" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""And with that translation, because Chez Scheme""" start="00:06:59.300" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""is pretty strictly an R6RS compiler,""" start="00:07:04.520" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""the translation allows you to run R7RS programs.""" start="00:07:07.320" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""But due to some change, I'm not sure where,""" start="00:07:11.520" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""it may have been changed in the Schemacs source code,""" start="00:07:15.220" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""or it may have been a change to Akku,""" start="00:07:17.120" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""but it no longer builds on Chez.""" start="00:07:19.640" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""It did at one point. I'd like to try to fix that.""" start="00:07:21.240" video="mainVideo-schemacs" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Portable React-like GUI""" start="00:07:28.040" video="mainVideo-schemacs" id="subtitle"]]</div>[[!template text="""The second most important thing that I've worked on is a""" start="00:07:28.040" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""portable React-like GUI. And so React,""" start="00:07:30.720" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""for anyone who has done web programming,""" start="00:07:36.440" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""is a very popular framework for programming web applications.""" start="00:07:41.000" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""And I've provided something""" start="00:07:46.840" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""very similar to that in Scheme now.""" start="00:07:48.234" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""So it works. I have constructed a DOM data structure""" start="00:07:49.600" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""in Scheme. It's just an ordinary Scheme data structure.""" start="00:07:54.680" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""It works like the web's &quot;Document Object Model&quot;""" start="00:07:59.080" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""or the &quot;DOM&quot; data structure.""" start="00:08:01.520" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""And then this Scheme DOM data structure can be rendered""" start="00:08:03.961" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""using any GUI framework that is convenient""" start="00:08:10.000" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""for the Scheme implementation that you're targeting.""" start="00:08:13.060" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""And you should be able to implement""" start="00:08:16.240" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""also rendering to a CLI as well.""" start="00:08:18.880" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""The current reference implementation""" start="00:08:22.920" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""is using a framework called Guile-GI.""" start="00:08:24.601" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""This is the &quot;GObject Introspection&quot; framework.""" start="00:08:27.760" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""It's a very simple""" start="00:08:30.640" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""GObject Introspection framework for Guile,""" start="00:08:31.968" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""and it binds to GTK3 on Linux.""" start="00:08:36.120" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""There's a similar framework called G-Golf""" start="00:08:40.980" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""which I'd like to begin using as well, also for Guile.""" start="00:08:42.920" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""G-Golf seems to be a bit more well-maintained, a bit...""" start="00:08:48.360" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""It has better features. G-Golf may be a""" start="00:08:53.740" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""better rendering backend for the reference""" start="00:08:57.800" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""implementation, but I would like to provide both.""" start="00:09:00.040" video="mainVideo-schemacs" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Demo""" start="00:09:06.040" video="mainVideo-schemacs" id="subtitle"]]</div>[[!template text="""I will give a demo of this now.""" start="00:09:06.040" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""Unfortunately not a whole lot""" start="00:09:07.934" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""to see compared to last year.""" start="00:09:13.000" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""First thing I'd like to show is""" start="00:09:18.140" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""that I now have a Makefile. You can look inside""" start="00:09:20.640" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""this Makefile and if you're able to read a Makefile,""" start="00:09:24.280" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""you can see that I have several targets now available.""" start="00:09:28.401" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""You can build Schemacs for Guile,""" start="00:09:31.968" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""you can build Schemacs for Gambit,""" start="00:09:35.001" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""or Stklos, or Chicken, or Chez,""" start="00:09:36.668" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""although none of these (except for Guile)""" start="00:09:40.334" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""currently works. These targets will actually""" start="00:09:42.901" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""build the source code, but then you would have to""" start="00:09:51.168" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""load it into the REPL separately.""" start="00:09:56.001" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""There are targets for launching""" start="00:09:59.434" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""a Gauche REPL and a Chibi REPL.""" start="00:10:02.468" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""You can also run the Emacs Lisp tests""" start="00:10:06.468" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""in Gauche and Chibi.""" start="00:10:10.868" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""You can also start a Guile REPL through this Makefile.""" start="00:10:13.068" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""So I will do that right now in the shell.""" start="00:10:19.080" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""(...make the text larger...there we go...)""" start="00:10:27.500" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""OK, so we have this directory of the source code.""" start="00:10:31.834" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""Let's just begin by running &quot;guile.sh&quot;.""" start="00:10:38.480" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""This will launch a REPL and you can load &quot;main-guile&quot;.""" start="00:10:44.560" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""This will launch the GUI. This is the basic""" start="00:10:52.601" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""proof of concept GUI that uses Guile-GI.""" start="00:10:59.720" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""So it may be hard to see.""" start="00:11:04.801" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""I cannot change the size of the text yet.""" start="00:11:10.520" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""I've implemented the M-: feature""" start="00:11:14.560" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""where you can eval in a minibuffer some Scheme code.""" start="00:11:17.334" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""(string-append &quot;hello&quot; ...)""" start="00:11:24.068" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""It outputs the result in the buffer.""" start="00:11:34.440" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""This is basically the &quot;\*Messages\*&quot; buffer.""" start="00:11:38.280" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""And that's all the more that I have.""" start="00:11:40.960" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""This is the same state it was in last year.""" start="00:11:42.620" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""It hasn't changed a whole lot since back then.""" start="00:11:45.480" video="mainVideo-schemacs" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Additional changes""" start="00:11:48.700" video="mainVideo-schemacs" id="subtitle"]]</div>[[!template text="""But I have made additional changes.""" start="00:11:48.700" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""So first of all, you can run""" start="00:11:52.820" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""(let me just go back into the Guile)... you can""" start="00:12:05.380" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""run the Emacs Lisp interpreter tests, so &quot;elisp-tests&quot;.""" start="00:12:10.201" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""As you can see, it gives you a stack trace.""" start="00:12:16.620" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""So this is an error that I've been able to reproduce.""" start="00:12:18.920" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""I know exactly what the cause of this error is.""" start="00:12:22.040" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""It is not finding a variable""" start="00:12:24.600" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""because the closure is not correctly""" start="00:12:27.600" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""capturing its environment. So there should be a variable""" start="00:12:30.320" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""in the closure, but that variable has not been captured""" start="00:12:35.200" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""and so it is causing an error.""" start="00:12:38.720" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""It is currently loading &quot;byte-run.el&quot;.""" start="00:12:43.460" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""Let me show you what code that is here.""" start="00:12:48.081" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""So I've copied into the source repository""" start="00:12:49.821" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""for Schemacs some of the Elisp code from GNU Emacs.""" start="00:12:53.501" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""So I have this &quot;subr.el&quot;.""" start="00:12:58.761" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""This declares most of the core of Emacs Lisp""" start="00:13:04.421" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""that's not written in C.""" start="00:13:09.861" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""There's also &quot;byte-run.el&quot;. Schemacs Emacs Lisp can now""" start="00:13:12.861" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""evaluate this. This is where functions like &quot;defun&quot; are""" start="00:13:19.000" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""defined, and &quot;defmacro&quot;. So as you can see,""" start="00:13:24.380" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""defun itself is a defmacro defined right here.""" start="00:13:28.360" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""It's written in Emacs Lisp itself,""" start="00:13:30.800" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""defined in terms of defalias.""" start="00:13:34.860" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""So I can evaluate &quot;byte-run&quot;,""" start="00:13:37.720" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""I can evaluate &quot;macroexp&quot;,""" start="00:13:40.240" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""and the failure occurs somewhere in &quot;subr.el&quot;.""" start="00:13:42.740" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""Although if you look at the stack trace,""" start="00:13:46.020" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""it doesn't provide all the necessary information.""" start="00:13:48.960" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""So it appears to be happening in byte-run.el.""" start="00:13:51.160" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""Really, it's an error that's occurring inside of a macro,""" start="00:13:56.440" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""and the macro call site is somewhere in subr.el.""" start="00:14:00.620" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""Anyway, take note of this stack trace.""" start="00:14:05.800" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""This was run from within Guile.""" start="00:14:08.640" video="mainVideo-schemacs" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Other Scheme implementations""" start="00:14:12.020" video="mainVideo-schemacs" id="subtitle"]]</div>[[!template text="""Now what I've done this past year""" start="00:14:12.020" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""is make it work on other Scheme implementations.""" start="00:14:14.200" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""Use &quot;make&quot; to launch a Gauche REPL.""" start="00:14:19.480" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""Now I'm inside of Gauche.""" start="00:14:23.834" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""This is the command that""" start="00:14:26.000" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""you would use to launch a Gauche REPL.""" start="00:14:27.234" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""And I can load the same program (load &quot;elisp-tests.scm&quot;).""" start="00:14:30.080" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""You get the exact same result as Guile.""" start="00:14:38.200" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""So we have two different Scheme implementations""" start="00:14:42.760" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""producing the same result.""" start="00:14:45.800" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""Let's try &quot;make&quot; a Chibi REPL. This is Chibi Scheme.""" start="00:14:46.800" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""And you can (load &quot;elisp-tests.scm&quot;).""" start="00:14:53.080" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""Chibi is a bit slower, but you get the exact same result.""" start="00:15:00.220" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""So we have three different Scheme implementations""" start="00:15:04.081" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""all running Emacs Lisp,""" start="00:15:07.401" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""and all producing the same result.""" start="00:15:11.540" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""I think that's...""" start="00:15:14.040" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""I'm fairly proud of that accomplishment.""" start="00:15:14.768" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""I was able to get the code written to the point""" start="00:15:17.100" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""where it actually runs on multiple implementations.""" start="00:15:21.201" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""You can also try making it for other Scheme compilers""" start="00:15:24.880" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""like &quot;schemacs-mitscheme&quot; for example,""" start="00:15:30.600" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""but this will fail.""" start="00:15:35.960" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""You can try building it for &quot;schemacs-chez&quot;,""" start="00:15:40.020" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""Let's try Chez... there we go.""" start="00:15:46.680" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""And it will use Akku,""" start="00:15:51.801" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""and it will fetch the necessary dependencies.""" start="00:15:54.234" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""But it fails, and I haven't been able to""" start="00:15:58.001" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""debug that quite yet.""" start="00:16:03.434" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""Stklos fails for a similar reason.""" start="00:16:05.960" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""Gambit... Chicken still doesn't build all the way yet.""" start="00:16:13.140" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""The Makefile at least has places for it.""" start="00:16:21.700" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""If anyone can help me out and get Schemacs to compile""" start="00:16:27.121" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""on these other Scheme implementations,""" start="00:16:30.968" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""I'd appreciate it.""" start="00:16:32.734" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""I can probably figure it out myself,""" start="00:16:34.001" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""but that will take more time.""" start="00:16:35.468" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""And let me just show you quickly""" start="00:16:37.001" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""the test program.""" start="00:16:40.121" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""Basically this is the Emacs Lisp test program""" start="00:16:41.721" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""that I was just running, and it produces an error.""" start="00:16:44.501" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""All it does is it loads these files here in this order,""" start="00:16:48.581" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""and it fails right around here.""" start="00:16:53.221" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""So it's able to load these two.""" start="00:16:55.181" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""And yeah, that's what I've accomplished""" start="00:16:58.320" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""on the Emacs Lisp side of things.""" start="00:17:01.361" video="mainVideo-schemacs" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""GUI framework""" start="00:17:06.200" video="mainVideo-schemacs" id="subtitle"]]</div>[[!template text="""The next thing I want to show you is the GUI framework""" start="00:17:06.200" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""that I've written, which I'm fairly proud of so far.""" start="00:17:09.120" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""So this is the GUI framework""" start="00:17:13.200" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""(oops, I better launch it again, OK...)""" start="00:17:15.834" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""and let me show you the tests.""" start="00:17:19.920" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""So here in the tests, you can start to see""" start="00:17:22.601" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""some examples of how you use it.""" start="00:17:25.701" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""So here is a &quot;counter&quot; test, and this is kind of like""" start="00:17:29.068" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""the &quot;hello world&quot; of reactive programming frameworks,""" start="00:17:31.834" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""where you have a state variable,""" start="00:17:35.941" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""sometimes called an &quot;observable.&quot;""" start="00:17:38.200" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""I'm calling it &quot;number&quot;,""" start="00:17:41.660" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""and it uses &quot;=&quot; to check if the state has updated.""" start="00:17:43.440" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""If an update occurs and the new value is different""" start="00:17:49.000" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""from the old value according to the &quot;=&quot; function,""" start="00:17:52.821" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""then trigger a state update in the GUI as well.""" start="00:17:55.033" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""Initialize to 0, bound to &quot;number&quot;.""" start="00:17:59.233" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""I have a &quot;button&quot; function which creates a simple button.""" start="00:18:03.100" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""It takes a label and an action.""" start="00:18:06.133" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""Right here you see the &quot;div&quot; command.""" start="00:18:07.833" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""This is what creates a &quot;div&quot;.""" start="00:18:10.866" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""Using the properties, I describe that this div is a""" start="00:18:13.040" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""push-button and the &quot;on-button-push&quot; is an action.""" start="00:18:19.000" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""The action is to update the variable &quot;number&quot;""" start="00:18:22.600" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""using whatever function or lambda was provided to it.""" start="00:18:25.266" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""And then the content that you see on screen,""" start="00:18:30.400" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""that you will see on screen when it runs,""" start="00:18:31.966" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""is here. You create a &quot;div-pack cut-vertical&quot;.""" start="00:18:34.034" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""You declare two buttons and then you declare""" start="00:18:38.668" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""this &quot;use-vars&quot; which will take the content""" start="00:18:43.234" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""of this variable here, this observable,""" start="00:18:46.801" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""and place it into the GUI next to the buttons here.""" start="00:18:48.834" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""So what you will see on screen is""" start="00:18:51.734" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""a &quot;plus&quot; button which increments,""" start="00:18:54.234" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""here is the &quot;increment&quot; function,""" start="00:18:57.068" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""a &quot;minus&quot; button which decrements,""" start="00:18:59.321" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""and then the content of the variable that is""" start="00:19:02.780" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""being incremented and decremented.""" start="00:19:05.480" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""The advantage of these reactive frameworks is that""" start="00:19:09.700" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""with very few lines of code""" start="00:19:11.866" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""you can create fairly complex interfaces.""" start="00:19:13.066" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""The less code you have to write,""" start="00:19:16.033" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""the fewer chances you have to make mistakes.""" start="00:19:18.600" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""So let's just run this program.""" start="00:19:21.233" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""This was the &quot;counter-test.&quot;""" start="00:19:23.968" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""And that is the debug window. Here's the &quot;counter.&quot;""" start="00:19:33.293" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""I'm sorry it's not much larger than this.""" start="00:19:35.200" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""But here's the &quot;plus&quot; button, the &quot;minus&quot; button,""" start="00:19:38.453" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""and here's the &quot;number&quot;, 0.""" start="00:19:41.133" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""And I can increment or decrement as much as I like.""" start="00:19:43.920" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""So yeah, that's kind of the hello world""" start="00:19:49.793" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""of reactive programming. (I'll reboot the REPL...)""" start="00:19:51.101" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""The next thing I want to show you is this layout test.""" start="00:19:55.240" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""And I'll just run the test first.""" start="00:19:58.600" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""So here we have basically""" start="00:20:02.193" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""a tiling window manager kind of thing,""" start="00:20:05.020" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""where you can resize the tiles""" start="00:20:08.540" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""and then by clicking on these buttons here,""" start="00:20:11.280" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""you can change the layout.""" start="00:20:12.934" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""So you can do two on the right,""" start="00:20:16.940" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""two up above, or three up above. So, yeah.""" start="00:20:20.168" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""Those tiling windows, as you can see,""" start="00:20:27.101" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""once I work this branch into the main branch of Schemacs,""" start="00:20:30.268" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""I can use that to implement""" start="00:20:33.001" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""the split window functionality for Schemacs,""" start="00:20:35.274" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""the editor. So here's what this split...""" start="00:20:38.266" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""Here's the layout test that you just saw.""" start="00:20:42.466" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""Let me make it a bit smaller""" start="00:20:44.866" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""so that it all fits on one screen.""" start="00:20:46.733" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""So basically we have the &quot;button&quot; command again,""" start="00:20:48.200" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""and then these are the button actions""" start="00:20:51.366" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""which basically just changes the layout,""" start="00:20:54.133" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""and then I have the layout. So this layout is a &quot;div.&quot;""" start="00:20:57.000" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""The first div just places three buttons in a row.""" start="00:21:01.460" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""The next layout is a div within a div.""" start="00:21:04.920" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""So we have one div which places the button""" start="00:21:07.533" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""called &quot;two right&quot; buttons, and the div above it,""" start="00:21:13.000" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""which places the &quot;three in a row&quot; button""" start="00:21:18.633" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""or the &quot;two above&quot; buttons.""" start="00:21:21.493" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""And here's the next... So there's three different""" start="00:21:22.661" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""layouts, and clicking on one of their associated buttons""" start="00:21:26.001" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""will just change the layout.""" start="00:21:30.601" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""As you can see, very little code""" start="00:21:32.101" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""to create a somewhat complex user interface.""" start="00:21:33.434" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""That's the advantage of using reactive or declarative""" start="00:21:38.501" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""UI programming paradigms.""" start="00:21:42.868" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""So yeah, this has not been merged into Schemacs""" start="00:21:44.234" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""at the time of this recording,""" start="00:21:47.233" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""but will be soon hopefully.""" start="00:21:48.701" video="mainVideo-schemacs" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Wrapping up""" start="00:21:51.520" video="mainVideo-schemacs" id="subtitle"]]</div>[[!template text="""So yeah, I think I've already gone on for 20 minutes.""" start="00:21:51.520" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""So I guess I'll just end my presentation here.""" start="00:21:55.166" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""I have lots more to talk about.""" start="00:21:59.140" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""I guess I will say one last thing before I go:""" start="00:22:00.466" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""that I would very much like for others""" start="00:22:03.980" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""to try and contribute to this project.""" start="00:22:07.066" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""I will do my best to try and help teach anybody""" start="00:22:09.200" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""or work with anybody, especially even""" start="00:22:14.233" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""if you don't have much experience with Scheme.""" start="00:22:16.833" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""I'd like to help everybody try to contribute.""" start="00:22:18.600" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""Basically I want to get this proof of concept working.""" start="00:22:22.760" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""I want to get a stable user interface up and running,""" start="00:22:26.240" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""and then we can start working on""" start="00:22:30.674" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""improving the Emacs Lisp interpreter all together.""" start="00:22:33.066" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""There are close to 1,400 built-in functions""" start="00:22:36.700" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""which need to be implemented.""" start="00:22:41.066" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""We don't need to get all of them""" start="00:22:43.660" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""in order to be able to run probably most of ELPA,""" start="00:22:44.966" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""but as much as possible.""" start="00:22:48.466" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""We would like to clone Emacs Lisp and I need help.""" start="00:22:50.866" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""So get a hold of me. My project is on Codeberg.""" start="00:22:54.800" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""Well, (oh, I can't show this here),""" start="00:23:02.580" video="mainVideo-schemacs" id="subtitle"]]
+[[!template text="""but I will end it there. Thank you for listening.""" start="00:23:06.920" video="mainVideo-schemacs" id="subtitle"]]
+
+</div>
+
+Captioner: sachac
+
+Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202023%20schemacs%3A%20One%20year%20progress%20update%20Schemacs%20%28formerly%20Gypsum%29)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2025/info/schemacs-before.md b/2025/info/schemacs-before.md
new file mode 100644
index 00000000..acdbb81c
--- /dev/null
+++ b/2025/info/schemacs-before.md
@@ -0,0 +1,30 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+
+The following image shows where the talk is in the schedule for Sat 2025-12-06. Solid lines show talks with Q&A via BigBlueButton. Dashed lines show talks with Q&A via IRC or Etherpad.<div class="schedule-in-context schedule-svg-container" data-slug="schemacs">
+<svg width="700" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Schedule for Saturday</title> <rect width="700" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="/2025/talks/sat-open" title="Saturday opening remarks" data-slug="sat-open"> <title> 9:00- 9:10 Saturday opening remarks</title> <rect x="0" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(11,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="/2025/talks/org-babel" title="Making Org-Babel reactive" data-slug="org-babel"> <title> 9:10- 9:20 Making Org-Babel reactive</title> <rect x="13" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(24,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> org-babel</text></g></a> <a href="/2025/talks/reference" title="Emacs as a fully-fledged reference manager" data-slug="reference"> <title> 9:30- 9:55 Emacs as a fully-fledged reference manager</title> <rect x="41" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(73,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> reference</text></g></a> <a href="/2025/talks/gmail" title="org-gmail: A deep integration of Gmail into your Org Mode" data-slug="gmail"> <title> 10:15-10:40 org-gmail: A deep integration of Gmail into your Org Mode</title> <rect x="102" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(134,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gmail</text></g></a> <a href="/2025/talks/gnus" title="Reading and writing emails in GNU Emacs with Gnus" data-slug="gnus"> <title> 10:50-11:15 Reading and writing emails in GNU Emacs with Gnus</title> <rect x="150" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(182,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gnus</text></g></a> <a href="/2025/talks/latex" title="LaTeX export in org-mode: the overhaul" data-slug="latex"> <title> 11:25-11:45 LaTeX export in org-mode: the overhaul</title> <rect x="199" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(224,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> latex</text></g></a> <a href="/2025/talks/calc" title="Basic Calc functionality for engineering or electronics" data-slug="calc"> <title> 1:00- 1:25 Basic Calc functionality for engineering or electronics</title> <rect x="329" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(361,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> calc</text></g></a> <a href="/2025/talks/blee-lcnt" title="Blee-LCNT: An Emacs-centered content production and self-publication framework" data-slug="blee-lcnt"> <title> 1:35- 2:15 Blee-LCNT: An Emacs-centered content production and self-publication framework</title> <rect x="377" y="15" opacity="0.5" width="54" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(429,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> blee-lcnt</text></g></a> <a href="/2025/talks/greader" title="GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence" data-slug="greader"> <title> 2:35- 2:40 GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence</title> <rect x="459" y="15" opacity="0.5" width="6" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(463,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> greader</text></g></a> <a href="/2025/talks/open-mic" title="Open session" data-slug="open-mic"> <title> 2:50- 3:40 Open session</title> <rect x="480" y="15" opacity="0.5" width="68" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(546,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> open-mic</text></g></a> <a href="/2025/talks/sat-close" title="Saturday closing remarks / open session" data-slug="sat-close"> <title> 4:00- 4:10 Saturday closing remarks / open session</title> <rect x="576" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(587,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="/2025/talks/schemacs" title="One year progress update Schemacs (formerly Gypsum)" data-slug="schemacs"> <title> 9:30- 9:55 One year progress update Schemacs (formerly Gypsum)</title> <rect stroke-width="3" x="41" y="75" opacity="0.8" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(73,133)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> schemacs</text></g></a> <a href="/2025/talks/juicemacs" title="Juicemacs: exploring speculative JIT compilation for ELisp in Java" data-slug="juicemacs"> <title> 10:15-10:35 Juicemacs: exploring speculative JIT compilation for ELisp in Java</title> <rect x="102" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(127,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> juicemacs</text></g></a> <a href="/2025/talks/swanky" title="Swanky Python: Interactive development for Python" data-slug="swanky"> <title> 10:45-11:10 Swanky Python: Interactive development for Python</title> <rect x="144" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(176,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> swanky</text></g></a> <a href="/2025/talks/python" title="Interactive Python programming in Emacs" data-slug="python"> <title> 11:20-11:40 Interactive Python programming in Emacs</title> <rect x="192" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(217,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <a href="/2025/talks/llm" title="Emacs, editors, and LLM driven workflows" data-slug="llm"> <title> 1:00- 1:25 Emacs, editors, and LLM driven workflows</title> <rect x="329" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(361,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> llm</text></g></a> <a href="/2025/talks/private-ai" title="Emacs and private AI: a great match" data-slug="private-ai"> <title> 1:45- 2:05 Emacs and private AI: a great match</title> <rect x="391" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(416,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> private-ai</text></g></a> <a href="/2025/talks/commonlisp" title="Common Lisp images communicating like-a-human through shared Emacs slime and eev" data-slug="commonlisp"> <title> 2:25- 2:55 Common Lisp images communicating like-a-human through shared Emacs slime and eev</title> <rect x="446" y="75" opacity="0.5" width="41" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(485,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> commonlisp</text></g></a> <a href="/2025/talks/graphics" title="Modern Emacs/Elisp hardware/software accelerated graphics" data-slug="graphics"> <title> 3:05- 3:30 Modern Emacs/Elisp hardware/software accelerated graphics</title> <rect x="500" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(532,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> graphics</text></g></a> <g transform="translate(0,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(82,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(164,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(247,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(329,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(411,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(494,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(576,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(658,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 5 PM</text></g></svg>
+</div>
+
+[[!toc ]]
+Format: 24-min talk ; Q&A: BigBlueButton conference room <https://media.emacsconf.org/2025/current/bbb-schemacs.html> Etherpad: <https://pad.emacsconf.org/2025-schemacs>
+Etherpad: <https://pad.emacsconf.org/2025-schemacs>
+Discuss on IRC: [#emacsconf-dev](https://chat.emacsconf.org/?join=emacsconf,emacsconf-dev)
+Status: Q&A finished, IRC and pad will be archived on this page
+
+
+
+
+
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-schemacs"><source src="https://media.emacsconf.org/2025/emacsconf-2025-schemacs--one-year-progress-update-schemacs-formerly-gypsum--ramin-honary--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2025/captions/emacsconf-2025-schemacs--one-year-progress-update-schemacs-formerly-gypsum--ramin-honary--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2025/captions/emacsconf-2025-schemacs--one-year-progress-update-schemacs-formerly-gypsum--ramin-honary--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="mainVideo-schemacs" data="""
+02:07.200 The scope of the project
+04:24.760 Difference with Robin Templeton's project (Guile-Emacs)
+05:49.720 Progress made since last year
+07:28.040 Portable React-like GUI
+09:06.040 Demo
+11:48.700 Additional changes
+14:12.020 Other Scheme implementations
+17:06.200 GUI framework
+21:51.520 Wrapping up
+
+"""]]<div></div>Duration: 23:14 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2025-schemacs">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2025/current/bbb-schemacs.html">Open public Q&A</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-schemacs--one-year-progress-update-schemacs-formerly-gypsum--ramin-honary--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-schemacs--one-year-progress-update-schemacs-formerly-gypsum--ramin-honary--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-schemacs--one-year-progress-update-schemacs-formerly-gypsum--ramin-honary--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-schemacs--one-year-progress-update-schemacs-formerly-gypsum--ramin-honary--main.opus">Download --main.opus (10MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-schemacs--one-year-progress-update-schemacs-formerly-gypsum--ramin-honary--main.png">Download --main.png</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-schemacs--one-year-progress-update-schemacs-formerly-gypsum--ramin-honary--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-schemacs--one-year-progress-update-schemacs-formerly-gypsum--ramin-honary--main.webm">Download --main.webm (63MB)</a></li><li><a href="https://youtu.be/KmMeLfYn1xY">View on Youtube</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2025/info/schemacs-nav.md b/2025/info/schemacs-nav.md
new file mode 100644
index 00000000..9c4b7a69
--- /dev/null
+++ b/2025/info/schemacs-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by time: <a href="/2025/talks/org-babel">Making Org-Babel reactive</a>
+Next by time: <a href="/2025/talks/reference">Emacs as a fully-fledged reference manager</a>
+Track: <span class="sched-track Development">Development</span> - <strong><a href="https://emacsconf.org/2025/watch/dev">Watch</a></strong>
+</div>
diff --git a/2025/info/sun-close-after.md b/2025/info/sun-close-after.md
new file mode 100644
index 00000000..aebbe6f8
--- /dev/null
+++ b/2025/info/sun-close-after.md
@@ -0,0 +1,7 @@
+<!-- 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)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2025/info/sun-close-before.md b/2025/info/sun-close-before.md
new file mode 100644
index 00000000..8b7bc9c2
--- /dev/null
+++ b/2025/info/sun-close-before.md
@@ -0,0 +1,19 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+
+The following image shows where the talk is in the schedule for Sun 2025-12-07. Solid lines show talks with Q&A via BigBlueButton. Dashed lines show talks with Q&A via IRC or Etherpad.<div class="schedule-in-context schedule-svg-container" data-slug="sun-close">
+<svg width="700" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Schedule for Sunday</title> <rect width="700" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="/2025/talks/sun-open" title="Sunday opening remarks" data-slug="sun-open"> <title> 9:00- 9:10 Sunday opening remarks</title> <rect x="0" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(11,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-open</text></g></a> <a href="/2025/talks/modern" title="Some problems of modernizing Emacs" data-slug="modern"> <title> 9:10- 9:30 Some problems of modernizing Emacs</title> <rect x="13" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(38,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> modern</text></g></a> <a href="/2025/talks/reader" title="An introduction to the Emacs Reader" data-slug="reader"> <title> 9:40-10:15 An introduction to the Emacs Reader</title> <rect x="54" y="15" opacity="0.5" width="48" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(100,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> reader</text></g></a> <a href="/2025/talks/weights" title="Weightlifting tracking with Emacs on Android" data-slug="weights"> <title> 10:35-10:45 Weightlifting tracking with Emacs on Android</title> <rect x="130" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(141,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> weights</text></g></a> <a href="/2025/talks/completion" title="corfu+yasnippet: Easier than I thought" data-slug="completion"> <title> 11:05-11:25 corfu+yasnippet: Easier than I thought</title> <rect x="171" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(196,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> completion</text></g></a> <a href="/2025/talks/zettelkasten" title="Zettelkasten for regular Emacs hackers" data-slug="zettelkasten"> <title> 1:00- 1:25 Zettelkasten for regular Emacs hackers</title> <rect x="329" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(361,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> zettelkasten</text></g></a> <a href="/2025/talks/hyperboleqa" title="Questions and answers to help you fly with Hyperbole" data-slug="hyperboleqa"> <title> 1:45- 2:15 Questions and answers to help you fly with Hyperbole</title> <rect x="391" y="15" opacity="0.5" width="41" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(430,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperboleqa</text></g></a> <a href="/2025/talks/gardening" title="Gardening in Emacs: A Windows user's tale of tending, tweaking, and triumph" data-slug="gardening"> <title> 2:15- 2:35 Gardening in Emacs: A Windows user's tale of tending, tweaking, and triumph</title> <rect x="432" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(457,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gardening</text></g></a> <a href="/2025/talks/bookclub-tapas" title="Bookclub tapas" data-slug="bookclub-tapas"> <title> 2:45- 3:20 Bookclub tapas</title> <rect x="473" y="15" opacity="0.5" width="48" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(519,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> bookclub-tapas</text></g></a> <a href="/2025/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"> <title> 3:40- 3:50 Sunday closing remarks</title> <rect stroke-width="3" x="549" y="15" opacity="0.8" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(560,73)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-close</text></g></a> <g transform="translate(0,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(82,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(164,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(247,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(329,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(411,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(494,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(576,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(658,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 5 PM</text></g></svg>
+</div>
+
+[[!toc ]]
+Format: 10-min talk ; Q&A: BigBlueButton conference room <https://media.emacsconf.org/2025/current/bbb-sun-close.html> Etherpad: <https://pad.emacsconf.org/2025-sun-close>
+Etherpad: <https://pad.emacsconf.org/2025-sun-close>
+Discuss on IRC: [#emacsconf-gen](https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen)
+Status: Q&A open for participation
+<div>Times in different time zones:</div><div class="times" start="2025-12-07T20:40:00Z" end="2025-12-07T20:50:00Z"><div class="conf-time">Sunday, Dec 7 2025, ~3:40 PM - 3:50 PM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Sunday, Dec 7 2025, ~2:40 PM - 2:50 PM CST (US/Central)<br />Sunday, Dec 7 2025, ~1:40 PM - 1:50 PM MST (US/Mountain)<br />Sunday, Dec 7 2025, ~12:40 PM - 12:50 PM PST (US/Pacific)<br />Sunday, Dec 7 2025, ~8:40 PM - 8:50 PM UTC <br />Sunday, Dec 7 2025, ~9:40 PM - 9:50 PM CET (Europe/Paris)<br />Sunday, Dec 7 2025, ~10:40 PM - 10:50 PM EET (Europe/Athens)<br />Monday, Dec 8 2025, ~2:10 AM - 2:20 AM IST (Asia/Kolkata)<br />Monday, Dec 8 2025, ~4:40 AM - 4:50 AM +08 (Asia/Singapore)<br />Monday, Dec 8 2025, ~5:40 AM - 5:50 AM JST (Asia/Tokyo)</div></div><div><strong><a href="/2025/watch/gen/">Find out how to watch and participate</a></strong></div>
+
+
+
+
+<div class="vid mainVideo"><div></div><div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2025-sun-close">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2025/current/bbb-sun-close.html">Open public Q&A</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-sun-close--sunday-closing-remarks--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-sun-close--sunday-closing-remarks--intro.webm">Download --intro.webm</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2025/info/sun-close-nav.md b/2025/info/sun-close-nav.md
new file mode 100644
index 00000000..6c9590ba
--- /dev/null
+++ b/2025/info/sun-close-nav.md
@@ -0,0 +1,6 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by time: <a href="/2025/talks/bookclub-tapas">Bookclub tapas</a>
+Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2025/watch/gen">Watch</a></strong>
+</div>
diff --git a/2025/info/sun-open-after.md b/2025/info/sun-open-after.md
new file mode 100644
index 00000000..d30936b4
--- /dev/null
+++ b/2025/info/sun-open-after.md
@@ -0,0 +1,143 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<div class="transcript transcript-mainVideo"><a name="sun-open-mainVideo-transcript"></a><h1>Transcript (unedited)</h1>
+
+
+<div class="transcript-heading">[[!template new="1" text="""Tracks""" start="00:00:00.000" video="mainVideo-sun-open" id="subtitle"]]</div>[[!template text="""Welcome to EmacsConf, where we have fun""" start="00:00:00.000" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""exploring just how much we can do with a text editor.""" start="00:00:02.247" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""There's a General track and a Development track,""" start="00:00:05.485" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""but really, you'll probably find""" start="00:00:07.925" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""interesting things on both tracks""" start="00:00:09.484" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""no matter what your level of experience is,""" start="00:00:11.079" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""so don't feel limited to one or the other.""" start="00:00:13.216" video="mainVideo-sun-open" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Watching and participating""" start="00:00:16.000" video="mainVideo-sun-open" id="subtitle"]]</div>[[!template text="""The best parts of EmacsConf are the conversations.""" start="00:00:16.000" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""The wiki has a page on how to watch and participate,""" start="00:00:19.393" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""and I'll give you a quick overview as well.""" start="00:00:22.486" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""You can watch both streams at live.emacsconf.org""" start="00:00:24.910" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""using free and open source software.""" start="00:00:28.885" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""Using a streaming media player like mpv""" start="00:00:31.186" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""seems to be the best way to watch in terms of performance""" start="00:00:34.388" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""but there are also web-based players""" start="00:00:37.275" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""just in case that's all you've got.""" start="00:00:39.241" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""The schedule shows the General track on top""" start="00:00:41.378" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""and the Development track on the bottom,""" start="00:00:44.064" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""so you can see what else is going on.""" start="00:00:45.603" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""As you're watching the talks,""" start="00:00:47.820" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""you can refer to the schedule in another window.""" start="00:00:49.819" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""Hover over the boxes to see the times and titles,""" start="00:00:52.355" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""and click on the boxes in the schedule""" start="00:00:55.601" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""to jump to the talk's page for more details.""" start="00:00:57.614" video="mainVideo-sun-open" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Other schedule formats""" start="00:01:00.607" video="mainVideo-sun-open" id="subtitle"]]</div>[[!template text="""You can also get the schedule as an iCalendar file""" start="00:01:00.607" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""or as an Org file in different time zones.""" start="00:01:03.587" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""The Org file has some links to talk resources""" start="00:01:05.621" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""and might be handy as a starting point for your notes.""" start="00:01:08.255" video="mainVideo-sun-open" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""BigBlueButton""" start="00:01:10.601" video="mainVideo-sun-open" id="subtitle"]]</div>[[!template text="""Many talks will be followed by""" start="00:01:10.601" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""live Q&A web conferences with the speaker,""" start="00:01:12.145" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""which will be done in BigBlueButton or BBB.""" start="00:01:14.572" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""These are indicated with a solid border on the schedule""" start="00:01:17.734" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""and by Q&A: BBB on the schedule page.""" start="00:01:20.819" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""You can join the web conference room""" start="00:01:24.001" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""by clicking on the BBB link""" start="00:01:25.901" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""on the schedule page or the talk's webpage.""" start="00:01:27.467" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""Then you can ask your questions yourself when the Q&A starts.""" start="00:01:30.176" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""To improve performance, please keep your webcam off""" start="00:01:34.215" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""and stay muted until it's your turn to talk.""" start="00:01:37.211" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""If you don't like Javascript,""" start="00:01:39.890" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""you can still ask questions via IRC""" start="00:01:41.692" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""and the hosts can read them out for you.""" start="00:01:43.643" video="mainVideo-sun-open" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""On and off the stream""" start="00:01:46.036" video="mainVideo-sun-open" id="subtitle"]]</div>[[!template text="""We're probably going to automatically switch""" start="00:01:46.036" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""between talks and Q&A sessions,""" start="00:01:47.895" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""so the transitions on the stream might be a little sudden.""" start="00:01:49.483" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""People in the BigBlueButton room""" start="00:01:52.897" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""can continue the conversation""" start="00:01:54.439" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""even after the talk moves off-stream,""" start="00:01:55.862" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""and you can also reach out to the speakers""" start="00:01:58.220" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""using the contact information on the talk page.""" start="00:02:00.271" video="mainVideo-sun-open" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Etherpad and IRC""" start="00:02:03.217" video="mainVideo-sun-open" id="subtitle"]]</div>[[!template text="""Other talks will have Q&A via Etherpad or IRC,""" start="00:02:03.217" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""depending on what the speakers prefer.""" start="00:02:06.302" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""This is indicated in the schedule with a dashed border""" start="00:02:08.542" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""and on the schedule page as well.""" start="00:02:11.380" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""The schedule pages have quick shortcuts so that you can""" start="00:02:13.510" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""find out more about talks, open the Etherpads,""" start="00:02:16.543" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""and join the Q&A sessions.""" start="00:02:19.053" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""The watch page has more tips""" start="00:02:21.204" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""on how to make the most of Q&A.""" start="00:02:23.366" video="mainVideo-sun-open" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Etherpad""" start="00:02:25.456" video="mainVideo-sun-open" id="subtitle"]]</div>[[!template text="""If you can, please add notes and ask questions""" start="00:02:25.456" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""in the Etherpad for the talk.""" start="00:02:28.330" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""That makes it easier""" start="00:02:30.133" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""for everyone to share their notes,""" start="00:02:31.598" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""and speakers and hosts can read the questions from there.""" start="00:02:33.130" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""We'll copy the notes to the talk pages afterwards.""" start="00:02:36.355" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""We have one pad for each talk,""" start="00:02:39.622" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""so you can follow the links to get to the next one""" start="00:02:41.497" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""or go back to the schedule and get the link from there.""" start="00:02:43.773" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""If you have general feedback about""" start="00:02:46.828" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""the conference itself, please put it in""" start="00:02:48.423" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""pad.emacsconf.org/emacsconf.""" start="00:02:50.668" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""You can also use this as a community message board""" start="00:02:54.593" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""for things like Help Wanted.""" start="00:02:57.550" video="mainVideo-sun-open" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""IRC""" start="00:02:59.440" video="mainVideo-sun-open" id="subtitle"]]</div>[[!template text="""Internet Relay Chat or IRC can be another great way""" start="00:02:59.440" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""to be part of lots of conversations.""" start="00:03:02.800" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""You can use chat.emacsconf.org to join the IRC channels""" start="00:03:05.176" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""through your web browser.""" start="00:03:09.451" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""The tabs on the left can help you""" start="00:03:11.046" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""switch between the different channels.""" start="00:03:12.857" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""There's #emacsconf-gen for the General track""" start="00:03:14.892" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""and #emacsconf-dev for the Development track.""" start="00:03:17.611" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""If you need to reach us, you can join #emacsconf-org""" start="00:03:20.490" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""or e-mail emacsconf-org-private@gnu.org.""" start="00:03:23.957" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""You can use #emacsconf for hallway conversations.""" start="00:03:29.475" video="mainVideo-sun-open" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Captions""" start="00:03:32.778" video="mainVideo-sun-open" id="subtitle"]]</div>[[!template text="""Once again, we're going to be streaming with open captions""" start="00:03:32.778" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""for most of the talks this year, thanks to our speakers and""" start="00:03:35.588" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""captioning volunteers.""" start="00:03:38.480" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""The captioned talks are indicated on the schedule,""" start="00:03:39.896" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""and with any luck, we'll be posting""" start="00:03:42.523" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""videos and transcripts on talk pages""" start="00:03:44.313" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""shortly after the talks start.""" start="00:03:46.124" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""If you need additional accommodations, please let us know""" start="00:03:47.884" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""in #emacsconf-org and we'll see""" start="00:03:51.070" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""if we can make things happen.""" start="00:03:54.017" video="mainVideo-sun-open" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""status.emacsconf.org""" start="00:03:55.238" video="mainVideo-sun-open" id="subtitle"]]</div>[[!template text="""If something goes down, we'll update status.emacsconf.org.""" start="00:03:55.238" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""If it doesn't look like we've noticed yet,""" start="00:03:59.918" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""please let us know in the #emacsconf-org IRC channel,""" start="00:04:01.744" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""where we will be quietly panicking.""" start="00:04:05.263" video="mainVideo-sun-open" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Guidelines for conduct""" start="00:04:07.282" video="mainVideo-sun-open" id="subtitle"]]</div>[[!template text="""In all of these conversations, please keep in mind""" start="00:04:07.282" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""our guidelines for conduct.""" start="00:04:09.705" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""You can find them on the wiki,""" start="00:04:11.239" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""and they basically boil down to: please be nice. Thank you!""" start="00:04:12.620" video="mainVideo-sun-open" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Videos""" start="00:04:16.020" video="mainVideo-sun-open" id="subtitle"]]</div>[[!template text="""If all goes well, the prerecorded talks and transcripts""" start="00:04:16.020" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""should be available from the talk pages""" start="00:04:18.892" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""shortly after they start playing,""" start="00:04:20.538" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""and we'll post the recordings of live talks""" start="00:04:22.039" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""and Q&A sessions within the next few weeks.""" start="00:04:24.144" video="mainVideo-sun-open" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Let's get started!""" start="00:04:26.776" video="mainVideo-sun-open" id="subtitle"]]</div>[[!template text="""All right, let's get going.""" start="00:04:26.776" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""You might see Leo Vivier, Corwin Brust,""" start="00:04:28.248" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""and Amin Bandali hosting the various tracks.""" start="00:04:31.215" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""I will run around mostly backstage,""" start="00:04:33.954" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""and you'll probably meet us in the closing remarks.""" start="00:04:35.768" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""That's also where we get to thank""" start="00:04:37.794" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""all the people and organizations""" start="00:04:39.244" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""who make EmacsConf possible.""" start="00:04:40.660" video="mainVideo-sun-open" id="subtitle"]]
+[[!template text="""Let's have fun at EmacsConf!""" start="00:04:42.550" video="mainVideo-sun-open" id="subtitle"]]
+
+</div>
+
+Captioner: sachac
+
+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)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2025/info/sun-open-before.md b/2025/info/sun-open-before.md
new file mode 100644
index 00000000..288e7cf8
--- /dev/null
+++ b/2025/info/sun-open-before.md
@@ -0,0 +1,34 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+
+The following image shows where the talk is in the schedule for Sun 2025-12-07. Solid lines show talks with Q&A via BigBlueButton. Dashed lines show talks with Q&A via IRC or Etherpad.<div class="schedule-in-context schedule-svg-container" data-slug="sun-open">
+<svg width="700" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Schedule for Sunday</title> <rect width="700" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="/2025/talks/sun-open" title="Sunday opening remarks" data-slug="sun-open"> <title> 9:00- 9:10 Sunday opening remarks</title> <rect stroke-width="3" x="0" y="15" opacity="0.8" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(11,73)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-open</text></g></a> <a href="/2025/talks/modern" title="Some problems of modernizing Emacs" data-slug="modern"> <title> 9:10- 9:30 Some problems of modernizing Emacs</title> <rect x="13" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(38,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> modern</text></g></a> <a href="/2025/talks/reader" title="An introduction to the Emacs Reader" data-slug="reader"> <title> 9:40-10:15 An introduction to the Emacs Reader</title> <rect x="54" y="15" opacity="0.5" width="48" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(100,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> reader</text></g></a> <a href="/2025/talks/weights" title="Weightlifting tracking with Emacs on Android" data-slug="weights"> <title> 10:35-10:45 Weightlifting tracking with Emacs on Android</title> <rect x="130" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(141,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> weights</text></g></a> <a href="/2025/talks/completion" title="corfu+yasnippet: Easier than I thought" data-slug="completion"> <title> 11:05-11:25 corfu+yasnippet: Easier than I thought</title> <rect x="171" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(196,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> completion</text></g></a> <a href="/2025/talks/zettelkasten" title="Zettelkasten for regular Emacs hackers" data-slug="zettelkasten"> <title> 1:00- 1:25 Zettelkasten for regular Emacs hackers</title> <rect x="329" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(361,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> zettelkasten</text></g></a> <a href="/2025/talks/hyperboleqa" title="Questions and answers to help you fly with Hyperbole" data-slug="hyperboleqa"> <title> 1:45- 2:15 Questions and answers to help you fly with Hyperbole</title> <rect x="391" y="15" opacity="0.5" width="41" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(430,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperboleqa</text></g></a> <a href="/2025/talks/gardening" title="Gardening in Emacs: A Windows user's tale of tending, tweaking, and triumph" data-slug="gardening"> <title> 2:15- 2:35 Gardening in Emacs: A Windows user's tale of tending, tweaking, and triumph</title> <rect x="432" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(457,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gardening</text></g></a> <a href="/2025/talks/bookclub-tapas" title="Bookclub tapas" data-slug="bookclub-tapas"> <title> 2:45- 3:20 Bookclub tapas</title> <rect x="473" y="15" opacity="0.5" width="48" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(519,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> bookclub-tapas</text></g></a> <a href="/2025/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"> <title> 3:40- 3:50 Sunday closing remarks</title> <rect x="549" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(560,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-close</text></g></a> <g transform="translate(0,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(82,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(164,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(247,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(329,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(411,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(494,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(576,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(658,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 5 PM</text></g></svg>
+</div>
+
+[[!toc ]]
+Format: 5-min talk ; Q&A: Etherpad <https://pad.emacsconf.org/2025-sun-open>
+Etherpad: <https://pad.emacsconf.org/2025-sun-open>
+Discuss on IRC: [#emacsconf-gen](https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen)
+Status: Q&A open for participation
+<div>Times in different time zones:</div><div class="times" start="2025-12-07T14:00:00Z" end="2025-12-07T14:10:00Z"><div class="conf-time">Sunday, Dec 7 2025, ~9:00 AM - 9:10 AM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Sunday, Dec 7 2025, ~8:00 AM - 8:10 AM CST (US/Central)<br />Sunday, Dec 7 2025, ~7:00 AM - 7:10 AM MST (US/Mountain)<br />Sunday, Dec 7 2025, ~6:00 AM - 6:10 AM PST (US/Pacific)<br />Sunday, Dec 7 2025, ~2:00 PM - 2:10 PM UTC <br />Sunday, Dec 7 2025, ~3:00 PM - 3:10 PM CET (Europe/Paris)<br />Sunday, Dec 7 2025, ~4:00 PM - 4:10 PM EET (Europe/Athens)<br />Sunday, Dec 7 2025, ~7:30 PM - 7:40 PM IST (Asia/Kolkata)<br />Sunday, Dec 7 2025, ~10:00 PM - 10:10 PM +08 (Asia/Singapore)<br />Sunday, Dec 7 2025, ~11:00 PM - 11:10 PM JST (Asia/Tokyo)</div></div><div><strong><a href="/2025/watch/gen/">Find out how to watch and participate</a></strong></div>
+
+
+
+
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-sun-open"><source src="https://media.emacsconf.org/2025/emacsconf-2025-sun-open--sunday-opening-remarks--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2025/captions/emacsconf-2025-sun-open--sunday-opening-remarks--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2025/captions/emacsconf-2025-sun-open--sunday-opening-remarks--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="mainVideo-sun-open" data="""
+00:00.000 Tracks
+00:16.000 Watching and participating
+01:00.607 Other schedule formats
+01:10.601 BigBlueButton
+01:46.036 On and off the stream
+02:03.217 Etherpad and IRC
+02:25.456 Etherpad
+02:59.440 IRC
+03:32.778 Captions
+03:55.238 status.emacsconf.org
+04:07.282 Guidelines for conduct
+04:16.020 Videos
+04:26.776 Let's get started!
+
+"""]]<div></div>Duration: 04:51 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2025-sun-open">Open Etherpad</a></li><li><a href="https://pad.emacsconf.org/2025-sun-open">Open public Q&A</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-sun-open--sunday-opening-remarks--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-sun-open--sunday-opening-remarks--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-sun-open--sunday-opening-remarks--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-sun-open--sunday-opening-remarks--main.opus">Download --main.opus (2.5MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-sun-open--sunday-opening-remarks--main.vtt">Download --main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-sun-open--sunday-opening-remarks--main.webm">Download --main.webm (15MB)</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2025/info/sun-open-nav.md b/2025/info/sun-open-nav.md
new file mode 100644
index 00000000..32ce1916
--- /dev/null
+++ b/2025/info/sun-open-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by time: <a href="/2025/talks/sat-close">Saturday closing remarks / open session</a>
+Next by time: <a href="/2025/talks/modern">Some problems of modernizing Emacs</a>
+Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2025/watch/gen">Watch</a></strong>
+</div>
diff --git a/2025/info/swanky-after.md b/2025/info/swanky-after.md
new file mode 100644
index 00000000..53c84315
--- /dev/null
+++ b/2025/info/swanky-after.md
@@ -0,0 +1,387 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<div class="transcript transcript-mainVideo"><a name="swanky-mainVideo-transcript"></a><h1>Transcript</h1>
+
+[[!template text="""Hello everyone, I'm Scott""" start="00:00:00.880" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""and I'll be talking about Swanky Python,""" start="00:00:02.440" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""which is a development environment for Python""" start="00:00:04.240" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""based on Emacs' Slime package.""" start="00:00:06.200" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""So what is that and why might you find it interesting?""" start="00:00:08.320" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""SLIME is the Superior Lisp Interaction Mode for Emacs.""" start="00:00:11.680" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""It's an Emacs package for developing Common Lisp,""" start="00:00:15.280" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""and it's a bit different from the way we develop most languages""" start="00:00:18.000" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""in that you're always connected""" start="00:00:20.680" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""to a running instance of your application,""" start="00:00:22.600" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""and you kind of build up your application, piece by piece,""" start="00:00:25.400" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""modifying one expression at a time""" start="00:00:27.960" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""without ever having to restart your application.""" start="00:00:30.400" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""So why might you want to develop this way?""" start="00:00:34.560" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""One advantage is that you can get a faster feedback loop.""" start="00:00:36.680" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""For some kinds of software, it doesn't make a big difference.""" start="00:00:40.040" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""Like, if you're developing a web backend""" start="00:00:42.600" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""where all state is stored externally in a database,""" start="00:00:43.920" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""then you can have a file watcher""" start="00:00:48.040" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""that just restarts the whole Python process""" start="00:00:50.280" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""whenever you make any edit,""" start="00:00:52.800" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""and you're not really losing anything,""" start="00:00:54.640" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""because all the state is stored outside the Python process""" start="00:00:56.160" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""in a database. So it works great.""" start="00:00:59.680" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""But for other kinds of software, like""" start="00:01:01.720" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""let's say you're developing an Emacs package""" start="00:01:03.560" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""or a video game,""" start="00:01:05.560" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""then it can be a real pain to restart the application""" start="00:01:07.280" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""and recreate the state it was in before""" start="00:01:10.320" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""just to test the effect of each edit you want to make.""" start="00:01:12.680" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""Another advantage is the runtime introspection you have available.""" start="00:01:17.280" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""So since you're always connected""" start="00:01:21.360" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""to a running instance of your application,""" start="00:01:22.680" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""you can inspect the values of variables,""" start="00:01:25.000" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""you can trace functions, and all sorts of other information""" start="00:01:27.800" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""to help you understand your application better.""" start="00:01:30.960" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""And lastly, it's just a lot of fun to develop this way,""" start="00:01:36.280" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""or at least I find it fun developing with SLIME,""" start="00:01:39.920" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""so I wrote a SLIME backend for Python""" start="00:01:43.520" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""so I could have more fun when I'm coding in Python.""" start="00:01:45.760" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""As for the name swanky-python, within SLIME,""" start="00:01:48.800" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""swank is the name of the Common Lisp backend""" start="00:01:52.600" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""that runs within your Common Lisp application""" start="00:01:56.280" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""and connects to Emacs. So I'm not too creative.""" start="00:01:59.200" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""swanky-python is just a swank implementation in Python.""" start="00:02:02.920" video="mainVideo-swanky" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Demo""" start="00:02:08.000" video="mainVideo-swanky" id="subtitle"]]</div>[[!template text="""So let's see it in action. So we started up with M-x slime.""" start="00:02:08.000" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""And what that does is it starts a Python process,""" start="00:02:15.280" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""starts swanky-python within it, and connects to it from Emacs.""" start="00:02:19.640" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""And you can configure how exactly it runs Python.""" start="00:02:25.040" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""Or you can start swanky python manually""" start="00:02:29.040" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""within a Python application running on a remote server""" start="00:02:32.480" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""and forward the port locally""" start="00:02:35.120" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""and connect to it in Emacs, from Emacs remotely.""" start="00:02:36.614" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""Within the README, there's more documentation""" start="00:02:40.920" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""on other ways to start it.""" start="00:02:43.240" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""But just M-x slime is the basic way that works most of the time.""" start="00:02:45.520" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""So within the REPL, the first thing you'll notice is that""" start="00:02:52.160" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""REPL outputs are clickable buttons,""" start="00:02:55.760" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""what SLIME calls presentations.""" start="00:02:58.840" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""So you can do things like inspect them.""" start="00:03:02.120" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""And for each presentation, in the Python backend,""" start="00:03:04.760" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""it holds on to the reference to the object.""" start="00:03:09.760" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""So for an int, it's not too interesting,""" start="00:03:12.480" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""but let's do a more complex object like a file.""" start="00:03:14.560" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""Then we can inspect the file.""" start="00:03:20.240" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""We can describe it, which will bring up documentation""" start="00:03:22.520" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""on that class. We can use it in further expressions""" start="00:03:26.600" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""like if we copy it, it will use the actual Python object""" start="00:03:33.760" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""in this expression.""" start="00:03:39.432" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""We can assign it to a variable.""" start="00:03:43.400" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""SLIME uses presentations everywhere""" start="00:03:48.320" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""that a Python object would be displayed.""" start="00:03:51.000" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""So instead of just their string representation,""" start="00:03:53.240" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""when you have a backtrace on an exception,""" start="00:03:56.560" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""or you... within the inspector or anywhere else really,""" start="00:04:00.240" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""anywhere that the string representation""" start="00:04:03.966" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""of an object would be displayed,""" start="00:04:06.020" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""it displays a presentation that you can go on to""" start="00:04:07.941" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""inspect, reuse, or send to the REPL and so on.""" start="00:04:10.741" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""One useful utility function is pp for print presentation.""" start="00:04:14.961" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""We haven't imported it yet.""" start="00:04:23.040" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""So when we get a name error exception""" start="00:04:25.120" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""and SLIME sees that that name is available for import somewhere,""" start="00:04:29.160" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""it'll give us the option of importing it.""" start="00:04:33.880" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""Since it's available for import from multiple modules,""" start="00:04:38.280" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""it'll prompt us for which one we want to import it from.""" start="00:04:40.600" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""We want to import it from swanky-python,""" start="00:04:43.920" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""not from the standard library.""" start="00:04:45.520" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""Then it will print a presentation of that object.""" start="00:04:48.480" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""Within the REPL, this is not really useful""" start="00:04:52.600" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""because all REPL outputs are already presentations.""" start="00:04:55.560" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""But I use this now whenever I would use print debugging,""" start="00:04:58.920" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""just whenever I would use insert print statements in my program""" start="00:05:02.800" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""to see what's going on, I have it print a presentation""" start="00:05:05.640" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""because that way I can go back and inspect it later,""" start="00:05:08.400" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""copy it to the REPL and further manipulate it and so on.""" start="00:05:11.200" video="mainVideo-swanky" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Inspector""" start="00:05:16.600" video="mainVideo-swanky" id="subtitle"]]</div>[[!template text="""Next up, let's look at the inspector more.""" start="00:05:16.600" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""If we go back and inspect the file object,""" start="00:05:20.120" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""you can write custom inspector views""" start="00:05:25.580" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""for different kinds of objects.""" start="00:05:27.240" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""So far, I just have a couple. One for sequences,""" start="00:05:28.840" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""one for mappings, and one for every other kind of object.""" start="00:05:32.520" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""Like if we inspect a mapping, there's a shortcut""" start="00:05:36.920" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""inspect last result, which is what I normally use""" start="00:05:45.980" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""to open the inspector. Then we see the values,""" start="00:05:48.640" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""and each value in the inspector is a presentation""" start="00:05:52.380" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""that we can go on to inspect, and so on.""" start="00:05:56.320" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""Let's go back to inspecting the file object.""" start="00:05:58.420" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""Again, we can inspect each of the values,""" start="00:06:03.980" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""we can copy them back to the REPL and so on.""" start="00:06:06.040" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""It just displays all the attributes for the class""" start="00:06:10.240" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""and their values.""" start="00:06:13.840" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""We can configure what attributes we want to show.""" start="00:06:15.400" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""There's a transient menu where we can toggle""" start="00:06:18.120" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""if we want to show private attributes, dunder attributes,""" start="00:06:21.120" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""doc strings, so on, or everything,""" start="00:06:23.360" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""which is a bit much to show by default.""" start="00:06:26.440" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""So we'll reset it to the default.""" start="00:06:28.520" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""In the future, I want to add graphical inspector views""" start="00:06:33.720" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""for different kinds of objects, and also support""" start="00:06:37.840" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""showing plots in both the inspector and the REPL,""" start="00:06:40.680" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""but that's future work I haven't started on yet.""" start="00:06:43.000" video="mainVideo-swanky" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Evaluating Python""" start="00:06:47.720" video="mainVideo-swanky" id="subtitle"]]</div>[[!template text="""Let's look at the different options for evaluating Python.""" start="00:06:47.720" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""So we can evaluate a whole file.""" start="00:06:52.000" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""We can evaluate just a class.""" start="00:06:59.100" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""We can evaluate just the method we're working on.""" start="00:07:00.640" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""We can evaluate a Python statement,""" start="00:07:03.480" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""and it will show the result in an overlay next to the cursor.""" start="00:07:06.360" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""We can select some code and just evaluate the highlighted region.""" start="00:07:11.840" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""We can sync the REPL to the active file.""" start="00:07:17.920" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""So now everything we evaluate in the REPL will be in the""" start="00:07:24.800" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""context of the eval_demo module.""" start="00:07:27.320" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""We can also set the module that the REPL is in.""" start="00:07:29.640" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""We can go back to main.""" start="00:07:35.400" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""But let's go back to the eval_demo module for now.""" start="00:07:38.280" video="mainVideo-swanky" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Updating""" start="00:07:43.680" video="mainVideo-swanky" id="subtitle"]]</div>[[!template text="""One useful thing is when you update a class or a function,""" start="00:07:43.680" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""it updates old instances of that class or function.""" start="00:07:49.800" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""So right now, f.bar is foobar.""" start="00:07:54.540" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""But if we edit that class, it will actually edit the code""" start="00:07:58.480" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""for the old instance of that class.""" start="00:08:03.720" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""And that's provided by code I copied""" start="00:08:05.240" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""from IPython's autoreload extension.""" start="00:08:07.600" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""It helps when you're trying to develop in Python""" start="00:08:12.080" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""without having to restart the Python process""" start="00:08:14.640" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""whenever you make a change.""" start="00:08:16.499" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""Auto reload in Python is a big topic""" start="00:08:20.040" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""that I don't really have time to go into here,""" start="00:08:22.600" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""but right now it is more limited""" start="00:08:26.520" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""than what is done in Common Lisp.""" start="00:08:29.480" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""Like for example, if you have a data class in Python""" start="00:08:32.560" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""and you add a new field to the data class,""" start="00:08:35.760" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""it won't automatically update old instances""" start="00:08:37.620" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""of the data class with a new field.""" start="00:08:41.040" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""So there's more that needs to be done with that,""" start="00:08:43.400" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""but I am perhaps naively optimistic""" start="00:08:46.600" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""that Python's runtime is quite dynamic and flexible,""" start="00:08:50.360" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""and that I can fully implement autoreload in Python,""" start="00:08:54.280" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""but there's still work to be done,""" start="00:08:59.800" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""and it's a big topic to go into.""" start="00:09:02.120" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""Next up, let's look at the backtrace buffer.""" start="00:09:05.420" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""But as it is right now, autoreload is actually useful.""" start="00:09:08.960" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""I mostly develop in Python without having to restart the process""" start="00:09:12.840" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""and without running into issues from old state""" start="00:09:16.960" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""that hasn't been updated properly.""" start="00:09:19.600" video="mainVideo-swanky" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Backtraces""" start="00:09:22.900" video="mainVideo-swanky" id="subtitle"]]</div>[[!template text="""So if we go on to look at the backtrace buffer,""" start="00:09:22.900" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""whenever we get an exception in Python...""" start="00:09:26.000" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""Let's go back to it.""" start="00:09:32.820" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""Whenever we get an exception, it will...""" start="00:09:37.080" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""let's change the code so that it actually""" start="00:09:41.420" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""gets an exception...""" start="00:09:43.699" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""we will get an interactive backtrace buffer""" start="00:09:49.966" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""where we can browse the source code for the different stack frames""" start="00:09:52.520" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""and the local variables within the stack frames,""" start="00:09:57.600" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""which are all presentations that we can inspect and so on.""" start="00:10:00.200" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""We can also open a REPL in the context of any stack frame.""" start="00:10:04.340" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""Or we can, when we go to the source for a given stack frame,""" start="00:10:10.620" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""we can select some Python code and evaluate it""" start="00:10:16.440" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""within the context of that stack frame.""" start="00:10:20.360" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""One major limitation compared to SLIME for Common Lisp""" start="00:10:25.960" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""is that in Common Lisp, you have the option to""" start="00:10:30.700" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""restart or resume execution from a given stack frame""" start="00:10:33.760" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""after an exception happens, where in Python,""" start="00:10:38.160" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""what we have right now is pretty much equivalent to""" start="00:10:42.440" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""the postmortem debugger.""" start="00:10:45.800" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""You can view the state that the call stack was in""" start="00:10:47.160" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""at the time of the exception,""" start="00:10:50.840" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""but you can't actually resume execution,""" start="00:10:51.960" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""which you often might want to do,""" start="00:10:55.660" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""because when you're coding in a dynamic language,""" start="00:10:57.560" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""you're going to get runtime errors.""" start="00:10:59.920" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""So if you're writing a script that does like some sort of""" start="00:11:01.480" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""long-running computation or processes a ton of files""" start="00:11:04.120" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""and gets an exception parsing one file halfway through,""" start="00:11:08.000" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""normally you'd have to fix the script, and then rerun it""" start="00:11:11.940" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""and have it process all the same files all over again,""" start="00:11:16.920" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""and lose a bunch of time for every bug you run into""" start="00:11:19.760" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""and fix you have to make.""" start="00:11:23.840" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""So right now we've got a kind of mediocre workaround""" start="00:11:24.880" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""which is you can add the restart decorator to a function""" start="00:11:28.680" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""and then... where in the case of a script""" start="00:11:34.020" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""processing a bunch of files,""" start="00:11:37.240" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""you would add the restart decorator to the function""" start="00:11:38.880" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""that processes a single file.""" start="00:11:41.800" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""You'd add it to the function""" start="00:11:43.600" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""that represents kind of the smallest unit of work""" start="00:11:45.440" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""that might fail with an exception,""" start="00:11:47.880" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""Then, when you get an exception,""" start="00:11:50.220" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""you can actually edit the function.""" start="00:11:54.360" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""Like, if we edit it so it doesn't throw an error,""" start="00:11:57.480" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""and then we can resume execution,""" start="00:12:01.020" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""then it will return from foo using the""" start="00:12:07.200" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""the new version of baz,""" start="00:12:12.800" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""without having to run the script from the beginning again.""" start="00:12:15.041" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""So in the example of a script that processes a bunch of files,""" start="00:12:18.560" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""that would let you,""" start="00:12:22.380" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""as you run into files that cause an exception,""" start="00:12:24.300" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""fix your code to deal with it""" start="00:12:27.620" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""and resume execution without having to restart the script""" start="00:12:29.080" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""from the beginning.""" start="00:12:31.881" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""But this is obviously a pretty terrible hack,""" start="00:12:33.081" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""having to add the restart decorator to the function.""" start="00:12:36.121" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""I would like it to be able to restart from any function.""" start="00:12:38.841" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""without needing the decorator, as you can in Common Lisp,""" start="00:12:46.740" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""but I think that will require patching CPython""" start="00:12:49.632" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""and I really have no idea how to do that.""" start="00:12:54.032" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""So if you do know anything about CPython internals""" start="00:12:56.580" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""and are interested in helping, please reach out.""" start="00:13:00.532" video="mainVideo-swanky" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""pydumpling""" start="00:13:03.721" video="mainVideo-swanky" id="subtitle"]]</div>[[!template text="""Another feature we have with the backtrace buffer is""" start="00:13:03.721" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""there's this library called PyDumpling""" start="00:13:07.120" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""which can serialize a traceback and store it to a file.""" start="00:13:09.080" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""So you can use PyDumpling with your applications running in""" start="00:13:14.660" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""production to serialize a traceback""" start="00:13:17.860" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""whenever they have an exception and save it to a file.""" start="00:13:21.240" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""Then you can transfer the file locally""" start="00:13:24.900" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""and load it into your local Emacs with slime-py-load-pydumpling.""" start="00:13:28.600" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""This will load the same backtrace buffer,""" start="00:13:38.860" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""and you see all the same local variables""" start="00:13:41.840" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""at the time of the exception.""" start="00:13:44.560" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""You can inspect them and get a REPL""" start="00:13:45.760" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""in the context of the stack frame.""" start="00:13:48.200" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""Well, this will only work for variables""" start="00:13:51.000" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""that can be serialized with pickle.""" start="00:13:54.200" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""Or actually, the library uses dill,""" start="00:13:57.620" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""which can serialize a bit more than pickle can.""" start="00:13:59.520" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""But yeah so this can help you inspect and debug errors""" start="00:14:03.040" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""for applications running in production remotely""" start="00:14:10.201" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""that you don't want to have SLIME connected to 24-7.""" start="00:14:12.881" video="mainVideo-swanky" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Documentation browser""" start="00:14:20.060" video="mainVideo-swanky" id="subtitle"]]</div>[[!template text="""Next up, let's look at the documentation browser.""" start="00:14:20.060" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""We can bring up documentation for any module,""" start="00:14:24.860" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""and all this information is generated""" start="00:14:29.920" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""from runtime introspection,""" start="00:14:33.080" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""from the doc strings for the module""" start="00:14:35.000" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""and the classes and so on.""" start="00:14:37.080" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""So you won't see documentation for libraries""" start="00:14:39.160" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""that you don't have actually loaded""" start="00:14:41.880" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""into your running Python process.""" start="00:14:43.160" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""Then you can go browse to classes.""" start="00:14:45.940" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""It'll show all the attributes, their methods, and so on.""" start="00:14:50.120" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""By each method to the right, it will show""" start="00:14:54.720" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""the base class where the method was originally inherited from.""" start="00:14:57.240" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""You can also bring up a screen with all the Python packages""" start="00:15:02.600" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""that are installed, and browse that with imenu,""" start="00:15:09.080" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""and bring up information on any package and so on.""" start="00:15:14.440" video="mainVideo-swanky" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Thread view""" start="00:15:20.360" video="mainVideo-swanky" id="subtitle"]]</div>[[!template text="""Next up, let's take a look at the thread view.""" start="00:15:20.360" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""So let's run this and then bring up the thread view""" start="00:15:28.500" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""and this will show information on all running threads.""" start="00:15:31.840" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""You can configure it to refresh after a given interval,""" start="00:15:35.560" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""like every second, but I don't have that set up right now,""" start="00:15:38.800" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""so I have to manually refresh it.""" start="00:15:41.960" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""Probably the most useful thing is that""" start="00:15:45.660" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""you can bring up a backtrace for any thread""" start="00:15:47.640" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""which won't pause the thread or anything,""" start="00:15:49.740" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""but will just give you the call stack""" start="00:15:51.760" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""at the time you requested the backtrace.""" start="00:15:53.880" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""You can again view the stack frames, local variables,""" start="00:15:55.880" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""open a REPL in the context of the thread, and so on.""" start="00:15:59.200" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""There's also a viewer for async tasks,""" start="00:16:04.140" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""but I'm not going to demo that right now,""" start="00:16:07.840" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""because for that to work, you have to start swanky-python""" start="00:16:10.000" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""after the async event loop has started,""" start="00:16:14.160" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""from within the same thread.""" start="00:16:16.600" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""If you go to the project readme,""" start="00:16:18.520" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""there's a demo of how to use the async task viewer""" start="00:16:20.280" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""with a fastapi project.""" start="00:16:23.920" video="mainVideo-swanky" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Tracing functions""" start="00:16:27.440" video="mainVideo-swanky" id="subtitle"]]</div>[[!template text="""Next up, let's look at tracing functions.""" start="00:16:27.440" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""So here we got some random error,""" start="00:16:33.880" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""because this is still very much a work in progress.""" start="00:16:36.280" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""But it looks like it executed""" start="00:16:39.880" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""correctly this time.""" start="00:16:42.360" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""So now let's mark the fibonacci function""" start="00:16:43.200" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""for tracing and execute it.""" start="00:16:47.566" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""We can see, every time the function is called,""" start="00:16:50.240" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""all its arguments and return values.""" start="00:16:56.080" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""Again, there are presentations that we can inspect and so on.""" start="00:16:58.240" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""But let's inspect a more complex object, like a file object.""" start="00:17:02.900" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""If we trace the count_lines function and run that code,""" start="00:17:06.080" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""then we can inspect the file it was passed, or the file object.""" start="00:17:11.340" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""One pitfall is that in Python, objects are mutable.""" start="00:17:15.320" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""So in the trace buffer, the string representation""" start="00:17:21.040" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""that's printed is the string representation""" start="00:17:25.560" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""at the time it was passed to the function.""" start="00:17:27.880" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""But when we go to inspect it,""" start="00:17:31.220" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""we're inspecting the object as it is right now,""" start="00:17:32.640" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""which can be different than it was at the time""" start="00:17:34.920" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""the function saw it. So for this file object, for example,""" start="00:17:37.640" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""it's closed now, when it was open at the time""" start="00:17:41.560" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""the function used it.""" start="00:17:44.280" video="mainVideo-swanky" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""AI integrations""" start="00:17:47.800" video="mainVideo-swanky" id="subtitle"]]</div>[[!template text="""Next up, let's look at AI integrations.""" start="00:17:47.800" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""So if you're used to SLIME with Common Lisp,""" start="00:17:50.480" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""Emacs actually has a built-in AI that can help with the transition.""" start="00:17:54.520" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""So it's just a joke, I actually really like Python.""" start="00:18:09.480" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""And for more serious AI integrations,""" start="00:18:14.560" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""I have some ideas for the future""" start="00:18:18.120" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""but I haven't implemented anything yet.""" start="00:18:19.960" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""I think right now, people are mostly passing source code to LLMs""" start="00:18:21.920" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""but since we're embedded in the Python process at runtime,""" start="00:18:27.320" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""we have a lot of more information available,""" start="00:18:32.680" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""like maybe we can trace all calls to functions,""" start="00:18:35.640" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""and when we have a bug,""" start="00:18:39.440" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""we can feed the trace to the LLM,""" start="00:18:41.800" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""and the LLM can point out maybe""" start="00:18:46.480" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""when this function was called with these arguments,""" start="00:18:48.720" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""its return value doesn't make sense,""" start="00:18:51.960" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""so maybe that's the root cause of your bug.""" start="00:18:53.880" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""If you have any ideas of potential LLM or AI integrations,""" start="00:18:55.680" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""let me know. I'm happy to discuss.""" start="00:19:02.360" video="mainVideo-swanky" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""LSP-type features""" start="00:19:06.000" video="mainVideo-swanky" id="subtitle"]]</div>[[!template text="""Next up, let's look at standard LSP-type features.""" start="00:19:06.000" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""So we've got completions. It's fuzzy completions right now,""" start="00:19:09.920" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""so it's showing everything with a PR in the name.""" start="00:19:14.440" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""We can bring up documentation for each one.""" start="00:19:16.320" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""When we start calling a method in the minibuffer at the bottom""" start="00:19:21.780" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""it'll show the signature.""" start="00:19:26.760" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""There's some refactoring available.""" start="00:19:28.860" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""We can extract a function or variable,""" start="00:19:33.720" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""or rename something,""" start="00:19:37.400" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""like, let's rename fib to fib2,""" start="00:19:39.500" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""and it will rename all the uses of it.""" start="00:19:42.920" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""All these features are based on Jedi,""" start="00:19:47.480" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""which is the Python library used by IPython.""" start="00:19:49.760" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""But as it is right now,""" start="00:19:55.400" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""if you want the most complete Python development experience""" start="00:19:57.000" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""in Emacs, I'd probably recommend using LSP""" start="00:20:02.040" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""for everything LSP can do, and then just using swanky-python""" start="00:20:05.580" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""for the object inspector and backtrace buffer,""" start="00:20:10.440" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""and the interactive features it has""" start="00:20:13.680" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""that an LSP can't provide.""" start="00:20:15.360" video="mainVideo-swanky" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Wrapping up""" start="00:20:18.032" video="mainVideo-swanky" id="subtitle"]]</div>[[!template text="""And that's it really.""" start="00:20:18.032" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""Shortly we'll have questions and answers""" start="00:20:23.340" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""as part of EmacsConf, and later on,""" start="00:20:25.866" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""if you have any questions, ideas, or issues""" start="00:20:28.800" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""feel free to reach out over email""" start="00:20:31.200" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""or create an issue on the repository.""" start="00:20:34.640" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""I should probably warn you,""" start="00:20:38.000" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""if you want to try out the project:""" start="00:20:39.332" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""so far I'm probably the only user of it""" start="00:20:41.120" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""and I've only tested it on my own Emacs setup,""" start="00:20:45.280" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""so it's quite likely you'll run into issues""" start="00:20:48.280" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""trying to get it installed and working.""" start="00:20:50.840" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""But if you do run into problems, please reach out,""" start="00:20:53.480" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""let me know. I'm happy to help and try and fix them.""" start="00:20:56.120" video="mainVideo-swanky" id="subtitle"]]
+[[!template text="""So that's it. Thanks for listening.""" start="00:20:59.280" video="mainVideo-swanky" id="subtitle"]]
+
+</div>
+
+Captioner: sachac
+
+Questions or comments? Please e-mail [sczi@disroot.org](mailto:sczi@disroot.org?subject=Comment%20for%20EmacsConf%202023%20swanky%3A%20Swanky%20Python%3A%20Interactive%20development%20for%20Python)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2025/info/swanky-before.md b/2025/info/swanky-before.md
new file mode 100644
index 00000000..a374e6d9
--- /dev/null
+++ b/2025/info/swanky-before.md
@@ -0,0 +1,19 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+
+The following image shows where the talk is in the schedule for Sat 2025-12-06. Solid lines show talks with Q&A via BigBlueButton. Dashed lines show talks with Q&A via IRC or Etherpad.<div class="schedule-in-context schedule-svg-container" data-slug="swanky">
+<svg width="700" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Schedule for Saturday</title> <rect width="700" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="/2025/talks/sat-open" title="Saturday opening remarks" data-slug="sat-open"> <title> 9:00- 9:10 Saturday opening remarks</title> <rect x="0" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(11,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="/2025/talks/org-babel" title="Making Org-Babel reactive" data-slug="org-babel"> <title> 9:10- 9:20 Making Org-Babel reactive</title> <rect x="13" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(24,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> org-babel</text></g></a> <a href="/2025/talks/reference" title="Emacs as a fully-fledged reference manager" data-slug="reference"> <title> 9:30- 9:55 Emacs as a fully-fledged reference manager</title> <rect x="41" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(73,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> reference</text></g></a> <a href="/2025/talks/gmail" title="org-gmail: A deep integration of Gmail into your Org Mode" data-slug="gmail"> <title> 10:15-10:40 org-gmail: A deep integration of Gmail into your Org Mode</title> <rect x="102" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(134,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gmail</text></g></a> <a href="/2025/talks/gnus" title="Reading and writing emails in GNU Emacs with Gnus" data-slug="gnus"> <title> 10:50-11:15 Reading and writing emails in GNU Emacs with Gnus</title> <rect x="150" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(182,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gnus</text></g></a> <a href="/2025/talks/latex" title="LaTeX export in org-mode: the overhaul" data-slug="latex"> <title> 11:25-11:45 LaTeX export in org-mode: the overhaul</title> <rect x="199" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(224,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> latex</text></g></a> <a href="/2025/talks/calc" title="Basic Calc functionality for engineering or electronics" data-slug="calc"> <title> 1:00- 1:25 Basic Calc functionality for engineering or electronics</title> <rect x="329" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(361,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> calc</text></g></a> <a href="/2025/talks/blee-lcnt" title="Blee-LCNT: An Emacs-centered content production and self-publication framework" data-slug="blee-lcnt"> <title> 1:35- 2:15 Blee-LCNT: An Emacs-centered content production and self-publication framework</title> <rect x="377" y="15" opacity="0.5" width="54" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(429,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> blee-lcnt</text></g></a> <a href="/2025/talks/greader" title="GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence" data-slug="greader"> <title> 2:35- 2:40 GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence</title> <rect x="459" y="15" opacity="0.5" width="6" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(463,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> greader</text></g></a> <a href="/2025/talks/open-mic" title="Open session" data-slug="open-mic"> <title> 2:50- 3:40 Open session</title> <rect x="480" y="15" opacity="0.5" width="68" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(546,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> open-mic</text></g></a> <a href="/2025/talks/sat-close" title="Saturday closing remarks / open session" data-slug="sat-close"> <title> 4:00- 4:10 Saturday closing remarks / open session</title> <rect x="576" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(587,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="/2025/talks/schemacs" title="One year progress update Schemacs (formerly Gypsum)" data-slug="schemacs"> <title> 9:30- 9:55 One year progress update Schemacs (formerly Gypsum)</title> <rect x="41" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(73,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> schemacs</text></g></a> <a href="/2025/talks/juicemacs" title="Juicemacs: exploring speculative JIT compilation for ELisp in Java" data-slug="juicemacs"> <title> 10:15-10:35 Juicemacs: exploring speculative JIT compilation for ELisp in Java</title> <rect x="102" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(127,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> juicemacs</text></g></a> <a href="/2025/talks/swanky" title="Swanky Python: Interactive development for Python" data-slug="swanky"> <title> 10:45-11:10 Swanky Python: Interactive development for Python</title> <rect stroke-width="3" x="144" y="75" opacity="0.8" width="34" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(176,133)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> swanky</text></g></a> <a href="/2025/talks/python" title="Interactive Python programming in Emacs" data-slug="python"> <title> 11:20-11:40 Interactive Python programming in Emacs</title> <rect x="192" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(217,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <a href="/2025/talks/llm" title="Emacs, editors, and LLM driven workflows" data-slug="llm"> <title> 1:00- 1:25 Emacs, editors, and LLM driven workflows</title> <rect x="329" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(361,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> llm</text></g></a> <a href="/2025/talks/private-ai" title="Emacs and private AI: a great match" data-slug="private-ai"> <title> 1:45- 2:05 Emacs and private AI: a great match</title> <rect x="391" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(416,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> private-ai</text></g></a> <a href="/2025/talks/commonlisp" title="Common Lisp images communicating like-a-human through shared Emacs slime and eev" data-slug="commonlisp"> <title> 2:25- 2:55 Common Lisp images communicating like-a-human through shared Emacs slime and eev</title> <rect x="446" y="75" opacity="0.5" width="41" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(485,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> commonlisp</text></g></a> <a href="/2025/talks/graphics" title="Modern Emacs/Elisp hardware/software accelerated graphics" data-slug="graphics"> <title> 3:05- 3:30 Modern Emacs/Elisp hardware/software accelerated graphics</title> <rect x="500" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(532,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> graphics</text></g></a> <g transform="translate(0,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(82,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(164,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(247,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(329,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(411,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(494,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(576,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(658,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 5 PM</text></g></svg>
+</div>
+
+[[!toc ]]
+Format: 22-min talk ; Q&A: ask questions via Etherpad/IRC; we'll e-mail the speaker and post answers on this wiki page after the conference Etherpad: <https://pad.emacsconf.org/2025-swanky>
+Etherpad: <https://pad.emacsconf.org/2025-swanky>
+Discuss on IRC: [#emacsconf-dev](https://chat.emacsconf.org/?join=emacsconf,emacsconf-dev)
+Status: Q&A finished, IRC and pad will be archived on this page
+
+
+
+
+
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-swanky"><source src="https://media.emacsconf.org/2025/emacsconf-2025-swanky--swanky-python-interactive-development-for-python--scott-zimmermann--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2025/captions/emacsconf-2025-swanky--swanky-python-interactive-development-for-python--scott-zimmermann--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 21:03 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2025-swanky">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-swanky--swanky-python-interactive-development-for-python--scott-zimmermann--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-swanky--swanky-python-interactive-development-for-python--scott-zimmermann--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-swanky--swanky-python-interactive-development-for-python--scott-zimmermann--main.opus">Download --main.opus (18MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-swanky--swanky-python-interactive-development-for-python--scott-zimmermann--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-swanky--swanky-python-interactive-development-for-python--scott-zimmermann--main.webm">Download --main.webm (56MB)</a></li><li><a href="https://youtu.be/fy0ofT1I54U">View on Youtube</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2025/info/swanky-nav.md b/2025/info/swanky-nav.md
new file mode 100644
index 00000000..710a4414
--- /dev/null
+++ b/2025/info/swanky-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by time: <a href="/2025/talks/juicemacs">Juicemacs: exploring speculative JIT compilation for ELisp in Java</a>
+Next by time: <a href="/2025/talks/gnus">Reading and writing emails in GNU Emacs with Gnus</a>
+Track: <span class="sched-track Development">Development</span> - <strong><a href="https://emacsconf.org/2025/watch/dev">Watch</a></strong>
+</div>
diff --git a/2025/info/weights-after.md b/2025/info/weights-after.md
new file mode 100644
index 00000000..d2f9ed7d
--- /dev/null
+++ b/2025/info/weights-after.md
@@ -0,0 +1,7 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+Questions or comments? Please e-mail [zacromero@posteo.com](mailto:zacromero@posteo.com?subject=Comment%20for%20EmacsConf%202023%20weights%3A%20Weightlifting%20tracking%20with%20Emacs%20on%20Android)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2025/info/weights-before.md b/2025/info/weights-before.md
new file mode 100644
index 00000000..134f24c3
--- /dev/null
+++ b/2025/info/weights-before.md
@@ -0,0 +1,19 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+
+The following image shows where the talk is in the schedule for Sun 2025-12-07. Solid lines show talks with Q&A via BigBlueButton. Dashed lines show talks with Q&A via IRC or Etherpad.<div class="schedule-in-context schedule-svg-container" data-slug="weights">
+<svg width="700" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Schedule for Sunday</title> <rect width="700" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="/2025/talks/sun-open" title="Sunday opening remarks" data-slug="sun-open"> <title> 9:00- 9:10 Sunday opening remarks</title> <rect x="0" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(11,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-open</text></g></a> <a href="/2025/talks/modern" title="Some problems of modernizing Emacs" data-slug="modern"> <title> 9:10- 9:30 Some problems of modernizing Emacs</title> <rect x="13" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(38,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> modern</text></g></a> <a href="/2025/talks/reader" title="An introduction to the Emacs Reader" data-slug="reader"> <title> 9:40-10:15 An introduction to the Emacs Reader</title> <rect x="54" y="15" opacity="0.5" width="48" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(100,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> reader</text></g></a> <a href="/2025/talks/weights" title="Weightlifting tracking with Emacs on Android" data-slug="weights"> <title> 10:35-10:45 Weightlifting tracking with Emacs on Android</title> <rect stroke-width="3" x="130" y="15" opacity="0.8" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(141,73)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> weights</text></g></a> <a href="/2025/talks/completion" title="corfu+yasnippet: Easier than I thought" data-slug="completion"> <title> 11:05-11:25 corfu+yasnippet: Easier than I thought</title> <rect x="171" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(196,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> completion</text></g></a> <a href="/2025/talks/zettelkasten" title="Zettelkasten for regular Emacs hackers" data-slug="zettelkasten"> <title> 1:00- 1:25 Zettelkasten for regular Emacs hackers</title> <rect x="329" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(361,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> zettelkasten</text></g></a> <a href="/2025/talks/hyperboleqa" title="Questions and answers to help you fly with Hyperbole" data-slug="hyperboleqa"> <title> 1:45- 2:15 Questions and answers to help you fly with Hyperbole</title> <rect x="391" y="15" opacity="0.5" width="41" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(430,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperboleqa</text></g></a> <a href="/2025/talks/gardening" title="Gardening in Emacs: A Windows user's tale of tending, tweaking, and triumph" data-slug="gardening"> <title> 2:15- 2:35 Gardening in Emacs: A Windows user's tale of tending, tweaking, and triumph</title> <rect x="432" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(457,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gardening</text></g></a> <a href="/2025/talks/bookclub-tapas" title="Bookclub tapas" data-slug="bookclub-tapas"> <title> 2:45- 3:20 Bookclub tapas</title> <rect x="473" y="15" opacity="0.5" width="48" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(519,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> bookclub-tapas</text></g></a> <a href="/2025/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"> <title> 3:40- 3:50 Sunday closing remarks</title> <rect x="549" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(560,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-close</text></g></a> <g transform="translate(0,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(82,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(164,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(247,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(329,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(411,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(494,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(576,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(658,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 5 PM</text></g></svg>
+</div>
+
+[[!toc ]]
+Format: 10-min talk ; Q&A: BigBlueButton conference room <https://media.emacsconf.org/2025/current/bbb-weights.html> Etherpad: <https://pad.emacsconf.org/2025-weights>
+Etherpad: <https://pad.emacsconf.org/2025-weights>
+Discuss on IRC: [#emacsconf-gen](https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen)
+Status: Q&A open for participation
+<div>Times in different time zones:</div><div class="times" start="2025-12-07T15:35:00Z" end="2025-12-07T15:45:00Z"><div class="conf-time">Sunday, Dec 7 2025, ~10:35 AM - 10:45 AM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Sunday, Dec 7 2025, ~9:35 AM - 9:45 AM CST (US/Central)<br />Sunday, Dec 7 2025, ~8:35 AM - 8:45 AM MST (US/Mountain)<br />Sunday, Dec 7 2025, ~7:35 AM - 7:45 AM PST (US/Pacific)<br />Sunday, Dec 7 2025, ~3:35 PM - 3:45 PM UTC <br />Sunday, Dec 7 2025, ~4:35 PM - 4:45 PM CET (Europe/Paris)<br />Sunday, Dec 7 2025, ~5:35 PM - 5:45 PM EET (Europe/Athens)<br />Sunday, Dec 7 2025, ~9:05 PM - 9:15 PM IST (Asia/Kolkata)<br />Sunday, Dec 7 2025, ~11:35 PM - 11:45 PM +08 (Asia/Singapore)<br />Monday, Dec 8 2025, ~12:35 AM - 12:45 AM JST (Asia/Tokyo)</div></div><div><strong><a href="/2025/watch/gen/">Find out how to watch and participate</a></strong></div>
+
+
+
+
+<div class="vid mainVideo"><div></div><div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2025-weights">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2025/current/bbb-weights.html">Open public Q&A</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-weights--weightlifting-tracking-with-emacs-on-android--zachary-romero--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-weights--weightlifting-tracking-with-emacs-on-android--zachary-romero--intro.webm">Download --intro.webm</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2025/info/weights-nav.md b/2025/info/weights-nav.md
new file mode 100644
index 00000000..3984baec
--- /dev/null
+++ b/2025/info/weights-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by time: <a href="/2025/talks/reader">An introduction to the Emacs Reader</a>
+Next by time: <a href="/2025/talks/completion">corfu+yasnippet: Easier than I thought</a>
+Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2025/watch/gen">Watch</a></strong>
+</div>
diff --git a/2025/info/writing-after.md b/2025/info/writing-after.md
new file mode 100644
index 00000000..f2f66379
--- /dev/null
+++ b/2025/info/writing-after.md
@@ -0,0 +1,7 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+Questions or comments? Please e-mail [jeremy@jeremyfriesen.com](mailto:jeremy@jeremyfriesen.com?subject=Comment%20for%20EmacsConf%202023%20writing%3A%20A%20writing%20day%20in%20the%20life%20with%20Org-Mode)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2025/info/writing-before.md b/2025/info/writing-before.md
new file mode 100644
index 00000000..d9c35617
--- /dev/null
+++ b/2025/info/writing-before.md
@@ -0,0 +1,13 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+[[!toc ]]
+Format: 20-min talk cancelled
+Discuss on IRC: [#emacsconf](https://chat.emacsconf.org/?join=emacsconf)
+Status: Sorry, this talk has been cancelled
+
+
+
+
+
+
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2025/info/writing-nav.md b/2025/info/writing-nav.md
new file mode 100644
index 00000000..f413029d
--- /dev/null
+++ b/2025/info/writing-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by time: <a href="/2025/talks/gnus">Reading and writing emails in GNU Emacs with Gnus</a>
+Next by time: <a href="/2025/talks/bookclub-tapas">Bookclub tapas</a>
+Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2025/watch/gen">Watch</a></strong>
+</div>
diff --git a/2025/info/zettelkasten-after.md b/2025/info/zettelkasten-after.md
new file mode 100644
index 00000000..d7556a30
--- /dev/null
+++ b/2025/info/zettelkasten-after.md
@@ -0,0 +1,516 @@
+<!-- Automatically generated by emacsconf-publish-after-page -->
+
+
+<div class="transcript transcript-mainVideo"><a name="zettelkasten-mainVideo-transcript"></a><h1>Transcript</h1>
+
+
+<div class="transcript-heading">[[!template new="1" text="""Introduction""" start="00:00:01.400" video="mainVideo-zettelkasten" id="subtitle"]]</div>[[!template text="""Hello there, fellow basement dwellers.""" start="00:00:01.400" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""I'm Christian and you are watching &quot;""" start="00:00:03.939" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""Zettelkasten for Regular Emacs Hackers,&quot;""" start="00:00:05.959" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""my Emacs Conference 2025 talk submission.""" start="00:00:08.520" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""In this presentation,""" start="00:00:12.921" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""I'll be showing you a couple of things""" start="00:00:14.001" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""about Zettelkasten, very basic mechanics and habits""" start="00:00:15.701" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""that you can pick up and implement in Emacs,""" start="00:00:18.702" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""the most malleable of all environments,""" start="00:00:21.623" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""to make a thinking environment happen in your life""" start="00:00:24.443" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""that stays with you potentially forever.""" start="00:00:27.824" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""The subtitle &quot;For Regular Emacs Hackers&quot; implies at least""" start="00:00:32.435" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""the possibility of irregular Emacs hackers""" start="00:00:36.056" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""and regular Emacs non-hackers, so the target audience here""" start="00:00:38.357" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""is people who are comfortable tweaking their setup""" start="00:00:42.499" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""when they run into issues and use Emacs to write,""" start="00:00:45.120" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""no matter if it's prose or code.""" start="00:00:47.981" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""So that's regular Emacs hacking.""" start="00:00:49.981" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""You don't need to be an irregular Emacs hacker,""" start="00:00:53.632" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""for example, being a core maintainer or whatever.""" start="00:00:55.615" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""You just need to be a normal user""" start="00:00:58.760" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""who also modifies the setup.""" start="00:01:01.244" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""However, you should probably not be an Emacs non-hacker.""" start="00:01:06.680" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""Or maybe you shouldn't stay an Emacs non-hacker,""" start="00:01:10.302" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""someone who is not tweaking their setup ever.""" start="00:01:12.782" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""So, if you just open your application""" start="00:01:16.003" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""to write with a double click,""" start="00:01:18.821" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""and it happens to be Emacs, this may not be for you,""" start="00:01:20.241" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""but you ultimately be the judge there.""" start="00:01:23.284" video="mainVideo-zettelkasten" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Advocating Freedoms""" start="00:01:25.534" video="mainVideo-zettelkasten" id="subtitle"]]</div>[[!template text="""It is my sacred duty to, of course,""" start="00:01:25.534" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""advocate all the essential freedoms during this presentation.""" start="00:01:28.745" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""These are the following.""" start="00:01:32.666" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""You shall not be shackled by a proprietary tool.""" start="00:01:34.508" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""(You shall be shackled by Emacs. (Which is free software.))""" start="00:01:37.390" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""You shall also not be shackled by an esoteric method""" start="00:01:40.792" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""that turns out to be a grift""" start="00:01:44.115" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""where you need to visit annual workshops, walk on broken glass""" start="00:01:45.276" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""and stuff to be a true &quot;&quot;knower&quot;&quot;.""" start="00:01:47.898" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""You shall be empowered to do great things""" start="00:01:50.400" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""for the rest of your life after this session alone.""" start="00:01:52.881" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""This is not a sales pitch.""" start="00:01:55.884" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""Finally, you should also not be shackled""" start="00:01:58.871" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""by whichever sources of information you rely on in the future.""" start="00:02:00.652" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""You shall be free to think and explore new ideas,""" start="00:02:05.040" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""ideally forever, in an environment you built to your liking,""" start="00:02:07.854" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""without the degrading web searches and the dead internet""" start="00:02:12.176" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""getting in your way. No libraries, no dead trees.""" start="00:02:15.797" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""It's you and your knowledge base""" start="00:02:18.858" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""that can truly produce magnificent things.""" start="00:02:21.539" video="mainVideo-zettelkasten" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""What Is This About?""" start="00:02:29.680" video="mainVideo-zettelkasten" id="subtitle"]]</div>[[!template text="""So what is this about? In the teaser text for this session,""" start="00:02:29.680" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""I brought up that when people talk about Emacs""" start="00:02:33.587" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""pulling in everything that people do on their computer,""" start="00:02:36.149" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""it's usually things they used other software for in the past.""" start="00:02:38.932" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""Like email, chat, playing music, browsing the web,""" start="00:02:42.615" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""managing tasks, you know, stuff like that.""" start="00:02:46.058" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""We don't have a good blueprint for thinking environments though.""" start="00:02:48.820" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""So it's not a trivial task,""" start="00:02:51.762" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""just port this or that to Emacs""" start="00:02:53.264" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""and then you'll be happy and productive.""" start="00:02:54.745" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""That's different from doing your emails""" start="00:02:56.706" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""or task management or writing in Emacs,""" start="00:02:58.200" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""where we have a lot of experience with existing software""" start="00:03:00.329" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""to adapt and deviate from, where we can essentially""" start="00:03:02.951" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""port the task to Emacs. We can practice to think,""" start="00:03:06.414" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""purposefully and productively, on complex things""" start="00:03:09.856" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""over long periods of time""" start="00:03:12.999" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""when we create bespoke environments that help with that.""" start="00:03:14.460" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""The first assumption is this:""" start="00:03:19.060" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""Writing is very important to form complex thought.""" start="00:03:20.468" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""Without writing, you won't be able to cross""" start="00:03:24.059" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""a certain complexity threshold.""" start="00:03:26.280" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""Thinking in your head alone without any externalization""" start="00:03:28.761" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""makes you prone to loops, repetitions,""" start="00:03:31.922" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""and worst of all: jumps.""" start="00:03:34.262" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""Jumps that get you to a point,""" start="00:03:36.143" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""but not backed by reason or argument.""" start="00:03:38.563" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""So you and your future and others cannot follow.""" start="00:03:40.724" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""Written words direct thought.""" start="00:03:46.502" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""The linearization or sequence-making of thoughts""" start="00:03:48.363" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""frames your next idea. That's the same for reading,""" start="00:03:51.985" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""which enables you to pick up existing ideas""" start="00:03:55.307" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""and continue to write about them later.""" start="00:03:57.308" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""So for &quot;good thinking&quot;, writing, reading,""" start="00:04:00.250" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""and writing is mandatory.""" start="00:04:02.811" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""Emacs is good at showing text to read.""" start="00:04:05.073" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""It's good at processing keyboard inputs to write.""" start="00:04:07.194" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""So let's go. Let's set up an environment within Emacs""" start="00:04:09.635" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""to make this thinking thing happen.""" start="00:04:13.177" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""I'll walk you through some mechanics""" start="00:04:16.320" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""of the Zettelkasten machine and habits for you,""" start="00:04:18.060" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""dear thinker and regular Emacs hacker.""" start="00:04:20.882" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""And for your reference, highlight these things""" start="00:04:22.901" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""as I present them in the bottom left corner of the screen.""" start="00:04:25.886" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""So working with Zettelkasten as a thinking environment""" start="00:04:30.469" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""only requires very simple mechanics.""" start="00:04:33.191" video="mainVideo-zettelkasten" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Write - Essential Mechanic""" start="00:04:36.534" video="mainVideo-zettelkasten" id="subtitle"]]</div>[[!template text="""First one is to write. I mentioned this.""" start="00:04:36.534" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""It could be one large text file, could be many small ones.""" start="00:04:39.640" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""We use the power of Emacs and small files because Emacs is cool,""" start="00:04:42.489" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""and individual files put boundaries around ideas""" start="00:04:46.360" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""that force you to decide what goes where.""" start="00:04:49.355" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""Most importantly though, write like you mean it.""" start="00:04:52.663" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""The principle of &quot;garbage in and garbage out&quot; holds.""" start="00:04:55.687" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""You don't need to use your novelist voice when taking notes,""" start="00:04:58.511" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""but it also shouldn't be shorthand only,""" start="00:05:01.375" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""so that your future you has an easy time""" start="00:05:04.138" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""reading and digesting what you wrote.""" start="00:05:06.795" video="mainVideo-zettelkasten" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Connect - Essential Mechanic""" start="00:05:09.601" video="mainVideo-zettelkasten" id="subtitle"]]</div>[[!template text="""Next mechanic, which is also essential, is to connect.""" start="00:05:09.601" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""We think in associations.""" start="00:05:13.525" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""Connect notes to capture the associations that come to mind""" start="00:05:15.000" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""and that you want the reader, which is the future you,""" start="00:05:18.640" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""to make. Traveling a path of connections""" start="00:05:20.917" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""indirectly via tags or keywords""" start="00:05:24.075" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""and directly with links""" start="00:05:25.836" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""can feel like reading an essay you make up as you go.""" start="00:05:27.097" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""That's where connections show their power.""" start="00:05:30.721" video="mainVideo-zettelkasten" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Correct - Essential Habit""" start="00:05:34.268" video="mainVideo-zettelkasten" id="subtitle"]]</div>[[!template text="""The next essential habit is to read and correct""" start="00:05:34.268" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""and reconnect as you go.""" start="00:05:38.261" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""You spend time and effort at the writing stage,""" start="00:05:40.181" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""you are the primary audience,""" start="00:05:42.312" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""so do your past self a favor and read what you wrote.""" start="00:05:43.793" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""And then as you read it, make it better.""" start="00:05:46.896" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""Make it better, continuously make things better""" start="00:05:50.479" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""and capture new ideas as they come up as you read.""" start="00:05:52.341" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""And things you can only now remember""" start="00:05:55.223" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""because you learned about things in the meantime.""" start="00:05:57.785" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""You'll also get better at this whole thing with practice.""" start="00:06:00.928" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""So improve old notes when you find them lacking in detail,""" start="00:06:03.430" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""their tone pretentious, their mere existence""" start="00:06:05.867" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""an insult to your intelligence.""" start="00:06:08.576" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""Pay [knocks on table] attention [knocks again]""" start="00:06:10.896" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""to pain points in using notes.""" start="00:06:11.736" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""Yes, I knocked on my desk to emphasize.""" start="00:06:13.640" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""And fix things on the fly.""" start="00:06:16.560" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""From this principle follows""" start="00:06:18.602" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""a lot of common practices and tips.""" start="00:06:19.803" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""This principle truly is essential.""" start="00:06:22.064" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""Too long and you didn't read it?""" start="00:06:24.126" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""Add a summary at the beginning.""" start="00:06:25.547" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""You can't understand what you wrote a year ago?""" start="00:06:27.228" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""Do your best to rewrite it in your own words.""" start="00:06:30.090" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""It only gets worse if you wait longer.""" start="00:06:32.512" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""Can't find anything in the mess?""" start="00:06:35.100" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""Collect links to what you could find""" start="00:06:37.116" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""in a new &quot;meta&quot; note so next time,""" start="00:06:39.138" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""you have a navigational help.""" start="00:06:41.660" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""This practice will form the basis""" start="00:06:43.241" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""for structure notes, maps, and overviews,""" start="00:06:44.862" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""which we will come to later.""" start="00:06:46.734" video="mainVideo-zettelkasten" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Design for Use - Habit""" start="00:06:49.434" video="mainVideo-zettelkasten" id="subtitle"]]</div>[[!template text="""The next habit, non-essential though,""" start="00:06:49.434" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""is to create notes with intent to use them.""" start="00:06:52.072" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""It's one thing to write about facts, capture information,""" start="00:06:55.333" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""but all this is just collecting stuff.""" start="00:06:58.134" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""It's another thing altogether to write about""" start="00:07:01.355" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""a train of thought, about an argument you found compelling,""" start="00:07:03.616" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""about a model to understand the world, or yourself,""" start="00:07:06.557" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""in a better way. So collect to remember,""" start="00:07:09.859" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""but work in your Zettelkasten to think.""" start="00:07:12.900" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""What does that even mean, though?""" start="00:07:16.261" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""Recreate how intriguing books""" start="00:07:18.222" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""lay out their premises and arguments, for example.""" start="00:07:19.823" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""First this, then that, also that supports the premise,""" start="00:07:21.804" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""and so on. That's the structure of an argument.""" start="00:07:24.886" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""You can recreate it in list form, as a graph,""" start="00:07:27.408" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""you can draw and import the image, whatever.""" start="00:07:30.550" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""The structure of that argument is one thing,""" start="00:07:33.501" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""and the details, like the evidence for each claim,""" start="00:07:36.113" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""can be separate things.""" start="00:07:38.334" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""These can become their own sub-networks over time.""" start="00:07:40.000" video="mainVideo-zettelkasten" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Create Structure - Mechanic""" start="00:07:43.920" video="mainVideo-zettelkasten" id="subtitle"]]</div>[[!template text="""To facilitate all that,""" start="00:07:43.920" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""you will be needing to create structures.""" start="00:07:45.471" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""You've connected notes, so links already leave trails""" start="00:07:47.932" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""to traverse between your notes.""" start="00:07:50.613" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""Structures can emerge from these with a sheer volume,""" start="00:07:52.520" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""but they also can be designed by you to be""" start="00:07:55.930" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""navigational hubs of similar shape and form over time.""" start="00:07:58.617" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""Patterns like that reduce confusion""" start="00:08:02.259" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""and improve feeling at home""" start="00:08:04.241" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""and finding your way around, so that's worth investing in.""" start="00:08:05.801" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""For example, use outlines for complex topics.""" start="00:08:09.223" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""Tables of contents of a book, for example,""" start="00:08:13.405" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""that you love and processed in great detail.""" start="00:08:15.248" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""Just recreate the table of contents,""" start="00:08:17.320" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""the nested structure of it, in your notes,""" start="00:08:19.493" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""and then you have something to hang your future thoughts onto.""" start="00:08:23.038" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""Another example is a pro/contra table or list""" start="00:08:28.197" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""to discuss opposing facets and perspective of a thing.""" start="00:08:31.518" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""Another example would be models or metaphors""" start="00:08:35.479" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""like the iceberg model""" start="00:08:37.831" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""where you point out something has a hidden depth to it""" start="00:08:39.061" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""or the metaphor of a tree to model a thing""" start="00:08:42.182" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""as a branching and growing idea.""" start="00:08:44.382" video="mainVideo-zettelkasten" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Start in the Zettelkasten - Mechanic""" start="00:08:47.968" video="mainVideo-zettelkasten" id="subtitle"]]</div>[[!template text="""Another habit which is also not essential""" start="00:08:47.968" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""is to start in your Zettelkasten.""" start="00:08:50.435" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""Starting in your Zettelkasten removes the cost of deciding""" start="00:08:52.455" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""what goes in there and what doesn't.""" start="00:08:55.256" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""It gets you moving and up to speed""" start="00:08:57.517" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""with the method and the tool much easier.""" start="00:08:59.637" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""Importing stuff later into the Zettelkasten""" start="00:09:03.278" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""can feel like a chore,""" start="00:09:05.079" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""but starting the work you need to do anyway in it?""" start="00:09:06.199" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""That reduces the mental hurdle.""" start="00:09:09.260" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""As a regular Emacs hacker,""" start="00:09:11.561" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""you'll eventually develop your own tools""" start="00:09:12.922" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""to make initial exploration smoother over time,""" start="00:09:14.583" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""like do you start in a particular place""" start="00:09:17.304" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""or just create a new note from scratch somewhere.""" start="00:09:19.545" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""You won't know this until you experience this stuff""" start="00:09:22.520" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""for a while and try different things.""" start="00:09:25.027" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""So don't worry and be open for change.""" start="00:09:26.868" video="mainVideo-zettelkasten" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Start with a Link - Mechanic""" start="00:09:32.401" video="mainVideo-zettelkasten" id="subtitle"]]</div>[[!template text="""The final habit, also non-essential, is to start with a link""" start="00:09:32.401" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""and not with the creation of a new file.""" start="00:09:36.370" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""Start with a link, create the file later.""" start="00:09:38.452" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""This avoids orphaned notes.""" start="00:09:40.513" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""Orphaned notes are those no others are linking to.""" start="00:09:42.474" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""To these you can only get with a full-text search""" start="00:09:45.897" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""or maybe by accident when you browse your notes,""" start="00:09:48.458" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""but there is no orderly way to get to them.""" start="00:09:51.300" video="mainVideo-zettelkasten" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Recap""" start="00:09:54.568" video="mainVideo-zettelkasten" id="subtitle"]]</div>[[!template text="""To recap: Write. Don't be sloppy.""" start="00:09:54.568" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""Put in effort early to get faster at this.""" start="00:09:58.534" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""This is essential, because without putting effort""" start="00:10:00.601" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""into writing, you won't have anything to use.""" start="00:10:04.160" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""Connect and leave trails to navigate.""" start="00:10:08.134" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""That can tell a story when you traverse the trail later.""" start="00:10:10.501" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""This is essential because without connection,""" start="00:10:13.620" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""you will not get anywhere.""" start="00:10:16.541" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""Correct and improve things as you go.""" start="00:10:18.601" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""The last essential thing: well,""" start="00:10:20.301" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""don't worry about perfection, and then,""" start="00:10:21.840" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""be gentle to your past self.""" start="00:10:24.142" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""Adapt to what you learn along the way.""" start="00:10:25.803" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""It's essential, because without this attitude,""" start="00:10:27.977" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""you can easily get stuck in analysis paralysis,""" start="00:10:31.125" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""like where do I need to put this,""" start="00:10:33.746" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""or what would be the perfect way to phrase this.""" start="00:10:35.040" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""Design for use. This helps both finding your voice,""" start="00:10:37.368" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""and to have criteria for selecting""" start="00:10:40.734" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""what to spend time and effort on in the first place.""" start="00:10:42.820" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""It takes into account the opportunity cost""" start="00:10:45.234" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""of high quality work from writing and connecting.""" start="00:10:47.350" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""Create structures. You won't be able to scale""" start="00:10:50.251" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""and stay organized and find your way around""" start="00:10:53.334" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""without structures. You can practice this early""" start="00:10:55.877" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""and design structures deliberately,""" start="00:10:58.540" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""but it's also okay to ignore this for a while and wing it.""" start="00:11:00.600" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""So it's not marked essential,""" start="00:11:03.985" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""although it may hurt you sooner than later.""" start="00:11:05.747" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""The habit to start in the Zettelkasten?""" start="00:11:08.940" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""Well, do the work you need to do in a place""" start="00:11:10.892" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""that can pay back dividends""" start="00:11:13.794" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""on the effort you put in.""" start="00:11:15.480" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""That's powerful, but also not essential.""" start="00:11:16.716" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""You could just as well continue to write and think""" start="00:11:19.258" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""and scribble somewhere else,""" start="00:11:21.620" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""and then do the Zettelkasten importing stuff later.""" start="00:11:23.461" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""Start with a link.""" start="00:11:27.424" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""That's really useful practice,""" start="00:11:28.440" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""but more like a lifehack and not an essential habit.""" start="00:11:30.246" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""So you can also create new files from scratch""" start="00:11:33.207" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""for ideas that come up as they come up""" start="00:11:35.348" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""and then try to connect them later.""" start="00:11:38.050" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""Well, that's better than not writing at all, right?""" start="00:11:39.611" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""So if you look at this, you may ask yourself,""" start="00:11:42.732" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""why is this create structure thing a mechanic and not a habit?""" start="00:11:44.748" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""What's the difference? It seems kind of random.""" start="00:11:48.320" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""Well, do create structures as an imperative""" start="00:11:50.877" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""is a good habit, yes.""" start="00:11:53.919" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""Structures facilitate growth of the Zettelkasten""" start="00:11:55.280" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""and help you discover useful patterns""" start="00:11:57.982" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""and the things you care about.""" start="00:11:59.563" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""Patterns that work for you personally,""" start="00:12:00.680" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""which make navigation easier""" start="00:12:03.445" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""because they fit your personal expectations""" start="00:12:04.725" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""for what is and what is not.""" start="00:12:07.606" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""That's something for you to do. That's a process.""" start="00:12:10.587" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""But from the perspective of the Zettelkasten as a system,""" start="00:12:13.848" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""that's a mechanic or rather dynamic,""" start="00:12:18.149" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""the Zettelkasten grows organically.""" start="00:12:20.610" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""Thanks to your constant intervention and usage of course.""" start="00:12:23.150" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""That's how time passes in your Zettelkasten.""" start="00:12:25.311" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""That's how a process of transformation enters the system.""" start="00:12:27.632" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""The transformation affects the network.""" start="00:12:32.273" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""Every new or updated note,""" start="00:12:34.801" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""every new connection changes the network.""" start="00:12:36.256" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""The existing network then imposes demands""" start="00:12:38.558" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""for new stuff to fit in, slowly solidifying""" start="00:12:40.719" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""how things are organized to be perceived as orderly.""" start="00:12:43.680" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""This is calcifying.""" start="00:12:47.364" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""That's emergent creation of structure from use.""" start="00:12:49.085" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""Structure here is expectation for what could come next.""" start="00:12:52.327" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""On top of this interplay of emergent structure""" start="00:12:56.269" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""in your notes and processes""" start="00:12:58.650" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""that operate these constraints,""" start="00:13:00.191" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""you can design and influence and architect""" start="00:13:01.872" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""and have explicit structures and patterns,""" start="00:13:04.373" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""and therefore you can influence what is expected,""" start="00:13:06.874" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""what is unexpected and what fits""" start="00:13:09.634" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""and what needs to change to fit in.""" start="00:13:11.837" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""So the time you spend designing these things""" start="00:13:14.258" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""will influence how the Zettelkasten""" start="00:13:18.140" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""will behave in the future.""" start="00:13:20.301" video="mainVideo-zettelkasten" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Facilitate Growth""" start="00:13:22.034" video="mainVideo-zettelkasten" id="subtitle"]]</div>[[!template text="""To prepare for growth""" start="00:13:22.034" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""you will probably encounter thresholds along your journey.""" start="00:13:24.062" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""Like 1-10 notes, well,""" start="00:13:27.534" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""you can easily remember all of them.""" start="00:13:29.268" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""10-100, you will have forgotten some details,""" start="00:13:31.301" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""but will probably remember writing most of these notes""" start="00:13:34.334" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""in some way. 100-1000?""" start="00:13:37.068" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""Bad luck, you will have a hard time going through everything""" start="00:13:40.240" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""one by one to find what you have. You will have to rely on""" start="00:13:42.920" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""filtering results. For example, with a full text search,""" start="00:13:46.440" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""you will crave to use tags and keywords more""" start="00:13:50.088" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""to group notes into more manageable departments or collections.""" start="00:13:53.493" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""By this mark, search results produce way too many results.""" start="00:14:02.040" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""Popular tags become overcrowded,""" start="00:14:05.880" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""and you have the same problem you had in the last stage,""" start="00:14:07.968" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""but for each of these tags.""" start="00:14:10.070" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""So manual structures will take you through this.""" start="00:14:12.520" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""Anticipate growth pains by starting from structures.""" start="00:14:15.780" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""That's the recommendation here. Design your entry points""" start="00:14:18.920" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""into your current projects and research topics""" start="00:14:22.120" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""and interests as 'departments' of your Zettelkasten.""" start="00:14:24.168" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""Keep a list of, for example, 12 darlings,""" start="00:14:28.160" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""like Feynman did: a list of 12 things""" start="00:14:31.162" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""that you can check mechanically""" start="00:14:34.125" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""where you capture something new,""" start="00:14:35.486" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""and then you can see whether the newfound knowledge""" start="00:14:36.927" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""can also push one of your darling projects forward.""" start="00:14:39.890" video="mainVideo-zettelkasten" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Emacs demo""" start="00:14:46.140" video="mainVideo-zettelkasten" id="subtitle"]]</div>[[!template text="""Now, finally, let's get to the demonstration in Emacs.""" start="00:14:46.140" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""Here is a very minimal init file.""" start="00:14:50.223" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""I will share it with you in the show notes.""" start="00:14:52.335" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""And this is the Denote default configuration.""" start="00:14:55.739" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""Here I'm using the shortcut to create a new note""" start="00:14:59.540" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""immediately for this talk. And there you see.""" start="00:15:02.440" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""That's an empty new note. Here,""" start="00:15:08.595" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""sped up like two or three times the normal typing speed of me,""" start="00:15:10.497" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""is how I would process this very Emacs conference talk.""" start="00:15:16.421" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""The essential mechanics and habits, additional habits,""" start="00:15:21.786" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""mechanics, and then from there after I capture everything.""" start="00:15:25.669" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""Make sure that I have a reference.""" start="00:15:30.112" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""This is not a thought-out implementation in Emacs,""" start="00:15:32.054" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""so this is just plain text. Christian Tietze,""" start="00:15:36.137" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""Zettelkasten for Regular Emacs Hackers at the bottom.""" start="00:15:39.040" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""You can use reference management systems that you like,""" start="00:15:42.147" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""but I don't want to get into these details.""" start="00:15:46.586" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""Here I'm creating a note with the denote shortcut.""" start="00:15:49.234" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""Based on the selected text,""" start="00:15:54.368" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""I'm starting a link. This link is creating the note for me.""" start="00:15:56.400" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""It's also default Denote functionality""" start="00:16:01.100" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""and garbage in garbage out.""" start="00:16:04.641" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""I needed to edit the title because the selected text""" start="00:16:05.721" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""became the note title. Didn't want that.""" start="00:16:08.023" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""That was the abbreviation.""" start="00:16:10.044" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""Notice that the default configuration does not in fact""" start="00:16:13.336" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""include auto-fill-mode, so the lines get infinitely long.""" start="00:16:16.221" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""Looks a bit weird. Just garbage in, garbage out.""" start="00:16:20.528" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""Processing this from Wikipedia.""" start="00:16:23.654" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""So we have a detail note from this overview.""" start="00:16:27.921" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""So that's an overview with one link already.""" start="00:16:31.864" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""Starting from here, now I want to write more about my talk.""" start="00:16:34.266" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""And next we create structure, types of structures, etc.""" start="00:16:38.669" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""It creates a weird link, but I can edit this easily""" start="00:16:43.773" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""thanks to Emacs being so nice to work with.""" start="00:16:46.836" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""A couple of examples. I mentioned some of these""" start="00:16:51.923" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""in previous minutes of this conference talk,""" start="00:16:55.324" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""like position pair, one note for the pair,""" start="00:16:58.605" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""one note per pro and contra, table of contents,""" start="00:17:00.585" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""like lists of things you like,""" start="00:17:03.922" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""to talk about recreating a book's content,""" start="00:17:06.406" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""table of contents so you can process the book in detail,""" start="00:17:10.608" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""argument structures, I believe I mentioned these.""" start="00:17:14.309" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""Look at this up if you're not into arguments,""" start="00:17:16.840" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""but arguments are very well structured, usually.""" start="00:17:19.371" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""A table of things like two-dimensional table or grid.""" start="00:17:22.913" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""Graphics. You can also include graphics, images,""" start="00:17:26.134" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""and then write about these. And then there are metaphors.""" start="00:17:28.335" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""And into one metaphor that I'm presenting here,""" start="00:17:31.637" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""iceberg, black box, and then atom, molecule, and organism,""" start="00:17:33.798" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""I want to get into this. Atom, molecule, organism.""" start="00:17:37.539" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""That's a composition and recursion""" start="00:17:40.401" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""because I have Big Ideas there. Atom, smallest part;""" start="00:17:43.924" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""molecule, comprised of atoms;""" start="00:17:47.800" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""and organism is comprised of molecules.""" start="00:17:49.568" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""Different level of analysis. Because this is irreducible.""" start="00:17:51.969" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""In fact, if you have no clue about reducibility,""" start="00:17:56.433" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""irreducibility -- that doesn't mean much to you? --""" start="00:17:59.155" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""but look this up. You can go very deep""" start="00:18:02.197" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""with this kind of stuff. It's basically that if you""" start="00:18:05.979" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""decompose organs into atoms,""" start="00:18:10.618" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""you cannot get back to the organs.""" start="00:18:12.523" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""You just have a bunch of atoms. There's information loss,""" start="00:18:14.126" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""more or less.""" start="00:18:17.073" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""Here you see that I create a new thing at the end""" start="00:18:19.880" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""so that I can write about Denote. The tool doesn't matter,""" start="00:18:24.247" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""but when you use Emacs, use Denote because, well, why?""" start="00:18:26.950" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""Let's get into this. Fix the link.""" start="00:18:31.835" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""These are good reasons to use Denote.""" start="00:18:35.458" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""Denote is very simple. Denote has a couple of sane defaults.""" start="00:18:37.280" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""That makes life easier. Backlinks.""" start="00:18:44.380" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""We will see a backlink view at the end.""" start="00:18:47.079" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""I have to create a couple of things.""" start="00:18:51.141" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""I'm copying the source code there, the Elisp source,""" start="00:18:52.398" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""so that you can see, hey, this is just an Org Mode file.""" start="00:18:55.965" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""You can style it to your liking""" start="00:19:01.668" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""and then you can even execute the code if you want.""" start="00:19:03.630" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""Very powerful. Create notes as links first to avoid orphans.""" start="00:19:06.752" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""Forward link again.""" start="00:19:13.295" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""At least I wanted to create a forward link.""" start="00:19:14.676" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""I pressed the wrong shortcut.""" start="00:19:16.016" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""But anyway, I can fix this easily.""" start="00:19:17.037" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""You see, there's no link. Dammit.""" start="00:19:19.738" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""Now I need to create the link after the fact.""" start="00:19:23.480" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""Here's a list of shortcuts. The denote keymap.""" start="00:19:26.762" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""It's a recommended practice by me,""" start="00:19:33.280" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""starting your note with a link.""" start="00:19:35.166" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""You've heard this all just a couple of minutes ago.""" start="00:19:36.767" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""It reduces orphans and supposedly teaches you""" start="00:19:40.640" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""about thinking in connections early.""" start="00:19:42.855" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""It's a good practice to practice.""" start="00:19:45.575" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""So with that note, trying to switch back.""" start="00:19:53.100" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""Denote note switching, that wasn't as smooth,""" start="00:19:55.939" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""but inserting links is.""" start="00:20:00.120" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""And there you go. Here's a backlink view. And that's it.""" start="00:20:01.320" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""In a somewhat self-documenting way,""" start="00:20:10.180" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""here you see a structure note""" start="00:20:12.652" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""which is an overview that represents the gist""" start="00:20:14.868" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""of this Emacs conference talk,""" start="00:20:17.683" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""with a couple of links to details.""" start="00:20:19.564" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""From these details, as you've seen,""" start="00:20:21.840" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""you can go into even more detail. That's all there is to it.""" start="00:20:24.108" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""Repeat this for infinity,""" start="00:20:27.892" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""and you get really really complex networks""" start="00:20:30.134" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""and can do a lot of amazing things in parallel""" start="00:20:32.876" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""without interference.""" start="00:20:35.859" video="mainVideo-zettelkasten" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Learn, Share, Grow""" start="00:20:39.068" video="mainVideo-zettelkasten" id="subtitle"]]</div>[[!template text="""I just want to stress that the Zettelkasten""" start="00:20:39.068" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""can help you to learn when you publish, when you share,""" start="00:20:42.440" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""and when you grow it and yourself in the process.""" start="00:20:47.033" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""Again, design the Zettelkasten to be used.""" start="00:20:51.182" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""Publish something, write a blog, share stuff with co-workers.""" start="00:20:54.084" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""That's powerful and that's so rewarding.""" start="00:20:58.160" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""This can in turn influence how you do it""" start="00:21:00.486" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""the next time in your Zettelkasten,""" start="00:21:04.040" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""because now you can anticipate these kinds of arguments,""" start="00:21:06.034" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""maybe I can do this early on,""" start="00:21:09.381" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""and then you're prepared even more for the future""" start="00:21:11.980" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""to share what you learn.""" start="00:21:15.134" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""You are also invited very warmly to our""" start="00:21:17.480" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""community of practice in the Zettelkasten forums.""" start="00:21:20.160" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""Just share your journey, write about your projects,""" start="00:21:23.320" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""ask questions. Everyone's welcome, newbie to pro.""" start="00:21:26.156" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""Just get in touch with people, talk about the processes,""" start="00:21:29.794" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""improve them, and eventually you'll figure out, well,""" start="00:21:32.675" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""reaching enlightenment in that regard may not be that hard after all,""" start="00:21:35.362" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""and then you're fine and good to go for the next projects""" start="00:21:39.980" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""that you tackle. Most importantly is to make this thing your own.""" start="00:21:42.954" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""The Zettelkasten, the method, the environment.""" start="00:21:48.560" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""Create a thinking environment for you.""" start="00:21:50.747" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""Create your own tools to think with.""" start="00:21:53.475" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""This goes back to the meme of Shuhari,""" start="00:21:56.878" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""which is basically imitate and then deviate and innovate.""" start="00:21:59.379" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""And this invitation here is to imitate what I just laid out.""" start="00:22:02.801" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""Imitate for a couple of years. One, two, three years.""" start="00:22:07.124" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""The time goes by faster [snaps fingers] than you think.""" start="00:22:10.587" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""And then figure out ways to deviate from the doctrine,""" start="00:22:12.928" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""to figure out ways to improve""" start="00:22:16.449" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""and change the processes to fit you better.""" start="00:22:18.910" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""But you need to try to manifest""" start="00:22:22.031" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""the best practices in your life first,""" start="00:22:24.452" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""for a while, to then figure out, well,""" start="00:22:26.653" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""they are not that best after all""" start="00:22:28.834" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""and I need to change some of them.""" start="00:22:30.854" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""But you wouldn't know if you didn't try. So do try.""" start="00:22:33.055" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""Yeah, and with that I want to thank you.""" start="00:22:37.065" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""Thank you so much for watching. That's it.""" start="00:22:38.640" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""That was the conference talk,""" start="00:22:40.250" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""my short introduction to the Zettelkasten mechanics and habits.""" start="00:22:41.532" video="mainVideo-zettelkasten" id="subtitle"]]
+
+<div class="transcript-heading">[[!template new="1" text="""Outro""" start="00:22:45.297" video="mainVideo-zettelkasten" id="subtitle"]]</div>[[!template text="""I want to thank you so much for watching""" start="00:22:45.297" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""and spending time with me on this topic,""" start="00:22:46.679" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""on these two topics actually,""" start="00:22:48.381" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""that are very near and dear to my heart.""" start="00:22:50.144" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""Do share questions, ask questions in the etherpad.""" start="00:22:52.547" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""And if you watch this after the conference""" start="00:22:55.400" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""and all the live participation is long over,""" start="00:22:57.609" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""step into the forums and ask around there.""" start="00:23:01.191" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""Thanks also to Sacha and team for organizing EmacsConf 2025,""" start="00:23:04.633" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""for having me. Well, I'm looking forward to hearing from""" start="00:23:09.235" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""every one of you. So that's it.""" start="00:23:11.596" video="mainVideo-zettelkasten" id="subtitle"]]
+[[!template text="""Peace out and see you in the next one.""" start="00:23:14.257" video="mainVideo-zettelkasten" id="subtitle"]]
+
+</div>
+
+Captioner: sachac
+
+Questions or comments? Please e-mail [hi@christiantietze.de](mailto:hi@christiantietze.de?subject=Comment%20for%20EmacsConf%202023%20zettelkasten%3A%20Zettelkasten%20for%20regular%20Emacs%20hackers)
+
+
+<!-- End of emacsconf-publish-after-page -->
diff --git a/2025/info/zettelkasten-before.md b/2025/info/zettelkasten-before.md
new file mode 100644
index 00000000..b9785474
--- /dev/null
+++ b/2025/info/zettelkasten-before.md
@@ -0,0 +1,36 @@
+<!-- Automatically generated by emacsconf-publish-before-page -->
+
+The following image shows where the talk is in the schedule for Sun 2025-12-07. Solid lines show talks with Q&A via BigBlueButton. Dashed lines show talks with Q&A via IRC or Etherpad.<div class="schedule-in-context schedule-svg-container" data-slug="zettelkasten">
+<svg width="700" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Schedule for Sunday</title> <rect width="700" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="/2025/talks/sun-open" title="Sunday opening remarks" data-slug="sun-open"> <title> 9:00- 9:10 Sunday opening remarks</title> <rect x="0" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(11,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-open</text></g></a> <a href="/2025/talks/modern" title="Some problems of modernizing Emacs" data-slug="modern"> <title> 9:10- 9:30 Some problems of modernizing Emacs</title> <rect x="13" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(38,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> modern</text></g></a> <a href="/2025/talks/reader" title="An introduction to the Emacs Reader" data-slug="reader"> <title> 9:40-10:15 An introduction to the Emacs Reader</title> <rect x="54" y="15" opacity="0.5" width="48" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(100,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> reader</text></g></a> <a href="/2025/talks/weights" title="Weightlifting tracking with Emacs on Android" data-slug="weights"> <title> 10:35-10:45 Weightlifting tracking with Emacs on Android</title> <rect x="130" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(141,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> weights</text></g></a> <a href="/2025/talks/completion" title="corfu+yasnippet: Easier than I thought" data-slug="completion"> <title> 11:05-11:25 corfu+yasnippet: Easier than I thought</title> <rect x="171" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(196,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> completion</text></g></a> <a href="/2025/talks/zettelkasten" title="Zettelkasten for regular Emacs hackers" data-slug="zettelkasten"> <title> 1:00- 1:25 Zettelkasten for regular Emacs hackers</title> <rect stroke-width="3" x="329" y="15" opacity="0.8" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(361,73)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> zettelkasten</text></g></a> <a href="/2025/talks/hyperboleqa" title="Questions and answers to help you fly with Hyperbole" data-slug="hyperboleqa"> <title> 1:45- 2:15 Questions and answers to help you fly with Hyperbole</title> <rect x="391" y="15" opacity="0.5" width="41" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(430,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperboleqa</text></g></a> <a href="/2025/talks/gardening" title="Gardening in Emacs: A Windows user's tale of tending, tweaking, and triumph" data-slug="gardening"> <title> 2:15- 2:35 Gardening in Emacs: A Windows user's tale of tending, tweaking, and triumph</title> <rect x="432" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(457,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gardening</text></g></a> <a href="/2025/talks/bookclub-tapas" title="Bookclub tapas" data-slug="bookclub-tapas"> <title> 2:45- 3:20 Bookclub tapas</title> <rect x="473" y="15" opacity="0.5" width="48" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(519,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> bookclub-tapas</text></g></a> <a href="/2025/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"> <title> 3:40- 3:50 Sunday closing remarks</title> <rect x="549" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(560,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-close</text></g></a> <g transform="translate(0,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(82,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(164,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(247,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(329,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(411,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(494,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(576,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(658,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 5 PM</text></g></svg>
+</div>
+
+[[!toc ]]
+Format: 24-min talk ; Q&A: BigBlueButton conference room <https://media.emacsconf.org/2025/current/bbb-zettelkasten.html> Etherpad: <https://pad.emacsconf.org/2025-zettelkasten>
+Etherpad: <https://pad.emacsconf.org/2025-zettelkasten>
+Discuss on IRC: [#emacsconf-gen](https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen)
+Status: Q&A open for participation
+<div>Times in different time zones:</div><div class="times" start="2025-12-07T18:00:00Z" end="2025-12-07T18:25:00Z"><div class="conf-time">Sunday, Dec 7 2025, ~1:00 PM - 1:25 PM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Sunday, Dec 7 2025, ~12:00 PM - 12:25 PM CST (US/Central)<br />Sunday, Dec 7 2025, ~11:00 AM - 11:25 AM MST (US/Mountain)<br />Sunday, Dec 7 2025, ~10:00 AM - 10:25 AM PST (US/Pacific)<br />Sunday, Dec 7 2025, ~6:00 PM - 6:25 PM UTC <br />Sunday, Dec 7 2025, ~7:00 PM - 7:25 PM CET (Europe/Paris)<br />Sunday, Dec 7 2025, ~8:00 PM - 8:25 PM EET (Europe/Athens)<br />Sunday, Dec 7 2025, ~11:30 PM - 11:55 PM IST (Asia/Kolkata)<br />Monday, Dec 8 2025, ~2:00 AM - 2:25 AM +08 (Asia/Singapore)<br />Monday, Dec 8 2025, ~3:00 AM - 3:25 AM JST (Asia/Tokyo)</div></div><div><strong><a href="/2025/watch/gen/">Find out how to watch and participate</a></strong></div>
+
+
+
+
+<div class="vid mainVideo"><video controls preload="none" id="mainVideo-zettelkasten"><source src="https://media.emacsconf.org/2025/emacsconf-2025-zettelkasten--zettelkasten-for-regular-emacs-hackers--christian-tietze--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2025/captions/emacsconf-2025-zettelkasten--zettelkasten-for-regular-emacs-hackers--christian-tietze--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2025/captions/emacsconf-2025-zettelkasten--zettelkasten-for-regular-emacs-hackers--christian-tietze--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="mainVideo-zettelkasten" data="""
+00:01.400 Introduction
+01:25.534 Advocating Freedoms
+02:29.680 What Is This About?
+04:36.534 Write - Essential Mechanic
+05:09.601 Connect - Essential Mechanic
+05:34.268 Correct - Essential Habit
+06:49.434 Design for Use - Habit
+07:43.920 Create Structure - Mechanic
+08:47.968 Start in the Zettelkasten - Mechanic
+09:32.401 Start with a Link - Mechanic
+09:54.568 Recap
+13:22.034 Facilitate Growth
+14:46.140 Emacs demo
+20:39.068 Learn, Share, Grow
+22:45.297 Outro
+
+"""]]<div></div>Duration: 23:18 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2025-zettelkasten">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2025/current/bbb-zettelkasten.html">Open public Q&A</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-zettelkasten--zettelkasten-for-regular-emacs-hackers--christian-tietze--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-zettelkasten--zettelkasten-for-regular-emacs-hackers--christian-tietze--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-zettelkasten--zettelkasten-for-regular-emacs-hackers--christian-tietze--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-zettelkasten--zettelkasten-for-regular-emacs-hackers--christian-tietze--main.opus">Download --main.opus (20MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-zettelkasten--zettelkasten-for-regular-emacs-hackers--christian-tietze--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-zettelkasten--zettelkasten-for-regular-emacs-hackers--christian-tietze--main.webm">Download --main.webm (41MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-zettelkasten--zettelkasten-for-regular-emacs-hackers--christian-tietze--script.org">Download --script.org</a></li><li><a href="https://youtu.be/wE8vCWyr1Eo">View on Youtube</a></li></ul></div></div>
+# Description
+<!-- End of emacsconf-publish-before-page --> \ No newline at end of file
diff --git a/2025/info/zettelkasten-nav.md b/2025/info/zettelkasten-nav.md
new file mode 100644
index 00000000..900421db
--- /dev/null
+++ b/2025/info/zettelkasten-nav.md
@@ -0,0 +1,7 @@
+
+<div class="talk-nav">
+Back to the [[talks]]
+Previous by time: <a href="/2025/talks/completion">corfu+yasnippet: Easier than I thought</a>
+Next by time: <a href="/2025/talks/hyperboleqa">Questions and answers to help you fly with Hyperbole</a>
+Track: <span class="sched-track General">General</span> - <strong><a href="https://emacsconf.org/2025/watch/gen">Watch</a></strong>
+</div>
diff --git a/2025/organizers-notebook.md b/2025/organizers-notebook.md
new file mode 100644
index 00000000..2b5f9b48
--- /dev/null
+++ b/2025/organizers-notebook.md
@@ -0,0 +1,1270 @@
+<!-- organizers-notebook.md is exported from organizers-notebook/index.org, please modify that instead. -->
+[[!sidebar content=""]]
+
+This file is automatically exported from [/2025/organizers-notebook/index.org](/2025/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 2024](/2024/organizers-notebook).
+
+
+# Table of Contents
+
+- [Timeline](#timeline)
+- [About this document](#about-this-doc)
+- [Communications plan](#comms)
+- [Good/better/best](#good-better-best)
+- [Phases](#phases)
+ - [Set up organizers notebook](#orgde0d29b)
+ - [Draft CFP](#cfp)
+ - [Draft schedule](#draft-schedule)
+ - [Review rescheduled talks](#orgff99913)
+ - [While speakers are working on their videos](#org26a8620)
+ - [While volunteers are working on captions](#orgb754ae6)
+ - [After the conference](#orga46a5dd)
+ - [Confirm shifts](#shifts)
+- [Check EmacsConf infrastructure](#check-emacsconf-infrastructure):project:
+ - [BigBlueButton](#check-emacsconf-infrastructure-bigbluebutton)
+ - [IRC web client](#check-emacsconf-infrastructure-irc-web-client)
+ - [IRC announcements](#check-emacsconf-infrastructure-irc-announcements)
+ - [Media](#check-emacsconf-infrastructure-media)
+ - [Publishing resources to the wiki](#check-emacsconf-infrastructure-publishing-resources-to-the-wiki)
+ - [Publishing videos to the media server](#check-emacsconf-infrastructure-publishing-videos-to-the-media-server)
+ - [Playing videos, switching to windows](#check-emacsconf-infrastructure-playing-videos-switching-to-windows)
+ - [Etherpad](#check-emacsconf-infrastructure-etherpad)
+ - [Do a dry run](#check-emacsconf-infrastructure-do-a-dry-run)
+ - [Resizing](#check-emacsconf-infrastructure-resizing)
+- [Processes and notes](#processes-and-notes)
+ - [Hosting](#processes-and-notes-hosting)
+ - [ERC](#processes-and-notes-erc)
+ - [Uploading videos](#org9f7b814)
+- [Decisions](#decisions)
+- [Support code](#support-code)
+
+
+<a id="timeline"></a>
+
+# TODO Timeline
+
+<table>
+
+
+<colgroup>
+<col class="org-left">
+
+<col class="org-left">
+
+<col class="org-right">
+</colgroup>
+<tbody>
+<tr>
+<td class="org-left">&nbsp;</td>
+<td class="org-left">&nbsp;</td>
+<td class="org-right">Days since previous milestone</td>
+</tr>
+
+<tr>
+<td class="org-left">CFP</td>
+<td class="org-left"><span class="timestamp-wrapper"><time class="timestamp" datetime="2025-06-27">[2025-06-27 Fri]</time></span></td>
+<td class="org-right">&nbsp;</td>
+</tr>
+
+<tr>
+<td class="org-left">CFP deadline</td>
+<td class="org-left"><span class="timestamp-wrapper"><time class="timestamp" datetime="2025-09-19">[2025-09-19 Fri]</time></span></td>
+<td class="org-right">84</td>
+</tr>
+
+<tr>
+<td class="org-left">Speaker notifications</td>
+<td class="org-left"><span class="timestamp-wrapper"><time class="timestamp" datetime="2025-09-26">[2025-09-26 Fri]</time></span></td>
+<td class="org-right">&nbsp;</td>
+</tr>
+
+<tr>
+<td class="org-left">Publish schedule</td>
+<td class="org-left"><span class="timestamp-wrapper"><time class="timestamp" datetime="2025-10-24">[2025-10-24 Fri]</time></span></td>
+<td class="org-right">&nbsp;</td>
+</tr>
+
+<tr>
+<td class="org-left">Video submission deadline</td>
+<td class="org-left"><span class="timestamp-wrapper"><time class="timestamp" datetime="2025-10-31">[2025-10-31 Fri]</time></span></td>
+<td class="org-right">42</td>
+</tr>
+
+<tr>
+<td class="org-left">EmacsConf</td>
+<td class="org-left"><span class="timestamp-wrapper"><time class="timestamp" datetime="2025-12-06">[2025-12-06 Sat]</time></span></td>
+<td class="org-right">36</td>
+</tr>
+</tbody>
+</table>
+
+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).
+
+
+<a id="about-this-doc"></a>
+
+# About this document
+
+Tags:
+
+- `conforg`: Requires access to private conf.org repository
+
+
+<a id="comms"></a>
+
+# Communications plan
+
+Objectives:
+
+- keep everyone in the loop without them feeling like they&rsquo;re overloaded
+
+Everyone:
+
+- [ ] Call for participation (speakers and volunteers)
+- [ ] Reminder about CFP
+- [ ] Last call
+
+Speakers:
+
+- [ ] Send all speakers backstage access and upload instructions
+- [ ] Send all speakers check-in instructions
+
+Volunteers:
+
+- [ ] Send captioning volunteers the backstage info
+- [ ] Send past captioning volunteers an invitation to participate - ask when there&rsquo;s a lot of load
+- [ ] Ask for help with audio processing
+
+
+<a id="good-better-best"></a>
+
+# Good/better/best
+
+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&rsquo;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!
+
+<table>
+
+
+<colgroup>
+<col class="org-left">
+
+<col class="org-left">
+
+<col class="org-left">
+
+<col class="org-left">
+</colgroup>
+<tbody>
+<tr>
+<td class="org-left">&nbsp;</td>
+<td class="org-left">Good</td>
+<td class="org-left">Better</td>
+<td class="org-left">Best</td>
+</tr>
+
+<tr>
+<td class="org-left">Streaming</td>
+<td class="org-left">Regular stream</td>
+<td class="org-left">+ alternate streams on PeerTube</td>
+<td class="org-left">+ alternate streams on YouTube</td>
+</tr>
+
+<tr>
+<td class="org-left">480p</td>
+<td class="org-left">Same on live</td>
+<td class="org-left">Separate node</td>
+<td class="org-left">Ansible setup</td>
+</tr>
+
+<tr>
+<td class="org-left">Audio normalization</td>
+<td class="org-left">Core org handling it</td>
+<td class="org-left">Other volunteer</td>
+<td class="org-left">Multiple volunteers</td>
+</tr>
+
+<tr>
+<td class="org-left">Video resolution</td>
+<td class="org-left">Usual reminders</td>
+<td class="org-left">Extra reminders</td>
+<td class="org-left">Everyone remembering to use a large font size</td>
+</tr>
+
+<tr>
+<td class="org-left">Intros</td>
+<td class="org-left">Standard, recorded</td>
+<td class="org-left">Reviewed by speakers</td>
+<td class="org-left">More details/context</td>
+</tr>
+
+<tr>
+<td class="org-left">Pad</td>
+<td class="org-left">v1.9.7</td>
+<td class="org-left">v2.x</td>
+<td class="org-left">&nbsp;</td>
+</tr>
+</tbody>
+</table>
+
+
+<a id="phases"></a>
+
+# Phases
+
+
+<a id="orgde0d29b"></a>
+
+## DONE Set up organizers notebook
+
+
+<a id="cfp"></a>
+
+## DONE Draft CFP
+
+
+#### Draft linked pages
+
+- [X] cfp
+- [X] submit page
+- [X] year index
+
+
+#### DONE Check with other organizers
+
+
+#### DONE Update dates in emacsconf.el
+
+<file:///home/sacha/proj/emacsconf/lisp/emacsconf.el>
+<file:///home/sacha/proj/emacsconf/lisp/emacsconf-erc.el>
+
+
+#### DONE Update conf topic
+
+[Update the IRC topic](file:///home/sacha/proj/emacsconf/wiki/organizers-notebook/index.md)
+
+
+#### DONE Remove draft marker
+
+- [ ] cfp
+- [ ] submit
+
+
+#### DONE Post CFP in the usual places
+
+- [ ] emacsconf-discuss
+- [ ] reddit.com/r/emacs
+- [ ] Emacs News
+- [ ] emacs-tangents or info-gnu-emacs
+- [ ] Mastodon
+- [ ] Bluesky
+- [ ] X
+
+
+<a id="draft-schedule"></a>
+
+## DONE Draft schedule
+
+<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/2025/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/2025/talks/org-babel" title="Making Org-Babel reactive" data-slug="org-babel"><title> 9:10- 9:20 Making Org-Babel reactive</title><rect x="40" y="53" opacity="0.8" width="84" height="13" stroke="black" stroke-dasharray="5,5,5" fill="lightblue"></rect><g transform="translate(40,64)"><text fill="black" x="0" y="0" font-size="10" transform="nil">org-babel</text></g></a><a href="https://emacsconf.org/2025/talks/reference" title="Emacs as a fully-fledged reference manager" data-slug="reference"><title> 9:30- 9:55 Emacs as a fully-fledged reference manager</title><rect x="40" y="81" opacity="0.8" width="84" height="34" stroke="black" stroke-dasharray="" fill="gray"></rect><g transform="translate(40,113)"><text fill="black" x="0" y="0" font-size="10" transform="nil">reference</text></g></a><a href="https://emacsconf.org/2025/talks/gmail" title="org-gmail: A deep integration of Gmail into your Org Mode" data-slug="gmail"><title>10:15-10:40 org-gmail: A deep integration of Gmail into your Org Mode</title><rect x="40" y="142" opacity="0.8" width="84" height="34" stroke="black" stroke-dasharray="5,5,5" fill="lightblue"></rect><g transform="translate(40,174)"><text fill="black" x="0" y="0" font-size="10" transform="nil">gmail</text></g></a><a href="https://emacsconf.org/2025/talks/gnus" title="Reading and writing emails in GNU Emacs with Gnus" data-slug="gnus"><title>10:50-11:15 Reading and writing emails in GNU Emacs with Gnus</title><rect x="40" y="190" opacity="0.8" width="84" height="34" stroke="black" stroke-dasharray="5,5,5" fill="gray"></rect><g transform="translate(40,222)"><text fill="black" x="0" y="0" font-size="10" transform="nil">gnus</text></g></a><a href="https://emacsconf.org/2025/talks/latex" title="LaTeX export in org-mode: the overhaul" data-slug="latex"><title>11:25-11:45 LaTeX export in org-mode: the overhaul</title><rect x="40" y="239" opacity="0.8" width="84" height="27" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(40,264)"><text fill="black" x="0" y="0" font-size="10" transform="nil">latex</text></g></a><a href="https://emacsconf.org/2025/talks/calc" title="Basic Calc functionality for engineering or electronics" data-slug="calc"><title> 1:00- 1:25 Basic Calc functionality for engineering or electronics</title><rect x="40" y="369" opacity="0.8" width="84" height="34" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(40,401)"><text fill="black" x="0" y="0" font-size="10" transform="nil">calc</text></g></a><a href="https://emacsconf.org/2025/talks/blee-lcnt" title="Blee-LCNT: An Emacs-centered content production and self-publication framework" data-slug="blee-lcnt"><title> 1:35- 2:15 Blee-LCNT: An Emacs-centered content production and self-publication framework</title><rect x="40" y="417" opacity="0.8" width="84" height="54" stroke="black" stroke-dasharray="" fill="gray"></rect><g transform="translate(40,469)"><text fill="black" x="0" y="0" font-size="10" transform="nil">blee-lcnt</text></g></a><a href="https://emacsconf.org/2025/talks/greader" title="GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence" data-slug="greader"><title> 2:35- 2:40 GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence</title><rect x="40" y="499" opacity="0.8" width="84" height="6" stroke="black" stroke-dasharray="5,5,5" fill="gray"></rect><g transform="translate(40,503)"><text fill="black" x="0" y="0" font-size="10" transform="nil">greader</text></g></a><a href="https://emacsconf.org/2025/talks/open-mic" title="Open session" data-slug="open-mic"><title> 2:50- 3:40 Open session</title><rect x="40" y="520" opacity="0.8" width="84" height="68" stroke="black" stroke-dasharray="" fill="gray"></rect><g transform="translate(40,586)"><text fill="black" x="0" y="0" font-size="10" transform="nil">open-mic</text></g></a><a href="https://emacsconf.org/2025/talks/sat-close" title="Saturday closing remarks / open session" data-slug="sat-close"><title> 4:00- 4:10 Saturday closing remarks / open session</title><rect x="40" y="616" opacity="0.8" width="84" height="13" stroke="black" stroke-dasharray="" fill="gray"></rect><g transform="translate(40,627)"><text fill="black" x="0" y="0" font-size="10" transform="nil">sat-close</text></g></a><a href="https://emacsconf.org/2025/talks/schemacs" title="One year progress update Schemacs (formerly Gypsum)" data-slug="schemacs"><title> 9:30- 9:55 One year progress update Schemacs (formerly Gypsum)</title><rect x="125" y="81" opacity="0.8" width="84" height="34" stroke="black" stroke-dasharray="" fill="lightblue"></rect><g transform="translate(125,113)"><text fill="black" x="0" y="0" font-size="10" transform="nil">schemacs</text></g></a><a href="https://emacsconf.org/2025/talks/juicemacs" title="Juicemacs: exploring speculative JIT compilation for ELisp in Java" data-slug="juicemacs"><title>10:15-10:35 Juicemacs: exploring speculative JIT compilation for ELisp in Java</title><rect x="125" y="142" opacity="0.8" width="84" height="27" stroke="black" stroke-dasharray="5,5,5" fill="lightblue"></rect><g transform="translate(125,167)"><text fill="black" x="0" y="0" font-size="10" transform="nil">juicemacs</text></g></a><a href="https://emacsconf.org/2025/talks/swanky" title="Swanky Python: Interactive development for Python" data-slug="swanky"><title>10:45-11:10 Swanky Python: Interactive development for Python</title><rect x="125" y="184" opacity="0.8" width="84" height="34" stroke="black" stroke-dasharray="5,5,5" fill="gray"></rect><g transform="translate(125,216)"><text fill="black" x="0" y="0" font-size="10" transform="nil">swanky</text></g></a><a href="https://emacsconf.org/2025/talks/python" title="Interactive Python programming in Emacs" data-slug="python"><title>11:20-11:40 Interactive Python programming in Emacs</title><rect x="125" y="232" opacity="0.8" width="84" height="27" stroke="black" stroke-dasharray="" fill="lightblue"></rect><g transform="translate(125,257)"><text fill="black" x="0" y="0" font-size="10" transform="nil">python</text></g></a><a href="https://emacsconf.org/2025/talks/llm" title="Emacs, editors, and LLM driven workflows" data-slug="llm"><title> 1:00- 1:25 Emacs, editors, and LLM driven workflows</title><rect x="125" y="369" opacity="0.8" width="84" height="34" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(125,401)"><text fill="black" x="0" y="0" font-size="10" transform="nil">llm</text></g></a><a href="https://emacsconf.org/2025/talks/private-ai" title="Emacs and private AI: a great match" data-slug="private-ai"><title> 1:45- 2:05 Emacs and private AI: a great match</title><rect x="125" y="431" opacity="0.8" width="84" height="27" stroke="black" stroke-dasharray="" fill="gray"></rect><g transform="translate(125,456)"><text fill="black" x="0" y="0" font-size="10" transform="nil">private-ai</text></g></a><a href="https://emacsconf.org/2025/talks/commonlisp" title="Common Lisp images communicating like-a-human through shared Emacs slime and eev" data-slug="commonlisp"><title> 2:25- 2:55 Common Lisp images communicating like-a-human through shared Emacs slime and eev</title><rect x="125" y="486" opacity="0.8" width="84" height="41" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(125,525)"><text fill="black" x="0" y="0" font-size="10" transform="nil">commonlisp</text></g></a><a href="https://emacsconf.org/2025/talks/graphics" title="Modern Emacs/Elisp hardware/software accelerated graphics" data-slug="graphics"><title> 3:05- 3:30 Modern Emacs/Elisp hardware/software accelerated graphics</title><rect x="125" y="540" opacity="0.8" width="84" height="34" stroke="black" stroke-dasharray="" fill="gray"></rect><g transform="translate(125,572)"><text fill="black" x="0" y="0" font-size="10" transform="nil">graphics</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/2025/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/2025/talks/modern" title="Some problems of modernizing Emacs" data-slug="modern"><title> 9:10- 9:30 Some problems of modernizing Emacs</title><rect x="40" y="53" opacity="0.8" width="84" height="27" stroke="black" stroke-dasharray="5,5,5" fill="gray"></rect><g transform="translate(40,78)"><text fill="black" x="0" y="0" font-size="10" transform="nil">modern</text></g></a><a href="https://emacsconf.org/2025/talks/reader" title="An introduction to the Emacs Reader" data-slug="reader"><title> 9:40-10:15 An introduction to the Emacs Reader</title><rect x="40" y="94" opacity="0.8" width="84" height="48" stroke="black" stroke-dasharray="" fill="gray"></rect><g transform="translate(40,140)"><text fill="black" x="0" y="0" font-size="10" transform="nil">reader</text></g></a><a href="https://emacsconf.org/2025/talks/weights" title="Weightlifting tracking with Emacs on Android" data-slug="weights"><title>10:35-10:45 Weightlifting tracking with Emacs on Android</title><rect x="40" y="170" opacity="0.8" width="84" height="13" stroke="black" stroke-dasharray="" fill="lightblue"></rect><g transform="translate(40,181)"><text fill="black" x="0" y="0" font-size="10" transform="nil">weights</text></g></a><a href="https://emacsconf.org/2025/talks/completion" title="corfu+yasnippet: Easier than I thought" data-slug="completion"><title>11:05-11:25 corfu+yasnippet: Easier than I thought</title><rect x="40" y="211" opacity="0.8" width="84" height="27" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(40,236)"><text fill="black" x="0" y="0" font-size="10" transform="nil">completion</text></g></a><a href="https://emacsconf.org/2025/talks/zettelkasten" title="Zettelkasten for regular Emacs hackers" data-slug="zettelkasten"><title> 1:00- 1:25 Zettelkasten for regular Emacs hackers</title><rect x="40" y="369" opacity="0.8" width="84" height="34" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(40,401)"><text fill="black" x="0" y="0" font-size="10" transform="nil">zettelkasten</text></g></a><a href="https://emacsconf.org/2025/talks/hyperboleqa" title="Questions and answers to help you fly with Hyperbole" data-slug="hyperboleqa"><title> 1:45- 2:15 Questions and answers to help you fly with Hyperbole</title><rect x="40" y="431" opacity="0.8" width="84" height="41" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(40,470)"><text fill="black" x="0" y="0" font-size="10" transform="nil">hyperboleqa</text></g></a><a href="https://emacsconf.org/2025/talks/gardening" title="Gardening in Emacs: A Windows user's tale of tending, tweaking, and triumph" data-slug="gardening"><title> 2:15- 2:35 Gardening in Emacs: A Windows user's tale of tending, tweaking, and triumph</title><rect x="40" y="472" opacity="0.8" width="84" height="27" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(40,497)"><text fill="black" x="0" y="0" font-size="10" transform="nil">gardening</text></g></a><a href="https://emacsconf.org/2025/talks/bookclub-tapas" title="Bookclub tapas" data-slug="bookclub-tapas"><title> 2:45- 3:20 Bookclub tapas</title><rect x="40" y="513" opacity="0.8" width="84" height="48" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(40,559)"><text fill="black" x="0" y="0" font-size="10" transform="nil">bookclub-tapas</text></g></a><a href="https://emacsconf.org/2025/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"><title> 3:40- 3:50 Sunday closing remarks</title><rect x="40" y="589" opacity="0.8" width="84" height="13" stroke="black" stroke-dasharray="" fill="gray"></rect><g transform="translate(40,600)"><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>
+
+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:
+
+- <span class="timestamp-wrapper"><time class="timestamp" datetime="2025-12-05">[2025-12-05 Fri]</time></span> cancelled [bibliography](https://emacsconf.org/2025/talks/bibliography "An enhanced bibliography in org-mode for scientific research and self-directed learning"), moved [zettelkasten](https://emacsconf.org/2025/talks/zettelkasten "Zettelkasten for regular Emacs hackers") to Saturday
+- <span class="timestamp-wrapper"><time class="timestamp" datetime="2025-12-03">[2025-12-03 Wed]</time></span> moved [gnus](https://emacsconf.org/2025/talks/gnus "Reading and writing emails in GNU Emacs with Gnus") to Sat morning; added time to talks to accommodate actual video length
+- <span class="timestamp-wrapper"><time class="timestamp" datetime="2025-12-01">[2025-12-01 Mon]</time></span> cancelled [languages](https://emacsconf.org/2025/talks/languages "Studying foreign languages with Emacs, Org Mode and gptel")
+- <span class="timestamp-wrapper"><time class="timestamp" datetime="2025-11-27">[2025-11-27 Thu]</time></span> cancelled [authoring](https://emacsconf.org/2025/talks/authoring "How Emacs became my authoring playground—no Lisp required")
+- <span class="timestamp-wrapper"><time class="timestamp" datetime="2025-11-24">[2025-11-24 Mon]</time></span> uncancelled [weights](https://emacsconf.org/2025/talks/weights "Weightlifting tracking with Emacs on Android")
+- <span class="timestamp-wrapper"><time class="timestamp" datetime="2025-11-22">[2025-11-22 Sat]</time></span> [weights](https://emacsconf.org/2025/talks/weights "Weightlifting tracking with Emacs on Android") and [claude-code](https://emacsconf.org/2025/talks/claude-code "emacs-claude-code: Intelligent Claude Integration for Emacs") cancelled, moved [gnus](https://emacsconf.org/2025/talks/gnus "Reading and writing emails in GNU Emacs with Gnus") and [gardening](https://emacsconf.org/2025/talks/gardening "Gardening in Emacs: A Windows user's tale of tending, tweaking, and triumph") earlier for a lighter, earlier close. They&rsquo;re both async. Added [graphics](https://emacsconf.org/2025/talks/graphics "Modern Emacs/Elisp hardware/software accelerated graphics")
+- <span class="timestamp-wrapper"><time class="timestamp" datetime="2025-11-11">[2025-11-11 Tue]</time></span> [n-angulator](https://emacsconf.org/2025/talks/n-angulator "Org-mode GTD vs N-angulator GTD") cancelled
+- <span class="timestamp-wrapper"><time class="timestamp" datetime="2025-11-01">[2025-11-01 Sat]</time></span> [life](https://emacsconf.org/2025/talks/life "From FRDCSA to FLP2: Building AI-Powered Life Planning Systems in Emacs - A Journey from Research to Real-World Impact") cancelled
+- <span class="timestamp-wrapper"><time class="timestamp" datetime="2025-10-31">[2025-10-31 Fri]</time></span> [writing](https://emacsconf.org/2025/talks/writing "A writing day in the life with Org-Mode") cancelled
+- AI dev afternoon: [llm](https://emacsconf.org/2025/talks/llm "Emacs, editors, and LLM driven workflows"), [claude-code](https://emacsconf.org/2025/talks/claude-code "emacs-claude-code: Intelligent Claude Integration for Emacs"), [private-ai](https://emacsconf.org/2025/talks/private-ai "Emacs and private AI: a great match") feels like a good progression
+- I kinda like this spread-out combo of [zettelkasten](https://emacsconf.org/2025/talks/zettelkasten "Zettelkasten for regular Emacs hackers"), [gardening](https://emacsconf.org/2025/talks/gardening "Gardening in Emacs: A Windows user's tale of tending, tweaking, and triumph"), [writing](https://emacsconf.org/2025/talks/writing "A writing day in the life with Org-Mode"), and [bookclub-tapas](https://emacsconf.org/2025/talks/bookclub-tapas "Bookclub tapas") on Sunday afternoon
+- I spread [reference](https://emacsconf.org/2025/talks/reference "Emacs as a fully-fledged reference manager"), [latex](https://emacsconf.org/2025/talks/latex "LaTeX export in org-mode: the overhaul"), [bibliography](https://emacsconf.org/2025/talks/bibliography "An enhanced bibliography in org-mode for scientific research and self-directed learning"), [authoring](https://emacsconf.org/2025/talks/authoring "How Emacs became my authoring playground—no Lisp required"), and [blee-lcnt](https://emacsconf.org/2025/talks/blee-lcnt "Blee-LCNT: An Emacs-centered content production and self-publication framework") in case people want to hang out in each other&rsquo;s Q&A sessions
+- I wanted to generally have live Q&A in between talks that don&rsquo;t have live Q&A.
+- It&rsquo;s okay to have a shorter day, since this is easier for people who are in Europe.
+- [hyperboleqa](https://emacsconf.org/2025/talks/hyperboleqa "Questions and answers to help you fly with Hyperbole") is all Q&A.
+- We could have an open mic session or a panel before [sat-close](https://emacsconf.org/2025/talks/sat-close "Saturday closing remarks / open session")
+- Sunday morning in 2023 had some packet loss issues at around 9:30
+
+
+<a id="orgff99913"></a>
+
+## Review rescheduled talks
+
+ (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))
+
+For big changes, use emacsconf-mail-schedule-updates
+
+<table>
+
+
+<colgroup>
+<col class="org-left">
+
+<col class="org-left">
+
+<col class="org-left">
+
+<col class="org-right">
+</colgroup>
+<tbody>
+<tr>
+<td class="org-left">schemacs</td>
+<td class="org-left"><span class="timestamp-wrapper"><time class="timestamp" datetime="2025-12-06T09:30:00">&lt;2025-12-06 Sat 09:30-09:55&gt;</time></span></td>
+<td class="org-left">2025-12-06 Sat 09:30-09:45</td>
+<td class="org-right">0</td>
+</tr>
+
+<tr>
+<td class="org-left">reference</td>
+<td class="org-left"><span class="timestamp-wrapper"><time class="timestamp" datetime="2025-12-06T09:30:00">&lt;2025-12-06 Sat 09:30-09:55&gt;</time></span></td>
+<td class="org-left">2025-12-06 Sat 09:30-09:50</td>
+<td class="org-right">0</td>
+</tr>
+
+<tr>
+<td class="org-left">gmail</td>
+<td class="org-left"><span class="timestamp-wrapper"><time class="timestamp" datetime="2025-12-06T10:15:00">&lt;2025-12-06 Sat 10:15-10:40&gt;</time></span></td>
+<td class="org-left">2025-12-06 Sat 10:10-10:30</td>
+<td class="org-right">-5</td>
+</tr>
+
+<tr>
+<td class="org-left">juicemacs</td>
+<td class="org-left"><span class="timestamp-wrapper"><time class="timestamp" datetime="2025-12-06T10:15:00">&lt;2025-12-06 Sat 10:15-10:35&gt;</time></span></td>
+<td class="org-left">2025-12-06 Sat 10:05-10:25</td>
+<td class="org-right">-10</td>
+</tr>
+
+<tr>
+<td class="org-left">python</td>
+<td class="org-left"><span class="timestamp-wrapper"><time class="timestamp" datetime="2025-12-06T11:20:00">&lt;2025-12-06 Sat 11:20-11:40&gt;</time></span></td>
+<td class="org-left">2025-12-06 Sat 11:05-11:25</td>
+<td class="org-right">-15</td>
+</tr>
+
+<tr>
+<td class="org-left">latex</td>
+<td class="org-left"><span class="timestamp-wrapper"><time class="timestamp" datetime="2025-12-06T11:25:00">&lt;2025-12-06 Sat 11:25-11:45&gt;</time></span></td>
+<td class="org-left">2025-12-06 Sat 11:10-11:30</td>
+<td class="org-right">-15</td>
+</tr>
+
+<tr>
+<td class="org-left">llm</td>
+<td class="org-left"><span class="timestamp-wrapper"><time class="timestamp" datetime="2025-12-06T13:00:00">&lt;2025-12-06 Sat 13:00-13:25&gt;</time></span></td>
+<td class="org-left">2025-12-06 Sat 13:00-13:20</td>
+<td class="org-right">0</td>
+</tr>
+
+<tr>
+<td class="org-left">calc</td>
+<td class="org-left"><span class="timestamp-wrapper"><time class="timestamp" datetime="2025-12-06T13:40:00">&lt;2025-12-06 Sat 13:40-14:05&gt;</time></span></td>
+<td class="org-left">2025-12-06 Sat 13:40-13:50</td>
+<td class="org-right">0</td>
+</tr>
+
+<tr>
+<td class="org-left">private-ai</td>
+<td class="org-left"><span class="timestamp-wrapper"><time class="timestamp" datetime="2025-12-06T13:45:00">&lt;2025-12-06 Sat 13:45-14:05&gt;</time></span></td>
+<td class="org-left">2025-12-06 Sat 13:40-14:00</td>
+<td class="org-right">-5</td>
+</tr>
+
+<tr>
+<td class="org-left">blee-lcnt</td>
+<td class="org-left"><span class="timestamp-wrapper"><time class="timestamp" datetime="2025-12-06T14:15:00">&lt;2025-12-06 Sat 14:15-14:55&gt;</time></span></td>
+<td class="org-left">2025-12-06 Sat 14:00-14:20</td>
+<td class="org-right">-15</td>
+</tr>
+
+<tr>
+<td class="org-left">commonlisp</td>
+<td class="org-left"><span class="timestamp-wrapper"><time class="timestamp" datetime="2025-12-06T14:25:00">&lt;2025-12-06 Sat 14:25-14:45&gt;</time></span></td>
+<td class="org-left">2025-12-06 Sat 14:20-14:40</td>
+<td class="org-right">-5</td>
+</tr>
+
+<tr>
+<td class="org-left">graphics</td>
+<td class="org-left"><span class="timestamp-wrapper"><time class="timestamp" datetime="2025-12-06T14:55:00">&lt;2025-12-06 Sat 14:55-15:20&gt;</time></span></td>
+<td class="org-left">2025-12-06 Sat 14:50-15:10</td>
+<td class="org-right">-5</td>
+</tr>
+
+<tr>
+<td class="org-left">greader</td>
+<td class="org-left"><span class="timestamp-wrapper"><time class="timestamp" datetime="2025-12-06T15:15:00">&lt;2025-12-06 Sat 15:15-15:25&gt;</time></span></td>
+<td class="org-left">2025-12-06 Sat 14:40-14:50</td>
+<td class="org-right">-35</td>
+</tr>
+
+<tr>
+<td class="org-left">completion</td>
+<td class="org-left"><span class="timestamp-wrapper"><time class="timestamp" datetime="2025-12-07T11:00:00">&lt;2025-12-07 Sun 11:00-11:20&gt;</time></span></td>
+<td class="org-left">2025-12-07 Sun 11:20-11:40</td>
+<td class="org-right">20</td>
+</tr>
+
+<tr>
+<td class="org-left">zettelkasten</td>
+<td class="org-left"><span class="timestamp-wrapper"><time class="timestamp" datetime="2025-12-07T13:00:00">&lt;2025-12-07 Sun 13:00-13:25&gt;</time></span></td>
+<td class="org-left">2025-12-07 Sun 13:00-13:20</td>
+<td class="org-right">0</td>
+</tr>
+
+<tr>
+<td class="org-left">hyperboleqa</td>
+<td class="org-left"><span class="timestamp-wrapper"><time class="timestamp" datetime="2025-12-07T13:45:00">&lt;2025-12-07 Sun 13:45-14:15&gt;</time></span></td>
+<td class="org-left">2025-12-07 Sun 13:40-14:10</td>
+<td class="org-right">-5</td>
+</tr>
+
+<tr>
+<td class="org-left">bookclub-tapas</td>
+<td class="org-left"><span class="timestamp-wrapper"><time class="timestamp" datetime="2025-12-07T14:45:00">&lt;2025-12-07 Sun 14:45-15:20&gt;</time></span></td>
+<td class="org-left">2025-12-07 Sun 14:30-14:50</td>
+<td class="org-right">-15</td>
+</tr>
+</tbody>
+</table>
+
+
+<a id="org26a8620"></a>
+
+## While speakers are working on their videos
+
+
+### DONE Send draft schedule :email:
+
+
+### DONE Send backstage and upload instructions :email:
+
+
+### TODO Record pronunciations
+
+
+### DONE Post the schedule publicly
+
+
+<a id="orgb754ae6"></a>
+
+## While volunteers are working on captions
+
+
+### DONE E-mail speakers asking them to confirm the pronunciations :email:
+
+
+### Record intros and opening remarks
+
+
+#### TODO Record sat-open remarks :emacsconf:record:
+
+Welcome to EmacsConf 2025, where we have fun
+exploring how much we can do with a text editor.
+It&rsquo;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&rsquo;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&rsquo;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&rsquo;s all you&rsquo;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&rsquo;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&rsquo;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&rsquo;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&rsquo;s your turn to talk.
+If you don&rsquo;t like Javascript,
+you can still ask questions via IRC
+and the hosts can read them out for you.
+We&rsquo;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&rsquo;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&rsquo;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&rsquo;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&rsquo;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&rsquo;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&rsquo;ll see if we can make things happen.
+If something goes down, we&rsquo;ll update status.emacsconf.org.
+If it doesn&rsquo;t look like we&rsquo;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&rsquo;ll post the recordings of live talks
+and Q&A sessions within the next month or so.
+If you&rsquo;d like to get an update, you can subscribe to
+the emacsconf-discuss mailing list.
+All right, let&rsquo;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&rsquo;ll probably meet us in the closing remarks.
+That&rsquo;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
+
+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&rsquo;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&rsquo;s all you&rsquo;ve got.
+As you&rsquo;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&rsquo;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&rsquo;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&rsquo;s your turn to talk.
+If you don&rsquo;t like Javascript,
+you can still ask questions via IRC
+and the hosts can read them out for you.
+
+We&rsquo;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&rsquo;ll e-mail the speakers afterwards
+and update the talk pages when they answer.
+
+We&rsquo;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&rsquo;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&rsquo;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&rsquo;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&rsquo;ll see if we can make things happen.
+If something goes down, we&rsquo;ll update status.emacsconf.org.
+If it doesn&rsquo;t look like we&rsquo;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&rsquo;ll post the recordings of live talks
+and Q&A sessions within the next month or so.
+If you&rsquo;d like to get an update, you can subscribe to
+the emacsconf-discuss mailing list.
+All right, let&rsquo;s get going.
+Leo Vivier is hosting the general track again today.
+The other volunteers and I will run around mostly backstage,
+and you&rsquo;ll probably meet us in the closing remarks.
+That&rsquo;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:
+
+
+### DONE Ask libera.chat to increase IRC limit
+
+
+<a id="orga46a5dd"></a>
+
+## After the conference
+
+
+### TODO Send thanks and follow-up questions :email:
+
+
+<a id="shifts"></a>
+
+## DONE Confirm shifts
+
+<a name="shifts"></a>
+
+AM: 9-12 PM EST, PM: 1-5 PM EST (plus a little extra for setup/transition)
+
+Saturday Dec 6 2025
+
+<table id="org41c47dd">
+
+
+<colgroup>
+<col class="org-left">
+
+<col class="org-right">
+
+<col class="org-right">
+
+<col class="org-left">
+
+<col class="org-left">
+
+<col class="org-left">
+
+<col class="org-left">
+
+<col class="org-left">
+
+<col class="org-left">
+</colgroup>
+<thead>
+<tr>
+<th scope="col" class="org-left">&nbsp;</th>
+<th scope="col" class="org-right">Start</th>
+<th scope="col" class="org-right">End</th>
+<th scope="col" class="org-left"><a href="https://emacsconf.org/2023/volunteer/host/">Host</a></th>
+<th scope="col" class="org-left">Streamer</th>
+<th scope="col" class="org-left"><a href="https://emacsconf.org/2023/volunteer/checkin/">Checkin</a></th>
+<th scope="col" class="org-left"><a href="https://emacsconf.org/2023/volunteer/irc/">IRC</a></th>
+<th scope="col" class="org-left"><a href="https://emacsconf.org/2023/volunteer/pad/">Pad</a></th>
+<th scope="col" class="org-left">Coord</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td class="org-left">Gen AM</td>
+<td class="org-right">09:00</td>
+<td class="org-right">12:00</td>
+<td class="org-left">zaeph</td>
+<td class="org-left">sachac</td>
+<td class="org-left">sachac</td>
+<td class="org-left">&nbsp;</td>
+<td class="org-left">&nbsp;</td>
+<td class="org-left">sachac</td>
+</tr>
+
+<tr>
+<td class="org-left">Gen PM</td>
+<td class="org-right">13:00</td>
+<td class="org-right">17:00</td>
+<td class="org-left">zaeph</td>
+<td class="org-left">sachac</td>
+<td class="org-left">sachac</td>
+<td class="org-left">&nbsp;</td>
+<td class="org-left">&nbsp;</td>
+<td class="org-left">sachac</td>
+</tr>
+
+<tr>
+<td class="org-left">Dev AM</td>
+<td class="org-right">10:00</td>
+<td class="org-right">12:00</td>
+<td class="org-left">corwin</td>
+<td class="org-left">sachac</td>
+<td class="org-left">sachac</td>
+<td class="org-left">&nbsp;</td>
+<td class="org-left">&nbsp;</td>
+<td class="org-left">sachac</td>
+</tr>
+
+<tr>
+<td class="org-left">Dev PM</td>
+<td class="org-right">13:00</td>
+<td class="org-right">17:00</td>
+<td class="org-left">corwin</td>
+<td class="org-left">sachac</td>
+<td class="org-left">sachac</td>
+<td class="org-left">&nbsp;</td>
+<td class="org-left">&nbsp;</td>
+<td class="org-left">sachac</td>
+</tr>
+</tbody>
+</table>
+
+Sunday Dec 7 2025
+
+<table id="org22aafa8">
+
+
+<colgroup>
+<col class="org-left">
+
+<col class="org-right">
+
+<col class="org-right">
+
+<col class="org-left">
+
+<col class="org-left">
+
+<col class="org-left">
+
+<col class="org-left">
+
+<col class="org-left">
+
+<col class="org-left">
+</colgroup>
+<thead>
+<tr>
+<th scope="col" class="org-left">&nbsp;</th>
+<th scope="col" class="org-right">Start</th>
+<th scope="col" class="org-right">End</th>
+<th scope="col" class="org-left"><a href="https://emacsconf.org/2023/volunteer/host/">Host</a></th>
+<th scope="col" class="org-left">Streamer</th>
+<th scope="col" class="org-left"><a href="https://emacsconf.org/2023/volunteer/checkin/">Checkin</a></th>
+<th scope="col" class="org-left"><a href="https://emacsconf.org/2023/volunteer/irc/">IRC</a></th>
+<th scope="col" class="org-left"><a href="https://emacsconf.org/2023/volunteer/pad/">Pad</a></th>
+<th scope="col" class="org-left">Coord</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td class="org-left">Gen AM</td>
+<td class="org-right">09:00</td>
+<td class="org-right">12:00</td>
+<td class="org-left">zaeph/corwin</td>
+<td class="org-left">sachac</td>
+<td class="org-left">sachac</td>
+<td class="org-left">&nbsp;</td>
+<td class="org-left">&nbsp;</td>
+<td class="org-left">sachac</td>
+</tr>
+
+<tr>
+<td class="org-left">Gen PM</td>
+<td class="org-right">13:00</td>
+<td class="org-right">17:00</td>
+<td class="org-left">zaeph/corwin</td>
+<td class="org-left">sachac</td>
+<td class="org-left">sachac</td>
+<td class="org-left">&nbsp;</td>
+<td class="org-left">&nbsp;</td>
+<td class="org-left">sachac</td>
+</tr>
+</tbody>
+</table>
+
+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&rsquo;ll help you figure out what you need to learn.
+
+ `(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"))))))
+
+
+<a id="check-emacsconf-infrastructure"></a>
+
+# TODO Check EmacsConf infrastructure :project:
+
+- [ ] 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
+
+
+<a id="check-emacsconf-infrastructure-bigbluebutton"></a>
+
+## TODO BigBlueButton
+
+- Plan: Scale up the bbb.emacsverse.org on Sacha&rsquo;s Linode account
+- [Installation notes from last year](https://emacsconf.org/2024/organizers-notebook/#check-emacsconf-infrastructure-bigbluebutton)
+
+
+### DONE Create meeting rooms for each speaker
+
+[Creating talk BBB rooms](file:///home/sacha/proj/emacsconf/wiki/organizers-notebook/index.md)
+
+
+### TODO Back up after the conference
+
+[Backing up BBB](file:///home/sacha/proj/emacsconf/wiki/organizers-notebook/index.md)
+
+
+### DONE Set up moderator access codes for all the meeting rooms, and make it so people can start the meeting
+
+[Setting up moderator access codes](file:///home/sacha/proj/emacsconf/wiki/organizers-notebook/index.md)
+
+
+### DONE Check BBB audio from my phone
+
+
+### Customize BigBlueButton branding
+
+
+#### TODO Change background presentation
+
+<https://docs.bigbluebutton.org/3.0/administration/customize/#change-the-default-presentation>
+
+
+#### TODO Modify landing page
+
+/var/www/bigbluebutton-default/assets/index.html
+keep backup copy as it will be overwritten when bbb-conf is called
+
+
+#### TODO Change default welcome message
+
+<https://docs.bigbluebutton.org/3.0/administration/customize/#change-the-default-welcome-message>
+
+
+#### TODO Change html5 title
+
+/usr/share/bigbluebutton/html5-client/private/config/settings.yml
+
+TARGET=/usr/share/bigbluebutton/html5-client/private/config/settings.yml
+yq e -i &ldquo;.public.app.clientTitle = \\&rdquo;EmacsConf\\&ldquo;&rdquo; $TARGET
+
+
+#### TODO Try live captions
+
+<https://docs.bigbluebutton.org/3.0/administration/customize/#enable-live-captions>
+
+
+#### TODO Explore meeting layout? Default to custom, hosts will need to drag people&rsquo;s webcam over if there&rsquo;s a share
+
+
+<a id="check-emacsconf-infrastructure-irc-web-client"></a>
+
+## IRC web client
+
+On front0:
+cd ~thelounge; sudo -u thelounge nohup node /usr/bin/thelounge start
+
+
+### DONE Ask libera.chat to increase connections allowed from chat.emacsconf.org on Dec 6 and 7
+
+[IRC web client](file:///home/sacha/proj/emacsconf/wiki/organizers-notebook/index.md)
+
+
+<a id="check-emacsconf-infrastructure-irc-announcements"></a>
+
+## IRC announcements
+
+
+### TODO Confirm manual IRC announcements
+
+
+### TODO Confirm automated IRC announcements from res
+
+
+<a id="check-emacsconf-infrastructure-media"></a>
+
+## Media
+
+
+### DONE Switch public media to unprotected root before the conference
+
+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`.
+
+
+<a id="check-emacsconf-infrastructure-publishing-resources-to-the-wiki"></a>
+
+## DONE Publishing resources to the wiki
+
+ansible-playbook -i inventory.yml prod-playbook.yml &ndash;tags publish
+
+
+<a id="check-emacsconf-infrastructure-publishing-videos-to-the-media-server"></a>
+
+## TODO Publishing videos to the media server
+
+
+<a id="check-emacsconf-infrastructure-playing-videos-switching-to-windows"></a>
+
+## Playing videos, switching to windows
+
+
+### DONE Generate test videos for everything
+
+emacsconf-stream-generate-test-videos
+
+
+### TODO Document how to get that set up again
+
+
+<a id="check-emacsconf-infrastructure-etherpad"></a>
+
+## Etherpad
+
+
+### STARTED Try upgrading to 2.x
+
+<https://galaxy.ansible.com/ui/repo/published/s3lph/pads/content/role/etherpad/>
+<a href="https://git.emacsconf.org/emacsconf-ansible/tree/roles/pad/tasks/main.yml">roles/pad/tasks/main.yml</a>
+
+nodemon -e yml -w ../../roles/pad/tasks/main.yml -x &ldquo;vagrant up &ndash;provision&rdquo;
+
+<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
+
+
+### TODO Generate the main index
+
+
+<a id="check-emacsconf-infrastructure-do-a-dry-run"></a>
+
+## TODO Do a dry run
+
+
+### TODO Generate all the test assets
+
+
+### DONE Test connecting to VNC and streaming via OBS :emacsconf:
+
+
+<a id="check-emacsconf-infrastructure-resizing"></a>
+
+## Resizing
+
+live0: 64GB
+front0: 32GB
+meet: 64GB
+
+
+### TODO Resize nodes before production
+
+live0: 64GB
+front0: 32GB
+meet: 64GB
+
+
+### TODO Resize nodes after production
+
+live0: nanode
+front0: nanode
+
+
+### TODO Resize meet after production
+
+meet: nanode
+
+
+<a id="processes-and-notes"></a>
+
+# Processes and notes
+
+
+<a id="processes-and-notes-hosting"></a>
+
+## Hosting
+
+
+### TODO Finalize host for dev track
+
+
+<a id="processes-and-notes-erc"></a>
+
+## ERC
+
+Some convenient commands are defined in <a href="https://git.emacsconf.org/emacsconf-el/tree/emacsconf-erc.el">emacsconf-erc.el</a>.
+
+<table>
+
+
+<colgroup>
+<col class="org-left">
+
+<col class="org-left">
+</colgroup>
+<tbody>
+<tr>
+<td class="org-left">/opall</td>
+<td class="org-left">Grant operator status in the Emacsconf channels</td>
+</tr>
+
+<tr>
+<td class="org-left">/deopall</td>
+<td class="org-left">Remove operator status in the Emacsconf channels</td>
+</tr>
+
+<tr>
+<td class="org-left">/conftopic</td>
+<td class="org-left">Set the first part of the topic</td>
+</tr>
+</tbody>
+</table>
+
+
+<a id="org9f7b814"></a>
+
+## Uploading videos
+
+
+### YouTube
+
+emacsconf-publish-youtube-step-through-publishing
+
+
+### Toobnix
+
+
+<a id="decisions"></a>
+
+# Decisions
+
+
+<a id="support-code"></a>
+
+# Support code
+
+ (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))
+
diff --git a/2025/organizers-notebook/index.org b/2025/organizers-notebook/index.org
new file mode 100644
index 00000000..2160b922
--- /dev/null
+++ b/2025/organizers-notebook/index.org
@@ -0,0 +1,1063 @@
+# [[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 [/2025/organizers-notebook/index.org](/2025/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 2024](/2024/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 | [2025-06-27 Fri] | |
+| CFP deadline | [2025-09-19 Fri] | 84 |
+| Speaker notifications | [2025-09-26 Fri] | |
+| Publish schedule | [2025-10-24 Fri] | |
+| Video submission deadline | [2025-10-31 Fri] | 42 |
+| EmacsConf | [2025-12-06 Sat] | 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:
+- [ ] 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: [2025-06-17 Tue 10:41]
+:LOGBOOK:
+- State "DONE" from "TODO" [2025-06-17 Tue 10:41]
+:END:
+
+** DONE Draft CFP
+CLOSED: [2025-09-30 Tue 09:37]
+: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: [2025-06-24 Tue 21:15] DEADLINE: <2025-06-23 Mon>
+:PROPERTIES:
+:CUSTOM_ID: phases-draft-cfp-check-with-other-organizers
+:END:
+**** DONE Update dates in emacsconf.el
+CLOSED: [2025-06-25 Wed 09:13]
+
+[[file:~/proj/emacsconf/lisp/emacsconf.el]]
+[[file:~/proj/emacsconf/lisp/emacsconf-erc.el]]
+**** DONE Update conf topic
+CLOSED: [2025-09-30 Tue 09:37]
+[[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: [2025-09-30 Tue 09:37]
+
+- [ ] cfp
+- [ ] submit
+
+**** DONE Post CFP in the usual places
+CLOSED: [2025-06-30 Mon 16:32] SCHEDULED: <2025-06-27 Fri>
+: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
+
+** DONE Draft schedule
+CLOSED: [2025-11-04 Tue 12:05]
+: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 "2025-12-06 9:00"
+ :end "2025-12-06 18:00"
+ :tracks ("General" "Development"))
+ (:label "Sunday"
+ :start "2025-12-07 9:00"
+ :end "2025-12-07 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 "2025-12-06 09:00" :set-track "General")
+ sat-open
+ org-babel ; <= 10:30 EST
+ reference ; any; plan before bibliography talk
+ gmail ; <= 12:00 EST
+ gnus
+ latex ; >= 11:00 EST and <= 13:00 EST
+ (lunch :start "12:00")
+ calc ; >= 10:00 EST and <= 16:00 EST Saturday
+ blee-lcnt ; any
+ greader ; any time
+ open-mic
+ sat-close
+ ("DEV Saturday, Dec 6" :start "2025-12-06 9:30" :set-track "Development")
+ schemacs ; <= 11:00 EST
+ juicemacs ; <= 11:00 EST
+ swanky ; any
+ python ; <= 14:00 EST
+ (lunch :start "12:00")
+ llm ; >= 10:00 EST
+ private-ai ; any
+ commonlisp ; >= 14:00 EST
+ graphics
+ ("GEN Sunday, Dec 7" :start "2025-12-07 09:00" :set-track "General")
+ sun-open
+ modern ; any
+ reader ; any
+ weights ; <= 15:00 EST
+ completion
+ (lunch :start "12:00" :start "16:30")
+ zettelkasten ; >= 12:00 EST
+ hyperboleqa ; >= 12:00 EST and <= 15:00 EST
+ gardening ; >= 11:00 EST
+ bookclub-tapas ; >= 13:00 EST
+ (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 16:00 before 16:30
+sunday closing remarks: Starts at 15:40 before 16:30
+: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:
+
+- [2025-12-05 Fri] cancelled emacsconf:bibliography, moved emacsconf:zettelkasten to Saturday
+- [2025-12-03 Wed] moved emacsconf:gnus to Sat morning; added time to talks to accommodate actual video length
+- [2025-12-01 Mon] cancelled emacsconf:languages
+- [2025-11-27 Thu] cancelled emacsconf:authoring
+- [2025-11-24 Mon] uncancelled emacsconf:weights
+- [2025-11-22 Sat] emacsconf:weights and emacsconf:claude-code cancelled, moved emacsconf:gnus and emacsconf:gardening earlier for a lighter, earlier close. They're both async. Added emacsconf:graphics
+- [2025-11-11 Tue] emacsconf:n-angulator cancelled
+- [2025-11-01 Sat] emacsconf:life cancelled
+- [2025-10-31 Fri] emacsconf:writing cancelled
+- AI dev afternoon: emacsconf:llm, emacsconf:claude-code, emacsconf:private-ai feels like a good progression
+- I kinda like this spread-out combo of emacsconf:zettelkasten, emacsconf:gardening, emacsconf:writing, and emacsconf:bookclub-tapas on Sunday afternoon
+- I spread emacsconf:reference, emacsconf:latex, emacsconf:bibliography, emacsconf:authoring, and emacsconf:blee-lcnt in case people want to hang out in each other's Q&A sessions
+- I wanted to generally have live Q&A in between talks that don't have live Q&A.
+- It's okay to have a shorter day, since this is easier for people who are in Europe.
+- emacsconf:hyperboleqa is all Q&A.
+- We could have an open mic session or a panel before emacsconf:sat-close
+- Sunday morning in 2023 had some packet loss issues at around 9:30
+** 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
+
+#+RESULTS:
+:results:
+| schemacs | <2025-12-06 Sat 09:30-09:55> | 2025-12-06 Sat 09:30-09:45 | 0 |
+| reference | <2025-12-06 Sat 09:30-09:55> | 2025-12-06 Sat 09:30-09:50 | 0 |
+| gmail | <2025-12-06 Sat 10:15-10:40> | 2025-12-06 Sat 10:10-10:30 | -5 |
+| juicemacs | <2025-12-06 Sat 10:15-10:35> | 2025-12-06 Sat 10:05-10:25 | -10 |
+| python | <2025-12-06 Sat 11:20-11:40> | 2025-12-06 Sat 11:05-11:25 | -15 |
+| latex | <2025-12-06 Sat 11:25-11:45> | 2025-12-06 Sat 11:10-11:30 | -15 |
+| llm | <2025-12-06 Sat 13:00-13:25> | 2025-12-06 Sat 13:00-13:20 | 0 |
+| calc | <2025-12-06 Sat 13:40-14:05> | 2025-12-06 Sat 13:40-13:50 | 0 |
+| private-ai | <2025-12-06 Sat 13:45-14:05> | 2025-12-06 Sat 13:40-14:00 | -5 |
+| blee-lcnt | <2025-12-06 Sat 14:15-14:55> | 2025-12-06 Sat 14:00-14:20 | -15 |
+| commonlisp | <2025-12-06 Sat 14:25-14:45> | 2025-12-06 Sat 14:20-14:40 | -5 |
+| graphics | <2025-12-06 Sat 14:55-15:20> | 2025-12-06 Sat 14:50-15:10 | -5 |
+| greader | <2025-12-06 Sat 15:15-15:25> | 2025-12-06 Sat 14:40-14:50 | -35 |
+| completion | <2025-12-07 Sun 11:00-11:20> | 2025-12-07 Sun 11:20-11:40 | 20 |
+| zettelkasten | <2025-12-07 Sun 13:00-13:25> | 2025-12-07 Sun 13:00-13:20 | 0 |
+| hyperboleqa | <2025-12-07 Sun 13:45-14:15> | 2025-12-07 Sun 13:40-14:10 | -5 |
+| bookclub-tapas | <2025-12-07 Sun 14:45-15:20> | 2025-12-07 Sun 14:30-14:50 | -15 |
+:end:
+
+** While speakers are working on their videos
+*** DONE Send draft schedule :email:
+CLOSED: [2025-10-03 Fri 11:07] SCHEDULED: <2025-10-03 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:
+
+*** DONE Send backstage and upload instructions :email:
+CLOSED: [2025-10-14 Tue 18:31] SCHEDULED: <2025-10-10 Fri>
+:PROPERTIES:
+:CREATED: [2025-09-30 Tue 09:39]
+:END:
+*** TODO Record pronunciations
+*** DONE Post the schedule publicly
+CLOSED: [2025-11-04 Tue 12:05]
+** While volunteers are working on captions
+*** DONE E-mail speakers asking them to confirm the pronunciations :email:
+CLOSED: [2025-11-21 Fri 15:09] SCHEDULED: <2025-11-21 Fri>
+: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:
+*** DONE Ask libera.chat to increase IRC limit
+CLOSED: [2025-11-12 Wed 13:50]
+** After the conference
+*** TODO Send thanks and follow-up questions :email:
+** DONE Confirm shifts
+CLOSED: [2025-11-22 Sat 17:32] SCHEDULED: <2025-11-22 Sat>
+: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 :project:
+:PROPERTIES:
+:CUSTOM_ID: check-emacsconf-infrastructure
+: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
+
+** TODO [#A] 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]]
+
+*** DONE Create meeting rooms for each speaker
+CLOSED: [2025-11-12 Wed 13:50]
+: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
+SCHEDULED: <2025-12-13 Sat>
+: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]]
+
+*** DONE Set up moderator access codes for all the meeting rooms, and make it so people can start the meeting
+CLOSED: [2025-11-12 Wed 13:50]
+: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]]
+*** DONE Check BBB audio from my phone
+CLOSED: [2025-11-21 Fri 15:10] SCHEDULED: <2025-11-21 Fri>
+: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
+
+*** DONE Ask libera.chat to increase connections allowed from chat.emacsconf.org on Dec 6 and 7
+CLOSED: [2025-11-12 Wed 13:52]
+: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:
+
+*** DONE Switch public media to unprotected root before the conference
+CLOSED: [2025-11-30 Sun 16:51] SCHEDULED: <2025-11-29 Sat>
+: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=.
+** DONE Publishing resources to the wiki
+CLOSED: [2025-11-30 Sun 16:51]
+: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:
+
+*** DONE Generate test videos for everything
+CLOSED: [2025-11-30 Sun 16:51]
+: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:
+*** STARTED 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
+SCHEDULED: <2025-12-05 Fri>
+: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:
+*** DONE Test connecting to VNC and streaming via OBS :emacsconf:
+CLOSED: [2025-11-15 Sat 15:18] SCHEDULED: <2025-11-14 Fri>
+: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
+
+*** DONE [#A] Resize nodes before production
+CLOSED: [2025-12-05 Fri 21:07] SCHEDULED: <2025-12-05 Fri>
+:PROPERTIES:
+:CUSTOM_ID: check-emacsconf-infrastructure-resizing-resize-nodes-before-production
+:END:
+
+live0: 64GB
+front0: 32GB
+meet: 64GB
+
+*** TODO [#A] Resize nodes after production
+SCHEDULED: <2025-12-08 Mon>
+:PROPERTIES:
+:CUSTOM_ID: check-emacsconf-infrastructure-resizing-resize-nodes-after-production
+:END:
+
+live0: nanode
+front0: nanode
+*** TODO [#A] Resize meet after production
+SCHEDULED: <2025-12-10 Wed>
+:PROPERTIES:
+:CUSTOM_ID: check-emacsconf-infrastructure-resizing-resize-meet-after-production
+:END:
+meet: nanode
+* Processes and notes
+:PROPERTIES:
+:CUSTOM_ID: processes-and-notes
+:END:
+** Hosting
+:PROPERTIES:
+:CUSTOM_ID: processes-and-notes-hosting
+:END:
+*** TODO Finalize host for dev track
+:PROPERTIES:
+:CUSTOM_ID: processes-and-notes-hosting-finalize-host-for-dev-track
+:END:
+** ERC
+:PROPERTIES:
+:CUSTOM_ID: processes-and-notes-erc
+:END:
+
+Some convenient commands are defined in emacsconf-el:emacsconf-erc.el.
+
+| /opall | Grant operator status in the Emacsconf channels |
+| /deopall | Remove operator status in the Emacsconf channels |
+| /conftopic | Set the first part of the topic |
+** 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/2025/organizers-notebook/schedule.svg b/2025/organizers-notebook/schedule.svg
new file mode 100644
index 00000000..ffc2b64f
--- /dev/null
+++ b/2025/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/2025/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/2025/talks/org-babel" title="Making Org-Babel reactive" data-slug="org-babel"><title> 9:10- 9:20 Making Org-Babel reactive</title><rect x="40" y="53" opacity="0.8" width="84" height="13" stroke="black" stroke-dasharray="5,5,5" fill="lightblue"></rect><g transform="translate(40,64)"><text fill="black" x="0" y="0" font-size="10" transform="nil">org-babel</text></g></a><a href="https://emacsconf.org/2025/talks/reference" title="Emacs as a fully-fledged reference manager" data-slug="reference"><title> 9:30- 9:55 Emacs as a fully-fledged reference manager</title><rect x="40" y="81" opacity="0.8" width="84" height="34" stroke="black" stroke-dasharray="" fill="gray"></rect><g transform="translate(40,113)"><text fill="black" x="0" y="0" font-size="10" transform="nil">reference</text></g></a><a href="https://emacsconf.org/2025/talks/gmail" title="org-gmail: A deep integration of Gmail into your Org Mode" data-slug="gmail"><title>10:15-10:40 org-gmail: A deep integration of Gmail into your Org Mode</title><rect x="40" y="142" opacity="0.8" width="84" height="34" stroke="black" stroke-dasharray="" fill="lightblue"></rect><g transform="translate(40,174)"><text fill="black" x="0" y="0" font-size="10" transform="nil">gmail</text></g></a><a href="https://emacsconf.org/2025/talks/gnus" title="Reading and writing emails in GNU Emacs with Gnus" data-slug="gnus"><title>11:00-11:25 Reading and writing emails in GNU Emacs with Gnus</title><rect x="40" y="204" opacity="0.8" width="84" height="34" stroke="black" stroke-dasharray="" fill="gray"></rect><g transform="translate(40,236)"><text fill="black" x="0" y="0" font-size="10" transform="nil">gnus</text></g></a><a href="https://emacsconf.org/2025/talks/latex" title="LaTeX export in org-mode: the overhaul" data-slug="latex"><title>11:45-12:05 LaTeX export in org-mode: the overhaul</title><rect x="40" y="266" opacity="0.8" width="84" height="27" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(40,291)"><text fill="black" x="0" y="0" font-size="10" transform="nil">latex</text></g></a><a href="https://emacsconf.org/2025/talks/calc" title="Basic Calc functionality for engineering or electronics" data-slug="calc"><title> 1:00- 1:25 Basic Calc functionality for engineering or electronics</title><rect x="40" y="369" opacity="0.8" width="84" height="34" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(40,401)"><text fill="black" x="0" y="0" font-size="10" transform="nil">calc</text></g></a><a href="https://emacsconf.org/2025/talks/blee-lcnt" title="Blee-LCNT: An Emacs-centered content production and self-publication framework" data-slug="blee-lcnt"><title> 1:35- 2:15 Blee-LCNT: An Emacs-centered content production and self-publication framework</title><rect x="40" y="417" opacity="0.8" width="84" height="54" stroke="black" stroke-dasharray="" fill="gray"></rect><g transform="translate(40,469)"><text fill="black" x="0" y="0" font-size="10" transform="nil">blee-lcnt</text></g></a><a href="https://emacsconf.org/2025/talks/greader" title="GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence" data-slug="greader"><title> 2:35- 2:40 GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence</title><rect x="40" y="499" opacity="0.8" width="84" height="6" stroke="black" stroke-dasharray="5,5,5" fill="gray"></rect><g transform="translate(40,503)"><text fill="black" x="0" y="0" font-size="10" transform="nil">greader</text></g></a><a href="https://emacsconf.org/2025/talks/open-mic" title="Open session" data-slug="open-mic"><title> 2:50- 3:40 Open session</title><rect x="40" y="520" opacity="0.8" width="84" height="68" stroke="black" stroke-dasharray="" fill="gray"></rect><g transform="translate(40,586)"><text fill="black" x="0" y="0" font-size="10" transform="nil">open-mic</text></g></a><a href="https://emacsconf.org/2025/talks/sat-close" title="Saturday closing remarks / open session" data-slug="sat-close"><title> 4:00- 4:10 Saturday closing remarks / open session</title><rect x="40" y="616" opacity="0.8" width="84" height="13" stroke="black" stroke-dasharray="" fill="gray"></rect><g transform="translate(40,627)"><text fill="black" x="0" y="0" font-size="10" transform="nil">sat-close</text></g></a><a href="https://emacsconf.org/2025/talks/schemacs" title="One year progress update Schemacs (formerly Gypsum)" data-slug="schemacs"><title> 9:30- 9:55 One year progress update Schemacs (formerly Gypsum)</title><rect x="125" y="81" opacity="0.8" width="84" height="34" stroke="black" stroke-dasharray="" fill="lightblue"></rect><g transform="translate(125,113)"><text fill="black" x="0" y="0" font-size="10" transform="nil">schemacs</text></g></a><a href="https://emacsconf.org/2025/talks/juicemacs" title="Juicemacs: exploring speculative JIT compilation for ELisp in Java" data-slug="juicemacs"><title>10:15-10:35 Juicemacs: exploring speculative JIT compilation for ELisp in Java</title><rect x="125" y="142" opacity="0.8" width="84" height="27" stroke="black" stroke-dasharray="5,5,5" fill="lightblue"></rect><g transform="translate(125,167)"><text fill="black" x="0" y="0" font-size="10" transform="nil">juicemacs</text></g></a><a href="https://emacsconf.org/2025/talks/swanky" title="Swanky Python: Interactive development for Python" data-slug="swanky"><title>10:45-11:10 Swanky Python: Interactive development for Python</title><rect x="125" y="184" opacity="0.8" width="84" height="34" stroke="black" stroke-dasharray="5,5,5" fill="gray"></rect><g transform="translate(125,216)"><text fill="black" x="0" y="0" font-size="10" transform="nil">swanky</text></g></a><a href="https://emacsconf.org/2025/talks/python" title="Interactive Python programming in Emacs" data-slug="python"><title>11:20-11:40 Interactive Python programming in Emacs</title><rect x="125" y="232" opacity="0.8" width="84" height="27" stroke="black" stroke-dasharray="" fill="lightblue"></rect><g transform="translate(125,257)"><text fill="black" x="0" y="0" font-size="10" transform="nil">python</text></g></a><a href="https://emacsconf.org/2025/talks/llm" title="Emacs, editors, and LLM driven workflows" data-slug="llm"><title> 1:00- 1:25 Emacs, editors, and LLM driven workflows</title><rect x="125" y="369" opacity="0.8" width="84" height="34" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(125,401)"><text fill="black" x="0" y="0" font-size="10" transform="nil">llm</text></g></a><a href="https://emacsconf.org/2025/talks/private-ai" title="Emacs and private AI: a great match" data-slug="private-ai"><title> 1:45- 2:05 Emacs and private AI: a great match</title><rect x="125" y="431" opacity="0.8" width="84" height="27" stroke="black" stroke-dasharray="" fill="gray"></rect><g transform="translate(125,456)"><text fill="black" x="0" y="0" font-size="10" transform="nil">private-ai</text></g></a><a href="https://emacsconf.org/2025/talks/commonlisp" title="Common Lisp images communicating like-a-human through shared Emacs slime and eev" data-slug="commonlisp"><title> 2:25- 2:55 Common Lisp images communicating like-a-human through shared Emacs slime and eev</title><rect x="125" y="486" opacity="0.8" width="84" height="41" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(125,525)"><text fill="black" x="0" y="0" font-size="10" transform="nil">commonlisp</text></g></a><a href="https://emacsconf.org/2025/talks/graphics" title="Modern Emacs/Elisp hardware/software accelerated graphics" data-slug="graphics"><title> 3:05- 3:30 Modern Emacs/Elisp hardware/software accelerated graphics</title><rect x="125" y="540" opacity="0.8" width="84" height="34" stroke="black" stroke-dasharray="" fill="gray"></rect><g transform="translate(125,572)"><text fill="black" x="0" y="0" font-size="10" transform="nil">graphics</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/2025/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/2025/talks/modern" title="Some problems of modernizing Emacs" data-slug="modern"><title> 9:10- 9:30 Some problems of modernizing Emacs</title><rect x="40" y="53" opacity="0.8" width="84" height="27" stroke="black" stroke-dasharray="5,5,5" fill="gray"></rect><g transform="translate(40,78)"><text fill="black" x="0" y="0" font-size="10" transform="nil">modern</text></g></a><a href="https://emacsconf.org/2025/talks/reader" title="An introduction to the Emacs Reader" data-slug="reader"><title> 9:40-10:15 An introduction to the Emacs Reader</title><rect x="40" y="94" opacity="0.8" width="84" height="48" stroke="black" stroke-dasharray="" fill="gray"></rect><g transform="translate(40,140)"><text fill="black" x="0" y="0" font-size="10" transform="nil">reader</text></g></a><a href="https://emacsconf.org/2025/talks/weights" title="Weightlifting tracking with Emacs on Android" data-slug="weights"><title>10:35-10:45 Weightlifting tracking with Emacs on Android</title><rect x="40" y="170" opacity="0.8" width="84" height="13" stroke="black" stroke-dasharray="" fill="lightblue"></rect><g transform="translate(40,181)"><text fill="black" x="0" y="0" font-size="10" transform="nil">weights</text></g></a><a href="https://emacsconf.org/2025/talks/completion" title="corfu+yasnippet: Easier than I thought" data-slug="completion"><title>11:05-11:30 corfu+yasnippet: Easier than I thought</title><rect x="40" y="211" opacity="0.8" width="84" height="34" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(40,243)"><text fill="black" x="0" y="0" font-size="10" transform="nil">completion</text></g></a><a href="https://emacsconf.org/2025/talks/zettelkasten" title="Zettelkasten for regular Emacs hackers" data-slug="zettelkasten"><title> 1:00- 1:25 Zettelkasten for regular Emacs hackers</title><rect x="40" y="369" opacity="0.8" width="84" height="34" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(40,401)"><text fill="black" x="0" y="0" font-size="10" transform="nil">zettelkasten</text></g></a><a href="https://emacsconf.org/2025/talks/hyperboleqa" title="Questions and answers to help you fly with Hyperbole" data-slug="hyperboleqa"><title> 1:45- 2:15 Questions and answers to help you fly with Hyperbole</title><rect x="40" y="431" opacity="0.8" width="84" height="41" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(40,470)"><text fill="black" x="0" y="0" font-size="10" transform="nil">hyperboleqa</text></g></a><a href="https://emacsconf.org/2025/talks/gardening" title="Gardening in Emacs: A Windows user's tale of tending, tweaking, and triumph" data-slug="gardening"><title> 2:15- 2:35 Gardening in Emacs: A Windows user's tale of tending, tweaking, and triumph</title><rect x="40" y="472" opacity="0.8" width="84" height="27" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(40,497)"><text fill="black" x="0" y="0" font-size="10" transform="nil">gardening</text></g></a><a href="https://emacsconf.org/2025/talks/bookclub-tapas" title="Bookclub tapas" data-slug="bookclub-tapas"><title> 2:45- 3:20 Bookclub tapas</title><rect x="40" y="513" opacity="0.8" width="84" height="48" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(40,559)"><text fill="black" x="0" y="0" font-size="10" transform="nil">bookclub-tapas</text></g></a><a href="https://emacsconf.org/2025/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"><title> 3:40- 3:50 Sunday closing remarks</title><rect x="40" y="589" opacity="0.8" width="84" height="13" stroke="black" stroke-dasharray="" fill="gray"></rect><g transform="translate(40,600)"><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/2025/prepare.md b/2025/prepare.md
new file mode 100644
index 00000000..437289e0
--- /dev/null
+++ b/2025/prepare.md
@@ -0,0 +1,313 @@
+[[!meta title="Preparing your talk"]]
+[[!meta copyright="Copyright &copy; 2019, 2020 Amin Bandali; 2021, 2022 Amin Bandali, Sacha Chua, Leo Vivier; 2023-2025 Sacha Chua"]]
+
+This page contains tips for preparing your talk. (Target date: on or before
+**October 31, 2025**) 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 2025 run smoothly, please prerecord your talk, and
+plan to upload your video(s) by **October 31, 2025** 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 2025!
+
+# 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: <2025-10-31 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/2025/prepare - tips and instructions
+
+Questions:
+- public: mailto:emacsconf-org@gnu.org
+- private: mailto:emacsconf-org-private@gnu.org
+
+Note: 2025-10-31 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 2025!
+
+<!-- <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/2025/schedule-2025-12-06.md b/2025/schedule-2025-12-06.md
new file mode 100644
index 00000000..fdfa4b6c
--- /dev/null
+++ b/2025/schedule-2025-12-06.md
@@ -0,0 +1 @@
+<div class="schedule-svg-container"><svg width="800" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Schedule for Saturday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="/2025/talks/sat-open" title="Saturday opening remarks" data-slug="sat-open"> <title> 9:00- 9:10 Saturday opening remarks</title> <rect x="0" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(13,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="/2025/talks/org-babel" title="Making Org-Babel reactive" data-slug="org-babel"> <title> 9:10- 9:20 Making Org-Babel reactive</title> <rect x="15" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(28,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> org-babel</text></g></a> <a href="/2025/talks/reference" title="Emacs as a fully-fledged reference manager" data-slug="reference"> <title> 9:30- 9:55 Emacs as a fully-fledged reference manager</title> <rect x="47" y="15" opacity="0.8" width="39" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(84,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> reference</text></g></a> <a href="/2025/talks/gmail" title="org-gmail: A deep integration of Gmail into your Org Mode" data-slug="gmail"> <title> 10:15-10:40 org-gmail: A deep integration of Gmail into your Org Mode</title> <rect x="117" y="15" opacity="0.8" width="39" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(154,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gmail</text></g></a> <a href="/2025/talks/gnus" title="Reading and writing emails in GNU Emacs with Gnus" data-slug="gnus"> <title> 10:50-11:15 Reading and writing emails in GNU Emacs with Gnus</title> <rect x="172" y="15" opacity="0.8" width="39" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(209,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gnus</text></g></a> <a href="/2025/talks/latex" title="LaTeX export in org-mode: the overhaul" data-slug="latex"> <title> 11:25-11:45 LaTeX export in org-mode: the overhaul</title> <rect x="227" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(256,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> latex</text></g></a> <a href="/2025/talks/calc" title="Basic Calc functionality for engineering or electronics" data-slug="calc"> <title> 1:00- 1:25 Basic Calc functionality for engineering or electronics</title> <rect x="376" y="15" opacity="0.8" width="39" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(413,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> calc</text></g></a> <a href="/2025/talks/blee-lcnt" title="Blee-LCNT: An Emacs-centered content production and self-publication framework" data-slug="blee-lcnt"> <title> 1:35- 2:15 Blee-LCNT: An Emacs-centered content production and self-publication framework</title> <rect x="431" y="15" opacity="0.8" width="62" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(491,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> blee-lcnt</text></g></a> <a href="/2025/talks/greader" title="GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence" data-slug="greader"> <title> 2:35- 2:40 GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence</title> <rect x="525" y="15" opacity="0.8" width="7" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(530,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> greader</text></g></a> <a href="/2025/talks/open-mic" title="Open session" data-slug="open-mic"> <title> 2:50- 3:40 Open session</title> <rect x="549" y="15" opacity="0.8" width="78" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(625,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> open-mic</text></g></a> <a href="/2025/talks/sat-close" title="Saturday closing remarks / open session" data-slug="sat-close"> <title> 4:00- 4:10 Saturday closing remarks / open session</title> <rect x="658" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(671,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="/2025/talks/schemacs" title="One year progress update Schemacs (formerly Gypsum)" data-slug="schemacs"> <title> 9:30- 9:55 One year progress update Schemacs (formerly Gypsum)</title> <rect x="47" y="75" opacity="0.8" width="39" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(84,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> schemacs</text></g></a> <a href="/2025/talks/juicemacs" title="Juicemacs: exploring speculative JIT compilation for ELisp in Java" data-slug="juicemacs"> <title> 10:15-10:35 Juicemacs: exploring speculative JIT compilation for ELisp in Java</title> <rect x="117" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(146,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> juicemacs</text></g></a> <a href="/2025/talks/swanky" title="Swanky Python: Interactive development for Python" data-slug="swanky"> <title> 10:45-11:10 Swanky Python: Interactive development for Python</title> <rect x="164" y="75" opacity="0.8" width="39" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(201,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> swanky</text></g></a> <a href="/2025/talks/python" title="Interactive Python programming in Emacs" data-slug="python"> <title> 11:20-11:40 Interactive Python programming in Emacs</title> <rect x="219" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(248,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <a href="/2025/talks/llm" title="Emacs, editors, and LLM driven workflows" data-slug="llm"> <title> 1:00- 1:25 Emacs, editors, and LLM driven workflows</title> <rect x="376" y="75" opacity="0.8" width="39" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(413,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> llm</text></g></a> <a href="/2025/talks/private-ai" title="Emacs and private AI: a great match" data-slug="private-ai"> <title> 1:45- 2:05 Emacs and private AI: a great match</title> <rect x="447" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(476,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> private-ai</text></g></a> <a href="/2025/talks/commonlisp" title="Common Lisp images communicating like-a-human through shared Emacs slime and eev" data-slug="commonlisp"> <title> 2:25- 2:55 Common Lisp images communicating like-a-human through shared Emacs slime and eev</title> <rect x="509" y="75" opacity="0.8" width="47" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(554,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> commonlisp</text></g></a> <a href="/2025/talks/graphics" title="Modern Emacs/Elisp hardware/software accelerated graphics" data-slug="graphics"> <title> 3:05- 3:30 Modern Emacs/Elisp hardware/software accelerated graphics</title> <rect x="572" y="75" opacity="0.8" width="39" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(609,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> graphics</text></g></a> <g transform="translate(0,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 5 PM</text></g></svg></div> \ No newline at end of file
diff --git a/2025/schedule-2025-12-07.md b/2025/schedule-2025-12-07.md
new file mode 100644
index 00000000..eaa1b11a
--- /dev/null
+++ b/2025/schedule-2025-12-07.md
@@ -0,0 +1 @@
+<div class="schedule-svg-container"><svg width="800" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Schedule for Sunday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="/2025/talks/sun-open" title="Sunday opening remarks" data-slug="sun-open"> <title> 9:00- 9:10 Sunday opening remarks</title> <rect x="0" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(13,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-open</text></g></a> <a href="/2025/talks/modern" title="Some problems of modernizing Emacs" data-slug="modern"> <title> 9:10- 9:30 Some problems of modernizing Emacs</title> <rect x="15" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(44,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> modern</text></g></a> <a href="/2025/talks/reader" title="An introduction to the Emacs Reader" data-slug="reader"> <title> 9:40-10:15 An introduction to the Emacs Reader</title> <rect x="62" y="15" opacity="0.8" width="54" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(114,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> reader</text></g></a> <a href="/2025/talks/weights" title="Weightlifting tracking with Emacs on Android" data-slug="weights"> <title> 10:35-10:45 Weightlifting tracking with Emacs on Android</title> <rect x="149" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(162,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> weights</text></g></a> <a href="/2025/talks/completion" title="corfu+yasnippet: Easier than I thought" data-slug="completion"> <title> 11:05-11:25 corfu+yasnippet: Easier than I thought</title> <rect x="196" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(225,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> completion</text></g></a> <a href="/2025/talks/zettelkasten" title="Zettelkasten for regular Emacs hackers" data-slug="zettelkasten"> <title> 1:00- 1:25 Zettelkasten for regular Emacs hackers</title> <rect x="376" y="15" opacity="0.8" width="39" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(413,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> zettelkasten</text></g></a> <a href="/2025/talks/hyperboleqa" title="Questions and answers to help you fly with Hyperbole" data-slug="hyperboleqa"> <title> 1:45- 2:15 Questions and answers to help you fly with Hyperbole</title> <rect x="447" y="15" opacity="0.8" width="47" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(492,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperboleqa</text></g></a> <a href="/2025/talks/gardening" title="Gardening in Emacs: A Windows user's tale of tending, tweaking, and triumph" data-slug="gardening"> <title> 2:15- 2:35 Gardening in Emacs: A Windows user's tale of tending, tweaking, and triumph</title> <rect x="494" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(523,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gardening</text></g></a> <a href="/2025/talks/bookclub-tapas" title="Bookclub tapas" data-slug="bookclub-tapas"> <title> 2:45- 3:20 Bookclub tapas</title> <rect x="541" y="15" opacity="0.8" width="54" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(593,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> bookclub-tapas</text></g></a> <a href="/2025/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"> <title> 3:40- 3:50 Sunday closing remarks</title> <rect x="627" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(640,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-close</text></g></a> <g transform="translate(0,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 5 PM</text></g></svg></div> \ No newline at end of file
diff --git a/2025/schedule-details.md b/2025/schedule-details.md
new file mode 100644
index 00000000..a9456148
--- /dev/null
+++ b/2025/schedule-details.md
@@ -0,0 +1,54 @@
+Times below are in US/Eastern (GMT-0500). If you have Javascript enabled, clicking on talk pages should include times in your computer's local time setting.
+
+[[!inline pages="internal(2025/schedule-image)" raw="yes"]]
+
+The conference is from ~9:00 AM - 5:00 PM EST (US/Eastern) / ~8:00 AM - 4:00 PM CST (US/Central) / ~7:00 AM - 3:00 PM MST (US/Mountain) / ~6:00 AM - 2:00 PM PST (US/Pacific) / ~2:00 PM - 10:00 PM UTC / ~3:00 PM - 11:00 PM CET (Europe/Paris) / ~4:00 PM - 12:00 AM EET (Europe/Athens) / ~7:30 PM - 3:30 AM IST (Asia/Kolkata) / ~10:00 PM - 6:00 AM +08 (Asia/Singapore) / ~11:00 PM - 7:00 AM JST (Asia/Tokyo).
+
+You can also get this schedule as iCalendar files: <a href="https://media.emacsconf.org/2025/emacsconf.ics">emacsconf.ics</a> - <a href="https://media.emacsconf.org/2025/emacsconf-gen.ics">emacsconf-gen.ics</a> - <a href="https://media.emacsconf.org/2025/emacsconf-dev.ics">emacsconf-dev.ics</a>. Importing that into your calendar should translate things into your local time zone. Alternatively, you can use these time-zone-translated Org files: <https://media.emacsconf.org/2025/schedules/>
+
+Jump to: <a href="#date-2025-12-06">Sat Dec 6</a> - <a href="#date-2025-12-07">Sun Dec 7</a><a name="date-2025-12-06"></a>
+# Saturday Dec 6, 2025
+[[!inline pages="internal(2025/schedule-2025-12-06)" raw="yes"]]
+
+<div class="schedule" data-start="2025-12-06T14:00:00+0000" data-end="2025-12-06T22:30:00+0000" data-tracks="General,Development">
+[[!template id=sched time="""10""" q-and-a="""<a href="https://pad.emacsconf.org/2025-sat-open">Etherpad</a>""" startutc="""2025-12-06T14:00:00+0000""" endutc="""2025-12-06T14:10:00+0000""" start="""9:00""" end="""9:10""" title="""Saturday opening remarks""" url="""/2025/talks/sat-open""" speakers="""Sacha Chua""" track="""General""" watch="""https://emacsconf.org/2025/watch/gen""" slug="""sat-open""" note="""captioned, video posted, video: 04:51"""]]
+[[!template id=sched time="""10""" q-and-a="""<a href="https://pad.emacsconf.org/2025-org-babel">Etherpad</a>""" startutc="""2025-12-06T14:10:00+0000""" endutc="""2025-12-06T14:20:00+0000""" start="""9:10""" end="""9:20""" title="""Making Org-Babel reactive""" url="""/2025/talks/org-babel""" speakers="""Abhinav Tushar""" track="""General""" watch="""https://emacsconf.org/2025/watch/gen""" slug="""org-babel""" note="""captioned, video posted, video: 08:08"""]]
+[[!template id=sched time="""25""" q-and-a="""<a href="https://media.emacsconf.org/2025/current/bbb-schemacs.html">BBB</a>""" pad="""https://pad.emacsconf.org/2025-schemacs""" startutc="""2025-12-06T14:30:00+0000""" endutc="""2025-12-06T14:55:00+0000""" start="""9:30""" end="""9:55""" title="""One year progress update Schemacs (formerly Gypsum)""" url="""/2025/talks/schemacs""" speakers="""Ramin Honary""" track="""Development""" watch="""https://emacsconf.org/2025/watch/dev""" slug="""schemacs""" note="""captioned, video posted, Q&A posted, video: 23:14, answers: 31:11"""]]
+[[!template id=sched time="""25""" q-and-a="""<a href="https://media.emacsconf.org/2025/current/bbb-reference.html">BBB</a>""" pad="""https://pad.emacsconf.org/2025-reference""" startutc="""2025-12-06T14:30:00+0000""" endutc="""2025-12-06T14:55:00+0000""" start="""9:30""" end="""9:55""" title="""Emacs as a fully-fledged reference manager""" url="""/2025/talks/reference""" speakers="""Vidianos Giannitsis""" track="""General""" watch="""https://emacsconf.org/2025/watch/gen""" slug="""reference""" note="""captioned, video posted, video: 20:14"""]]
+[[!template id=sched time="""25""" q-and-a="""<a href="https://media.emacsconf.org/2025/current/bbb-gmail.html">BBB</a>""" pad="""https://pad.emacsconf.org/2025-gmail""" startutc="""2025-12-06T15:15:00+0000""" endutc="""2025-12-06T15:40:00+0000""" start="""10:15""" end="""10:40""" title="""org-gmail: A deep integration of Gmail into your Org Mode""" url="""/2025/talks/gmail""" speakers="""Bala Ramadurai""" track="""General""" watch="""https://emacsconf.org/2025/watch/gen""" slug="""gmail""" note="""captioned, video posted, video: 23:04"""]]
+[[!template id=sched time="""20""" q-and-a="""<a href="https://pad.emacsconf.org/2025-juicemacs">Etherpad</a>""" startutc="""2025-12-06T15:15:00+0000""" endutc="""2025-12-06T15:35:00+0000""" start="""10:15""" end="""10:35""" title="""Juicemacs: exploring speculative JIT compilation for ELisp in Java""" url="""/2025/talks/juicemacs""" speakers="""Kana""" track="""Development""" watch="""https://emacsconf.org/2025/watch/dev""" slug="""juicemacs""" note="""captioned, video posted, video: 19:10"""]]
+[[!template id=sched time="""25""" q-and-a="""none""" pad="""https://pad.emacsconf.org/2025-swanky""" startutc="""2025-12-06T15:45:00+0000""" endutc="""2025-12-06T16:10:00+0000""" start="""10:45""" end="""11:10""" title="""Swanky Python: Interactive development for Python""" url="""/2025/talks/swanky""" speakers="""Scott Zimmermann""" track="""Development""" watch="""https://emacsconf.org/2025/watch/dev""" slug="""swanky""" note="""captioned, video posted, video: 21:03"""]]
+[[!template id=sched time="""25""" q-and-a="""<a href="https://media.emacsconf.org/2025/current/bbb-gnus.html">BBB</a>""" pad="""https://pad.emacsconf.org/2025-gnus""" startutc="""2025-12-06T15:50:00+0000""" endutc="""2025-12-06T16:15:00+0000""" start="""10:50""" end="""11:15""" title="""Reading and writing emails in GNU Emacs with Gnus""" url="""/2025/talks/gnus""" speakers="""Amin Bandali""" track="""General""" watch="""https://emacsconf.org/2025/watch/gen""" slug="""gnus""" note="""captioned, video posted, Q&A posted, video: 21:37, answers: 27:00"""]]
+[[!template id=sched time="""20""" q-and-a="""<a href="https://media.emacsconf.org/2025/current/bbb-python.html">BBB</a>""" pad="""https://pad.emacsconf.org/2025-python""" startutc="""2025-12-06T16:20:00+0000""" endutc="""2025-12-06T16:40:00+0000""" start="""11:20""" end="""11:40""" title="""Interactive Python programming in Emacs""" url="""/2025/talks/python""" speakers="""David Vujic""" track="""Development""" watch="""https://emacsconf.org/2025/watch/dev""" slug="""python""" note="""captioned, video posted, Q&A posted, video: 19:52, answers: 20:10"""]]
+[[!template id=sched time="""20""" q-and-a="""<a href="https://media.emacsconf.org/2025/current/bbb-latex.html">BBB</a>""" pad="""https://pad.emacsconf.org/2025-latex""" startutc="""2025-12-06T16:25:00+0000""" endutc="""2025-12-06T16:45:00+0000""" start="""11:25""" end="""11:45""" title="""LaTeX export in org-mode: the overhaul""" url="""/2025/talks/latex""" speakers="""Pedro A. Aranda Gutiérrez""" track="""General""" watch="""https://emacsconf.org/2025/watch/gen""" slug="""latex""" note="""video posted, video: 33:53"""]]
+[[!template id=sched time="""25""" q-and-a="""<a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen">#emacsconf-gen, speaker nick: lispmacs or lispmacs[work]</a>""" pad="""https://pad.emacsconf.org/2025-calc""" startutc="""2025-12-06T18:00:00+0000""" endutc="""2025-12-06T18:25:00+0000""" start="""1:00""" end="""1:25""" title="""Basic Calc functionality for engineering or electronics""" url="""/2025/talks/calc""" speakers="""Christopher Howard""" track="""General""" watch="""https://emacsconf.org/2025/watch/gen""" slug="""calc""" note="""captioned, video posted, video: 23:35"""]]
+[[!template id=sched time="""25""" q-and-a="""<a href="https://media.emacsconf.org/2025/current/bbb-llm.html">BBB</a>""" pad="""https://pad.emacsconf.org/2025-llm""" startutc="""2025-12-06T18:00:00+0000""" endutc="""2025-12-06T18:25:00+0000""" start="""1:00""" end="""1:25""" title="""Emacs, editors, and LLM driven workflows""" url="""/2025/talks/llm""" speakers="""Andrew Hyatt""" track="""Development""" watch="""https://emacsconf.org/2025/watch/dev""" slug="""llm""" note="""captioned, video posted, Q&A posted, video: 20:04, answers: 27:34"""]]
+[[!template id=sched time="""40""" q-and-a="""<a href="https://media.emacsconf.org/2025/current/bbb-blee-lcnt.html">BBB</a>""" pad="""https://pad.emacsconf.org/2025-blee-lcnt""" startutc="""2025-12-06T18:35:00+0000""" endutc="""2025-12-06T19:15:00+0000""" start="""1:35""" end="""2:15""" title="""Blee-LCNT: An Emacs-centered content production and self-publication framework""" url="""/2025/talks/blee-lcnt""" speakers="""Mohsen BANAN""" track="""General""" watch="""https://emacsconf.org/2025/watch/gen""" slug="""blee-lcnt""" note="""captioned, video posted, Q&A posted, video: 36:41, answers: 1:24:10"""]]
+[[!template id=sched time="""20""" q-and-a="""<a href="https://media.emacsconf.org/2025/current/bbb-private-ai.html">BBB</a>""" pad="""https://pad.emacsconf.org/2025-private-ai""" startutc="""2025-12-06T18:45:00+0000""" endutc="""2025-12-06T19:05:00+0000""" start="""1:45""" end="""2:05""" title="""Emacs and private AI: a great match""" url="""/2025/talks/private-ai""" speakers="""Aaron Grothe""" track="""Development""" watch="""https://emacsconf.org/2025/watch/dev""" slug="""private-ai""" note="""video posted, video: 41:52"""]]
+[[!template id=sched time="""30""" q-and-a="""<a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-dev">#emacsconf-dev, speaker nick: screwlisp</a>""" pad="""https://pad.emacsconf.org/2025-commonlisp""" startutc="""2025-12-06T19:25:00+0000""" endutc="""2025-12-06T19:55:00+0000""" start="""2:25""" end="""2:55""" title="""Common Lisp images communicating like-a-human through shared Emacs slime and eev""" url="""/2025/talks/commonlisp""" speakers="""screwlisp""" track="""Development""" watch="""https://emacsconf.org/2025/watch/dev""" slug="""commonlisp""" note="""captioned, video posted, Q&A posted, video: 25:56, answers: 18:24"""]]
+[[!template id=sched time="""5""" q-and-a="""<a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen">#emacsconf-gen, speaker nick: cow_2001</a>""" pad="""https://pad.emacsconf.org/2025-greader""" startutc="""2025-12-06T19:35:00+0000""" endutc="""2025-12-06T19:40:00+0000""" start="""2:35""" end="""2:40""" title="""GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence""" url="""/2025/talks/greader""" speakers="""Yuval Langer""" track="""General""" watch="""https://emacsconf.org/2025/watch/gen""" slug="""greader""" note="""captioned, video posted, video: 04:08"""]]
+[[!template id=sched time="""50""" q-and-a="""<a href="https://media.emacsconf.org/2025/current/bbb-open-mic.html">BBB</a>""" pad="""https://pad.emacsconf.org/2025-open-mic""" startutc="""2025-12-06T19:50:00+0000""" endutc="""2025-12-06T20:40:00+0000""" start="""2:50""" end="""3:40""" title="""Open session""" url="""/2025/talks/open-mic""" speakers="""Participants""" track="""General""" watch="""https://emacsconf.org/2025/watch/gen""" slug="""open-mic""" note=""""""]]
+[[!template id=sched time="""25""" q-and-a="""<a href="https://media.emacsconf.org/2025/current/bbb-graphics.html">BBB</a>""" note="""This talk has no narration, only music.""" pad="""https://pad.emacsconf.org/2025-graphics""" startutc="""2025-12-06T20:05:00+0000""" endutc="""2025-12-06T20:30:00+0000""" start="""3:05""" end="""3:30""" title="""Modern Emacs/Elisp hardware/software accelerated graphics""" url="""/2025/talks/graphics""" speakers="""Emanuel Berg""" track="""Development""" watch="""https://emacsconf.org/2025/watch/dev""" slug="""graphics""" note="""captioned, video posted, video: 22:15"""]]
+[[!template id=sched time="""10""" q-and-a="""<a href="https://media.emacsconf.org/2025/current/bbb-sat-close.html">BBB</a>""" pad="""https://pad.emacsconf.org/2025-sat-close""" startutc="""2025-12-06T21:00:00+0000""" endutc="""2025-12-06T21:10:00+0000""" start="""4:00""" end="""4:10""" title="""Saturday closing remarks / open session""" url="""/2025/talks/sat-close""" track="""General""" watch="""https://emacsconf.org/2025/watch/gen""" slug="""sat-close""" note=""""""]]</div>
+
+Jump to: <a href="#date-2025-12-06">Sat Dec 6</a> - <a href="#date-2025-12-07">Sun Dec 7</a><a name="date-2025-12-07"></a>
+# Sunday Dec 7, 2025
+[[!inline pages="internal(2025/schedule-2025-12-07)" raw="yes"]]
+
+<div class="schedule" data-start="2025-12-07T14:00:00+0000" data-end="2025-12-07T22:30:00+0000" data-tracks="General,Development">
+[[!template id=sched time="""10""" q-and-a="""<a href="https://pad.emacsconf.org/2025-sun-open">Etherpad</a>""" note="""This is the same as sat-open.""" startutc="""2025-12-07T14:00:00+0000""" endutc="""2025-12-07T14:10:00+0000""" start="""9:00""" end="""9:10""" title="""Sunday opening remarks""" url="""/2025/talks/sun-open""" speakers="""Sacha Chua""" track="""General""" watch="""https://emacsconf.org/2025/watch/gen""" slug="""sun-open""" note="""captioned, video posted, video: 04:51"""]]
+[[!template id=sched time="""20""" q-and-a="""<a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen">#emacsconf-gen, speaker nick: edrx</a>""" pad="""https://pad.emacsconf.org/2025-modern""" startutc="""2025-12-07T14:10:00+0000""" endutc="""2025-12-07T14:30:00+0000""" start="""9:10""" end="""9:30""" title="""Some problems of modernizing Emacs""" url="""/2025/talks/modern""" speakers="""Eduardo Ochs""" track="""General""" watch="""https://emacsconf.org/2025/watch/gen""" slug="""modern""" note="""video posted, video: 25:22"""]]
+[[!template id=sched time="""35""" q-and-a="""<a href="https://media.emacsconf.org/2025/current/bbb-reader.html">BBB</a>""" pad="""https://pad.emacsconf.org/2025-reader""" startutc="""2025-12-07T14:40:00+0000""" endutc="""2025-12-07T15:15:00+0000""" start="""9:40""" end="""10:15""" title="""An introduction to the Emacs Reader""" url="""/2025/talks/reader""" speakers="""Divyá""" track="""General""" watch="""https://emacsconf.org/2025/watch/gen""" slug="""reader""" note="""captioned, video posted, video: 34:37"""]]
+[[!template id=sched time="""10""" q-and-a="""<a href="https://media.emacsconf.org/2025/current/bbb-weights.html">BBB</a>""" pad="""https://pad.emacsconf.org/2025-weights""" startutc="""2025-12-07T15:35:00+0000""" endutc="""2025-12-07T15:45:00+0000""" start="""10:35""" end="""10:45""" title="""Weightlifting tracking with Emacs on Android""" url="""/2025/talks/weights""" speakers="""Zachary Romero""" track="""General""" watch="""https://emacsconf.org/2025/watch/gen""" slug="""weights""" note="""video posted, video: 30:05"""]]
+[[!template id=sched time="""25""" q-and-a="""<a href="https://media.emacsconf.org/2025/current/bbb-completion.html">BBB</a>""" pad="""https://pad.emacsconf.org/2025-completion""" startutc="""2025-12-07T16:05:00+0000""" endutc="""2025-12-07T16:25:00+0000""" start="""11:05""" end="""11:25""" title="""corfu+yasnippet: Easier than I thought""" url="""/2025/talks/completion""" speakers="""Pedro A. Aranda Gutiérrez""" track="""General""" watch="""https://emacsconf.org/2025/watch/gen""" slug="""completion""" note="""video posted, video: 22:42"""]]
+[[!template id=sched time="""25""" q-and-a="""<a href="https://media.emacsconf.org/2025/current/bbb-zettelkasten.html">BBB</a>""" pad="""https://pad.emacsconf.org/2025-zettelkasten""" startutc="""2025-12-07T18:00:00+0000""" endutc="""2025-12-07T18:25:00+0000""" start="""1:00""" end="""1:25""" title="""Zettelkasten for regular Emacs hackers""" url="""/2025/talks/zettelkasten""" speakers="""Christian Tietze""" track="""General""" watch="""https://emacsconf.org/2025/watch/gen""" slug="""zettelkasten""" note="""captioned, video posted, video: 23:18"""]]
+[[!template id=sched time="""30""" q-and-a="""<a href="https://media.emacsconf.org/2025/current/bbb-hyperboleqa.html">BBB</a>""" note="""No recorded presentation, just live Q&A""" pad="""https://pad.emacsconf.org/2025-hyperboleqa""" startutc="""2025-12-07T18:45:00+0000""" endutc="""2025-12-07T19:15:00+0000""" start="""1:45""" end="""2:15""" title="""Questions and answers to help you fly with Hyperbole""" url="""/2025/talks/hyperboleqa""" speakers="""Bob Weiner""" track="""General""" watch="""https://emacsconf.org/2025/watch/gen""" slug="""hyperboleqa""" note=""""""]]
+[[!template id=sched time="""20""" q-and-a="""none""" pad="""https://pad.emacsconf.org/2025-gardening""" startutc="""2025-12-07T19:15:00+0000""" endutc="""2025-12-07T19:35:00+0000""" start="""2:15""" end="""2:35""" title="""Gardening in Emacs: A Windows user's tale of tending, tweaking, and triumph""" url="""/2025/talks/gardening""" speakers="""Marco Bresciani""" track="""General""" watch="""https://emacsconf.org/2025/watch/gen""" slug="""gardening""" note="""captioned, video posted, video: 17:36"""]]
+[[!template id=sched time="""35""" q-and-a="""<a href="https://media.emacsconf.org/2025/current/bbb-bookclub-tapas.html">BBB</a>""" pad="""https://pad.emacsconf.org/2025-bookclub-tapas""" startutc="""2025-12-07T19:45:00+0000""" endutc="""2025-12-07T20:20:00+0000""" start="""2:45""" end="""3:20""" title="""Bookclub tapas""" url="""/2025/talks/bookclub-tapas""" speakers="""Maddie Sullivan""" track="""General""" watch="""https://emacsconf.org/2025/watch/gen""" slug="""bookclub-tapas""" note="""captioned, video posted, video: 31:25"""]]
+[[!template id=sched time="""10""" q-and-a="""<a href="https://media.emacsconf.org/2025/current/bbb-sun-close.html">BBB</a>""" pad="""https://pad.emacsconf.org/2025-sun-close""" startutc="""2025-12-07T20:40:00+0000""" endutc="""2025-12-07T20:50:00+0000""" start="""3:40""" end="""3:50""" title="""Sunday closing remarks""" url="""/2025/talks/sun-close""" track="""General""" watch="""https://emacsconf.org/2025/watch/gen""" slug="""sun-close""" note=""""""]]</div><div class="cancelled">Cancelled:<ul><li>A writing day in the life with Org-Mode - Jeremy Friesen</li>
+<li>Org-mode GTD vs N-angulator GTD - Kevin Haddock</li>
+<li>How Emacs became my authoring playground—no Lisp required - Uli</li>
+<li>Studying foreign languages with Emacs, Org Mode and gptel - Marek</li>
+<li>From FRDCSA to FLP2: Building AI-Powered Life Planning Systems in Emacs - A Journey from Research to Real-World Impact - Andrew John Dougherty</li>
+<li>emacs-claude-code: Intelligent Claude Integration for Emacs - Yusuke Watanabe</li>
+<li>An enhanced bibliography in org-mode for scientific research and self-directed learning - Blaine Mooers</li></ul></div> \ No newline at end of file
diff --git a/2025/schedule-image.md b/2025/schedule-image.md
new file mode 100644
index 00000000..96b64981
--- /dev/null
+++ b/2025/schedule-image.md
@@ -0,0 +1 @@
+<div class="schedule-svg-container"><svg width="800" height="300" 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="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="/2025/talks/sat-open" title="Saturday opening remarks" data-slug="sat-open"> <title> 9:00- 9:10 Saturday opening remarks</title> <rect x="0" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(13,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="/2025/talks/org-babel" title="Making Org-Babel reactive" data-slug="org-babel"> <title> 9:10- 9:20 Making Org-Babel reactive</title> <rect x="15" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(28,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> org-babel</text></g></a> <a href="/2025/talks/reference" title="Emacs as a fully-fledged reference manager" data-slug="reference"> <title> 9:30- 9:55 Emacs as a fully-fledged reference manager</title> <rect x="47" y="15" opacity="0.8" width="39" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(84,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> reference</text></g></a> <a href="/2025/talks/gmail" title="org-gmail: A deep integration of Gmail into your Org Mode" data-slug="gmail"> <title> 10:15-10:40 org-gmail: A deep integration of Gmail into your Org Mode</title> <rect x="117" y="15" opacity="0.8" width="39" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(154,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gmail</text></g></a> <a href="/2025/talks/gnus" title="Reading and writing emails in GNU Emacs with Gnus" data-slug="gnus"> <title> 10:50-11:15 Reading and writing emails in GNU Emacs with Gnus</title> <rect x="172" y="15" opacity="0.8" width="39" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(209,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gnus</text></g></a> <a href="/2025/talks/latex" title="LaTeX export in org-mode: the overhaul" data-slug="latex"> <title> 11:25-11:45 LaTeX export in org-mode: the overhaul</title> <rect x="227" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(256,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> latex</text></g></a> <a href="/2025/talks/calc" title="Basic Calc functionality for engineering or electronics" data-slug="calc"> <title> 1:00- 1:25 Basic Calc functionality for engineering or electronics</title> <rect x="376" y="15" opacity="0.8" width="39" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(413,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> calc</text></g></a> <a href="/2025/talks/blee-lcnt" title="Blee-LCNT: An Emacs-centered content production and self-publication framework" data-slug="blee-lcnt"> <title> 1:35- 2:15 Blee-LCNT: An Emacs-centered content production and self-publication framework</title> <rect x="431" y="15" opacity="0.8" width="62" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(491,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> blee-lcnt</text></g></a> <a href="/2025/talks/greader" title="GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence" data-slug="greader"> <title> 2:35- 2:40 GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence</title> <rect x="525" y="15" opacity="0.8" width="7" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(530,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> greader</text></g></a> <a href="/2025/talks/open-mic" title="Open session" data-slug="open-mic"> <title> 2:50- 3:40 Open session</title> <rect x="549" y="15" opacity="0.8" width="78" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(625,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> open-mic</text></g></a> <a href="/2025/talks/sat-close" title="Saturday closing remarks / open session" data-slug="sat-close"> <title> 4:00- 4:10 Saturday closing remarks / open session</title> <rect x="658" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(671,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="/2025/talks/schemacs" title="One year progress update Schemacs (formerly Gypsum)" data-slug="schemacs"> <title> 9:30- 9:55 One year progress update Schemacs (formerly Gypsum)</title> <rect x="47" y="75" opacity="0.8" width="39" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(84,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> schemacs</text></g></a> <a href="/2025/talks/juicemacs" title="Juicemacs: exploring speculative JIT compilation for ELisp in Java" data-slug="juicemacs"> <title> 10:15-10:35 Juicemacs: exploring speculative JIT compilation for ELisp in Java</title> <rect x="117" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(146,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> juicemacs</text></g></a> <a href="/2025/talks/swanky" title="Swanky Python: Interactive development for Python" data-slug="swanky"> <title> 10:45-11:10 Swanky Python: Interactive development for Python</title> <rect x="164" y="75" opacity="0.8" width="39" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(201,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> swanky</text></g></a> <a href="/2025/talks/python" title="Interactive Python programming in Emacs" data-slug="python"> <title> 11:20-11:40 Interactive Python programming in Emacs</title> <rect x="219" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(248,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <a href="/2025/talks/llm" title="Emacs, editors, and LLM driven workflows" data-slug="llm"> <title> 1:00- 1:25 Emacs, editors, and LLM driven workflows</title> <rect x="376" y="75" opacity="0.8" width="39" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(413,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> llm</text></g></a> <a href="/2025/talks/private-ai" title="Emacs and private AI: a great match" data-slug="private-ai"> <title> 1:45- 2:05 Emacs and private AI: a great match</title> <rect x="447" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(476,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> private-ai</text></g></a> <a href="/2025/talks/commonlisp" title="Common Lisp images communicating like-a-human through shared Emacs slime and eev" data-slug="commonlisp"> <title> 2:25- 2:55 Common Lisp images communicating like-a-human through shared Emacs slime and eev</title> <rect x="509" y="75" opacity="0.8" width="47" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(554,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> commonlisp</text></g></a> <a href="/2025/talks/graphics" title="Modern Emacs/Elisp hardware/software accelerated graphics" data-slug="graphics"> <title> 3:05- 3:30 Modern Emacs/Elisp hardware/software accelerated graphics</title> <rect x="572" y="75" opacity="0.8" width="39" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(609,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> graphics</text></g></a> <g transform="translate(0,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 5 PM</text></g></g> <g transform="translate(0,150)"> <title> Schedule for Sunday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="/2025/talks/sun-open" title="Sunday opening remarks" data-slug="sun-open"> <title> 9:00- 9:10 Sunday opening remarks</title> <rect x="0" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(13,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-open</text></g></a> <a href="/2025/talks/modern" title="Some problems of modernizing Emacs" data-slug="modern"> <title> 9:10- 9:30 Some problems of modernizing Emacs</title> <rect x="15" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(44,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> modern</text></g></a> <a href="/2025/talks/reader" title="An introduction to the Emacs Reader" data-slug="reader"> <title> 9:40-10:15 An introduction to the Emacs Reader</title> <rect x="62" y="15" opacity="0.8" width="54" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(114,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> reader</text></g></a> <a href="/2025/talks/weights" title="Weightlifting tracking with Emacs on Android" data-slug="weights"> <title> 10:35-10:45 Weightlifting tracking with Emacs on Android</title> <rect x="149" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(162,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> weights</text></g></a> <a href="/2025/talks/completion" title="corfu+yasnippet: Easier than I thought" data-slug="completion"> <title> 11:05-11:25 corfu+yasnippet: Easier than I thought</title> <rect x="196" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(225,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> completion</text></g></a> <a href="/2025/talks/zettelkasten" title="Zettelkasten for regular Emacs hackers" data-slug="zettelkasten"> <title> 1:00- 1:25 Zettelkasten for regular Emacs hackers</title> <rect x="376" y="15" opacity="0.8" width="39" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(413,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> zettelkasten</text></g></a> <a href="/2025/talks/hyperboleqa" title="Questions and answers to help you fly with Hyperbole" data-slug="hyperboleqa"> <title> 1:45- 2:15 Questions and answers to help you fly with Hyperbole</title> <rect x="447" y="15" opacity="0.8" width="47" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(492,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperboleqa</text></g></a> <a href="/2025/talks/gardening" title="Gardening in Emacs: A Windows user's tale of tending, tweaking, and triumph" data-slug="gardening"> <title> 2:15- 2:35 Gardening in Emacs: A Windows user's tale of tending, tweaking, and triumph</title> <rect x="494" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(523,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gardening</text></g></a> <a href="/2025/talks/bookclub-tapas" title="Bookclub tapas" data-slug="bookclub-tapas"> <title> 2:45- 3:20 Bookclub tapas</title> <rect x="541" y="15" opacity="0.8" width="54" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(593,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> bookclub-tapas</text></g></a> <a href="/2025/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"> <title> 3:40- 3:50 Sunday closing remarks</title> <rect x="627" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(640,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-close</text></g></a> <g transform="translate(0,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,3)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="140" font-size="10" text-anchor="left"> 5 PM</text></g></g></svg></div> \ No newline at end of file
diff --git a/2025/sidebar.md b/2025/sidebar.md
new file mode 100644
index 00000000..4a730ccf
--- /dev/null
+++ b/2025/sidebar.md
@@ -0,0 +1,12 @@
+<p>Welcome to...</p>
+<p class="center">[[!img /i/emacsconf-logo1-256.png alt="EmacsConf logo" size="72x" link=2025]]</p>
+<p class="center"><strong>[[EmacsConf 2025|2025]]</strong></p>
+<p class="center">Dec 6-7 (Sat-Sun)</p>
+---
+
+* **[[Talks]]**
+* **[[Watch]]**
+* [[Volunteer]]
+* [[Prepare]]
+* [[Guidelines for Conduct|conduct]]
+* [[Contact information|contact]]
diff --git a/2025/speakers.md b/2025/speakers.md
new file mode 100644
index 00000000..f3ed9f6a
--- /dev/null
+++ b/2025/speakers.md
@@ -0,0 +1,149 @@
+[[!meta title="Conference-day instructions for speakers"]]
+[[!meta copyright="Copyright &copy; 2024-2025 Sacha Chua"]]
+
+# Before your talk
+
+If you have a pre-recorded talk, please check in at least 30 minutes
+before the start of your Q&A session (when your talk ends). If you're
+doing the talk live, please check in at least 30 minutes before the
+start of your talk.
+
+You can check in on IRC by joining the #emacsconf-org channel on
+libera.chat using your favorite IRC client or using
+[https://chat.emacsconf.org](https://chat.emacsconf.org/?join=emacsconf-dev,emacsconf-gen,emacsconf-org).
+If you want, you can also join the channel for your track as well
+(either #emacsconf-gen or #emacsconf-dev). Say something like "Hi,
+this is &lt;your name&gt; checking in" in the \#emacsconf-org channel
+and one of the organizers will check you in. If you are having a hard
+time with IRC, e-mail <emacsconf-submit@gnu.org> or use the emergency
+contact info in the check-in email and we can give you the URL of a
+BigBlueButton room to join.
+
+- If you want to do Q&A over IRC or Etherpad:
+ - You can hang out in the IRC channel for your track and/or on the
+ pad for your talk.
+- If you want to do Q&A in a BigBlueButton room (ex: quick demoes):
+ - We'll set you up in a BigBlueButton room (check your e-mail for
+ the URL, or ask in #emacsconf-org). You can keep watching the
+ conference or doing other things while waiting there. We'll let
+ you know shortly before you go live. If you want, you can get
+ things ready for whatever you might want to demonstrate.
+ - Please use headphones or earphones to minimize the risk of audio
+ feedback. Webcams are optional.
+- If you want to do Q&A over Mumble:
+ - You can connect to mumble.emacsconf.org.
+
+Please let us know if you're running late or if it turns out you can't
+make it. Drop by #emacsconf-org, e-mail us at
+<emacsconf-submit@gnu.org> , or use the emergency contact information
+from the check-in instructions email. If we start worrying, we'll
+reach out to you via your emergency contact information.
+
+# BigBlueButton notes
+
+You can connect to your BigBlueButton room
+beforehand. All the EmacsConf meeting rooms are
+set up so that anyone can start them, and the
+check-in email has the moderator access code so
+that you can connect as a moderator. Then you can
+check your audio, your webcam (optional),
+screensharing, etc.
+
+Sharing your screen or your audio can be tricky,
+so you can give yourself extra time to check
+technical issues. The BigBlueButton web
+conferencing server will be up starting 6 PM
+Toronto time (GMT-5) the night before the
+conference until around 6 PM Toronto time (GMT-5)
+on the last day of the conference, so you can
+connect before your talk to try things out. If you
+want to do a sanity-check with someone else (can
+they hear your audio, see your screen, etc.),
+check in the #emacsconf-org channel to see if
+anyone is available to help you out. If you would
+like to schedule a different time to check your
+setup or record your presentation, contact
+sacha@sachachua.com with some times that might
+work for you.
+
+Sharing multi-monitor setups can be challenging, so
+you may want to arrange your windows so that you
+can share just one screen or one window.
+
+Sharing your microphone audio should be fairly
+straightforward once you give the browser
+permission, but sharing system audio from
+applications (as opposed to browser tabs) is a
+little tricky. It's probably more straightforward
+if you use Google Chrome on Windows or Mac OS;
+there'll be an option to share system audio. If
+you're on Linux or other operating systems, you
+may have to look into how to configure your sound
+system to use your system audio monitor as the
+microphone or create a combined source that uses
+both your system audio and your microphone. For
+example, in Pulseaudio, you can change the
+microphone used by an application by unmuting,
+opening PulseAudio Volume Control
+(pavucontrol-qt), going to the Recording tab, and
+changing the microphone to the system audio
+monitor.
+
+
+# While your talk plays
+
+People will add notes and questions on the Etherpad, or they'll ask
+them on IRC. Volunteers will try to copy all the questions to the
+Etherpad. If you're watching Etherpad or IRC, you can start answering
+whenever you like.
+
+# Answering questions
+
+- General notes about answering questions:
+ - You can answer questions in any order, and you can skip any
+ questions you don't want to answer.
+ - You don't have to answer questions right away. If you want to take
+ some time to think about things, that's okay.
+ - If you're answering questions by voice and the host is not reading
+ the questions out for you, please read the question out before you
+ answer it. This makes it easier to follow the conversation and to
+ copy the answers to the talk page afterwards.
+ - Uploading PDFs doesn't work in our BigBlueButton instance, but you
+ can share your screen. Sharing screens with multi-monitor setups
+ can be tricky. If this acts weirdly for you, try sharing just the
+ window you want to focus on, or switch to using one monitor.
+ - The Q&A will be recorded so that people can keep learning from it
+ even after the conference. If you accidentally share something or
+ would like part of the recording removed, please add something
+ like "Oops" in the text chat, possibly with a description of what
+ to remove. We can work on editing that out of the recording.
+- After your prerec finishes:
+ - If you're doing Q&A in a BBB room:
+ - We'll switch the stream to broadcast from the BBB room you're
+ in, and we'll start recording the session so that Q&A can be
+ available after the conference. We'll give you a signal when the
+ Q&A is ready to start. Other people can start joining the Q&A room.
+ - Depending on your preferences, the host can read questions to
+ you, or you can read questions off the pad/IRC yourself.
+ - This conversation can continue for as long as you like. If it's
+ time for the next talk to start, we'll give you a heads-up and
+ your Q&A can continue off the stream in the same BBB room. When
+ you are ready to stop answering questions, you can wrap up
+ however you'd like and end the meeting.
+ - If you're doing IRC/Etherpad: we'll let people know where to ask
+ questions and we can read out some of the questions and answers
+ that are there.
+ - If you're on Mumble: we'll pull you into the channel room and the
+ streamer will connect to it. When we confirm that you can be
+ heard, you and the host can go ahead with the Q&A.
+
+# After the conference
+
+We'll collect questions and answers from IRC and the pad. We'll put
+them on the talk page and e-mail them to you in case you want to
+follow up or keep the conversation going. We'll also work on
+extracting the videos from the Q&A sessions and we'll post them on the
+talk page.
+
+Thank you so much for putting so much time and energy into sharing
+what you know at EmacsConf!
diff --git a/2025/submit.md b/2025/submit.md
new file mode 100644
index 00000000..f2c4d5e2
--- /dev/null
+++ b/2025/submit.md
@@ -0,0 +1,80 @@
+[[!meta title="Submit a proposal"]]
+[[!meta copyright="Copyright &copy; 2019, 2020 Amin Bandali<br />
+Copyright 2021 Amin Bandali, Sacha Chua, Leo Vivier<br />
+Copyright 2022 Amin Bandali<br />
+Copyright 2023-2025 Sacha Chua"]]
+
+When you're ready to submit your proposal, send your submission via
+email to <emacsconf-submit@gnu.org> by **Friday, September 19, 2025**.
+All speakers will be notified by Friday, September 26 (or earlier)
+regarding the status of their proposal. If your talk is accepted, please plan
+to put together your prerecorded video by Friday, October 31, 2025
+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 7-8;
+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 2025.
+
+We look forward to your ideas and submissions. Thank you!
diff --git a/2025/talks.md b/2025/talks.md
new file mode 100644
index 00000000..b6d7602f
--- /dev/null
+++ b/2025/talks.md
@@ -0,0 +1,7 @@
+We're getting ready for EmacsConf 2025. Here are the talks coming up:
+
+[[!inline pages="internal(2025/schedule-details)" raw="yes"]]
+
+Want to help make EmacsConf even awesomer? [[Volunteer!|/volunteer]]
+
+We hope to see you all around on Dec 6-7 for EmacsConf 2025!
diff --git a/2025/talks/authoring.md b/2025/talks/authoring.md
new file mode 100644
index 00000000..c5120713
--- /dev/null
+++ b/2025/talks/authoring.md
@@ -0,0 +1,30 @@
+[[!meta title="How Emacs became my authoring playground—no Lisp required"]]
+[[!meta copyright="Copyright &copy; 2025 Uli"]]
+[[!inline pages="internal(2025/info/authoring-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. --->
+
+
+# How Emacs became my authoring playground—no Lisp required
+Uli - Pronunciation: 'u:li, IRC: rhaen, Mastodon: <https://digitalcourage.social/@rhaen>
+
+[[!inline pages="internal(2025/info/authoring-before)" raw="yes"]]
+
+In this talk, I will share the story of my journey with Emacs as a writer, author, and storyteller. Over the years, I have crafted a personal workflow to write technical articles, analyses, and handouts using Emacs, Pandoc, Org Mode, and Zotero. I’ll demonstrate how this setup enables me to easily produce documents in PDF, DOCX, and EPUB formats on macOS and Unix-like systems—with potential extensions to Windows.
+
+Rather than diving deep into complex Org Mode customizations, my approach focuses on maintaining flexibility in translating documents between formats. This workflow, developed incrementally over several years, illustrates how you can build a comfortable and efficient writing environment in Emacs without needing perfect Lisp mastery or an encyclopedic knowledge of Emacs internals.
+
+I'll introduce the key packages I use and how they weave together into a cohesive personal authoring system—proving that Emacs can be a powerful yet approachable tool for writers. This talk is not a deep technical dive but a practical exploration of methodology and workflow that can inspire writers to harness Emacs in their own unique ways.
+
+About the speaker:
+
+I'm a writer with a strong passion for open-source software. As an agile coach, I enjoy helping people work together. I truly believe in the power of free code and prefer platforms like Codeberg over GitHub, just as I find Mastodon a friendlier space compared to X. I’m also deeply interested in audio and love capturing the world around me through my field recording podcast. At the heart of everything I do is combining these passions into practical workflows—especially using Emacs as a powerful and flexible tool to bring my ideas to life.
+
+
+
+[[!inline pages="internal(2025/info/authoring-after)" raw="yes"]]
+
+[[!inline pages="internal(2025/info/authoring-nav)" raw="yes"]]
+
+
diff --git a/2025/talks/bibliography.md b/2025/talks/bibliography.md
new file mode 100644
index 00000000..4c597cdf
--- /dev/null
+++ b/2025/talks/bibliography.md
@@ -0,0 +1,83 @@
+[[!meta title="An enhanced bibliography in org-mode for scientific research and self-directed learning"]]
+[[!meta copyright="Copyright &copy; 2025 Blaine Mooers"]]
+[[!inline pages="internal(2025/info/bibliography-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. --->
+
+
+# An enhanced bibliography in org-mode for scientific research and self-directed learning
+Blaine Mooers (he/him) - <mailto:blaine-mooers@ouhsc.edu>
+
+[[!inline pages="internal(2025/info/bibliography-before)" raw="yes"]]
+
+This 20-minute talk introduces a modernized approach to creating annotated bibliographies using Org-mode.
+This new approach overcomes the limitations of traditional BibTeX-based methods.
+Unlike classical annotated bibliographies, this system supports rich content including text-wrapped figures, tables, code listings, equations, and appendices.
+These features transform static reference collections into visual knowledge repositories.
+
+The presentation will demonstrate how this system leverages Org-mode's unique capabilities, particularly literate programming, to enable real-time data transformation and visualization from cited papers.
+I introduce a modular architecture to overcome BibTeX's whitespace limitations in the annotation field, which stores notes for assembling annotated bibliographies in the classical approach.
+
+Key features of the new approach include:
+
+- A modular design that supports the reuse of annotation files between bibliographies and with literature notes in org-roam and denote
+- Support for including figures, tables, equations, code listings, and literature programming blocks
+- Citation key injection into subsection headings
+- Automated PDF downloading, relabeling, and storing
+- Property drawers for keywords, links to annotation note files to ease making further edits, and links to PDF documents
+- Specialized sorting function for bibliography organization (by author, year, or keywords)
+- Inclusion of a table of contents with hyperlinks
+- Specialized glossaries for acronyms, software packages, equations, and mathematical notation
+
+I will address how this approach complements, rather than replaces, modern personal knowledge management systems like org-roam and denote.
+This approach strengthens project-focused knowledge organization.
+I will discuss the practical benefits, including improved visual memory reinforcement through embedded figures and reduced context switching during in-depth academic work.
+
+I will share the implementation details of the Emacs Lisp functions that power this system (available as a package).
+The presentation will include demonstrations of how these functions streamline everyday tasks such as adding new entries, navigating between bibliography and source material, and preparing project-specific BibTeX files.
+These functions reduce the friction in the academic reading and writing workflow.
+
+For those interested in adopting this approach, I will discuss adaptations for various workflows and address practical considerations, such as copyright implications when sharing illustrated bibliographies.
+The talk will conclude with thoughts on how this system supports different reading styles (reference, survey, and deep reading) as identified by Stephen Heard in his 2022 book "A Scientist's Guide to Writing".
+This approach is particularly valuable for researchers, graduate students, and knowledge workers who need to maintain project-specific literature collections.
+The approach recognizes the reality that most scientists do not need access to their entire knowledge corpus when working on a specific paper.
+Instead, they need a visually reinforced understanding of a targeted subset of the literature.
+
+The format is a 20-minute talk presented as a narrated slideshow. The outline follows:
+
+- The role of the annotated bibliography in my three-pronged approach to scientific writing project management, which I introduced last year in my talk about writing logs.
+- My innovative use of a modular approach, along with numerous enhancements, promotes deep work.
+- Why make an annotated bibliography in the Age of Zettelkastens and Generative AI?
+- Why not assemble a notebook instead?
+- The classic annotated bibliography and its deficits (i.e., why I developed the enhanced bibliography).
+- The advantages of Org-mode for making this annotated bibliography.
+- Defining the scope of the enhanced bibliography: research program level versus writing project-specific.
+- Tour of the master org file that controls the assembly of the final PDF.
+- Project file tree and version control with helper functions.
+- The annotation file and accommodation of three levels of detail for reference, survey, and deep reading.
+- Demonstrations of creating an entry by wrapping a citar, org-ref, and org-cite citekeys.
+- Show how to use literature programming to carry out further analyses using data from a specific paper.
+- Show integration with Zettelkasten by including annotation org files in literature notes.
+- Feeding annotation files into generative AI for help with querying, brainstorming, planning, and synthesis.
+- How does working on an annotated bibliography fit into my weekly writing schedule?
+- Tour of the GitHub repository for this project.
+- Copyright of figures and limits on sharing the enhanced bibliography in public.
+- Summary
+- Acknowledgements
+
+About the speaker:
+
+Blaine Mooers is an associate professor in the Department of Biochemistry and Physiology at the University of Oklahoma Health Campus, where he specializes in macromolecular crystallography. His research focuses on RNA structures and protein-drug complexes important in cancer.
+As an avid Emacs user for five years and LaTeX and Python user for 15 years, Dr. Mooers has developed tools to optimize scientific writing workflows.
+In this talk, he shares his system for managing academic literature using Org-mode, which he developed as a solution to his frustration with traditional annotated bibliographies.
+This new approach enhances scientific creativity and productivity by combining visual memory reinforcement with project-focused knowledge organization.
+This approach addresses the challenging reality of scientific research, where focus is often more valuable than breadth.
+
+
+
+[[!inline pages="internal(2025/info/bibliography-after)" raw="yes"]]
+
+[[!inline pages="internal(2025/info/bibliography-nav)" raw="yes"]]
+
+
diff --git a/2025/talks/blee-lcnt.md b/2025/talks/blee-lcnt.md
new file mode 100644
index 00000000..285c6680
--- /dev/null
+++ b/2025/talks/blee-lcnt.md
@@ -0,0 +1,109 @@
+[[!meta title="Blee-LCNT: An Emacs-centered content production and self-publication framework"]]
+[[!meta copyright="Copyright &copy; 2025 Mohsen BANAN"]]
+[[!inline pages="internal(2025/info/blee-lcnt-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. --->
+
+
+# Blee-LCNT: An Emacs-centered content production and self-publication framework
+Mohsen BANAN (he/him) - Pronunciation: MO-HH-SS-EN, <http://mohsen.1.banan.byname.net>
+
+[[!inline pages="internal(2025/info/blee-lcnt-before)" raw="yes"]]
+
+In a sense this is yet another talk about how you
+can use Emacs to produce fancy presentations like
+this or write complex books and self-publish them.
+But our approach is fundamentally different.
+
+Many talks at previous Emacs Conferences have
+described how Emacs and org-mode can be extended
+to facilitate content production by adding more to
+Emacs. Our approach is that of putting a smaller
+Emacs at the core of something bigger. That
+something bigger is an autonomy oriented digital
+ecosystem called "ByStar" which is uniformly built
+with a layer on top of Debian called BISOS (ByStar
+Internet Services OS).
+
+At Emacs Conf-2024 the title of my talk was "About Blee" &ndash;
+<https://emacsconf.org/2024/talks/blee>.
+Blee (ByStar Libre-Halaal Emacs Environment) is that
+smaller Emacs packaging that positions Emacs at the core of BISOS and
+ByStar. BISOS and Blee are intertwined and
+ByStar is about autonomy oriented unified platforms for developing and
+delivering both internet services and
+software-service continuums.
+
+This talk is about Content Production and Self-Publication capabilities of
+Blee and BISOS.
+
+Blee-LCNT is LaTeX centric. The original text is always in COMEEGA-LaTeX &ndash;
+LaTeX augmented by Org-Mode. This is
+the inverse direction of exporting LaTeX from Org-Mode. For typesetting,
+the LaTeX syntax is far more powerful than
+org-mode. And with COMEEGA-LaTeX, you can also benefit from all that
+org-mode offers. The scope of Blee-LCNT is all
+types of content from presentations to videos to books to name-tags and
+business cards.
+
+LaTeX to HTML translation is done with HeVeA. For
+presentation/screen-casting, the original text is then augmented
+in layers by images, audio voice-overs, screen captures, videos and
+captions. The Beamer LaTeX file is then
+processed by both LaTeX and HeVeA. LaTeX produced slides are then absorbed
+in html by HeVeA as images. HeVeA output
+is destined to be dispensed by Reveal.js. The video is then just a screen
+capture of the autoplay of reveal file.
+Viewing presentations in their original Reveal form makes for an even
+richer experience.
+
+All of this involves a whole lot of integration and scripting. But all of
+that has been done and you can get it all
+in one shot by just running one script.
+
+To get started with BISOS, Blee, and ByStar, visit
+<https://github.com/bxgenesis/start>. From a vanilla Debian 13
+installation ("Fresh-Debian"), you can bootstrap BISOS and Blee (with
+Emacs-30) in one step by running the
+raw-bisos.sh script. It produces "Raw-BISOS" which includes "Raw-Blee".
+
+You can then add the LaTeX sources for your content as ByStar Portable
+Objects (BPO) to BISOS and process
+your content with Blee-LCNT.
+
+All of this and more has been documented in a book that was produced by
+Blee-LCNT itself.
+The title of that book is:
+
+Nature of Polyexistentials:
+Basis for Abolishment of the Western Intellectual Property Rights Regime
+And Introduction of the Libre-Halaal ByStar Digital Ecosystem
+
+- On Line US Edition: <https://github.com/bxplpc/120033> &ndash; Download:
+
+<https://raw.github.com/bxplpc/120033/main/pdf/c-120033-1_05-book-8.5x11-col-emb-pub.pdf>
+
+- On Line International Edition: <https://github.com/bxplpc/120074> &ndash;
+
+Download:
+<https://raw.github.com/bxplpc/120074/main/pdf/c-120074-1_05-book-a4-col-emb-pub.pdf>
+DOI: <https://doi.org/10.5281/zenodo.8003846>
+
+- US Edition Book Prints At Amazon: <https://www.amazon.com/dp/1960957015>
+- International Edition Book Prints in Iran:
+
+<https://jangal.com/fa/product/252689/nature-of-polyexistentials>
+
+I welcome your thoughts and feedback, especially if you experiment with
+Blee,
+BISOS, ByStar, and the model and the concept of Libre-Halaal
+Polyexistentials.
+
+
+
+[[!inline pages="internal(2025/info/blee-lcnt-after)" raw="yes"]]
+
+[[!inline pages="internal(2025/info/blee-lcnt-nav)" raw="yes"]]
+
+
diff --git a/2025/talks/bookclub-tapas.md b/2025/talks/bookclub-tapas.md
new file mode 100644
index 00000000..5d0574b1
--- /dev/null
+++ b/2025/talks/bookclub-tapas.md
@@ -0,0 +1,73 @@
+[[!meta title="Bookclub tapas"]]
+[[!meta copyright="Copyright &copy; 2025 Maddie Sullivan"]]
+[[!inline pages="internal(2025/info/bookclub-tapas-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. --->
+
+
+# Bookclub tapas
+Maddie Sullivan (she/her) - IRC: ElephantErgo, <https://ElephantErgonomics.com>, <mailto:hello@ElephantErgonomics.com>
+
+[[!inline pages="internal(2025/info/bookclub-tapas-before)" raw="yes"]]
+
+I've been experimenting with a new programming methodology that I've
+stumbled upon. I call it "Bookclub Tapas". It is comprised of two parts,
+"Bookclub" and "Tapas". Together, they form a literate-inspired,
+Agile-inspired development method which centers around developer
+self-reflection as a means to chip away at identifying powerful custom-fit
+abstractions.
+
+Bookclub turns literate programming on its head by having the target
+audience of the source document's commentary be its own developer. Bookclub
+files contain source code, issue tracking, research, feature requests, and
+reflections on the development process all seamlessly integrated into a
+single file. Developers no longer have to worry about keeping track of what
+they want to be doing, why they want to do something, or even the full
+picture of how to go about doing something, because the Bookclub file acts
+in cooperative conversation with the developer as a living record of their
+hopes, intentions, and efforts.
+
+Tapas is the idea that instead of writing stand-alone programs, we write
+library ecosystems. Instead of getting ahead of ourselves by trying
+immediately to write large programs to solve large problems, we instead
+focus on writing abstractions that reduce the scale of our problem. Our
+goal is to identify what sort of tool would make the problem at hand
+trivial to solve, implement said tool, and even work recursively to
+implement tools to implement our tools. Our goal is that each next level of
+abstraction is roughly a three-line trivial case of the level of
+abstraction below, and eventually the solution to our initial problem is
+itself trivial.
+
+Over the course of the talk, I intend to dive into what is Bookclub, what
+is Tapas, what do they look like when used together, and why they provide a
+meaningful set of methodologies both for getting real work done and also
+elevating the programming process' beauty. I will use a live demo centered
+around light development on a real-life yet-to-be-released Emacs Lisp
+package. I intend to showcase how Org Babel enables Bookclub by allowing
+for incredibly malleable documents that seamlessly integrate source code,
+documentation, issue tracking, research, and even the build process. I also
+intend to showcase how the Emacs Lisp macro system enables Tapas by
+allowing us to recontextualize and reinvent syntax in order to build
+powerful, composable abstractions that do exactly what the context calls
+for while using phrasing that is both natural and intuitive.
+
+About the speaker:
+
+Hi! I'm Maddie Sullivan, my pronouns are she/her, my handle is
+ElephantErgonomics (ElephantErgo on IRC), and my email is
+hello@ElephantErgonomics.com. My talk is on a programming methodology I've
+stumbled into that I've come to call "Bookclub Tapas". It's inspired by
+literate, agile, and last year's Emacsconf! I've had great success with it
+for my personal development process, and I'm hoping you can get something
+out of it as well. I'll be laying out what it is, how I found it, why Emacs
+makes an awesome environment for it, and how you can get started with it
+too!
+
+
+
+[[!inline pages="internal(2025/info/bookclub-tapas-after)" raw="yes"]]
+
+[[!inline pages="internal(2025/info/bookclub-tapas-nav)" raw="yes"]]
+
+
diff --git a/2025/talks/calc.md b/2025/talks/calc.md
new file mode 100644
index 00000000..b0172603
--- /dev/null
+++ b/2025/talks/calc.md
@@ -0,0 +1,26 @@
+[[!meta title="Basic Calc functionality for engineering or electronics"]]
+[[!meta copyright="Copyright &copy; 2025 Christopher Howard"]]
+[[!inline pages="internal(2025/info/calc-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. --->
+
+
+# Basic Calc functionality for engineering or electronics
+Christopher Howard (he/him) - IRC: lispmacs or lispmacs[work], gemini capsule: gemini://gem.librehacker.com, <mailto:christopher@librehacker.com>
+
+[[!inline pages="internal(2025/info/calc-before)" raw="yes"]]
+
+An introduction to some of the basic Algebra and Calculus functionality in Calc, as might be useful in engineering or electronics.
+
+About the speaker:
+
+Christopher Howard is a simulator technician in Fairbanks, Alaska, and a GNU Emacs user for a little over a decade. My technical interests are focused on analog computing and modeling with differential equations.
+
+
+
+[[!inline pages="internal(2025/info/calc-after)" raw="yes"]]
+
+[[!inline pages="internal(2025/info/calc-nav)" raw="yes"]]
+
+
diff --git a/2025/talks/claude-code.md b/2025/talks/claude-code.md
new file mode 100644
index 00000000..0e4c198c
--- /dev/null
+++ b/2025/talks/claude-code.md
@@ -0,0 +1,69 @@
+[[!meta title="emacs-claude-code: Intelligent Claude Integration for Emacs"]]
+[[!meta copyright="Copyright &copy; 2025 Yusuke Watanabe"]]
+[[!inline pages="internal(2025/info/claude-code-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. --->
+
+
+# emacs-claude-code: Intelligent Claude Integration for Emacs
+Yusuke Watanabe (he/him) - Pronunciation: you-SKAY wah-tah-NAH-bay, GitHub: <https://github.com/ywatanabe1989/emacs-claude-code>, <mailto:ywatanabe@alumni.u-tokyo.ac.jp>
+
+[[!inline pages="internal(2025/info/claude-code-before)" raw="yes"]]
+
+As AI coding assistants become essential development tools, integrating
+them seamlessly into our Emacs workflows becomes crucial. This talk
+introduces emacs-claude-code, a package that transforms how Emacs users
+interact with Claude Code through intelligent automation and enhanced vterm
+integration.
+
+The main challenge with terminal-based AI assistants is the repetitive
+manual interaction required. Claude Code presents various prompts (Y/N
+choices, waiting states, continuation prompts) that interrupt the
+development flow. emacs-claude-code solves this by introducing smart
+auto-response patterns that recognize Claude's state and respond
+appropriately, allowing developers to maintain focus on their code rather
+than managing the AI interface.
+
+Key features I'll demonstrate include:
+
+1. **Intelligent Auto-Response System**: Automatically handles Claude's various prompt states (INITIAL WAITING, Y/N, Y/Y/N, WAITING) with customizable responses. This allows uninterrupted AI-assisted coding sessions.
+
+1. **Centralized Buffer Management**: A dashboard view of all Claude sessions showing their current state, auto-response status, and last interaction time. Users can quickly navigate between multiple AI conversations and toggle automation settings.
+
+1. **Yank-as-File Functionality**: Elegantly handles large code snippets by saving them as files instead of cluttering the terminal, with full TRAMP support for remote development.
+
+1. **Periodic Command Automation**: Executes custom commands at specified interaction intervals, perfect for maintaining context or triggering regular actions like compacting conversation history.
+
+The package leverages Emacs' powerful vterm-mode to create a robust
+integration layer. I'll share implementation details about state detection
+using regular expressions, buffer management techniques, and the advice
+system used for seamless clipboard integration.
+
+Beyond the technical implementation, I'll discuss practical workflows that
+emerge from this integration, including custom Claude commands (stored as
+Markdown files) that can be triggered automatically based on context. The
+talk will include a live demonstration showing how these features work
+together to create a fluid AI-assisted development experience.
+
+This project embodies the Emacs philosophy of extensibility and automation,
+making cutting-edge AI tools work the way Emacs users expect - efficiently,
+automatically, and under their complete control.
+
+About the speaker:
+
+I'm Yusuke Watanabe, a researcher who uses Emacs for both academic work and
+software development. After experiencing friction with manual Claude Code
+interactions, I developed emacs-claude-code to automate repetitive tasks
+and integrate AI assistance smoothly into Emacs workflows. This project
+represents my approach to making modern AI tools work within the Emacs
+ecosystem while maintaining the editor's core principles of efficiency and
+user control.
+
+
+
+[[!inline pages="internal(2025/info/claude-code-after)" raw="yes"]]
+
+[[!inline pages="internal(2025/info/claude-code-nav)" raw="yes"]]
+
+
diff --git a/2025/talks/commonlisp.md b/2025/talks/commonlisp.md
new file mode 100644
index 00000000..df968e08
--- /dev/null
+++ b/2025/talks/commonlisp.md
@@ -0,0 +1,88 @@
+[[!meta title="Common lisp images communicating like-a-human through shared emacs slime and eev"]]
+[[!meta copyright="Copyright &copy; 2025 screwlisp"]]
+[[!inline pages="internal(2025/info/commonlisp-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. --->
+
+
+# Common Lisp images communicating like-a-human through shared emacs slime and eev
+screwlisp (he/him, they/them) - IRC: screwlisp, <https://gamerplus.org/@screwlisp>, <https://screwlisp.small-web.org/>
+
+[[!inline pages="internal(2025/info/commonlisp-before)" raw="yes"]]
+
+Demos a typical orgmode user's regular useages, segueing into Eduardo Ochs'
+eev executable-logs emacs style generally emphasising language/target
+interoperability ANSI common lisp / C / emacs lisp / org-mode / eev homed
+around eev.
+
+On the theory that an agent is intelligent to the extent it is
+human-relatable, an autonomous software agent is started which receives
+messages pushed to an emacs lisp list, but otherwise does its own thing
+using eev eepitch, just like the human does.
+
+Good as a normal lisp-user emacs example underscoring the org-mode and eev
+focused talks feeding into using software agents that use emacs/eev exactly
+like the human does via my port to emacs of Sandewall's 2014 Leonardo
+system software-individuals release.
+
+Naturalistic style.
+
+- Blog <https://screwlisp.small-web.org>
+- Mastodon <https://gamerplus.org/@screwlisp>
+
+Some related blog articles.
+
+- <https://screwlisp.small-web.org/software-individuals/same-universe-multiple-agents>
+- <https://screwlisp.small-web.org/software-individuals/trivial-program-that-never-stops>
+- <https://screwlisp.small-web.org/software-individuals/fipa>
+- <https://codeberg.org/tfw/pawn-75>
+
+Weekly shows past.
+
+- <https://communitymedia.video/c/screwtape_channel/videos>
+- <https://toobnix.org/a/screwtape/videos>
+
+
+Q&A will be on IRC and in LambdaMOO.
+
+**Q&A in LambdaMOO**:
+
+As an experiment, screwlisp will also be taking
+questions from LambdaMOO. Here's how to join:
+
+1. Use `M-x telnet` to connect to `lambda.moo.mud.org 8888`. Alternatively, you can use a web-based client like https://mudslinger.net/play/ or rmoo.el (see rmoo.el note below)
+2. `connect Guest` to connect as a guest. If that doesn't work, please ask in `#emacsconf-org` and we'll try to get you sorted out.
+3. Agree to the terms by typing `YES`.
+4. Teleport to where the speaker is by typing `@join screwtape`.
+
+To say something, start with `"` and omit the ending quotation mark, like this: `"Hello everyone!`. To say something to a specific person, start with a backtick (`` ` ``) and the person's nick, then your message, like this: `` `sachac I made it to LambdaMOO``. Use `help communication` to learn more about other communication tools, such as `:` for emoting and `whisper` for sending private messages.
+
+rmoo.el note: You may need to define process-kill-without-query if it doesn't exist on your computer. Here's a use-package declaration that might be a good starting point. If your version of use-package doesn't support `:vc` yet, you can check out the code from https://github.com/toddsundsted/rmoo and add it to your load-path, or use `M-x telnet` for now.
+
+```
+(use-package rmoo
+ :vc "https://github.com/toddsundsted/rmoo"
+ :init
+ (unless (fboundp 'process-kill-without-query)
+ (defun process-kill-without-query (process &optional flag)
+ (set-process-query-on-exit-flag process nil)
+ t))
+ :config
+ (rmoo-worlds-add-new-moo "LambdaMOO" "lambda.moo.mud.org" "8888"))
+```
+
+You can also ask questions via BigBlueButton, Etherpad, or IRC, and the host will try to make sure your question gets to the speaker. Enjoy!
+
+About the speaker:
+
+Flocking lisp images with Screwlisp (Lispy Gopher Climate and
+<https://screwlisp.small-web.org/>).
+
+
+
+[[!inline pages="internal(2025/info/commonlisp-after)" raw="yes"]]
+
+[[!inline pages="internal(2025/info/commonlisp-nav)" raw="yes"]]
+
+
diff --git a/2025/talks/completion.md b/2025/talks/completion.md
new file mode 100644
index 00000000..a074b568
--- /dev/null
+++ b/2025/talks/completion.md
@@ -0,0 +1,36 @@
+[[!meta title="corfu+yasnippet: Easier than I thought"]]
+[[!meta copyright="Copyright &copy; 2025 Pedro A. Aranda Gutiérrez"]]
+[[!inline pages="internal(2025/info/completion-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. --->
+
+
+# corfu+yasnippet: Easier than I thought
+Pedro A. Aranda Gutiérrez (he, him) - <mailto:paaguti@gmail.com>
+
+[[!inline pages="internal(2025/info/completion-before)" raw="yes"]]
+
+I describe my experience in "getting rid" of company-mode and
+transitioning to corfu. I now have yasnippets integrated with
+a couple lines Emacs Lisp. The main advantage is that with I
+need less packages and configuration, specially on master.
+The talk will include some code snippets that show it was
+easier than expectedand a life demo.
+
+20 minutes (with demo)
+
+About the speaker:
+
+After 30 years using Emacs, professionally and for my PhD, I'm currenly
+quite involved in org-mode, where I'm revamping the LaTeX backend.
+To do this, I needed a new approach to auto-completion because
+company-mode started requiring too much code and integration.
+
+
+
+[[!inline pages="internal(2025/info/completion-after)" raw="yes"]]
+
+[[!inline pages="internal(2025/info/completion-nav)" raw="yes"]]
+
+
diff --git a/2025/talks/gardening.md b/2025/talks/gardening.md
new file mode 100644
index 00000000..a7b8c2a2
--- /dev/null
+++ b/2025/talks/gardening.md
@@ -0,0 +1,56 @@
+[[!meta title="Gardening in Emacs: A Windows user's tale of tending, tweaking, and triumph"]]
+[[!meta copyright="Copyright &copy; 2025 Marco Bresciani"]]
+[[!inline pages="internal(2025/info/gardening-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. --->
+
+
+# Gardening in Emacs: A Windows user's tale of tending, tweaking, and triumph
+Marco Bresciani - Pronunciation: [mˈarko breʃˈanɪ](https://unalengua.com/ipa-translate?hl=en&ttsLocale=it-IT&voiceId=Giorgio&sl=it&text=Marco%20Bresciani&ttsMode=word&speed=3), [Delta Chat](https://i.delta.chat/#F4A07D3A629AC049257C7D02271C8AB34DA36085&i=BzsU0ErXsb1QHvQVnkVpKC3N&s=8DaaDMCc1_yNnJOTv9OO5AFD&a=26sjhl7dn%40nine.testrun.org&n=MB), [@AAMfP@fosstodon.org](https://fosstodon.org/@AAMfP), [marcoxbresciani.codeberg.page](https://marcoxbresciani.codeberg.page/)
+
+
+
+[[!inline pages="internal(2025/info/gardening-before)" raw="yes"]]
+
+I'm a not-ashamed Windows user, both at
+work and at home, since forever. I also like portable applications, to
+bring everything I need, everywhere, on my tiny USB thumb drive.
+And now also Emacs is there, on my USB!
+
+I'm also not the blogger type of person: I've tried, for a time. I
+stopped at entry ~8 of a "100 days blogging" saga.
+
+But I actually immediately fell in love with the (possibly slower pace)
+digital garden concept and since I wanted to try Emacs, I decided to
+catch two pigeons with one stone.
+
+This is the story of how I learned the very basics of Emacs and Org Mode,
+from how to save and exit to how to change letters case of a whole region
+or the (long searched for) fill-paragraph feature.
+
+This is the story of how I learned Org Mode publishing configuration and
+tricks, to create my digital garden, give it a structure and make it
+freely available for anyone to read (and hopefully enjoy) in HTML format.
+This is the story of how I added Japanese furigana and PlantUML diagrams
+and a <del>one</del> few clicks-away "go to market" strategy.
+
+This is the story of my digital garden, how I tend to it while learning
+the tool(s) I'm using to care of my garden, Emacs and Org Mode.
+And this is the story of how I ask for your help, to continue learning
+Emacs and Org Mode.
+
+About the speaker:
+
+20+ years software
+developer and Vi user during university life, now moved to the dark side
+of agile coaching as Scrum Master.
+Started learning Emacs by chance since I wanted to try it since ages.
+
+
+
+[[!inline pages="internal(2025/info/gardening-after)" raw="yes"]]
+
+[[!inline pages="internal(2025/info/gardening-nav)" raw="yes"]]
+
+
diff --git a/2025/talks/gmail.md b/2025/talks/gmail.md
new file mode 100644
index 00000000..2768748b
--- /dev/null
+++ b/2025/talks/gmail.md
@@ -0,0 +1,64 @@
+[[!meta title="org-gmail: A Deep Integration of Gmail into Your Org Mode"]]
+[[!meta copyright="Copyright &copy; 2025 Bala Ramadurai"]]
+[[!inline pages="internal(2025/info/gmail-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. --->
+
+
+# org-gmail: A Deep Integration of Gmail into Your Org Mode
+Bala Ramadurai (he/him) - <https://balaramadurai.net>, <mailto:bala@balaramadurai.net>
+
+[[!inline pages="internal(2025/info/gmail-before)" raw="yes"]]
+
+For many, email is the starting point for tasks, projects, and reference
+material. While Emacs has powerful, full-featured mail clients like Gnus
+and mu4e, they are designed to manage the entire email workflow.
+
+org-gmail offers a different approach: it is not a replacement for a full
+mail client, but a tool for deeply **integrating** your most important emails
+into your Org Mode knowledge base.
+
+This talk will introduce org-gmail, a package that allows users to fetch
+entire Gmail threads or individual messages and save them as entries in Org
+mode files. The core idea is to triage emails in the Gmail interface and
+pull relevant threads into Org Mode, where they can be linked to tasks,
+notes, and projects.
+
+We will explore the key features of the package, including:
+
+- Fetching emails by label and syncing new messages for previously downloaded labels.
+- Managing labels directly from Emacs, including creating, deleting, editing, and bulk-moving threads between labels, which updates both Gmail and the corresponding :LABEL: properties in your Org files.
+- Performing common email actions from within Org Mode, such as replying, forwarding (delegating), snoozing (deferring), and moving messages to the trash.
+- Integrating emails into a task management workflow by creating actionable sub-tasks that appear in the agenda.
+
+The session will demonstrate practical use cases for both Getting Things
+Done (GTD) and the P.A.R.A. method (Tiago Forte). For GTD, we'll show how
+to process a Gmail inbox, download actionable emails into an Org file, and
+then defer, delegate, or create TODO items. For P.A.R.A., we'll demonstrate
+how to label emails according to projects and areas, and how to archive
+them systematically using the bulk-move feature.
+
+By the end of the talk, attendees will understand the unique workflow
+org-gmail enables and how it can help them turn their email into a
+structured, actionable part of their Org Mode system.
+
+About the speaker:
+
+Bala Ramadurai is an entrepreneur, professor, author, coach, consultant,
+and podcaster. He is the CEO of Spirelia, a company that helps innovate. He
+has authored a book called Karmic Design Thinking and holds 3 patents.
+
+In this talk, Bala will introduce org-gmail, a package he developed to
+seamlessly integrate Gmail with Org Mode. You will learn how to transform
+your important emails into actionable tasks and reference material,
+leveraging the power of Org Mode for a more organized and productive
+workflow that supports methodologies like GTD and P.A.R.A.
+
+
+
+[[!inline pages="internal(2025/info/gmail-after)" raw="yes"]]
+
+[[!inline pages="internal(2025/info/gmail-nav)" raw="yes"]]
+
+
diff --git a/2025/talks/gnus.md b/2025/talks/gnus.md
new file mode 100644
index 00000000..155bd9e0
--- /dev/null
+++ b/2025/talks/gnus.md
@@ -0,0 +1,44 @@
+[[!meta title="Reading and writing emails in GNU Emacs with Gnus"]]
+[[!meta copyright="Copyright &copy; 2025 Amin Bandali"]]
+[[!inline pages="internal(2025/info/gnus-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. --->
+
+
+# Reading and writing emails in GNU Emacs with Gnus
+Amin Bandali (he/him) - IRC: bandali, <https://kelar.org/~bandali>, <mailto:bandali@gnu.org>
+
+[[!inline pages="internal(2025/info/gnus-before)" raw="yes"]]
+
+Gnus has had the reputation of being difficult to grasp and
+configure. The myriad of configuration options of its many major
+and minor modes which afford Gnus its high degree of customizability
+can also seem overwhelming and daunting for folks looking to learn
+about and use it to build a workflow for doing email in GNU Emacs.
+
+This talk aims to provide a high-level outline of some of the key
+concepts in Gnus, and a roadmap for approaching and configuring Gnus
+and Message to your liking so that you, too, can read, compose, and
+send emails with GNU Emacs.
+
+About the speaker:
+
+Amin Bandali is a computing scientist and activist for user freedom,
+and a participant in various free software projects and communities.
+Bandali wears a few hats around the GNU Project and is a volunteer
+member of the Free Software Foundation SysOps team, a core organizer
+of EmacsConf, a Debian Developer and a contributor to the Trisquel
+GNU/Linux distribution.
+
+In this talk, Bandali will go over configuring Gnus and Message for
+reading and composing emails, showcasing one of many approaches for
+using GNU Emacs for email communications.
+
+
+
+[[!inline pages="internal(2025/info/gnus-after)" raw="yes"]]
+
+[[!inline pages="internal(2025/info/gnus-nav)" raw="yes"]]
+
+
diff --git a/2025/talks/graphics.md b/2025/talks/graphics.md
new file mode 100644
index 00000000..6ff2eb7c
--- /dev/null
+++ b/2025/talks/graphics.md
@@ -0,0 +1,22 @@
+[[!meta title="Modern Emacs/Elisp hardware/software accelerated graphics"]]
+[[!meta copyright="Copyright &copy; 2025 Emanuel Berg"]]
+[[!inline pages="internal(2025/info/graphics-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. --->
+
+
+# Modern Emacs/Elisp hardware/software accelerated graphics
+Emanuel Berg (he/him) - Pronunciation: Swenglish, IRC: lacni, <https://dataswamp.org/~incal>, <mailto:incal@dataswamp.org>
+
+[[!inline pages="internal(2025/info/graphics-before)" raw="yes"]]
+
+Modern graphics with Emacs with hardware/software acceleration
+
+
+
+[[!inline pages="internal(2025/info/graphics-after)" raw="yes"]]
+
+[[!inline pages="internal(2025/info/graphics-nav)" raw="yes"]]
+
+
diff --git a/2025/talks/greader.md b/2025/talks/greader.md
new file mode 100644
index 00000000..341d4642
--- /dev/null
+++ b/2025/talks/greader.md
@@ -0,0 +1,41 @@
+[[!meta title="GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence"]]
+[[!meta copyright="Copyright &copy; 2025 Yuval Langer"]]
+[[!inline pages="internal(2025/info/greader-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. --->
+
+
+# GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence
+Yuval Langer (he/him) - Pronunciation: /juval/ /lˈangeʁ/, IRC: cow_2001,
+[@mu@posting.solutions](https://posting.solutions/users/mu), <mailto:yuval.langer@gmail.com>
+
+[[!inline pages="internal(2025/info/greader-before)" raw="yes"]]
+
+<https://gitlab.com/michelangelo-rodriguez/greader>
+
+A short talk explaining why Greader mode is needed, demonstrating its normal
+use, some interesting features, some interesting customization variables, and
+so on. Greader is a text-to-speech minor mode written by Michelangelo
+Rodriguez. For various reasons, I find it hard reading long things on the
+computer screen. Using Greader greatly helps me with that. I use it to read
+sites on EWW, books with Nov.el, blogs with Elfeed, and various other texts I
+copy from other programs and yank to a randomly named `C-x b alsdkfjoewjfocm RET` buffer. The author had also provided some interesting features he would
+like me to cover.
+
+About the speaker:
+
+I am a mere user who loves reading, but damned to be a slow reader. Alas!
+Thankfully, there's Emacs and Greader mode.
+
+Note: This talk will be narrated by a
+text-to-speech engine because of a request from
+the speaker.
+
+
+
+[[!inline pages="internal(2025/info/greader-after)" raw="yes"]]
+
+[[!inline pages="internal(2025/info/greader-nav)" raw="yes"]]
+
+
diff --git a/2025/talks/hyperboleqa.md b/2025/talks/hyperboleqa.md
new file mode 100644
index 00000000..31f02953
--- /dev/null
+++ b/2025/talks/hyperboleqa.md
@@ -0,0 +1,71 @@
+[[!meta title="Questions and answers to help you fly with Hyperbole"]]
+[[!meta copyright="Copyright &copy; 2025 Bob Weiner"]]
+[[!inline pages="internal(2025/info/hyperboleqa-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. --->
+
+
+# Questions and answers to help you fly with Hyperbole
+Bob Weiner - Pronunciation: Wine-er, <https://savannah.gnu.org/projects/hyperbole/> , <https://rswgnu.github.io/hyperbole/man/hyperbole.html> , <mailto:rsw@gnu.org>
+
+[[!inline pages="internal(2025/info/hyperboleqa-before)" raw="yes"]]
+
+RSW, the autthor of Hyperbole, will answer your questions on Hyperbole
+live and demonstrate how it can make you more productive.
+
+Hyperbole is an extensive, easy-to-use package that brings
+hypertextual information management across all of Emacs to files with
+minimal or no markup, including source code files. It works with all
+modern versions of Emacs and does not require the use of any
+third-party packages or compiled modules. Its keyboard-driven
+minibuffer menus let you learn the key bindings for one set of
+features at a time. Its global minor mode lets you turn on and off
+its features with a single command.
+
+Many people express interest in Hyperbole but find its breadth makes
+it difficult for them to get started with it. Or they struggle to
+find specific workflows because of its infinite flexibility. This Q
+and A session is intended to help people over this initial hump by
+covering introductory topics such as the Action Key and how Implicit
+Buttons in your existing documents act as hyperlinks automatically.
+If more advanced topics are of interest, we could even answer
+questions such as:
+
+- How can I quickly turn my Lisp expressions into hypertext buttons?
+
+- Can I point Hyperbole at thousands of Org files and have it quickly
+ jump to arbitrary sections in the files without any prior indexing
+ or need for a database system?
+
+- Can Hyperbole build a wiki with Org files, automatically
+ highlighting WikiWord references with no special markup and then
+ publish it to the web?
+
+- When programming, can Hyperbole help me rapidly select, move and
+ display programmatic information?
+
+- What if I need an entire outline with builtin hyperlink anchors
+ and automatic paragraph numbering?
+
+- So Hyperbole just augments everything I do in Org mode already?
+
+The session will be driven by the topics that participants want to
+know about, so come with your questions and lets dive in together to
+see whether its all just Hyperbole.
+
+About the speaker:
+
+Bob Weiner (rsw) has been developing hypertextual systems since the
+dawn of the web in 1991 and using Emacs since 1982, though the other
+day someone said I look 28-years-old, so neither I nor Hyperbole feel
+that old. We have gained some perspective through the years, so maybe
+I can help you learn something new or see something in a new way.
+
+
+
+[[!inline pages="internal(2025/info/hyperboleqa-after)" raw="yes"]]
+
+[[!inline pages="internal(2025/info/hyperboleqa-nav)" raw="yes"]]
+
+
diff --git a/2025/talks/juicemacs.md b/2025/talks/juicemacs.md
new file mode 100644
index 00000000..d724ad33
--- /dev/null
+++ b/2025/talks/juicemacs.md
@@ -0,0 +1,74 @@
+[[!meta title="Juicemacs: Exploring Speculative JIT Compilation for ELisp in Java"]]
+[[!meta copyright="Copyright &copy; 2025 Kana"]]
+[[!inline pages="internal(2025/info/juicemacs-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. --->
+
+
+# Juicemacs: Exploring Speculative JIT Compilation for ELisp in Java
+Kana (they/them) - IRC: kanakana, Blog: https://kyo.iroiro.party - ActivityPub: @kana@f.iroiro.party - Bluesky: @kana.iroiro.party, <mailto:kana@iroiro.party>
+
+[[!inline pages="internal(2025/info/juicemacs-before)" raw="yes"]]
+
+Just-in-time (JIT) compilation helps dynamic languages run fast, and
+speculative compilation makes them run faster, as has been showcased
+by JVMs, LuaJIT, JavaScript engines, and many more JIT runtimes.
+However, Emacs native-compilation, despite its JIT compilation
+(`native-comp-jit-compilation`), does not speculate about runtime
+execution, making it effectively a JIT-ish AOT (ahead-of-time)
+compiler. By introducing a speculative runtime for ELisp, we could
+potentially improve ELisp performance even further, with many new
+optimization opportunities.
+
+Juicemacs is my work-in-progress toy project re-implementing Emacs in
+Java. At its centre sits an ELisp JIT runtime powered by Graal
+Truffle, a JIT interpreter framework based on partial evaluation and
+Futamura projections. This talk will cover the following along with
+some demonstrations:
+
+- What is Juicemacs and its ambition? How compatible is it (or does
+ it plan to be) with GNU Emacs and how feature-complete is it now?
+
+- What is speculative compilation? How is it useful for an ELisp JIT
+ runtime?
+
+- How is the performance of Juicemacs compared to Emacs nativecomp?
+ How do we interpret the benchmarks?
+
+- What is Truffle and partial evaluation? What is needed if we are
+ to implement a speculative runtime in C without Truffle?
+
+- What JIT techniques and other things does Juicemacs plan to
+ explore? How to get involved?
+
+Relevant links:
+
+- Accompanying blog post (slides + transcript + more discussions):
+ <https://kyo.iroiro.party/en/posts/juicemacs-exploring-jit-for-elisp/>
+ (scheduled to become available after the talk)
+
+- Project repository: <https://github.com/gudzpoz/Juicemacs> or
+ <https://codeberg.org/gudzpoz/Juicemacs>
+
+- ERT testing results: <https://emacsen.de/dev/tests/>
+
+- Zulip chat (devlog + discussions): <https://juice.zulipchat.com>
+
+About the speaker:
+
+Hello! This is Kana, an Emacs hobbyist and Java lover from China. A
+few years ago I discovered the Truffle JIT compilation framework and
+have since hoped to implement a JIT runtime myself. Last year I
+finally started implementing one for ELisp, called Juicemacs, and
+have made some progress. In this talk I will share what I've learned
+during the journey, including how three interpreters out of four (or
+more?) in Emacs are implemented in Juicemacs and how speculative
+compilation can make some optimizations possible.
+
+
+[[!inline pages="internal(2025/info/juicemacs-after)" raw="yes"]]
+
+[[!inline pages="internal(2025/info/juicemacs-nav)" raw="yes"]]
+
+
diff --git a/2025/talks/languages.md b/2025/talks/languages.md
new file mode 100644
index 00000000..4a54d73e
--- /dev/null
+++ b/2025/talks/languages.md
@@ -0,0 +1,57 @@
+[[!meta title="Studying foreign languages with Emacs, Org Mode and gptel"]]
+[[!meta copyright="Copyright &copy; 2025 Marek"]]
+[[!inline pages="internal(2025/info/languages-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. --->
+
+
+# Studying foreign languages with Emacs, Org Mode and gptel
+Marek (he/him) - https://github.com/keram, <mailto:nospam.keram@gmail.com>
+
+[[!inline pages="internal(2025/info/languages-before)" raw="yes"]]
+
+This talk will demonstrate the workflow I’ve built
+around Emacs and Org mode for creating and
+managing multilingual texts. My focus is on
+English, Mandarin Chinese, and Pinyin (the
+Romanized system for Chinese). A key part of this
+setup is a custom major mode derived from
+`text-mode`, designed to handle language switching
+and structured study notes more effectively. On
+top of this, I use `gptel` as a writing companion:
+it helps catch typos, grammar mistakes, and subtle
+issues that arise when switching between
+languages.
+
+Beyond editing, I’ll show how I publish my study
+notes to the web:
+<https://keram.github.io/ihl-hanyu/index.html> . By
+combining Org’s export features with a small
+amount of custom JavaScript, I’ve added
+interactive functionality such as text-to-speech
+playback and vocabulary practice exercises.
+
+Attendees will see how these tools and techniques can be combined to:
+
+- Customize Emacs for multilingual writing and study workflows.
+- Use Org mode as a framework for language learning materials.
+- Leverage `gptel` for proofreading and feedback.
+- Enrich exported Org documents with lightweight web enhancements.
+
+The talk will be of interest to language learners, Emacs users curious
+about publishing workflows, and anyone who wants to see
+how Emacs can as a personal learning environment.
+
+About the speaker:
+
+I am GNU Emacs enthusiast living in London, UK. Using Emacs for years for
+work, personal life and study.
+
+
+
+[[!inline pages="internal(2025/info/languages-after)" raw="yes"]]
+
+[[!inline pages="internal(2025/info/languages-nav)" raw="yes"]]
+
+
diff --git a/2025/talks/latex.md b/2025/talks/latex.md
new file mode 100644
index 00000000..3b277ca0
--- /dev/null
+++ b/2025/talks/latex.md
@@ -0,0 +1,37 @@
+[[!meta title="LaTeX export in org-mode: the overhaul"]]
+[[!meta copyright="Copyright &copy; 2025 Pedro A. Aranda Gutiérrez"]]
+[[!inline pages="internal(2025/info/latex-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. --->
+
+
+# LaTeX export in org-mode: the overhaul
+Pedro A. Aranda Gutiérrez (he, him) - paaguti@gmail.com, <mailto:paaguti@gmail.com>
+
+[[!inline pages="internal(2025/info/latex-before)" raw="yes"]]
+
+During the last year, the LaTeX backend in Org mode has received an overhaul.
+The objectives, while keeping backward compatibility, were:
+
+- Better integration of the font-management features and packages with
+ lualatex/xelatex
+- Reducing the amount of `#+LATEX_HEADER:` lines and avoiding to have to
+ include a pure LaTeX file to profit from them
+- Flexibility, while using native Emacs Lisp features, like file/directory
+ local variables
+
+In this talk, I will present the new font management features in the LaTeX
+backend and show a couple of examples of what can be achieved.
+
+About the speaker:
+
+After 30 years using Emacs, professionally and for my PhD, I'm currently
+quite involved in org-mode, where I'm revamping the LaTeX backend.
+
+
+[[!inline pages="internal(2025/info/latex-after)" raw="yes"]]
+
+[[!inline pages="internal(2025/info/latex-nav)" raw="yes"]]
+
+
diff --git a/2025/talks/life.md b/2025/talks/life.md
new file mode 100644
index 00000000..335676d3
--- /dev/null
+++ b/2025/talks/life.md
@@ -0,0 +1,92 @@
+[[!meta title="From FRDCSA to FLP2: Building AI-Powered Life Planning Systems in Emacs - A Journey from Research to Real-World Impact"]]
+[[!meta copyright="Copyright &copy; 2025 Andrew John Dougherty"]]
+[[!inline pages="internal(2025/info/life-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. --->
+
+
+# From FRDCSA to FLP2: Building AI-Powered Life Planning Systems in Emacs - A Journey from Research to Real-World Impact
+Andrew John Dougherty (he/him) - Pronunciation: Andrew DOW-er-tee, IRC: aindilis, Website: <https://frdcsa.org> GitHub: <https://github.com/aindilis>, <mailto:adougher9@gmail.com>
+
+[[!inline pages="internal(2025/info/life-before)" raw="yes"]]
+
+Six years after my EmacsConf 2019 presentation on the Formalized Research
+Database (FRDCSA), I return to share the evolution of this ambitious
+project into the Free Life Planner (FLP) - a comprehensive AI-powered
+system designed to help people manage the complex logistics of daily life,
+from basic survival to thriving in challenging circumstances.
+
+This talk chronicles the development journey from FRDCSA's initial vision
+of collecting and integrating all free software AI systems, to FLP's
+practical focus on solving real-world problems like homelessness, medical
+crises, and financial hardship. I'll demonstrate how Emacs serves as both
+the development environment and user interface for a system that now
+encompasses over 1000 subsystems including meal planning, financial
+forecasting, medical management, and emergency preparedness.
+
+Key highlights include:
+
+Technical Architecture: How we've built FLP using SWI-Prolog as the core
+reasoning engine, with Emacs providing the primary interface through 4680+
+custom ELisp functions. I'll show the integration of modern LLMs (Llama3,
+DeepSeek-Prover-V2, etc) with classical AI planning systems (PDDL planners,
+behavior trees, agent-based systems) all orchestrated through Emacs.
+
+Security Evolution: The transition from the original internet-connected
+FRDCSA/FLP to air-gapped systems, and the development of FRKCSA/FLP2 as
+open-source, internet-facing reboots. How we balance powerful AI
+capabilities with privacy and security concerns.
+
+Real-World Impact: Using generative AI and our PresGen presentation system,
+I'll showcase documented case studies where FLP has helped users navigate
+homelessness, medical crises, and benefit loss scenarios. These aren't
+hypothetical use cases - they represent the system's practical application
+to urgent human needs.
+
+Emacs Integration: Deep dive into our Emacs-based development workflow,
+including the CLEAR book reader for academic research, Verber planning
+domain editor, UniLang integration for multi-system communication, and our
+Academician mode for synchronized document processing. How Emacs serves as
+mission control for a complex AI ecosystem.
+
+AI Planning Systems: Demonstration of how we've integrated automated
+planning, temporal reasoning, and contingency planning into daily life
+management. Users can ask "How do I get through the next month if I lose my
+job?" and receive detailed, executable plans.
+
+Community Building: How FLP facilitates mutual aid networks and community
+resilience, turning individual survival into collective thriving. The
+system doesn't just help people - it helps them help each other.
+
+Future Directions: The roadmap for FLP2, including improved security
+models, enhanced AI integration, and broader accessibility. How we're
+preparing for a world where AI-powered life assistance could become a
+virtual social safety net.
+
+This presentation will use our PresGen system to generate slides
+dynamically, incorporating the latest AI developments and real user
+feedback. Attendees will see both the technical implementation and the
+humanitarian vision that drives this project - demonstrating how Emacs can
+be the foundation for transformative social technology.
+
+About the speaker:
+
+Andrew Dougherty is the creator of the FRDCSA (Formalized Research
+Database: Cluster, Study and Apply) and Free Life Planner projects. For
+over 25 years, he has worked on integrating AI systems to solve real-world
+problems, with a focus on helping vulnerable populations navigate complex
+life challenges. His work spans automated planning, knowledge
+representation, and practical AI applications. Andrew presented FRDCSA at
+EmacsConf 2019 and has continued developing these systems with Emacs as the
+primary development and deployment environment. He believes in using AI
+technology to strengthen communities and provide practical assistance to
+those who need it most.
+
+
+
+[[!inline pages="internal(2025/info/life-after)" raw="yes"]]
+
+[[!inline pages="internal(2025/info/life-nav)" raw="yes"]]
+
+
diff --git a/2025/talks/llm.md b/2025/talks/llm.md
new file mode 100644
index 00000000..f9b5633a
--- /dev/null
+++ b/2025/talks/llm.md
@@ -0,0 +1,42 @@
+[[!meta title="Emacs, editors, and LLM driven workflows"]]
+[[!meta copyright="Copyright &copy; 2025 Andrew Hyatt"]]
+[[!inline pages="internal(2025/info/llm-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. --->
+
+
+# Emacs, editors, and LLM driven workflows
+Andrew Hyatt (he/him) - ‪@andrewhyatt.bsky.social‬, <mailto:ahyatt@gmail.com>
+
+[[!inline pages="internal(2025/info/llm-before)" raw="yes"]]
+
+This talk will outline the major ways LLMs are changing the world of
+editors. There are a few different ways that LLMs are being used now:
+smart completion, smart feedback, ad-hoc addition and transformation, and
+out-of-band instructions which are typically done outside of the editor.
+What are the current Emacs solutions for these, and what does it mean for
+Emacs?
+
+- Intro and state of the art of LLMs and their workflow modalities that are currently used
+- Smart completion: Emacs solutions and demo
+- Smart feedback: Emacs solutions and demo
+- Ad-hoc addition and transformation: Gptel, ellama, and other tools; several demos
+- Out-of-band instructions: Aider, Claude Code, and more.
+- Thoughts for what it an editor is for, for those working with LLMs
+- Possible futures, and what these mean for Emacs, for editors in general, and for free software.
+
+About the speaker:
+
+Andrew Hyatt is a software engineer, and Emacs package author (llm,
+websocket, vecdb, ekg, and more). LLMs have already transformed how many
+people write and edit text. This talk explores the major workflows that
+have developed and examines what these mean for Emacs.
+
+
+
+[[!inline pages="internal(2025/info/llm-after)" raw="yes"]]
+
+[[!inline pages="internal(2025/info/llm-nav)" raw="yes"]]
+
+
diff --git a/2025/talks/modern.md b/2025/talks/modern.md
new file mode 100644
index 00000000..5d60bcc1
--- /dev/null
+++ b/2025/talks/modern.md
@@ -0,0 +1,35 @@
+[[!meta title="Some problems of modernizing Emacs"]]
+[[!meta copyright="Copyright &copy; 2025 Eduardo Ochs"]]
+[[!inline pages="internal(2025/info/modern-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. --->
+
+
+# Some problems of modernizing Emacs
+Eduardo Ochs (he/him) - Pronunciation: Oks, IRC: edrx, <http://anggtwu.net/>, more info at <http://anggtwu.net/contact.html>., <mailto:eduardoochs@gmail.com>
+
+[[!inline pages="internal(2025/info/modern-before)" raw="yes"]]
+
+This talk is going to be a reworked version of the incomplete video
+in <http://anggtwu.net/2025-modern.html>. I will start by presenting
+several notions of "simplicity" and "elegance", and show that when I
+started learning Elisp it was "simple" and "elegant" in a way that
+it no longer is; then I will show how to fix some tiny parts of the
+problem by 1) using functions based on \`cl-prin1', 2) redefining
+some printing methods with "(cl-defmethod cl-print-object &hellip;)", and 3) using Common Lisp to understand some recent parts of Elisp that are not well-documented.
+
+About the speaker:
+
+Eduardo is the author of an Emacs package called eev that makes
+total sense to a handful of people and no sense at all to
+practically everyone else - except for one part of eev, called
+"eepitch". He intends to explain the reasons for that in his talk.
+
+
+
+[[!inline pages="internal(2025/info/modern-after)" raw="yes"]]
+
+[[!inline pages="internal(2025/info/modern-nav)" raw="yes"]]
+
+
diff --git a/2025/talks/n-angulator.md b/2025/talks/n-angulator.md
new file mode 100644
index 00000000..9b1044b7
--- /dev/null
+++ b/2025/talks/n-angulator.md
@@ -0,0 +1,28 @@
+[[!meta title="Org-mode GTD vs N-angulator GTD"]]
+[[!meta copyright="Copyright &copy; 2025 Kevin Haddock"]]
+[[!inline pages="internal(2025/info/n-angulator-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. --->
+
+
+# Org-mode GTD vs N-angulator GTD
+Kevin Haddock - <mailto:kevinbanjo@gmail.com>
+
+[[!inline pages="internal(2025/info/n-angulator-before)" raw="yes"]]
+
+Typical real-world GTD operations are compared in org-mode and N-Angulator
+
+EmacsConf 2021 talk on N-Angulator: <https://emacsconf.org/2021/talks/nangulator/>
+
+About the speaker:
+
+Long term emacs enthusiast showcases the power of his prototype
+n-dimentional metadata indexer in a real world application
+
+
+[[!inline pages="internal(2025/info/n-angulator-after)" raw="yes"]]
+
+[[!inline pages="internal(2025/info/n-angulator-nav)" raw="yes"]]
+
+
diff --git a/2025/talks/open-mic.md b/2025/talks/open-mic.md
new file mode 100644
index 00000000..159d9285
--- /dev/null
+++ b/2025/talks/open-mic.md
@@ -0,0 +1,21 @@
+[[!meta title="Open session"]]
+[[!meta copyright="Copyright &copy; 2025 Participants"]]
+[[!inline pages="internal(2025/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(2025/info/open-mic-before)" raw="yes"]]
+
+
+
+
+[[!inline pages="internal(2025/info/open-mic-after)" raw="yes"]]
+
+[[!inline pages="internal(2025/info/open-mic-nav)" raw="yes"]]
+
+
diff --git a/2025/talks/org-babel.md b/2025/talks/org-babel.md
new file mode 100644
index 00000000..f3a548fb
--- /dev/null
+++ b/2025/talks/org-babel.md
@@ -0,0 +1,40 @@
+[[!meta title="Making Org-Babel Reactive"]]
+[[!meta copyright="Copyright &copy; 2025 Abhinav Tushar"]]
+[[!inline pages="internal(2025/info/org-babel-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. --->
+
+
+# Making Org-Babel Reactive
+Abhinav Tushar (he/him) - <https://lepisma.xyz>, [@lepisma@mathstodon.xyz](https://mathstodon.xyz/@lepisma), <mailto:abhinav@lepisma.xyz>
+
+[[!inline pages="internal(2025/info/org-babel-before)" raw="yes"]]
+
+In Org mode, you can add and execute small snippets of code using
+Org-Babel. This lets you have an extremely useful mixed-language notebook like
+environment inside Emacs. These days, many notebook systems provide fully
+reactive notebooks where changes made in any cell or variable propagate to its
+dependents without manual execution. This pattern is very useful for exploratory
+data analysis, visualization, and many other use-cases that notebooks are
+generally good for.
+
+Unsurprisingly, we can enable such reactivity in Org-Babel without too much
+effort. In this talk, I will cover how to do that while also adding certain
+other interaction niceties to make full use of the resultant reactivity.
+
+About the speaker:
+
+I am a programmer and machine learning engineer, and I have enjoyed working with
+Org-Babel code blocks inside my writings. Other notebooks and platforms have
+recently started to adopt fully reactive computation, which is something I have
+liked a lot for exploratory analysis. In this talk, I will show how to add
+similar reactivity in Org-Babel.
+
+
+
+[[!inline pages="internal(2025/info/org-babel-after)" raw="yes"]]
+
+[[!inline pages="internal(2025/info/org-babel-nav)" raw="yes"]]
+
+
diff --git a/2025/talks/private-ai.md b/2025/talks/private-ai.md
new file mode 100644
index 00000000..55660ac2
--- /dev/null
+++ b/2025/talks/private-ai.md
@@ -0,0 +1,32 @@
+[[!meta title="Emacs and private AI: a great match"]]
+[[!meta copyright="Copyright &copy; 2025 Aaron Grothe"]]
+[[!inline pages="internal(2025/info/private-ai-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. --->
+
+
+# Emacs and private AI: a great match
+Aaron Grothe (he/him) - Pronunciation: Air-un Grow-the, <https://www.grothe.us> LinkedIn: <https://www.linkedin.com/in/aaron-grothe/>, <mailto:ajgrothe@yahoo.com>
+
+[[!inline pages="internal(2025/info/private-ai-before)" raw="yes"]]
+
+When experimenting with using AI with Emacs, many users have concerns. A few of the concerns that people have are the possibility of their information being shared with the AI provider (either to train newer models, or as a potential revenue source), the possibility of running up unpredictable costs with their cloud provider, and the potential environmental impact of using cloud AI. Using Private/Local AI models provide an AI environment that the user can fully control. User can add to it incrementally over time as their skills and experience grows. This talk will be a quick intro to using Ollama Buddy, Ellama, and gptel to add the ability to have a private AI integrated into your Emacs session. We’ll start with the basics and show people how they can add AI to their workflow safely and securely. Hopefully, people will come away from the talk feeling better about our AI futures.
+
+The talk will start with a simple implementation: Ollama and Ollama Buddy and a couple of models. After that it will build on that
+for the rest of the 20 minutes.
+
+The goal is show the users multiple ways of using AI with Emacs and let them make their own choices.
+
+About the speaker:
+
+AI is everywhere and everyone is trying to figure out how to use it better.  This talk will be a quick introduction to showing some
+of the tools and techniques that a user can do to integrate AI privately and securely into their Emacs workflow.  The goal is to help people take the first steps on what will hopefully be a productive journey.
+
+
+
+[[!inline pages="internal(2025/info/private-ai-after)" raw="yes"]]
+
+[[!inline pages="internal(2025/info/private-ai-nav)" raw="yes"]]
+
+
diff --git a/2025/talks/python.md b/2025/talks/python.md
new file mode 100644
index 00000000..59381c09
--- /dev/null
+++ b/2025/talks/python.md
@@ -0,0 +1,26 @@
+[[!meta title="Interactive Python programming in Emacs"]]
+[[!meta copyright="Copyright &copy; 2025 David Vujic"]]
+[[!inline pages="internal(2025/info/python-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. --->
+
+
+# Interactive Python programming in Emacs
+David Vujic (he/him) - Mastodon <https://mastodon.nu/@davidvujic>
+
+[[!inline pages="internal(2025/info/python-before)" raw="yes"]]
+
+Learning Lisp was an eye opener for me. The Interactive way of writing code is Amazing. Emacs has great support for this in general already. For Python, there's limitations and I have looked for ways to make Python development more interactive (and fun). Python is what I do at work and in Open Source projects. It has lead me to develop Emacs features specific for Python: evaluating code with visual feedback, modify a running Python app without restarts, and some LLM support. I will demo and talk about what I have developed to make Python development interactive and joyful.
+
+About the speaker:
+
+My name is David and I'm a software developer. Colleagues and friends may know me as an early adopter of agile ideas and test driven development. I am passionate about things like that, and share the things I learn to the community and the people I work with. My favorite programming languages are Python and Clojure. On my spare time I practice outdoor Parkour & contribute to Open Source.
+
+
+
+[[!inline pages="internal(2025/info/python-after)" raw="yes"]]
+
+[[!inline pages="internal(2025/info/python-nav)" raw="yes"]]
+
+
diff --git a/2025/talks/reader.md b/2025/talks/reader.md
new file mode 100644
index 00000000..66de948d
--- /dev/null
+++ b/2025/talks/reader.md
@@ -0,0 +1,34 @@
+[[!meta title="An introduction to the Emacs Reader"]]
+[[!meta copyright="Copyright &copy; 2025 Divyá"]]
+[[!inline pages="internal(2025/info/reader-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. --->
+
+
+# An introduction to the Emacs Reader
+Divyá - IRC: divya, Website: <https://www.phimulambda.org> Mastodon: <https://mathstodon.xyz/@divyaranjan>, <mailto:divya@subvertising.org>
+
+[[!inline pages="internal(2025/info/reader-before)" raw="yes"]]
+
+<https://codeberg.org/divyaranjan/emacs-reader>
+
+This talk will introduce a new document reader that I have been building for Emacs since the last few months. I will showcase the basic features of the document reader, how well it integrates with Emacs and the performance and other improvements that it provides in comparision to the existing document viewing options such as DocView, PDF Tools and others.
+
+I will also describe the core architectural decisions that were made, specficially the fact that it is a dynamic module and the pains and pleasures of interfacing Emacs with C and vice-versa.
+
+I will give a high-level tour of the codebase, which is pretty small as of now (<3K LOC), so that if a fellow Emacs developer wishes to contribute, they know where and how to get started.
+
+In conclusion, I'll summarize the current features we're in the process of developing, what challenges we're facing in diong so, and what we wish to work on for the upcoming versions of the package.
+
+About the speaker:
+
+I’m Divyá from India. My background has been as a mathematics teacher and now I'm a programmer. I’ve been hacking on free software as a hobby and, for the past three to four years, living inside Emacs. I loved reading PDFs in Emacs via pdf-tools, but poor hardware and maintenance gaps pushed me to build a faster reader. I learned MuPDF and Emacs Dynamic Modules and wrote The Emacs Reader: a dynamic-module-based, high-performance, resource-friendly document viewer for Emacs that supports PDFs and other formats (EPUB, CBZ) while integrating natively with Emacs.
+
+
+
+[[!inline pages="internal(2025/info/reader-after)" raw="yes"]]
+
+[[!inline pages="internal(2025/info/reader-nav)" raw="yes"]]
+
+
diff --git a/2025/talks/reference.md b/2025/talks/reference.md
new file mode 100644
index 00000000..b0264088
--- /dev/null
+++ b/2025/talks/reference.md
@@ -0,0 +1,68 @@
+[[!meta title="Emacs as a fully-fledged reference manager"]]
+[[!meta copyright="Copyright &copy; 2025 Vidianos Giannitsis"]]
+[[!inline pages="internal(2025/info/reference-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. --->
+
+
+# Emacs as a fully-fledged reference manager
+Vidianos Giannitsis (he/him) - IRC: vidianos, <https://github.com/Vidianos-Giannitsis>. Vidianos Giannitsis on LinkedIn <mailto:vidianosgiannitsis@gmail.com>
+
+[[!inline pages="internal(2025/info/reference-before)" raw="yes"]]
+
+Even though all of my note-taking and literature organization
+infrastructure has been in Emacs for a few years, I haven't been able to
+make myself independent from a literature manager (Zotero in my case)
+until recently. Zotero was just too convenient. You can capture articles
+seamlessly (although downloading attachments didn't always work as
+intended), organize them in directories and take a quick look at your
+lists to determine what to read next, before you move on to actually
+reading them and taking notes.
+
+This year, I finally decided that I am tired of this and I will find a
+way to do this fully in Emacs. This talk will be discussing my findings
+in this regard. A lot of this was built in Ebib. It turns out that a lot
+of what I considered useful for this workflow was already available
+through this excellent software, built inside Emacs. Not everything
+worked as I wanted on installation, but naturally, this is Emacs, so I
+just hacked my way through getting the exact behaviour I wanted. This
+required integration with other tools and especially a closer
+interaction between Ebib and Org-roam. This came out incredible and I am
+now very happy with using it, so I thought I should also showcase it in
+EmacsConf!
+
+With this integration ready, only capturing articles from the web
+remains. Zotra can capture articles in a way about as seamless as
+Zotero's (it actually uses Zotero's translators, but from Emacs).
+Attachments remain a problem sometimes, but that's publishers making
+attachments hard to get because third party software can't see that you
+have full access to them, so I have decided to do those mostly manually,
+I often did that with Zotero anyways.
+
+Relevant links:
+
+- [Zotra - Capturing Articles](https://github.com/mpedramfar/zotra)
+- [Ebib - Organizing literature before and after reading](https://joostkremers.github.io/ebib/)
+- [Org-Roam - The missing link to create an effective reading list](https://www.orgroam.com/)
+- [Bibtex Completion - Useful tools for manipulating literature](https://github.com/tmalsburg/helm-bibtex)
+- [Ebib section of Dotfiles/emacs/.emacs.d/libs/zettelkasten.org at master · Vidianos-Giannitsis/Dotfiles · GitHub](https://github.com/Vidianos-Giannitsis/Dotfiles/blob/master/emacs/.emacs.d/libs/zettelkasten.org#ebib)
+
+About the speaker:
+
+I'm Vidianos and I'm currently doing my PhD in KU Leuven in Belgium.
+Working on research means I have a need for good tools to help me with
+my research. I have been using Emacs for roughly 5 years now and I can
+confidently say it is the number one tool that helps me with this
+research. This talk will be all about how it helps me and about finally
+being able to remove external reference managers from my workflow,
+something I have wanted for years, but that I haven't managed to do
+before this.
+
+
+
+[[!inline pages="internal(2025/info/reference-after)" raw="yes"]]
+
+[[!inline pages="internal(2025/info/reference-nav)" raw="yes"]]
+
+
diff --git a/2025/talks/sat-close.md b/2025/talks/sat-close.md
new file mode 100644
index 00000000..0034ca54
--- /dev/null
+++ b/2025/talks/sat-close.md
@@ -0,0 +1,21 @@
+[[!meta title="Saturday closing remarks"]]
+[[!meta copyright="Copyright &copy; 2025 ${speakers}"]]
+[[!inline pages="internal(2025/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
+
+
+[[!inline pages="internal(2025/info/sat-close-before)" raw="yes"]]
+
+
+
+
+[[!inline pages="internal(2025/info/sat-close-after)" raw="yes"]]
+
+[[!inline pages="internal(2025/info/sat-close-nav)" raw="yes"]]
+
+
diff --git a/2025/talks/sat-open.md b/2025/talks/sat-open.md
new file mode 100644
index 00000000..723867b5
--- /dev/null
+++ b/2025/talks/sat-open.md
@@ -0,0 +1,21 @@
+[[!meta title="Saturday opening remarks"]]
+[[!meta copyright="Copyright &copy; 2025 ${speakers}"]]
+[[!inline pages="internal(2025/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
+
+
+[[!inline pages="internal(2025/info/sat-open-before)" raw="yes"]]
+
+
+
+
+[[!inline pages="internal(2025/info/sat-open-after)" raw="yes"]]
+
+[[!inline pages="internal(2025/info/sat-open-nav)" raw="yes"]]
+
+
diff --git a/2025/talks/schemacs.md b/2025/talks/schemacs.md
new file mode 100644
index 00000000..62ca5321
--- /dev/null
+++ b/2025/talks/schemacs.md
@@ -0,0 +1,90 @@
+[[!meta title="One year progress update Schemacs (formerly Gypsum)"]]
+[[!meta copyright="Copyright &copy; 2025 Ramin Honary"]]
+[[!inline pages="internal(2025/info/schemacs-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. --->
+
+
+# One year progress update Schemacs (formerly Gypsum)
+Ramin Honary (he/him) - Pronunciation: "Rah-mean" (hard-H) "Ho-na-ree", Mastodon (preferred): ; blog: <https://tilde.town/~ramin_hal9001>; Codeberg: <https://codeberg.org/ramin_hal9001/schemacs> - SourceHut: <https://sr.ht/~ramin_hal9001>
+
+
+
+[[!inline pages="internal(2025/info/schemacs-before)" raw="yes"]]
+
+During EmacsConf 2024 last year I presented my work on a
+clone of GNU Emacs written in Scheme which also clones the
+Emacs Lisp programming language. In this talk, I will
+briefly present an overview of the project similar to the
+talk I gave last year, and then discuss the progress that
+I have made on this project in the past year.
+
+To quote the description from the presentation I gave last
+year:
+
+> Unlike other editors which only clone the Emacs
+> keybindings (Edwin, Jed, jEdit, Jove, Lem, MG, Yi,
+> Zile), I hope my Emacs clone will also fully clone the
+> Emacs Lisp programming language well enough that many of
+> the packages in ELPA, Non-GNU ELPA, and perhaps even
+> MELPA, can be used in [Schemacs, formerly "Gypsum"]
+> without any modification. I would also like to talk a
+> little bit about how I am implementing it (the software
+> architecture), and invite others to contribute.
+>
+> I think my project is of interest to many Emacs users
+> because, firstly, I have personally spoken with a
+> relatively large number of people who have expressed
+> interest in making Emacs programmable in Scheme.
+> Secondly, there is a good amount of prior art for Scheme
+> implementations of Emacs. There are even builds of Emacs
+> that link to Guile which provides a "scheme-eval"
+> built-in function that translates between Elisp data
+> types and Scheme data types. The Guile compiler itself
+> ships with an Emacs Lisp compiler as well, although it
+> does not provide enough of Emacs's built-in functions to
+> be of much use.
+
+The progress I have made so far:
+
+- Ported all Guile-specific parts of the Emacs Lisp
+ interpreter to fully standards-compliant R7RS Scheme
+ code. The interpreter now runs on a few different
+ Scheme implementations, not just Guile. The GUI remains
+ Guile-only for now.
+
+- Implemented a new R7RS-compliant lexer and parser which
+ constructs an Abstract Syntax Tree (AST) data structure,
+ making it easier to find the source of errors and
+ produce informative back traces.
+
+- Implemented enough of the Emacs Lisp interpreter to be
+ able to load the "subr.el" source file, this defines
+ what you might call the "core" of the Emacs Lisp
+ language, including macros such as "defun" and "lambda."
+
+My primary goal continues to be to make it as easy as
+possible for other people to contribute to this
+project. Pretty soon it should be possible to run the
+Emacs Regression Test suite (ERT) in the cloned Emacs Lisp
+interpreter. Once this is done, we can run the same test
+code used during the building and testing GNU Emacs to
+test Schemacs. Hopefilly then, anyone will be able to
+select a failing test, write code to make the test pass,
+and submit a patch.
+
+About the speaker:
+
+I am Ramin Honary, I am have been professional software
+engineer for 17 years and I have always had a passion for
+functional programming languages, especially Haskell and
+the Lisp family of languages.
+
+
+
+[[!inline pages="internal(2025/info/schemacs-after)" raw="yes"]]
+
+[[!inline pages="internal(2025/info/schemacs-nav)" raw="yes"]]
+
+
diff --git a/2025/talks/sun-close.md b/2025/talks/sun-close.md
new file mode 100644
index 00000000..3f029db3
--- /dev/null
+++ b/2025/talks/sun-close.md
@@ -0,0 +1,21 @@
+[[!meta title="Sunday closing remarks"]]
+[[!meta copyright="Copyright &copy; 2025 ${speakers}"]]
+[[!inline pages="internal(2025/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(2025/info/sun-close-before)" raw="yes"]]
+
+
+
+
+[[!inline pages="internal(2025/info/sun-close-after)" raw="yes"]]
+
+[[!inline pages="internal(2025/info/sun-close-nav)" raw="yes"]]
+
+
diff --git a/2025/talks/sun-open.md b/2025/talks/sun-open.md
new file mode 100644
index 00000000..854236fe
--- /dev/null
+++ b/2025/talks/sun-open.md
@@ -0,0 +1,21 @@
+[[!meta title="Sunday opening remarks"]]
+[[!meta copyright="Copyright &copy; 2025 ${speakers}"]]
+[[!inline pages="internal(2025/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
+
+
+[[!inline pages="internal(2025/info/sun-open-before)" raw="yes"]]
+
+
+
+
+[[!inline pages="internal(2025/info/sun-open-after)" raw="yes"]]
+
+[[!inline pages="internal(2025/info/sun-open-nav)" raw="yes"]]
+
+
diff --git a/2025/talks/swanky.md b/2025/talks/swanky.md
new file mode 100644
index 00000000..de939730
--- /dev/null
+++ b/2025/talks/swanky.md
@@ -0,0 +1,49 @@
+[[!meta title="Swanky Python: Interactive development for Python"]]
+[[!meta copyright="Copyright &copy; 2025 Scott Zimmermann"]]
+[[!inline pages="internal(2025/info/swanky-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. --->
+
+
+# Swanky Python: Interactive development for Python
+Scott Zimmermann (he/him) - <mailto:sczi@disroot.org>
+
+[[!inline pages="internal(2025/info/swanky-before)" raw="yes"]]
+
+Project repository: <https://codeberg.org/sczi/swanky-python/>
+
+I'm working on a development environment for
+Python based on Emacs' SLIME mode for Common Lisp.
+In this talk I'll demonstrate some of its
+features, like an object inspector, interactive
+backtrace buffer, thread and async task viewer,
+and function tracer. I'll also discuss its
+implementation and limitations, along with future
+directions for the project.
+
+This project aims to bring a Lisp and Smalltalk
+inspired style of development to Python. You get a
+faster feedback loop by developing inside a
+running python process without needing to restart
+your program and lose state on changes, allowing
+you to immediately inspect the results of code you
+write. We can also provide more advanced tooling
+based on runtime introspection, as we have more
+information available at runtime than is available
+to traditional tools based on static analysis of
+source code, mainly we have the actual values of
+variables rather than just their types.
+
+About the speaker:
+
+Python is eating the world. Emacs is eating my computing environment. I'm
+attempting to get them working together.
+
+
+
+[[!inline pages="internal(2025/info/swanky-after)" raw="yes"]]
+
+[[!inline pages="internal(2025/info/swanky-nav)" raw="yes"]]
+
+
diff --git a/2025/talks/weights.md b/2025/talks/weights.md
new file mode 100644
index 00000000..49c5db8b
--- /dev/null
+++ b/2025/talks/weights.md
@@ -0,0 +1,43 @@
+[[!meta title="Weightlifting Tracking with Emacs on Android"]]
+[[!meta copyright="Copyright &copy; 2025 Zachary Romero"]]
+[[!inline pages="internal(2025/info/weights-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. --->
+
+
+# Weightlifting Tracking with Emacs on Android
+Zachary Romero - <https://zacromero.com/>, <mailto:zacromero@posteo.com>
+
+[[!inline pages="internal(2025/info/weights-before)" raw="yes"]]
+
+The package covered in the talk can be found at <https://github.com/zkry/org-fit>
+
+Emacs on Android opens up a world of new possibilities for replacing
+proprietary software with free alternatives. One such use case is
+using Emacs and org-mode to replace the popular weightlifting tracking
+apps like Hevy and Strong.
+
+Org-mode provides a solid foundation to replicate these apps
+functionalities but by itself is cumbersome to use in the middle of a
+workout. With the help of Elisp however, we can provide an experience
+as seamless as these paid apps, but with added flexibility and
+freedom.
+
+This talk will go over the package itself as well as the way org-mode
+can be used as the foundation for applications on top of it.
+
+About the speaker:
+
+I'm Zachary Romero, a software developer and Emacs enthusiast. I've
+been weightlifting for about three years when I grew tired of the
+many apps constantly trying to push subscriptions. Knowing the many
+things org-mode can do, I set about trying to replicate the same
+functionality in Emacs.
+
+
+[[!inline pages="internal(2025/info/weights-after)" raw="yes"]]
+
+[[!inline pages="internal(2025/info/weights-nav)" raw="yes"]]
+
+
diff --git a/2025/talks/writing.md b/2025/talks/writing.md
new file mode 100644
index 00000000..476d2123
--- /dev/null
+++ b/2025/talks/writing.md
@@ -0,0 +1,40 @@
+[[!meta title="A Writing Day in the Life with Org-Mode"]]
+[[!meta copyright="Copyright &copy; 2025 Jeremy Friesen"]]
+[[!inline pages="internal(2025/info/writing-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. --->
+
+
+# A Writing Day in the Life with Org-Mode
+Jeremy Friesen - Pronunciation: Jair-ah-mee Free-sen, <https://takeonrules.com>, <mailto:jeremy@jeremyfriesen.com>
+
+[[!inline pages="internal(2025/info/writing-before)" raw="yes"]]
+
+In this talk, I’ll walk through my daily writing and organization using
+Org-Mode. Building from the basics of the Org-Mode ecosystem, we’ll look at a
+the parts that I’ve assembled to create a “rich for me” writing experience.
+
+This will be a tour of my writing ecosystem, from capturing books by ISBN,
+tracking quotes I find meaningful, utilizing abbreviations (and clarifications),
+exporting a journal node to a blog post, toot-ing about a blog post, and
+printing my monthly journal entries with references to books I finished.
+
+The goal is not to say “this is the way” but to show a bit of “this is my way.”
+And from there to have further conversation about ideas we each might
+incorporate into our writing processes.
+
+About the speaker:
+
+I’ve always aspired to be a writer. And while I haven’t published long-form
+material, I’ve been consistently writing for over a decade. In 2023, I talked
+about how Emacs super-charges my writing. And I want to revisit that
+conversation and walk through a day in the writing life.
+
+
+
+[[!inline pages="internal(2025/info/writing-after)" raw="yes"]]
+
+[[!inline pages="internal(2025/info/writing-nav)" raw="yes"]]
+
+
diff --git a/2025/talks/zettelkasten.md b/2025/talks/zettelkasten.md
new file mode 100644
index 00000000..677d937b
--- /dev/null
+++ b/2025/talks/zettelkasten.md
@@ -0,0 +1,245 @@
+[[!meta title="Zettelkasten for Regular Emacs Hackers"]]
+[[!meta copyright="Copyright &copy; 2025 Christian Tietze"]]
+[[!inline pages="internal(2025/info/zettelkasten-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. --->
+
+
+# Zettelkasten for Regular Emacs Hackers
+Christian Tietze (he) - [@ctietze@mastodon.social](https://mastodon.social/@ctietze) <https://christiantietze.de> <https://zettelkasten.de>, <mailto:hi@christiantietze.de>
+
+[[!inline pages="internal(2025/info/zettelkasten-before)" raw="yes"]]
+
+There's this one thing you can do with your Emacs that is not chiefly a technological problem to solve: thinking through writing.
+
+Emacs offers a malleable environment where you can tweak every key stroke, and every pixel on screen to your needs.
+
+Since we're all here at EmacsConf, the intention is clear: to use and enjoy Emacs, and spend our lives in this amazing environment.
+
+While it's easy to ditch modern UI conveniences and pull technology like email, chat, database and server management, and editing book drafts into Emacs &ndash; well, these are tasks that have been implemented, for which there exist alternatives, and which you can teach Emacs to do in a similar way.
+
+Oversimplifying: we can copy and tweak existing solutions and have a good life.
+
+Now while everyone's email needs to use the same protocol, everyone's approach to _thinking_ is different. There's no cookie cutter solution to merely rewrite in Emacs Lisp. We all need to figure out how to do this on our own, and then find an implementation that suits our needs. (Including using paper, but we're not talking about paper here.)
+
+**This is where I want to show you one simple foundational method to deep thinking, understanding, and problem solving:** create yourself a Zettelkasten, an environment of linked notes that scales well over decades, so that you can take it with you into retirement and beyond for a lifelong journey of learning.
+
+For this presentation, I merely assume that you agree that writing improves the quality and depth of thought. I also assume that you know how to type and move around in Emacs. The rest is just convention, and we'll walk through a couple of examples and exercises together so that after this talk, you're equipped with the simple tools that help you unlock new insights in your future.
+
+## About Christian
+
+Christian is a macOS/iOS developer with a strong focus on user experience and clean architecture. Driven by a passion for accessibility and performance, Christian has shipped many apps and authored three technical books and 895+ blog posts, helping developers world-wide to realize their app ideas with a deep understand for the technologies they use. In 2013, Christian wrote about the Zettelkasten topic on his own personal blog and eventually moved everything over to <https://zettelkasten.de> where he and Sascha continue to teach and write.
+
+## Code and Notes from the Talk
+
+### Minimal Emacs + Denote Configuration
+
+This is the relevant configuration Christian used in the Emacs demo. Save this to a folder as `init.el`, and launch via:
+
+ $ emacs -nw --init-directory . init.el
+
+`init.el` contents:
+
+```elisp
+(load-theme 'modus-vivendi-tinted) ;; Dark theme to match dark slides
+(menu-bar-mode -1) ;; Disable topmost menu bar
+
+(package-refresh-contents)
+
+(use-package denote
+ :ensure t
+ :hook (dired-mode . denote-dired-mode)
+ :bind
+ (("C-c n n" . denote)
+ ("C-c n r" . denote-rename-file)
+ ("C-c n l" . denote-link)
+ ("C-c n c" . denote-link-after-creating)
+ ("C-c n b" . denote-backlinks)
+ ("C-c n d" . denote-dired)
+ ("C-c n g" . denote-grep))
+ :config
+ (setq denote-directory (expand-file-name "./notes/"))
+
+ ;; Automatically rename Denote buffers when opening them so that
+ ;; instead of their long file name they have, for example, a literal
+ ;; "[D]" followed by the file's title. Read the doc string of
+ ;; `denote-rename-buffer-format' for how to modify this.
+ (denote-rename-buffer-mode 1))
+
+;; For the demo, I forced notes to show in full screen by default.
+(setopt display-buffer-alist nil)
+(add-to-list 'display-buffer-alist
+ '("^\\[D\\] " ;; Denote buffer name prefix
+ (display-buffer-reuse-mode-window display-buffer-full-frame)
+ ))
+```
+
+### Notes created during the demo
+
+These are the notes Christian created during the recording. The recording was sped up 3x--4x, so this could be nicer to read than having to squint at the video:
+
+#### `20251121T204827--mechanics-and-habits-to-use-a-zettelkasten__zettelkasten.org`
+
+```org
+#+title: Mechanics and habits to use a Zettelkasten
+#+date: [2025-11-21 Fri 20:48]
+#+filetags: :zettelkasten:
+#+identifier: 20251121T204827
+
+Essential:
+- Write: put in effort; [[denote:20251121T205045][GIGO]]
+- Connect: Link notes to create trails
+- Correct: Improve as you go
+
+Additional:
+- Design for use: give things a purpose, e.g. blog about it
+- Create structure. [[denote:20251121T205312][Types of structures in a Zettelkasten]]: design new entry points and trails
+- Start in the Zettelkasten: use the system to learn, make it grow, get better
+- Start with a link: keeps your notes connected. [[denote:20251121T210416][Create notes as link first to avoid orphans]]
+
+Tool doesn't matter as much. Small files are good. [[denote:20251121T210107][Use Denote in Emacs]]
+
+(Christian Tietze: Zettelkasten for Regular Emacs Hackers, EmacsConf 2025)
+```
+
+#### `20251121T205045--gigo__programming_quality.org`
+
+```org
+#+title: Garbage in, garbage out
+#+date: [2025-11-21 Fri 20:50]
+#+filetags: :programming:quality:
+#+identifier: 20251121T205045
+
+The principle known as "Garbage In, Garbage Out" (GIGO) in computer
+programming states that for any system, the quality of output is
+directly depending on the quality of input.
+
+See: https://en.wikipedia.org/wiki/Garbase_in,_garbage_out
+```
+
+#### `20251121T205312--types-of-structures-in-a-zettelkasten__structure_zettelkasten.org`
+
+```org
+#+title: Types of structures in a Zettelkasten
+#+date: [2025-11-21 Fri 20:53]
+#+filetags: :structure:zettelkasten:
+#+identifier: 20251121T205312
+
+Non-comprehensive list of structures that could be used in a Zettelkasten:
+
+- Opposition pair: 1 note for the pair, 1 note per position/opposition each; pro/contra
+- Table of contents: list of topics/headings
+ - an outline for a writing project
+ - recreation of a book's contents (so I can write in detail about the book);
+- Argument: recreation of a distilled form to get to a conclusion;
+ list premises and evidence, and how these support the conclusion
+ - Counter-argument: address parts of the original argument to support another
+ view and test the argument's strength
+- Table of things
+- Graphics, like a concept map, Mind-Map, diagram: visually bring
+ elements into a relation, then write about the relation and the elements
+
+Metaphors:
+- Iceberg: visibile tip with hidden depth; someting that appears small
+ but is large; good metaphor for obstacles
+- Black box: focus on inputs and outputs, and ignore the 'how' in the middle
+ - e.g. most Emacs Lisp functions (hoping the documentation is good)
+- [[denote:20251121T205739][Atom, molecule, organism]]: how small parts compose to larger parts,
+ which compose to even larger pieces
+
+
+(Christian Tietze: Zettelkasten for Regular Emacs Hackers, EmacsConf 2025)
+```
+
+#### `20251121T205739--atom-molecule-organism-metaphor__composition_recursion.org`
+
+```org
+#+title: Atom, molecule, organism metaphor
+#+date: [2025-11-21 Fri 20:57]
+#+filetags: :composition:recursion:
+#+identifier: 20251121T205739
+
+Atom: smallest part, indivisible elements
+Molecule: comprised of atoms; structure added to combine elements
+Organism: comprised of molecules; different level of analysis, irreducible to molecules/atoms
+
+This can be used e.g. for programming: functions compose into larger
+functions which compose into packages.
+
+Actual biological organisms also work in such a way. Organs are part
+of bodily functions (high abstraction), but from a chemical or
+physical perspective, you can decompose them into atoms. That doesn't
+tell you anything about the organ's function.
+```
+
+#### `20251121T210107--denoteel-for-zettelkasten-in-emacs__denote_emacs_zettelkasten.org`
+
+```org
+#+title: Denote.el for Zettelkasten in Emacs
+#+date: [2025-11-21 Fri 21:01]
+#+filetags: :denote:emacs:zettelkasten:
+#+identifier: 20251121T210107
+
+While not shipping with Emacs out of the box, Denote is easy to install and a great start to manage notes:
+
+- it comes with unified way to create new notes, and hides time-stamped ID's with "[D]" in buffer lists
+- it can manage links, and show incoming links to notes ("backlinks")
+- it supports quickly adding links, and creating links _first_ out of
+ the box -- it just creates the note immediately, so you don't notice
+ - [[denote:20251121T210416][Create notes as link first to avoid orphans]]
+
+* Example configuration
+
+#+BEGIN_SRC elisp
+(use-package denote
+ :ensure t
+ :hook (dired-mode . denote-dired-mode)
+ :bind
+ (("C-c n n" . denote)
+ ("C-c n r" . denote-rename-file)
+ ("C-c n l" . denote-link)
+ ("C-c n c" . denote-link-after-creating)
+ ("C-c n b" . denote-backlinks)
+ ("C-c n d" . denote-dired)
+ ("C-c n g" . denote-grep))
+ :config
+ (setq denote-directory (expand-file-name "./notes/"))
+
+ ;; Automatically rename Denote buffers when opening them so that
+ ;; instead of their long file name they have, for example, a literal
+ ;; "[D]" followed by the file's title. Read the doc string of
+ ;; `denote-rename-buffer-format' for how to modify this.
+ (denote-rename-buffer-mode 1))
+#+END_SRC
+```
+
+#### `20251121T210416--create-notes-as-link-first-to-avoid-orphans__linking_zettelkasten.org`
+
+```org
+#+title: Create notes as link first to avoid orphans
+#+date: [2025-11-21 Fri 21:04]
+#+filetags: :linking:zettelkasten:
+#+identifier: 20251121T210416
+
+Recommended practice by Christian Tietze: start a new note with a link
+first from some place, any place, then create the file to match that
+link (which would initially lead nowhere).
+
+- Reduces orphans in the Zettelkasten by guaranteeing every note to
+ have at least one link.
+- Supposedly teaches you to think about possible connections early,
+ which makes the network better.
+
+A very loosey-goosey approach, when taken literally and used
+liberally: it doesn't matter where you are, just leave a forward link
+to something you wish existed. Even if it doesn't fit the current
+note. After all, you came up with the idea just now -- so maybe
+there's a connection that you just can't spell out, yet?
+```
+
+[[!inline pages="internal(2025/info/zettelkasten-after)" raw="yes"]]
+
+[[!inline pages="internal(2025/info/zettelkasten-nav)" raw="yes"]]
+
+
diff --git a/2025/watch.md b/2025/watch.md
new file mode 100644
index 00000000..a8e5fcea
--- /dev/null
+++ b/2025/watch.md
@@ -0,0 +1,101 @@
+[[!inline pages="internal(2025/watch/announce)" raw="yes"]]
+[[!inline pages="internal(2025/watch/info)" raw="yes"]]
+[[!sidebar content=""]]
+
+EmacsConf 2025 will be on **Dec 6** (Sat) and **Dec 7** (Sun), 2025 from
+9am-5pm Toronto/EST time (US/Eastern); equivalently, 6am-3pm PST,
+2pm-10pm UTC, 3pm-11pm Zurich/CET, 7:30pm-4:30am(next-day) India/IST,
+10pm-6am GMT+8.
+
+You can view the live conference streams in a
+streaming web player such as [MPV](https://mpv.io)
+or via the watch pages in the table above. If you
+need to reverse the video for easier viewing (ex:
+turning dark mode into light mode), try a command
+like `mpv --vf=negate URL`.
+
+If you experience any disruptions (including weird audio), try waiting
+a minute or two and then reloading the page you're using to watch the
+video. If that still doesn't work, please check our status page at
+<https://status.emacsconf.org> for updates on the status of various
+parts of our infrastructure, and instructions on how to get in touch
+with us about disruptions.
+
+We will also try to rebroadcast on [YouTube](https://www.youtube.com/@EmacsConf).
+Youtube events:
+
+- [General - Dec 6 Sat AM](https://youtube.com/live/FI3eGeGCyQM)
+- [Development - Dec 6 Sat AM](https://youtube.com/live/KCZthyBhHtg)
+- [General - Dec 6 Sat PM](https://youtube.com/live/Y3PjMp2mBQM)
+- [Development - Dec 6 Sat PM](https://youtube.com/live/r41CGbNo9Sw)
+- [General - Dec 7 Sun AM](https://youtube.com/live/tzPmQ40hwis)
+- [General - Dec 7 Sun PM](https://youtube.com/live/uCNWK0Bqo9Q)
+
+and maybe also Toobnix (PeerTube):
+
+- [General - EmacsConf 2025 - toobnix](https://toobnix.org/w/oLwaPU7MgMFDAWPhaFdW1t)
+- [Development - EmacsConf 2025 - toobnix](https://toobnix.org/w/uXGmcRigZD82UWr5nehKeL)
+
+To participate in the Q&A, please check the [[talks]] index for a link
+to the talk page, and [[read these Q&A tips|qa]]. The talk page will
+have the Q&A details, including the Etherpad link, IRC channel, and
+optionally a BigBlueButton room (BBB) for live Q&A via web conference.
+
+**BigBlueButton web conference** (Javascript
+required): If you plan to participate in Q&A in
+the BigBlueButton room, please use headphones or
+earphones in order to minimize audio feedback. The
+link on the talk page will take you to a waiting
+room that will automatically refresh when the host
+has opened the Q&A. If you are having a hard time
+joining or participating, you may need to switch
+to Mozilla Firefox, Chromium, or Google Chrome.
+Please let us know in #emacsconf-org in case we
+can help you troubleshoot.
+
+**Etherpad** (Javascript required): The Etherpad for general EmacsConf
+discussions is at
+<https://pad.emacsconf.org/emacsconf>. The schedule and
+the talk pages link to the Etherpads for the
+specific talk. Please feel free to add notes and
+questions to the Etherpad.
+
+**IRC**: You can join IRC using
+<https://chat.emacsconf.org> (Javascript required)
+or your favourite IRC client (no Javascript
+required). Here are the irc.libera.chat:6697 IRC
+channels that we'll be using this year:
+
+- \#emacsconf-gen: discussion for the General track
+- \#emacsconf-dev: discussion for the development track
+- \#emacsconf: hallway conversations, other general conversations
+- \#emacsconf-org: if you need to get in touch with the organizers
+
+You can use the `/JOIN` command in an IRC client to join a different
+channel. Ex: `/join #emacsconf-org` if you want to talk to the
+organizers.
+
+**Without Javascript**: If you prefer to avoid
+Javascript, you can still ask your questions via
+IRC in the relevant track channel (\#emacsconf-gen
+or \#emacsconf-dev). Volunteers will read your
+questions out loud during sessions with
+web-conference Q&As or copy them into the Etherpad
+for you. If we miss your question because the
+discussion is very busy, we'll catch it afterwards
+and send it to the speaker.
+
+**Videos**: Pre-recorded talk videos will be
+available on the talk pages and [on YouTube](https://youtube.com/@EmacsConf) after the talks go
+live, and other videos (including Q&A) will also
+be added to the talk pages once we process them.
+(Probably by January.) You can subscribe to
+`emacsconf-discuss` for updates:
+<https://lists.gnu.org/mailman/listinfo/emacsconf-discuss>
+
+**Accessibility:** Pre-recorded talks will be streamed with open
+captions, and the transcripts will be posted to the talk pages as
+well. If you have any accessibility requests, please join the
+[#emacsconf-org](https://chat.emacsconf.org/?join=emacsconf-org) and
+let us know, or e-mail <emacsconf-org-private@gnu.org> to reach the
+organizers.
diff --git a/2025/watch/dev.md b/2025/watch/dev.md
new file mode 100644
index 00000000..934fd97b
--- /dev/null
+++ b/2025/watch/dev.md
@@ -0,0 +1,94 @@
+<!-- Automatically generated by emacsconf-publish-watch-pages -->
+<!--
+[[!inline pages="internal(2025/watch/announce)" raw="yes"]]
+[[!meta title="Development stream"]]
+[[!sidebar content=""]] -->
+
+<hr size="1">
+<div><a name="watch"></a><strong>Watch</strong> - <a href="#links">Pad and Q&amp;A links</a> - <a href="#chat">Chat</a> - <a href="#sched">Schedule</a> | Tracks: <a href="/2025/watch/gen/">General</a> - <strong>Development</strong> | <a href="https://emacsconf.org/2025/watch/">Tips for watching/participating</a></div>
+
+For better performance, we recommend watching <a href="https://live0.emacsconf.org/dev.webm">https://live0.emacsconf.org/dev.webm</a> using a streaming media player. Examples:
+
+<ul>
+<li>mpv https://live0.emacsconf.org/dev.webm</li>
+<li>vlc https://live0.emacsconf.org/dev.webm</li>
+<li>ffplay https://live0.emacsconf.org/dev.webm</li>
+<li>You can also watch it in VLC by choosing menu - Media - Open Network Stream and putting in https://live0.emacsconf.org/dev.webm</li>
+</ul>
+
+If you have limited bandwidth, you can watch the low-res stream <a href="https://live0.emacsconf.org/dev-480p.webm">https://live0.emacsconf.org/dev-480p.webm</a>.
+
+If you don't have a streaming media player, you might be able to watch using the player below. (Google Chrome seems to be having issues; Mozilla Firefox might work better. If watching from a phone, Google Chrome seems to work there, or download VLC from your phone's app store and use the URLs like https://live0.emacsconf.org/dev.webm .)
+
+<video controls class="reload"><source src="https://live0.emacsconf.org/dev.webm" type="video/webm" /></video>
+
+<hr size="1"><div><a name="links"></a><a href="#watch">Watch</a> - <strong>Pad and Q&amp;A links</strong> - <a href="#chat">Chat</a> - <a href="#sched">Schedule</a> | Tracks: <a href="/2025/watch/gen/">General</a> - <strong>Development</strong></div><div><span><a href="https://emacsconf.org/2025/talks/schemacs">schemacs</a> (<a class="pad-link" href="https://pad.emacsconf.org/2025-schemacs">pad</a>, <a href="https://media.emacsconf.org/2025/current/bbb-schemacs.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2025/talks/juicemacs">juicemacs</a> (<a class="pad-link" href="https://pad.emacsconf.org/2025-juicemacs">pad</a>, <a href="https://pad.emacsconf.org/2025-juicemacs">Etherpad</a>)</span> - <span><a href="https://emacsconf.org/2025/talks/swanky">swanky</a> (<a class="pad-link" href="https://pad.emacsconf.org/2025-swanky">pad</a>, none)</span> - <span><a href="https://emacsconf.org/2025/talks/python">python</a> (<a class="pad-link" href="https://pad.emacsconf.org/2025-python">pad</a>, <a href="https://media.emacsconf.org/2025/current/bbb-python.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2025/talks/llm">llm</a> (<a class="pad-link" href="https://pad.emacsconf.org/2025-llm">pad</a>, <a href="https://media.emacsconf.org/2025/current/bbb-llm.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2025/talks/private-ai">private-ai</a> (<a class="pad-link" href="https://pad.emacsconf.org/2025-private-ai">pad</a>, <a href="https://media.emacsconf.org/2025/current/bbb-private-ai.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2025/talks/commonlisp">commonlisp</a> (<a class="pad-link" href="https://pad.emacsconf.org/2025-commonlisp">pad</a>, <a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-dev">#emacsconf-dev, speaker nick: screwlisp</a>)</span> - <span><a href="https://emacsconf.org/2025/talks/graphics">graphics</a> (<a class="pad-link" href="https://pad.emacsconf.org/2025-graphics">pad</a>, <a href="https://media.emacsconf.org/2025/current/bbb-graphics.html">BBB</a>)</span></div>
+<div class="pad-output"></div>
+<hr size="1"><div><a name="chat"></a><a href="#watch">Watch</a> - <a href="#links">Pad and Q&amp;A links</a> - <strong>Chat</strong> - <a href="#sched">Schedule</a> | Tracks: <a href="/2025/watch/gen/">General</a> - <strong>Development</strong></div><div>Chat: <a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-org,emacsconf-accessible,emacsconf-gen,emacsconf-dev">emacsconf-dev</a> on libera.chat</div>
+
+<div class="chat-iframe" data-track="dev"></div>
+<iframe src="https://chat.emacsconf.org/?join=emacsconf,emacsconf-org,emacsconf-accessible,emacsconf-gen,emacsconf-dev" height="600" width="100%"></iframe>
+<hr size="1"><div><a name="sched"></a><a href="#watch">Watch</a> - <a href="#links">Pad and Q&amp;A links</a> - <a href="#chat">Chat</a> - <strong>Schedule</strong> | Tracks: <a href="/2025/watch/gen/">General</a> - <strong>Development</strong></div>
+<ul>Legend:
+<li>Solid lines: Q&A will be through a BigBlueButton room (you can ask questions there or through IRC/Etherpad)</li>
+<li>Dashed lines: Q&A will be over IRC or the Etherpad, or the speaker will follow up afterwards</li></ul>
+<div>Times are in Eastern Standard Time (America/Toronto, GMT-5). If you have Javascript enabled, clicking on talk pages should include times in your computer's local time setting.</div>
+<div><svg width="800" height="300" 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="800" height="150" x="0" y="0" fill="white"></rect><text font-size="10" fill="black" y="12" x="3">Saturday</text><a href="https://emacsconf.org/2025/talks/sat-open" title="Saturday opening remarks" data-slug="sat-open"><title> 9:00- 9:10 Saturday opening remarks</title><rect x="0" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(13,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">sat-open</text></g></a><a href="https://emacsconf.org/2025/talks/org-babel" title="Making Org-Babel reactive" data-slug="org-babel"><title> 9:10- 9:20 Making Org-Babel reactive</title><rect x="15" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(28,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">org-babel</text></g></a><a href="https://emacsconf.org/2025/talks/reference" title="Emacs as a fully-fledged reference manager" data-slug="reference"><title> 9:30- 9:55 Emacs as a fully-fledged reference manager</title><rect x="47" y="15" opacity="0.8" width="39" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(84,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">reference</text></g></a><a href="https://emacsconf.org/2025/talks/gmail" title="org-gmail: A deep integration of Gmail into your Org Mode" data-slug="gmail"><title>10:15-10:40 org-gmail: A deep integration of Gmail into your Org Mode</title><rect x="117" y="15" opacity="0.8" width="39" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(154,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">gmail</text></g></a><a href="https://emacsconf.org/2025/talks/gnus" title="Reading and writing emails in GNU Emacs with Gnus" data-slug="gnus"><title>10:50-11:15 Reading and writing emails in GNU Emacs with Gnus</title><rect x="172" y="15" opacity="0.8" width="39" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(209,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">gnus</text></g></a><a href="https://emacsconf.org/2025/talks/latex" title="LaTeX export in org-mode: the overhaul" data-slug="latex"><title>11:25-11:45 LaTeX export in org-mode: the overhaul</title><rect x="227" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(256,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">latex</text></g></a><a href="https://emacsconf.org/2025/talks/calc" title="Basic Calc functionality for engineering or electronics" data-slug="calc"><title> 1:00- 1:25 Basic Calc functionality for engineering or electronics</title><rect x="376" y="15" opacity="0.8" width="39" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(413,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">calc</text></g></a><a href="https://emacsconf.org/2025/talks/blee-lcnt" title="Blee-LCNT: An Emacs-centered content production and self-publication framework" data-slug="blee-lcnt"><title> 1:35- 2:15 Blee-LCNT: An Emacs-centered content production and self-publication framework</title><rect x="431" y="15" opacity="0.8" width="62" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(491,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">blee-lcnt</text></g></a><a href="https://emacsconf.org/2025/talks/greader" title="GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence" data-slug="greader"><title> 2:35- 2:40 GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence</title><rect x="525" y="15" opacity="0.8" width="7" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(530,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">greader</text></g></a><a href="https://emacsconf.org/2025/talks/open-mic" title="Open session" data-slug="open-mic"><title> 2:50- 3:40 Open session</title><rect x="549" y="15" opacity="0.8" width="78" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(625,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">open-mic</text></g></a><a href="https://emacsconf.org/2025/talks/sat-close" title="Saturday closing remarks / open session" data-slug="sat-close"><title> 4:00- 4:10 Saturday closing remarks / open session</title><rect x="658" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(671,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">sat-close</text></g></a><a href="https://emacsconf.org/2025/talks/schemacs" title="One year progress update Schemacs (formerly Gypsum)" data-slug="schemacs"><title> 9:30- 9:55 One year progress update Schemacs (formerly Gypsum)</title><rect x="47" y="75" opacity="0.8" width="39" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(84,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">schemacs</text></g></a><a href="https://emacsconf.org/2025/talks/juicemacs" title="Juicemacs: exploring speculative JIT compilation for ELisp in Java" data-slug="juicemacs"><title>10:15-10:35 Juicemacs: exploring speculative JIT compilation for ELisp in Java</title><rect x="117" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect><g transform="translate(146,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">juicemacs</text></g></a><a href="https://emacsconf.org/2025/talks/swanky" title="Swanky Python: Interactive development for Python" data-slug="swanky"><title>10:45-11:10 Swanky Python: Interactive development for Python</title><rect x="164" y="75" opacity="0.8" width="39" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect><g transform="translate(201,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">swanky</text></g></a><a href="https://emacsconf.org/2025/talks/python" title="Interactive Python programming in Emacs" data-slug="python"><title>11:20-11:40 Interactive Python programming in Emacs</title><rect x="219" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(248,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">python</text></g></a><a href="https://emacsconf.org/2025/talks/llm" title="Emacs, editors, and LLM driven workflows" data-slug="llm"><title> 1:00- 1:25 Emacs, editors, and LLM driven workflows</title><rect x="376" y="75" opacity="0.8" width="39" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(413,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">llm</text></g></a><a href="https://emacsconf.org/2025/talks/private-ai" title="Emacs and private AI: a great match" data-slug="private-ai"><title> 1:45- 2:05 Emacs and private AI: a great match</title><rect x="447" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(476,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">private-ai</text></g></a><a href="https://emacsconf.org/2025/talks/commonlisp" title="Common Lisp images communicating like-a-human through shared Emacs slime and eev" data-slug="commonlisp"><title> 2:25- 2:55 Common Lisp images communicating like-a-human through shared Emacs slime and eev</title><rect x="509" y="75" opacity="0.8" width="47" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect><g transform="translate(554,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">commonlisp</text></g></a><a href="https://emacsconf.org/2025/talks/graphics" title="Modern Emacs/Elisp hardware/software accelerated graphics" data-slug="graphics"><title> 3:05- 3:30 Modern Emacs/Elisp hardware/software accelerated graphics</title><rect x="572" y="75" opacity="0.8" width="39" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(609,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">graphics</text></g></a><g transform="translate(0,3)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="140" font-size="10" text-anchor="left">9 AM</text></g><g transform="translate(94,3)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="140" font-size="10" text-anchor="left">10 AM</text></g><g transform="translate(188,3)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="140" font-size="10" text-anchor="left">11 AM</text></g><g transform="translate(282,3)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="140" font-size="10" text-anchor="left">12 PM</text></g><g transform="translate(376,3)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="140" font-size="10" text-anchor="left">1 PM</text></g><g transform="translate(470,3)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="140" font-size="10" text-anchor="left">2 PM</text></g><g transform="translate(564,3)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="140" font-size="10" text-anchor="left">3 PM</text></g><g transform="translate(658,3)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="140" font-size="10" text-anchor="left">4 PM</text></g><g transform="translate(752,3)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="140" font-size="10" text-anchor="left">5 PM</text></g></g><g transform="translate(0,150)"><title>Schedule for Sunday</title><rect width="800" height="150" x="0" y="0" fill="white"></rect><text font-size="10" fill="black" y="12" x="3">Sunday</text><a href="https://emacsconf.org/2025/talks/sun-open" title="Sunday opening remarks" data-slug="sun-open"><title> 9:00- 9:10 Sunday opening remarks</title><rect x="0" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(13,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">sun-open</text></g></a><a href="https://emacsconf.org/2025/talks/modern" title="Some problems of modernizing Emacs" data-slug="modern"><title> 9:10- 9:30 Some problems of modernizing Emacs</title><rect x="15" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(44,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">modern</text></g></a><a href="https://emacsconf.org/2025/talks/reader" title="An introduction to the Emacs Reader" data-slug="reader"><title> 9:40-10:15 An introduction to the Emacs Reader</title><rect x="62" y="15" opacity="0.8" width="54" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(114,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">reader</text></g></a><a href="https://emacsconf.org/2025/talks/weights" title="Weightlifting tracking with Emacs on Android" data-slug="weights"><title>10:35-10:45 Weightlifting tracking with Emacs on Android</title><rect x="149" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(162,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">weights</text></g></a><a href="https://emacsconf.org/2025/talks/completion" title="corfu+yasnippet: Easier than I thought" data-slug="completion"><title>11:05-11:25 corfu+yasnippet: Easier than I thought</title><rect x="196" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(225,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">completion</text></g></a><a href="https://emacsconf.org/2025/talks/zettelkasten" title="Zettelkasten for regular Emacs hackers" data-slug="zettelkasten"><title> 1:00- 1:25 Zettelkasten for regular Emacs hackers</title><rect x="376" y="15" opacity="0.8" width="39" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(413,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">zettelkasten</text></g></a><a href="https://emacsconf.org/2025/talks/hyperboleqa" title="Questions and answers to help you fly with Hyperbole" data-slug="hyperboleqa"><title> 1:45- 2:15 Questions and answers to help you fly with Hyperbole</title><rect x="447" y="15" opacity="0.8" width="47" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(492,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">hyperboleqa</text></g></a><a href="https://emacsconf.org/2025/talks/gardening" title="Gardening in Emacs: A Windows user's tale of tending, tweaking, and triumph" data-slug="gardening"><title> 2:15- 2:35 Gardening in Emacs: A Windows user's tale of tending, tweaking, and triumph</title><rect x="494" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(523,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">gardening</text></g></a><a href="https://emacsconf.org/2025/talks/bookclub-tapas" title="Bookclub tapas" data-slug="bookclub-tapas"><title> 2:45- 3:20 Bookclub tapas</title><rect x="541" y="15" opacity="0.8" width="54" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(593,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">bookclub-tapas</text></g></a><a href="https://emacsconf.org/2025/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"><title> 3:40- 3:50 Sunday closing remarks</title><rect x="627" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(640,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">sun-close</text></g></a><g transform="translate(0,3)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="140" font-size="10" text-anchor="left">9 AM</text></g><g transform="translate(94,3)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="140" font-size="10" text-anchor="left">10 AM</text></g><g transform="translate(188,3)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="140" font-size="10" text-anchor="left">11 AM</text></g><g transform="translate(282,3)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="140" font-size="10" text-anchor="left">12 PM</text></g><g transform="translate(376,3)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="140" font-size="10" text-anchor="left">1 PM</text></g><g transform="translate(470,3)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="140" font-size="10" text-anchor="left">2 PM</text></g><g transform="translate(564,3)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="140" font-size="10" text-anchor="left">3 PM</text></g><g transform="translate(658,3)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="140" font-size="10" text-anchor="left">4 PM</text></g><g transform="translate(752,3)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="140" font-size="10" text-anchor="left">5 PM</text></g></g></svg></div>
+<div><h1>Saturday, Dec 6, 2025</h1>
+<div data-start="2025-12-06T14:30:00+0000" data-end="2025-12-06T14:55:00+0000" class="sched-entry track-Development">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">9:30</span> - <span class="sched-end">9:55</span></span> <span class="sched-track Development">Development</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2025-schemacs">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://media.emacsconf.org/2025/current/bbb-schemacs.html">BBB</a></span>; <span class="sched-slug">id:schemacs</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2025/talks/schemacs">One year progress update Schemacs (formerly Gypsum)</a></div>
+ <div class="sched-speakers">Ramin Honary (he/him)</div>
+
+</div>
+
+<div data-start="2025-12-06T15:15:00+0000" data-end="2025-12-06T15:35:00+0000" class="sched-entry track-Development">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">10:15</span> - <span class="sched-end">10:35</span></span> <span class="sched-track Development">Development</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2025-juicemacs">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://pad.emacsconf.org/2025-juicemacs">Etherpad</a></span>; <span class="sched-slug">id:juicemacs</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2025/talks/juicemacs">Juicemacs: exploring speculative JIT compilation for ELisp in Java</a></div>
+ <div class="sched-speakers">Kana (they/them)</div>
+
+</div>
+
+<div data-start="2025-12-06T15:45:00+0000" data-end="2025-12-06T16:10:00+0000" class="sched-entry track-Development">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">10:45</span> - <span class="sched-end">11:10</span></span> <span class="sched-track Development">Development</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2025-swanky">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: none</span>; <span class="sched-slug">id:swanky</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2025/talks/swanky">Swanky Python: Interactive development for Python</a></div>
+ <div class="sched-speakers">Scott Zimmermann (he/him)</div>
+
+</div>
+
+<div data-start="2025-12-06T16:20:00+0000" data-end="2025-12-06T16:40:00+0000" class="sched-entry track-Development">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">11:20</span> - <span class="sched-end">11:40</span></span> <span class="sched-track Development">Development</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2025-python">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://media.emacsconf.org/2025/current/bbb-python.html">BBB</a></span>; <span class="sched-slug">id:python</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2025/talks/python">Interactive Python programming in Emacs</a></div>
+ <div class="sched-speakers">David Vujic (he/him)</div>
+
+</div>
+
+<div data-start="2025-12-06T18:00:00+0000" data-end="2025-12-06T18:25:00+0000" class="sched-entry track-Development">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">1:00</span> - <span class="sched-end">1:25</span></span> <span class="sched-track Development">Development</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2025-llm">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://media.emacsconf.org/2025/current/bbb-llm.html">BBB</a></span>; <span class="sched-slug">id:llm</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2025/talks/llm">Emacs, editors, and LLM driven workflows</a></div>
+ <div class="sched-speakers">Andrew Hyatt (he/him)</div>
+
+</div>
+
+<div data-start="2025-12-06T18:45:00+0000" data-end="2025-12-06T19:05:00+0000" class="sched-entry track-Development">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">1:45</span> - <span class="sched-end">2:05</span></span> <span class="sched-track Development">Development</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2025-private-ai">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://media.emacsconf.org/2025/current/bbb-private-ai.html">BBB</a></span>; <span class="sched-slug">id:private-ai</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2025/talks/private-ai">Emacs and private AI: a great match</a></div>
+ <div class="sched-speakers">Aaron Grothe (he/him)</div>
+
+</div>
+
+<div data-start="2025-12-06T19:25:00+0000" data-end="2025-12-06T19:55:00+0000" class="sched-entry track-Development">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">2:25</span> - <span class="sched-end">2:55</span></span> <span class="sched-track Development">Development</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2025-commonlisp">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-dev">#emacsconf-dev, speaker nick: screwlisp</a></span>; <span class="sched-slug">id:commonlisp</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2025/talks/commonlisp">Common Lisp images communicating like-a-human through shared Emacs slime and eev</a></div>
+ <div class="sched-speakers">screwlisp (he/him, they/them)</div>
+
+</div>
+
+<div data-start="2025-12-06T20:05:00+0000" data-end="2025-12-06T20:30:00+0000" class="sched-entry track-Development">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">3:05</span> - <span class="sched-end">3:30</span></span> <span class="sched-track Development">Development</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2025-graphics">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://media.emacsconf.org/2025/current/bbb-graphics.html">BBB</a></span>; <span class="sched-slug">id:graphics</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2025/talks/graphics">Modern Emacs/Elisp hardware/software accelerated graphics</a></div>
+ <div class="sched-speakers">Emanuel Berg (he/him)</div>
+
+</div>
+
+</div>
diff --git a/2025/watch/gen.md b/2025/watch/gen.md
new file mode 100644
index 00000000..73152da1
--- /dev/null
+++ b/2025/watch/gen.md
@@ -0,0 +1,186 @@
+<!-- Automatically generated by emacsconf-publish-watch-pages -->
+<!--
+[[!inline pages="internal(2025/watch/announce)" raw="yes"]]
+[[!meta title="General stream"]]
+[[!sidebar content=""]] -->
+
+<hr size="1">
+<div><a name="watch"></a><strong>Watch</strong> - <a href="#links">Pad and Q&amp;A links</a> - <a href="#chat">Chat</a> - <a href="#sched">Schedule</a> | Tracks: <strong>General</strong> - <a href="/2025/watch/dev/">Development</a> | <a href="https://emacsconf.org/2025/watch/">Tips for watching/participating</a></div>
+
+For better performance, we recommend watching <a href="https://live0.emacsconf.org/gen.webm">https://live0.emacsconf.org/gen.webm</a> using a streaming media player. Examples:
+
+<ul>
+<li>mpv https://live0.emacsconf.org/gen.webm</li>
+<li>vlc https://live0.emacsconf.org/gen.webm</li>
+<li>ffplay https://live0.emacsconf.org/gen.webm</li>
+<li>You can also watch it in VLC by choosing menu - Media - Open Network Stream and putting in https://live0.emacsconf.org/gen.webm</li>
+</ul>
+
+If you have limited bandwidth, you can watch the low-res stream <a href="https://live0.emacsconf.org/gen-480p.webm">https://live0.emacsconf.org/gen-480p.webm</a>.
+
+If you don't have a streaming media player, you might be able to watch using the player below. (Google Chrome seems to be having issues; Mozilla Firefox might work better. If watching from a phone, Google Chrome seems to work there, or download VLC from your phone's app store and use the URLs like https://live0.emacsconf.org/gen.webm .)
+
+<video controls class="reload"><source src="https://live0.emacsconf.org/gen.webm" type="video/webm" /></video>
+
+<hr size="1"><div><a name="links"></a><a href="#watch">Watch</a> - <strong>Pad and Q&amp;A links</strong> - <a href="#chat">Chat</a> - <a href="#sched">Schedule</a> | Tracks: <strong>General</strong> - <a href="/2025/watch/dev/">Development</a></div><div><span><a href="https://emacsconf.org/2025/talks/sat-open">sat-open</a> (<a class="pad-link" href="https://pad.emacsconf.org/2025-sat-open">pad</a>, <a href="https://pad.emacsconf.org/2025-sat-open">Etherpad</a>)</span> - <span><a href="https://emacsconf.org/2025/talks/org-babel">org-babel</a> (<a class="pad-link" href="https://pad.emacsconf.org/2025-org-babel">pad</a>, <a href="https://pad.emacsconf.org/2025-org-babel">Etherpad</a>)</span> - <span><a href="https://emacsconf.org/2025/talks/reference">reference</a> (<a class="pad-link" href="https://pad.emacsconf.org/2025-reference">pad</a>, <a href="https://media.emacsconf.org/2025/current/bbb-reference.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2025/talks/gmail">gmail</a> (<a class="pad-link" href="https://pad.emacsconf.org/2025-gmail">pad</a>, <a href="https://media.emacsconf.org/2025/current/bbb-gmail.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2025/talks/gnus">gnus</a> (<a class="pad-link" href="https://pad.emacsconf.org/2025-gnus">pad</a>, <a href="https://media.emacsconf.org/2025/current/bbb-gnus.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2025/talks/latex">latex</a> (<a class="pad-link" href="https://pad.emacsconf.org/2025-latex">pad</a>, <a href="https://media.emacsconf.org/2025/current/bbb-latex.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2025/talks/calc">calc</a> (<a class="pad-link" href="https://pad.emacsconf.org/2025-calc">pad</a>, <a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen">#emacsconf-gen, speaker nick: lispmacs or lispmacs[work]</a>)</span> - <span><a href="https://emacsconf.org/2025/talks/blee-lcnt">blee-lcnt</a> (<a class="pad-link" href="https://pad.emacsconf.org/2025-blee-lcnt">pad</a>, <a href="https://media.emacsconf.org/2025/current/bbb-blee-lcnt.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2025/talks/greader">greader</a> (<a class="pad-link" href="https://pad.emacsconf.org/2025-greader">pad</a>, <a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen">#emacsconf-gen, speaker nick: cow_2001</a>)</span> - <span><a href="https://emacsconf.org/2025/talks/open-mic">open-mic</a> (<a class="pad-link" href="https://pad.emacsconf.org/2025-open-mic">pad</a>, <a href="https://media.emacsconf.org/2025/current/bbb-open-mic.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2025/talks/sat-close">sat-close</a> (<a class="pad-link" href="https://pad.emacsconf.org/2025-sat-close">pad</a>, <a href="https://media.emacsconf.org/2025/current/bbb-sat-close.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2025/talks/sun-open">sun-open</a> (<a class="pad-link" href="https://pad.emacsconf.org/2025-sun-open">pad</a>, <a href="https://pad.emacsconf.org/2025-sun-open">Etherpad</a>)</span> - <span><a href="https://emacsconf.org/2025/talks/modern">modern</a> (<a class="pad-link" href="https://pad.emacsconf.org/2025-modern">pad</a>, <a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen">#emacsconf-gen, speaker nick: edrx</a>)</span> - <span><a href="https://emacsconf.org/2025/talks/reader">reader</a> (<a class="pad-link" href="https://pad.emacsconf.org/2025-reader">pad</a>, <a href="https://media.emacsconf.org/2025/current/bbb-reader.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2025/talks/weights">weights</a> (<a class="pad-link" href="https://pad.emacsconf.org/2025-weights">pad</a>, <a href="https://media.emacsconf.org/2025/current/bbb-weights.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2025/talks/completion">completion</a> (<a class="pad-link" href="https://pad.emacsconf.org/2025-completion">pad</a>, <a href="https://media.emacsconf.org/2025/current/bbb-completion.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2025/talks/zettelkasten">zettelkasten</a> (<a class="pad-link" href="https://pad.emacsconf.org/2025-zettelkasten">pad</a>, <a href="https://media.emacsconf.org/2025/current/bbb-zettelkasten.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2025/talks/hyperboleqa">hyperboleqa</a> (<a class="pad-link" href="https://pad.emacsconf.org/2025-hyperboleqa">pad</a>, <a href="https://media.emacsconf.org/2025/current/bbb-hyperboleqa.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2025/talks/gardening">gardening</a> (<a class="pad-link" href="https://pad.emacsconf.org/2025-gardening">pad</a>, none)</span> - <span><a href="https://emacsconf.org/2025/talks/bookclub-tapas">bookclub-tapas</a> (<a class="pad-link" href="https://pad.emacsconf.org/2025-bookclub-tapas">pad</a>, <a href="https://media.emacsconf.org/2025/current/bbb-bookclub-tapas.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2025/talks/sun-close">sun-close</a> (<a class="pad-link" href="https://pad.emacsconf.org/2025-sun-close">pad</a>, <a href="https://media.emacsconf.org/2025/current/bbb-sun-close.html">BBB</a>)</span></div>
+<div class="pad-output"></div>
+<hr size="1"><div><a name="chat"></a><a href="#watch">Watch</a> - <a href="#links">Pad and Q&amp;A links</a> - <strong>Chat</strong> - <a href="#sched">Schedule</a> | Tracks: <strong>General</strong> - <a href="/2025/watch/dev/">Development</a></div><div>Chat: <a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-org,emacsconf-accessible,emacsconf-dev,emacsconf-gen">emacsconf-gen</a> on libera.chat</div>
+
+<div class="chat-iframe" data-track="gen"></div>
+<iframe src="https://chat.emacsconf.org/?join=emacsconf,emacsconf-org,emacsconf-accessible,emacsconf-dev,emacsconf-gen" height="600" width="100%"></iframe>
+<hr size="1"><div><a name="sched"></a><a href="#watch">Watch</a> - <a href="#links">Pad and Q&amp;A links</a> - <a href="#chat">Chat</a> - <strong>Schedule</strong> | Tracks: <strong>General</strong> - <a href="/2025/watch/dev/">Development</a></div>
+<ul>Legend:
+<li>Solid lines: Q&A will be through a BigBlueButton room (you can ask questions there or through IRC/Etherpad)</li>
+<li>Dashed lines: Q&A will be over IRC or the Etherpad, or the speaker will follow up afterwards</li></ul>
+<div>Times are in Eastern Standard Time (America/Toronto, GMT-5). If you have Javascript enabled, clicking on talk pages should include times in your computer's local time setting.</div>
+<div><svg width="800" height="300" 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="800" height="150" x="0" y="0" fill="white"></rect><text font-size="10" fill="black" y="12" x="3">Saturday</text><a href="https://emacsconf.org/2025/talks/sat-open" title="Saturday opening remarks" data-slug="sat-open"><title> 9:00- 9:10 Saturday opening remarks</title><rect x="0" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(13,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">sat-open</text></g></a><a href="https://emacsconf.org/2025/talks/org-babel" title="Making Org-Babel reactive" data-slug="org-babel"><title> 9:10- 9:20 Making Org-Babel reactive</title><rect x="15" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(28,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">org-babel</text></g></a><a href="https://emacsconf.org/2025/talks/reference" title="Emacs as a fully-fledged reference manager" data-slug="reference"><title> 9:30- 9:55 Emacs as a fully-fledged reference manager</title><rect x="47" y="15" opacity="0.8" width="39" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(84,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">reference</text></g></a><a href="https://emacsconf.org/2025/talks/gmail" title="org-gmail: A deep integration of Gmail into your Org Mode" data-slug="gmail"><title>10:15-10:40 org-gmail: A deep integration of Gmail into your Org Mode</title><rect x="117" y="15" opacity="0.8" width="39" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(154,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">gmail</text></g></a><a href="https://emacsconf.org/2025/talks/gnus" title="Reading and writing emails in GNU Emacs with Gnus" data-slug="gnus"><title>10:50-11:15 Reading and writing emails in GNU Emacs with Gnus</title><rect x="172" y="15" opacity="0.8" width="39" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(209,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">gnus</text></g></a><a href="https://emacsconf.org/2025/talks/latex" title="LaTeX export in org-mode: the overhaul" data-slug="latex"><title>11:25-11:45 LaTeX export in org-mode: the overhaul</title><rect x="227" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(256,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">latex</text></g></a><a href="https://emacsconf.org/2025/talks/calc" title="Basic Calc functionality for engineering or electronics" data-slug="calc"><title> 1:00- 1:25 Basic Calc functionality for engineering or electronics</title><rect x="376" y="15" opacity="0.8" width="39" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(413,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">calc</text></g></a><a href="https://emacsconf.org/2025/talks/blee-lcnt" title="Blee-LCNT: An Emacs-centered content production and self-publication framework" data-slug="blee-lcnt"><title> 1:35- 2:15 Blee-LCNT: An Emacs-centered content production and self-publication framework</title><rect x="431" y="15" opacity="0.8" width="62" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(491,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">blee-lcnt</text></g></a><a href="https://emacsconf.org/2025/talks/greader" title="GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence" data-slug="greader"><title> 2:35- 2:40 GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence</title><rect x="525" y="15" opacity="0.8" width="7" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(530,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">greader</text></g></a><a href="https://emacsconf.org/2025/talks/open-mic" title="Open session" data-slug="open-mic"><title> 2:50- 3:40 Open session</title><rect x="549" y="15" opacity="0.8" width="78" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(625,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">open-mic</text></g></a><a href="https://emacsconf.org/2025/talks/sat-close" title="Saturday closing remarks / open session" data-slug="sat-close"><title> 4:00- 4:10 Saturday closing remarks / open session</title><rect x="658" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(671,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">sat-close</text></g></a><a href="https://emacsconf.org/2025/talks/schemacs" title="One year progress update Schemacs (formerly Gypsum)" data-slug="schemacs"><title> 9:30- 9:55 One year progress update Schemacs (formerly Gypsum)</title><rect x="47" y="75" opacity="0.8" width="39" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(84,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">schemacs</text></g></a><a href="https://emacsconf.org/2025/talks/juicemacs" title="Juicemacs: exploring speculative JIT compilation for ELisp in Java" data-slug="juicemacs"><title>10:15-10:35 Juicemacs: exploring speculative JIT compilation for ELisp in Java</title><rect x="117" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect><g transform="translate(146,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">juicemacs</text></g></a><a href="https://emacsconf.org/2025/talks/swanky" title="Swanky Python: Interactive development for Python" data-slug="swanky"><title>10:45-11:10 Swanky Python: Interactive development for Python</title><rect x="164" y="75" opacity="0.8" width="39" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect><g transform="translate(201,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">swanky</text></g></a><a href="https://emacsconf.org/2025/talks/python" title="Interactive Python programming in Emacs" data-slug="python"><title>11:20-11:40 Interactive Python programming in Emacs</title><rect x="219" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(248,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">python</text></g></a><a href="https://emacsconf.org/2025/talks/llm" title="Emacs, editors, and LLM driven workflows" data-slug="llm"><title> 1:00- 1:25 Emacs, editors, and LLM driven workflows</title><rect x="376" y="75" opacity="0.8" width="39" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(413,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">llm</text></g></a><a href="https://emacsconf.org/2025/talks/private-ai" title="Emacs and private AI: a great match" data-slug="private-ai"><title> 1:45- 2:05 Emacs and private AI: a great match</title><rect x="447" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(476,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">private-ai</text></g></a><a href="https://emacsconf.org/2025/talks/commonlisp" title="Common Lisp images communicating like-a-human through shared Emacs slime and eev" data-slug="commonlisp"><title> 2:25- 2:55 Common Lisp images communicating like-a-human through shared Emacs slime and eev</title><rect x="509" y="75" opacity="0.8" width="47" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect><g transform="translate(554,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">commonlisp</text></g></a><a href="https://emacsconf.org/2025/talks/graphics" title="Modern Emacs/Elisp hardware/software accelerated graphics" data-slug="graphics"><title> 3:05- 3:30 Modern Emacs/Elisp hardware/software accelerated graphics</title><rect x="572" y="75" opacity="0.8" width="39" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(609,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">graphics</text></g></a><g transform="translate(0,3)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="140" font-size="10" text-anchor="left">9 AM</text></g><g transform="translate(94,3)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="140" font-size="10" text-anchor="left">10 AM</text></g><g transform="translate(188,3)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="140" font-size="10" text-anchor="left">11 AM</text></g><g transform="translate(282,3)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="140" font-size="10" text-anchor="left">12 PM</text></g><g transform="translate(376,3)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="140" font-size="10" text-anchor="left">1 PM</text></g><g transform="translate(470,3)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="140" font-size="10" text-anchor="left">2 PM</text></g><g transform="translate(564,3)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="140" font-size="10" text-anchor="left">3 PM</text></g><g transform="translate(658,3)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="140" font-size="10" text-anchor="left">4 PM</text></g><g transform="translate(752,3)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="140" font-size="10" text-anchor="left">5 PM</text></g></g><g transform="translate(0,150)"><title>Schedule for Sunday</title><rect width="800" height="150" x="0" y="0" fill="white"></rect><text font-size="10" fill="black" y="12" x="3">Sunday</text><a href="https://emacsconf.org/2025/talks/sun-open" title="Sunday opening remarks" data-slug="sun-open"><title> 9:00- 9:10 Sunday opening remarks</title><rect x="0" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(13,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">sun-open</text></g></a><a href="https://emacsconf.org/2025/talks/modern" title="Some problems of modernizing Emacs" data-slug="modern"><title> 9:10- 9:30 Some problems of modernizing Emacs</title><rect x="15" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(44,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">modern</text></g></a><a href="https://emacsconf.org/2025/talks/reader" title="An introduction to the Emacs Reader" data-slug="reader"><title> 9:40-10:15 An introduction to the Emacs Reader</title><rect x="62" y="15" opacity="0.8" width="54" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(114,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">reader</text></g></a><a href="https://emacsconf.org/2025/talks/weights" title="Weightlifting tracking with Emacs on Android" data-slug="weights"><title>10:35-10:45 Weightlifting tracking with Emacs on Android</title><rect x="149" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(162,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">weights</text></g></a><a href="https://emacsconf.org/2025/talks/completion" title="corfu+yasnippet: Easier than I thought" data-slug="completion"><title>11:05-11:25 corfu+yasnippet: Easier than I thought</title><rect x="196" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(225,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">completion</text></g></a><a href="https://emacsconf.org/2025/talks/zettelkasten" title="Zettelkasten for regular Emacs hackers" data-slug="zettelkasten"><title> 1:00- 1:25 Zettelkasten for regular Emacs hackers</title><rect x="376" y="15" opacity="0.8" width="39" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(413,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">zettelkasten</text></g></a><a href="https://emacsconf.org/2025/talks/hyperboleqa" title="Questions and answers to help you fly with Hyperbole" data-slug="hyperboleqa"><title> 1:45- 2:15 Questions and answers to help you fly with Hyperbole</title><rect x="447" y="15" opacity="0.8" width="47" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(492,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">hyperboleqa</text></g></a><a href="https://emacsconf.org/2025/talks/gardening" title="Gardening in Emacs: A Windows user's tale of tending, tweaking, and triumph" data-slug="gardening"><title> 2:15- 2:35 Gardening in Emacs: A Windows user's tale of tending, tweaking, and triumph</title><rect x="494" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(523,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">gardening</text></g></a><a href="https://emacsconf.org/2025/talks/bookclub-tapas" title="Bookclub tapas" data-slug="bookclub-tapas"><title> 2:45- 3:20 Bookclub tapas</title><rect x="541" y="15" opacity="0.8" width="54" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(593,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">bookclub-tapas</text></g></a><a href="https://emacsconf.org/2025/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"><title> 3:40- 3:50 Sunday closing remarks</title><rect x="627" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(640,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">sun-close</text></g></a><g transform="translate(0,3)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="140" font-size="10" text-anchor="left">9 AM</text></g><g transform="translate(94,3)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="140" font-size="10" text-anchor="left">10 AM</text></g><g transform="translate(188,3)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="140" font-size="10" text-anchor="left">11 AM</text></g><g transform="translate(282,3)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="140" font-size="10" text-anchor="left">12 PM</text></g><g transform="translate(376,3)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="140" font-size="10" text-anchor="left">1 PM</text></g><g transform="translate(470,3)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="140" font-size="10" text-anchor="left">2 PM</text></g><g transform="translate(564,3)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="140" font-size="10" text-anchor="left">3 PM</text></g><g transform="translate(658,3)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="140" font-size="10" text-anchor="left">4 PM</text></g><g transform="translate(752,3)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="140" font-size="10" text-anchor="left">5 PM</text></g></g></svg></div>
+<div><h1>Saturday, Dec 6, 2025</h1>
+<div data-start="2025-12-06T14:00:00+0000" data-end="2025-12-06T14:10:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">9:00</span> - <span class="sched-end">9:10</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2025-sat-open">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://pad.emacsconf.org/2025-sat-open">Etherpad</a></span>; <span class="sched-slug">id:sat-open</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2025/talks/sat-open">Saturday opening remarks</a></div>
+ <div class="sched-speakers">Sacha Chua</div>
+
+</div>
+
+<div data-start="2025-12-06T14:10:00+0000" data-end="2025-12-06T14:20:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">9:10</span> - <span class="sched-end">9:20</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2025-org-babel">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://pad.emacsconf.org/2025-org-babel">Etherpad</a></span>; <span class="sched-slug">id:org-babel</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2025/talks/org-babel">Making Org-Babel reactive</a></div>
+ <div class="sched-speakers">Abhinav Tushar (he/him)</div>
+
+</div>
+
+<div data-start="2025-12-06T14:30:00+0000" data-end="2025-12-06T14:55:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">9:30</span> - <span class="sched-end">9:55</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2025-reference">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://media.emacsconf.org/2025/current/bbb-reference.html">BBB</a></span>; <span class="sched-slug">id:reference</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2025/talks/reference">Emacs as a fully-fledged reference manager</a></div>
+ <div class="sched-speakers">Vidianos Giannitsis (he/him)</div>
+
+</div>
+
+<div data-start="2025-12-06T15:15:00+0000" data-end="2025-12-06T15:40:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">10:15</span> - <span class="sched-end">10:40</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2025-gmail">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://media.emacsconf.org/2025/current/bbb-gmail.html">BBB</a></span>; <span class="sched-slug">id:gmail</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2025/talks/gmail">org-gmail: A deep integration of Gmail into your Org Mode</a></div>
+ <div class="sched-speakers">Bala Ramadurai (he/him)</div>
+
+</div>
+
+<div data-start="2025-12-06T15:50:00+0000" data-end="2025-12-06T16:15:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">10:50</span> - <span class="sched-end">11:15</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2025-gnus">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://media.emacsconf.org/2025/current/bbb-gnus.html">BBB</a></span>; <span class="sched-slug">id:gnus</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2025/talks/gnus">Reading and writing emails in GNU Emacs with Gnus</a></div>
+ <div class="sched-speakers">Amin Bandali (he/him)</div>
+
+</div>
+
+<div data-start="2025-12-06T16:25:00+0000" data-end="2025-12-06T16:45:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">11:25</span> - <span class="sched-end">11:45</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2025-latex">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://media.emacsconf.org/2025/current/bbb-latex.html">BBB</a></span>; <span class="sched-slug">id:latex</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2025/talks/latex">LaTeX export in org-mode: the overhaul</a></div>
+ <div class="sched-speakers">Pedro A. Aranda Gutiérrez (he, him)</div>
+
+</div>
+
+<div data-start="2025-12-06T18:00:00+0000" data-end="2025-12-06T18:25:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">1:00</span> - <span class="sched-end">1:25</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2025-calc">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen">#emacsconf-gen, speaker nick: lispmacs or lispmacs[work]</a></span>; <span class="sched-slug">id:calc</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2025/talks/calc">Basic Calc functionality for engineering or electronics</a></div>
+ <div class="sched-speakers">Christopher Howard (he/him)</div>
+
+</div>
+
+<div data-start="2025-12-06T18:35:00+0000" data-end="2025-12-06T19:15:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">1:35</span> - <span class="sched-end">2:15</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2025-blee-lcnt">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://media.emacsconf.org/2025/current/bbb-blee-lcnt.html">BBB</a></span>; <span class="sched-slug">id:blee-lcnt</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2025/talks/blee-lcnt">Blee-LCNT: An Emacs-centered content production and self-publication framework</a></div>
+ <div class="sched-speakers">Mohsen BANAN (he/him)</div>
+
+</div>
+
+<div data-start="2025-12-06T19:35:00+0000" data-end="2025-12-06T19:40:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">2:35</span> - <span class="sched-end">2:40</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2025-greader">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen">#emacsconf-gen, speaker nick: cow_2001</a></span>; <span class="sched-slug">id:greader</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2025/talks/greader">GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence</a></div>
+ <div class="sched-speakers">Yuval Langer (he/him)</div>
+
+</div>
+
+<div data-start="2025-12-06T19:50:00+0000" data-end="2025-12-06T20:40:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">2:50</span> - <span class="sched-end">3:40</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2025-open-mic">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://media.emacsconf.org/2025/current/bbb-open-mic.html">BBB</a></span>; <span class="sched-slug">id:open-mic</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2025/talks/open-mic">Open session</a></div>
+ <div class="sched-speakers">Participants</div>
+
+</div>
+
+<div data-start="2025-12-06T21:00:00+0000" data-end="2025-12-06T21:10:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">4:00</span> - <span class="sched-end">4:10</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2025-sat-close">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://media.emacsconf.org/2025/current/bbb-sat-close.html">BBB</a></span>; <span class="sched-slug">id:sat-close</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2025/talks/sat-close">Saturday closing remarks / open session</a></div>
+
+
+</div>
+
+<h1>Sunday, Dec 7, 2025</h1>
+<div data-start="2025-12-07T14:00:00+0000" data-end="2025-12-07T14:10:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">9:00</span> - <span class="sched-end">9:10</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2025-sun-open">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://pad.emacsconf.org/2025-sun-open">Etherpad</a></span>; <span class="sched-slug">id:sun-open</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2025/talks/sun-open">Sunday opening remarks</a></div>
+ <div class="sched-speakers">Sacha Chua</div>
+
+</div>
+
+<div data-start="2025-12-07T14:10:00+0000" data-end="2025-12-07T14:30:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">9:10</span> - <span class="sched-end">9:30</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2025-modern">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen">#emacsconf-gen, speaker nick: edrx</a></span>; <span class="sched-slug">id:modern</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2025/talks/modern">Some problems of modernizing Emacs</a></div>
+ <div class="sched-speakers">Eduardo Ochs (he/him)</div>
+
+</div>
+
+<div data-start="2025-12-07T14:40:00+0000" data-end="2025-12-07T15:15:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">9:40</span> - <span class="sched-end">10:15</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2025-reader">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://media.emacsconf.org/2025/current/bbb-reader.html">BBB</a></span>; <span class="sched-slug">id:reader</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2025/talks/reader">An introduction to the Emacs Reader</a></div>
+ <div class="sched-speakers">Divyá</div>
+
+</div>
+
+<div data-start="2025-12-07T15:35:00+0000" data-end="2025-12-07T15:45:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">10:35</span> - <span class="sched-end">10:45</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2025-weights">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://media.emacsconf.org/2025/current/bbb-weights.html">BBB</a></span>; <span class="sched-slug">id:weights</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2025/talks/weights">Weightlifting tracking with Emacs on Android</a></div>
+ <div class="sched-speakers">Zachary Romero</div>
+
+</div>
+
+<div data-start="2025-12-07T16:05:00+0000" data-end="2025-12-07T16:25:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">11:05</span> - <span class="sched-end">11:25</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2025-completion">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://media.emacsconf.org/2025/current/bbb-completion.html">BBB</a></span>; <span class="sched-slug">id:completion</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2025/talks/completion">corfu+yasnippet: Easier than I thought</a></div>
+ <div class="sched-speakers">Pedro A. Aranda Gutiérrez (he, him)</div>
+
+</div>
+
+<div data-start="2025-12-07T18:00:00+0000" data-end="2025-12-07T18:25:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">1:00</span> - <span class="sched-end">1:25</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2025-zettelkasten">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://media.emacsconf.org/2025/current/bbb-zettelkasten.html">BBB</a></span>; <span class="sched-slug">id:zettelkasten</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2025/talks/zettelkasten">Zettelkasten for regular Emacs hackers</a></div>
+ <div class="sched-speakers">Christian Tietze (he)</div>
+
+</div>
+
+<div data-start="2025-12-07T18:45:00+0000" data-end="2025-12-07T19:15:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">1:45</span> - <span class="sched-end">2:15</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2025-hyperboleqa">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://media.emacsconf.org/2025/current/bbb-hyperboleqa.html">BBB</a></span>; <span class="sched-slug">id:hyperboleqa</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2025/talks/hyperboleqa">Questions and answers to help you fly with Hyperbole</a></div>
+ <div class="sched-speakers">Bob Weiner</div>
+
+</div>
+
+<div data-start="2025-12-07T19:15:00+0000" data-end="2025-12-07T19:35:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">2:15</span> - <span class="sched-end">2:35</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2025-gardening">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: none</span>; <span class="sched-slug">id:gardening</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2025/talks/gardening">Gardening in Emacs: A Windows user's tale of tending, tweaking, and triumph</a></div>
+ <div class="sched-speakers">Marco Bresciani</div>
+
+</div>
+
+<div data-start="2025-12-07T19:45:00+0000" data-end="2025-12-07T20:20:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">2:45</span> - <span class="sched-end">3:20</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2025-bookclub-tapas">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://media.emacsconf.org/2025/current/bbb-bookclub-tapas.html">BBB</a></span>; <span class="sched-slug">id:bookclub-tapas</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2025/talks/bookclub-tapas">Bookclub tapas</a></div>
+ <div class="sched-speakers">Maddie Sullivan (she/her)</div>
+
+</div>
+
+<div data-start="2025-12-07T20:40:00+0000" data-end="2025-12-07T20:50:00+0000" class="sched-entry track-General">
+<div class="sched-meta"><span class="sched-time"><span class="sched-start">3:40</span> - <span class="sched-end">3:50</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2025-sun-close">Etherpad</a></span>; <span class="sched-q-and-a">Q&amp;A: <a href="https://media.emacsconf.org/2025/current/bbb-sun-close.html">BBB</a></span>; <span class="sched-slug">id:sun-close</span></div>
+<div class="sched-title"><a href="https://emacsconf.org/2025/talks/sun-close">Sunday closing remarks</a></div>
+
+
+</div>
+
+</div>
diff --git a/2025/watch/info.md b/2025/watch/info.md
new file mode 100644
index 00000000..557b1dfd
--- /dev/null
+++ b/2025/watch/info.md
@@ -0,0 +1,11 @@
+[[!sidebar content=""]]<!-- Automatically generated by emacsconf-publish-watch-pages -->
+
+<h2>Tracks</h2>
+We recommend using a streaming player like mpv to watch the livestreams. Example: <pre>
+mpv https://live0.emacsconf.org/gen.webm
+mpv https://live0.emacsconf.org/dev.webm
+</pre><table width="100%"><tr><th>Watch page</th><th>Watch page (low-res)</th><th>IRC channel (libera.chat)</th><th>URL for streaming player (ex: mpv, vlc, ffplay)</th><th>Low res</th></tr>
+<tr><td><div class="sched-track General"><a href="https://live.emacsconf.org/2025/watch/gen/">General</a></div></td><td><a href="https://live.emacsconf.org/2025/watch/gen-480p/">General (low-res)</a></td><td><a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-org,emacsconf-accessible,emacsconf-dev,emacsconf-gen">emacsconf-gen</a></td><td><a href="https://live0.emacsconf.org/gen.webm">https://live0.emacsconf.org/gen.webm</a></td><td><a href="https://live0.emacsconf.org/gen-480p.webm">gen-480p.webm</a></tr>
+<tr><td><div class="sched-track Development"><a href="https://live.emacsconf.org/2025/watch/dev/">Development</a></div></td><td><a href="https://live.emacsconf.org/2025/watch/dev-480p/">Development (low-res)</a></td><td><a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-org,emacsconf-accessible,emacsconf-gen,emacsconf-dev">emacsconf-dev</a></td><td><a href="https://live0.emacsconf.org/dev.webm">https://live0.emacsconf.org/dev.webm</a></td><td><a href="https://live0.emacsconf.org/dev-480p.webm">dev-480p.webm</a></tr></table>
+
+<svg width="800" height="300" 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="800" height="150" x="0" y="0" fill="white"></rect><text font-size="10" fill="black" y="12" x="3">Saturday</text><a href="https://emacsconf.org/2025/talks/sat-open" title="Saturday opening remarks" data-slug="sat-open"><title> 9:00- 9:10 Saturday opening remarks</title><rect x="0" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(13,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">sat-open</text></g></a><a href="https://emacsconf.org/2025/talks/org-babel" title="Making Org-Babel reactive" data-slug="org-babel"><title> 9:10- 9:20 Making Org-Babel reactive</title><rect x="15" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(28,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">org-babel</text></g></a><a href="https://emacsconf.org/2025/talks/reference" title="Emacs as a fully-fledged reference manager" data-slug="reference"><title> 9:30- 9:55 Emacs as a fully-fledged reference manager</title><rect x="47" y="15" opacity="0.8" width="39" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(84,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">reference</text></g></a><a href="https://emacsconf.org/2025/talks/gmail" title="org-gmail: A deep integration of Gmail into your Org Mode" data-slug="gmail"><title>10:15-10:40 org-gmail: A deep integration of Gmail into your Org Mode</title><rect x="117" y="15" opacity="0.8" width="39" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(154,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">gmail</text></g></a><a href="https://emacsconf.org/2025/talks/gnus" title="Reading and writing emails in GNU Emacs with Gnus" data-slug="gnus"><title>10:50-11:15 Reading and writing emails in GNU Emacs with Gnus</title><rect x="172" y="15" opacity="0.8" width="39" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(209,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">gnus</text></g></a><a href="https://emacsconf.org/2025/talks/latex" title="LaTeX export in org-mode: the overhaul" data-slug="latex"><title>11:25-11:45 LaTeX export in org-mode: the overhaul</title><rect x="227" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(256,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">latex</text></g></a><a href="https://emacsconf.org/2025/talks/calc" title="Basic Calc functionality for engineering or electronics" data-slug="calc"><title> 1:00- 1:25 Basic Calc functionality for engineering or electronics</title><rect x="376" y="15" opacity="0.8" width="39" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(413,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">calc</text></g></a><a href="https://emacsconf.org/2025/talks/blee-lcnt" title="Blee-LCNT: An Emacs-centered content production and self-publication framework" data-slug="blee-lcnt"><title> 1:35- 2:15 Blee-LCNT: An Emacs-centered content production and self-publication framework</title><rect x="431" y="15" opacity="0.8" width="62" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(491,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">blee-lcnt</text></g></a><a href="https://emacsconf.org/2025/talks/greader" title="GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence" data-slug="greader"><title> 2:35- 2:40 GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence</title><rect x="525" y="15" opacity="0.8" width="7" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(530,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">greader</text></g></a><a href="https://emacsconf.org/2025/talks/open-mic" title="Open session" data-slug="open-mic"><title> 2:50- 3:40 Open session</title><rect x="549" y="15" opacity="0.8" width="78" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(625,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">open-mic</text></g></a><a href="https://emacsconf.org/2025/talks/sat-close" title="Saturday closing remarks / open session" data-slug="sat-close"><title> 4:00- 4:10 Saturday closing remarks / open session</title><rect x="658" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(671,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">sat-close</text></g></a><a href="https://emacsconf.org/2025/talks/schemacs" title="One year progress update Schemacs (formerly Gypsum)" data-slug="schemacs"><title> 9:30- 9:55 One year progress update Schemacs (formerly Gypsum)</title><rect x="47" y="75" opacity="0.8" width="39" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(84,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">schemacs</text></g></a><a href="https://emacsconf.org/2025/talks/juicemacs" title="Juicemacs: exploring speculative JIT compilation for ELisp in Java" data-slug="juicemacs"><title>10:15-10:35 Juicemacs: exploring speculative JIT compilation for ELisp in Java</title><rect x="117" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect><g transform="translate(146,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">juicemacs</text></g></a><a href="https://emacsconf.org/2025/talks/swanky" title="Swanky Python: Interactive development for Python" data-slug="swanky"><title>10:45-11:10 Swanky Python: Interactive development for Python</title><rect x="164" y="75" opacity="0.8" width="39" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect><g transform="translate(201,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">swanky</text></g></a><a href="https://emacsconf.org/2025/talks/python" title="Interactive Python programming in Emacs" data-slug="python"><title>11:20-11:40 Interactive Python programming in Emacs</title><rect x="219" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(248,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">python</text></g></a><a href="https://emacsconf.org/2025/talks/llm" title="Emacs, editors, and LLM driven workflows" data-slug="llm"><title> 1:00- 1:25 Emacs, editors, and LLM driven workflows</title><rect x="376" y="75" opacity="0.8" width="39" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(413,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">llm</text></g></a><a href="https://emacsconf.org/2025/talks/private-ai" title="Emacs and private AI: a great match" data-slug="private-ai"><title> 1:45- 2:05 Emacs and private AI: a great match</title><rect x="447" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(476,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">private-ai</text></g></a><a href="https://emacsconf.org/2025/talks/commonlisp" title="Common Lisp images communicating like-a-human through shared Emacs slime and eev" data-slug="commonlisp"><title> 2:25- 2:55 Common Lisp images communicating like-a-human through shared Emacs slime and eev</title><rect x="509" y="75" opacity="0.8" width="47" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect><g transform="translate(554,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">commonlisp</text></g></a><a href="https://emacsconf.org/2025/talks/graphics" title="Modern Emacs/Elisp hardware/software accelerated graphics" data-slug="graphics"><title> 3:05- 3:30 Modern Emacs/Elisp hardware/software accelerated graphics</title><rect x="572" y="75" opacity="0.8" width="39" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect><g transform="translate(609,133)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">graphics</text></g></a><g transform="translate(0,3)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="140" font-size="10" text-anchor="left">9 AM</text></g><g transform="translate(94,3)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="140" font-size="10" text-anchor="left">10 AM</text></g><g transform="translate(188,3)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="140" font-size="10" text-anchor="left">11 AM</text></g><g transform="translate(282,3)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="140" font-size="10" text-anchor="left">12 PM</text></g><g transform="translate(376,3)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="140" font-size="10" text-anchor="left">1 PM</text></g><g transform="translate(470,3)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="140" font-size="10" text-anchor="left">2 PM</text></g><g transform="translate(564,3)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="140" font-size="10" text-anchor="left">3 PM</text></g><g transform="translate(658,3)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="140" font-size="10" text-anchor="left">4 PM</text></g><g transform="translate(752,3)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="140" font-size="10" text-anchor="left">5 PM</text></g></g><g transform="translate(0,150)"><title>Schedule for Sunday</title><rect width="800" height="150" x="0" y="0" fill="white"></rect><text font-size="10" fill="black" y="12" x="3">Sunday</text><a href="https://emacsconf.org/2025/talks/sun-open" title="Sunday opening remarks" data-slug="sun-open"><title> 9:00- 9:10 Sunday opening remarks</title><rect x="0" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(13,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">sun-open</text></g></a><a href="https://emacsconf.org/2025/talks/modern" title="Some problems of modernizing Emacs" data-slug="modern"><title> 9:10- 9:30 Some problems of modernizing Emacs</title><rect x="15" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(44,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">modern</text></g></a><a href="https://emacsconf.org/2025/talks/reader" title="An introduction to the Emacs Reader" data-slug="reader"><title> 9:40-10:15 An introduction to the Emacs Reader</title><rect x="62" y="15" opacity="0.8" width="54" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(114,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">reader</text></g></a><a href="https://emacsconf.org/2025/talks/weights" title="Weightlifting tracking with Emacs on Android" data-slug="weights"><title>10:35-10:45 Weightlifting tracking with Emacs on Android</title><rect x="149" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(162,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">weights</text></g></a><a href="https://emacsconf.org/2025/talks/completion" title="corfu+yasnippet: Easier than I thought" data-slug="completion"><title>11:05-11:25 corfu+yasnippet: Easier than I thought</title><rect x="196" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(225,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">completion</text></g></a><a href="https://emacsconf.org/2025/talks/zettelkasten" title="Zettelkasten for regular Emacs hackers" data-slug="zettelkasten"><title> 1:00- 1:25 Zettelkasten for regular Emacs hackers</title><rect x="376" y="15" opacity="0.8" width="39" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(413,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">zettelkasten</text></g></a><a href="https://emacsconf.org/2025/talks/hyperboleqa" title="Questions and answers to help you fly with Hyperbole" data-slug="hyperboleqa"><title> 1:45- 2:15 Questions and answers to help you fly with Hyperbole</title><rect x="447" y="15" opacity="0.8" width="47" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(492,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">hyperboleqa</text></g></a><a href="https://emacsconf.org/2025/talks/gardening" title="Gardening in Emacs: A Windows user's tale of tending, tweaking, and triumph" data-slug="gardening"><title> 2:15- 2:35 Gardening in Emacs: A Windows user's tale of tending, tweaking, and triumph</title><rect x="494" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect><g transform="translate(523,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">gardening</text></g></a><a href="https://emacsconf.org/2025/talks/bookclub-tapas" title="Bookclub tapas" data-slug="bookclub-tapas"><title> 2:45- 3:20 Bookclub tapas</title><rect x="541" y="15" opacity="0.8" width="54" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(593,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">bookclub-tapas</text></g></a><a href="https://emacsconf.org/2025/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"><title> 3:40- 3:50 Sunday closing remarks</title><rect x="627" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect><g transform="translate(640,73)"><text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)">sun-close</text></g></a><g transform="translate(0,3)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="140" font-size="10" text-anchor="left">9 AM</text></g><g transform="translate(94,3)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="140" font-size="10" text-anchor="left">10 AM</text></g><g transform="translate(188,3)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="140" font-size="10" text-anchor="left">11 AM</text></g><g transform="translate(282,3)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="140" font-size="10" text-anchor="left">12 PM</text></g><g transform="translate(376,3)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="140" font-size="10" text-anchor="left">1 PM</text></g><g transform="translate(470,3)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="140" font-size="10" text-anchor="left">2 PM</text></g><g transform="translate(564,3)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="140" font-size="10" text-anchor="left">3 PM</text></g><g transform="translate(658,3)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="140" font-size="10" text-anchor="left">4 PM</text></g><g transform="translate(752,3)"><line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line><text fill="black" x="0" y="140" font-size="10" text-anchor="left">5 PM</text></g></g></svg> \ No newline at end of file
diff --git a/blog.md b/blog.md
index 70e01d97..e2d43aae 100644
--- a/blog.md
+++ b/blog.md
@@ -1 +1 @@
-[[!inline pages="blog/* and !*/Discussion" show="10" rootpage="blog"]]
+[[!inline pages="(blog/* and !*/Discussion) or tagged(blog)" show="10" rootpage="blog"]]
diff --git a/captioning.md b/captioning.md
index 9a85080c..e0078652 100644
--- a/captioning.md
+++ b/captioning.md
@@ -74,8 +74,8 @@ Times don't need to be very precise. If you notice
that the times are way out of whack and it's
getting in the way of your subtitling, we can
adjust the times using the [aeneas forced
-alignment tool](https://www.readbeyond.it/aeneas/
-and `subed-align`).
+alignment tool](https://www.readbeyond.it/aeneas/)
+and `subed-align`.
## Splitting and merging subtitles
diff --git a/donors.md b/donors.md
index a8921a7b..ae69169d 100644
--- a/donors.md
+++ b/donors.md
@@ -16,12 +16,12 @@ order, and those who chose not to are instead listed as 'Anonymous'.
## 2024
-- Jeremy Roe
+- Anonymous (4)
## 2023
-- Anonymous (4)
-- Jan Prunk
+- Anonymous (5)
+- Jonathan Mitchell
- Scott Randby
diff --git a/ideas.md b/ideas.md
index 13b73ea4..c93e72eb 100644
--- a/ideas.md
+++ b/ideas.md
@@ -1,5 +1,5 @@
[[!meta title="Ideas"]]
-[[!meta copyright="Copyright &copy; 2020, 2021, 2022 Amin Bandali; 2023 Sacha Chua"]]
+[[!meta copyright="Copyright &copy; 2020-2022 Amin Bandali; 2023-2025 Sacha Chua"]]
This is a place to collect ideas for talks and other sessions for
EmacsConf. :-)
@@ -23,6 +23,7 @@ EmacsConf. :-)
You can also check out past EmacsConf programs to see what kinds of things people have shared before:
+- [[2024|/2024/talks]]
- [[2023|/2023/talks]]
- [[2022|/2022/talks]]
- [[2021|/2021/schedule]]
diff --git a/index.md b/index.md
index 3fe25495..d801d793 100644
--- a/index.md
+++ b/index.md
@@ -7,11 +7,12 @@ Emacs Lisp.</p>
## Current Conferences
-**[[EmacsConf 2024|2024]]** - Dec 7-8 (Sat-Sun)
+**[[EmacsConf 2025|2025]]** - Dec 6-7 (Sat-Sun)
## Past Conferences
-- **[[EmacsConf 2023|2023]]**
+- [[EmacsConf 2024|2024]]
+- [[EmacsConf 2023|2023]]
- [[EmacsConf 2022|2022]]
- [[EmacsConf 2021|2021]]
- [[EmacsConf 2020|2020]]
@@ -19,6 +20,8 @@ Emacs Lisp.</p>
- [[EmacsConf 2015|2015]]
- [[EmacsConf 2013|2013]]
+You can also browse [media.emacsconf.org](https://media.emacsconf.org/) or [eu.media.emacsconf.org](https://eu.media.emacsconf.org/) for videos and other talk-related materials.
+
## Updates
[[!inline pages="(blog/* and !*/Discussion) or 2023/report" limit="10" rootpage="blog" archive="yes"]]
diff --git a/local.css b/local.css
index 1240fe8f..a446c28f 100644
--- a/local.css
+++ b/local.css
@@ -132,3 +132,15 @@ svg a.highlight rect { stroke-width: 3px }
a.highlight { background-color: yellow }
.transcript-heading { font-weight: bold }
+
+.transcript .sticky-video { display: none }
+@media only screen and (min-width: 64.063em) {
+ .transcript .sticky-video {
+ position: sticky;
+ top: 0;
+ display: block;
+ margin-left: calc(-47vw + 30rem);
+ width: calc(45vw - 30rem);
+ float: left;
+ }
+}
diff --git a/mpv.md b/mpv.md
index 04921f21..eb3f14bd 100644
--- a/mpv.md
+++ b/mpv.md
@@ -41,7 +41,7 @@ sub-ass-force-style=Kerning=yes
sub-ass-line-spacing=0
```
-When we broadcast videos for EmacsConf 2022, we place them on the top
+When we broadcast videos for EmacsConf 2025, we place them on the top
right so that there's room underneath to display a conference logo and
a talk URL, and we align the text left so that it doesn't feel like
it's shifting around a lot. If you want to do the same, here's the
@@ -58,7 +58,7 @@ sub-margin-x=110
sub-margin-y=60
sub-align-x=left
# Style
-sub-font="{{ emacsconf_font }}"
+sub-font="Sans Serif"
sub-color="1/0.82/0"
sub-blur=0.2
sub-scale=0.9
@@ -69,7 +69,14 @@ sub-shadow-color=0/1
sub-shadow-offset=1.2
sub-ass-force-style=Kerning=yes
sub-ass-line-spacing=0
-osc=no
+osd-level=3
+osd-bar-align-x=1
+osd-bar-align-y=1
+osd-bar-h=0.1
+osd-bar-w=0.1
+osd-align-x=right
+osd-align-y=bottom
+osd-scale=0.3
```
If you would like to specify the font to use, you can include a line like:
diff --git a/organizers-notebook.md b/organizers-notebook.md
index ef153a5f..3cdcda26 100644
--- a/organizers-notebook.md
+++ b/organizers-notebook.md
@@ -20,43 +20,56 @@ This document is the general organizers' notebook that can be used as a starting
- [Create the public organizers&rsquo; notebook in the wiki](#starting-up-the-conference-planning-process-create-the-public-organizers-notebook-in-the-wiki)
- [Phases and lessons learned](#phases-and-lessons-learned)
- [Draft CFP](#phases-and-lessons-learned-draft-cfp)
- - [Announce](#org897f0c8)
- - [Process proposals](#orgd12f3b1)
- - [Accept proposals](#orgcbfca65)
+ - [Announce](#phases-and-lessons-learned-announce)
+ - [Process proposals](#phases-and-lessons-learned-process-proposals)
+ - [Accept proposals](#phases-and-lessons-learned-accept-proposals):email:
- [Draft schedule](#draft-schedule)
- - [Set up backstage and upload](#orgdbb77f2)
- - [Post the schedule](#org9456d25)
- - [Process uploaded files](#org75e87bb)
- - [Generate assets](#org125bd75)
- - [Prepare the infrastructure](#org9759aa9)
- - [Getting ready for captions](#org9f978d1)
+ - [Set up backstage and upload](#phases-and-lessons-learned-set-up-backstage-and-upload)
+ - [Post the schedule](#phases-and-lessons-learned-post-the-schedule)
+ - [Process uploaded files](#phases-and-lessons-learned-process-uploaded-files)
+ - [Generate assets](#phases-and-lessons-learned-generate-assets)
+ - [Record pronunciations](#phases-and-lessons-learned-record-pronunciations)
+ - [Prepare the infrastructure](#phases-and-lessons-learned-prepare-the-infrastructure)
+ - [Getting ready for captions](#phases-and-lessons-learned-getting-ready-for-captions)
- [Getting ready for the conference](#pre-conf)
- [During the conference](#conf)
-- [General infrastructure](#org85c6f49)
+ - [After the conference](#phases-and-lessons-learned-after-the-conference)
+- [Ideas for improvement](#ideas)
+- [General infrastructure](#general-infrastructure)
+ - [Linode instance sizes](#general-infrastructure-linode-instance-sizes)
+ - [File uploads](#upload)
+ - [Media processing](#general-infrastructure-media-processing)
+ - [Wiki](#org7f83d48)
- [Icecast](#icecast)
- [Watching pages](#watch)
- [VNC](#vnc)
- [Streaming with OBS](#obs)
- - [Shell scripts](#orgab7108a)
+ - [Mumble](#org09cd092)
+ - [Shell scripts](#general-infrastructure-shell-scripts)
- [Backstage](#backstage)
- - [IRC web client](#org5545d42)
- - [Etherpad](#orgd7fd9ee)
+ - [Thelounge IRC web client](#general-infrastructure-irc-web-client)
+ - [Etherpad](#general-infrastructure-etherpad)
- [Publishing media to the server and to the wiki](#media)
- - [Automated IRC announcements](#org75cad9b)
+ - [Automated publishing to the media server](#orgc40bf50)
+ - [Automated IRC announcements](#general-infrastructure-automated-irc-announcements)
- [BigBlueButton](#bbb)
- - [Manual IRC announcements](#org5a3d818)
- - [Low-res stream](#orge08d62d)
- - [Upload talks to YouTube](#org7f2e95e)
- - [Restream to YouTube](#org0cc19c3)
+ - [Manual IRC announcements](#general-infrastructure-manual-irc-announcements)
+ - [Check test crontab](#orgc7d6d2a)
+ - [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)
- [Other process notes](#other)
- [Adding another user to BBB](#bbb-user)
- - [When a talk is added after the schedule has already been drafted](#org4efd774)
- - [When a talk is cancelled](#cancel-talk)
+ - [Schedule changes](#org5f8f6b0)
- [When a talk Q&A changes method](#change-talk-qa)
- - [When a system is down](#org17cc58c)
- - [When we need to bring on a last-minute volunteer](#org4636e4e)
- - [Checking people in](#org811d67a)
- - [Ansible](#org5d78595)
+ - [To play the other stream](#other-process-notes-to-play-the-other-stream)
+ - [When a system is down](#other-process-notes-when-a-system-is-down)
+ - [When we need to bring on a last-minute volunteer](#other-process-notes-when-we-need-to-bring-on-a-last-minute-volunteer)
+ - [Checking people in](#other-process-notes-checking-people-in)
+ - [Ansible](#other-process-notes-ansible)
<a id="starting-up-the-conference-planning-process"></a>
@@ -74,24 +87,25 @@ This repository will store submissions, contact information, etc.
1. Create the repository on `front0`. Ex:
+ export YEAR=2025
sudo su - git
cd repositories
- mkdir emacsconf-2024-private.git
- cd emacsconf-2024-private.git
+ mkdir emacsconf-$YEAR-private.git
+ cd emacsconf-$YEAR-private.git
git init --bare
-2. Edit `gitolite-admin/config/gitolite-conf`. Add lines for the group and the repo. Commit and push. Ex:
+2. In the `gitolite-admin` repo, edit `conf/gitolite-conf`. Add lines for the group and the repo. Commit and push. Ex:
@emacsconf-2024-org = bandali sachac ...
repo emacsconf-2024-private
- RW+ = @admins @emacsconf-2024-org orga
-3. Clone the private repository into the appropriate location. `git clone git@git.emacsconf.org:emacsconf-2024-private private`
+ RW+ = @admins @emacsconf-2024-org orga
+3. Clone the private repository into the appropriate location. `git clone git@git.emacsconf.org:emacsconf-2025-private private`
<a id="starting-up-the-conference-planning-process-create-the-public-organizers-notebook-in-the-wiki"></a>
## Create the public organizers&rsquo; notebook in the wiki
-Ex: 2024/organizers-notebook/index.org
+Ex: <../2024/organizers-notebook/index.md>
<a id="phases-and-lessons-learned"></a>
@@ -105,14 +119,67 @@ Ex: 2024/organizers-notebook/index.org
Create linked pages
-- [ ] year index
-- [ ] volunteer page
-- [ ] submit page
+- [ ] year index: ex: <../2024.md>
+- [ ] volunteer page: ex: <../volunteer.md>
+- [ ] submit page: ex: <../2024/submit.md>
### How to mark pages as drafts
-Put inside double square brackets: `!template id=pagedraft`
+Have a Markdown export block with the following contents. Replace { and } with [ and ].
+
+\#+begin\_export md
+{{!template id=pagedraft}}
+\#+end\_export md
+
+
+### Wiki template for year index
+
+Replace { and } with [ and ].
+
+ {{!meta copyright="Copyright &copy; 2021-2022 Amin Bandali; 2023-2025 Sacha Chua"}}
+
+ <p class="center">EmacsConf 2025 | Online Conference<br />
+ <b>December 6 and 7, 2024 (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 2025, and we would
+ love to have *your* help to make EmacsConf 2025 amazing, much like the
+ previous EmacsConfs. See our {{**Call for Participation**|cfp}}, get
+ involved, and help spread the word!
+
+ We are holding EmacsConf 2025 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}, or by visiting
+ {chat.emacsconf.org}{chat} in your web browser.
+
+ {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
### Previous years
@@ -120,6 +187,21 @@ Put inside double square brackets: `!template id=pagedraft`
[2023](file:///home/sacha/proj/emacsconf/wiki/2023/cfp.md)
+### Update dates
+
+<file:///home/sacha/proj/emacsconf/lisp/emacsconf.el>
+<file:///home/sacha/proj/emacsconf/lisp/emacsconf-erc.el>
+
+
+### Update the IRC topic
+
+ (erc-cmd-OPALL)
+ (erc-cmd-CONFTOPIC (emacsconf-replace-plist-in-string
+ `(:year ,emacsconf-year :cfp-deadline ,emacsconf-cfp-deadline)
+ "Getting ready for EmacsConf ${year}! Call for proposals: https://emacsconf.org/${year}/cfp by ${cfp-deadline}, volunteer: https://emacsconf.org/volunteer/"))
+ (erc-cmd-DEOPALL)
+
+
### Lessons learned
- Maybe incentivize proper timezone specification by saying we can translate times to their local time?
@@ -157,7 +239,7 @@ Put inside double square brackets: `!template id=pagedraft`
- Put the speaker introduction right after the talk description for easier web page copying.
-<a id="org897f0c8"></a>
+<a id="phases-and-lessons-learned-announce"></a>
## Announce
@@ -165,7 +247,25 @@ Put inside double square brackets: `!template id=pagedraft`
- Submit to <https://foss.events/>
-<a id="orgd12f3b1"></a>
+### Promote the conference
+
+Submit to <https://foss.events/>
+
+Maybe it would be good to get in touch with podcasts like
+
+- [System Crafters](https://systemcrafters.net/)
+- [This Week in Linux](https://www.youtube.com/playlist?list=PLbFVcOQ-YH_LRP687N0YeN78YZmBp5wqF)
+- [Linux Unplugged](https://linuxunplugged.com/)
+- [Ask Noah](http://asknoahshow.com/)
+- [Linux After Dark](https://linuxafterdark.net/)
+- [Lispy Gopher Show](https://anonradio.net/)
+
+etc to give a heads up on EmacsConf before it
+happens and also mention to them when videos are
+available to spark more interest.
+
+
+<a id="phases-and-lessons-learned-process-proposals"></a>
## Process proposals
@@ -194,9 +294,9 @@ When proposals come in:
PUBLIC\_EMAIL
-<a id="orgcbfca65"></a>
+<a id="phases-and-lessons-learned-accept-proposals"></a>
-## Accept proposals
+## Accept proposals :email:
Setup:
@@ -210,6 +310,18 @@ For each talk:
4. Use `emacsconf-publish-info-pages` and `emacsconf-publish-schedule` as needed.
5. Send acceptance e-mail with `emacsconf-mail-accept-talk`
+After the CFP ends:
+
+1. Change the yyyy.md page to remove the CFP and submit links.
+2. Update the yyyy/sidebar.md page to remove the CFP and submit links.
+3. Update the yyyy/talks.md page to remove the CFP.
+4. Change the IRC channel topics.
+ 1. `/opall`,
+ 2. ex: `/conftopic Getting ready for EmacsConf 2025! Volunteer: https://emacsconf.org/volunteer`
+ 3. `/deopall`
+
+[Example git commit](https://git.emacsconf.org/emacsconf-wiki/commit/?id=9b2c5a6f86d9e4c3faf4c7f028eabb758583fa97)
+
<a id="draft-schedule"></a>
@@ -227,7 +339,15 @@ For each talk:
- Add missing items to plan
-<a id="orgdbb77f2"></a>
+### TODO Send draft schedule to speakers :email:
+
+1. Evaluate the draft schedule we want to use.
+2. `emacsconf-schedule-update-from-info`
+3. `C-u M-x emacsconf-mail-template-to-all-groups RET emacsconf-mail-draft-schedule RET`
+4. If that looks good, `M-x emacsconf-mail-template-to-all-groups`. You can use `M-x emacsconf-mail-merge-send-all` to send all the drafts, or send them one by one.
+
+
+<a id="phases-and-lessons-learned-set-up-backstage-and-upload"></a>
## Set up backstage and upload
@@ -238,7 +358,10 @@ Lessons learned:
- Next year, let&rsquo;s get upload.emacsconf.org in place as the domain name so that people don&rsquo;t try to FTP files to it.
-<a id="org9456d25"></a>
+### DONE Send backstage and upload instructions :email:
+
+
+<a id="phases-and-lessons-learned-post-the-schedule"></a>
## Post the schedule
@@ -249,7 +372,7 @@ Lessons learned:
- Update talks.md to refer to watch.md as well
-<a id="org75e87bb"></a>
+<a id="phases-and-lessons-learned-process-uploaded-files"></a>
## Process uploaded files
@@ -264,6 +387,7 @@ Process:
1. Review uploaded files with <elisp:emacsconf-upload-dired>
2. Open the JSON for the file you want to process and use <elisp:emacsconf-upload-copy-from-json> .
If more than one file uses the same extension, provide a suffix to disambiguate them.
+ If emacsconf-upload-copy-from-json might take a long time, you can also scp the file to your local
3. On res:
1. Create a directory ~/current/files/$slug.
2. Copy the uploaded file from ~/cache as `$video_slug--original.$extension`, or use `rename-original.sh $slug $file`.
@@ -274,9 +398,9 @@ Process:
3. <elisp:emacsconf-publish-backstage-index>
-<a id="org125bd75"></a>
+<a id="phases-and-lessons-learned-generate-assets"></a>
-## Generate assets
+## TODO Generate assets
### In-between pages
@@ -292,7 +416,32 @@ Process:
- Splice together into a file that will be processed with subed-record-compile-video.
-<a id="org9759aa9"></a>
+### TODO Test videos
+
+<elisp:emacsconf-stream-generate-test-videos>
+
+
+<a id="phases-and-lessons-learned-record-pronunciations"></a>
+
+## Record pronunciations
+
+
+### DONE Record pronunciations
+
+1. mkdir -p ~/proj/emacsconf/2025/assets/intros ~/proj/emacsconf/2025/assets/in-between
+2. cp ~/proj/emacsconf/2024/assets/in-between/template.svg ~/proj/emacsconf/2025/assets/in-between/template.svg
+3. <elisp:emacsconf-stream-generate-in-between-pages>
+4. Create ~/proj/emacsconf/2025/assets/intros/intro.vtt
+5. <elisp:emacsconf-subed-intro-subtitles>
+6. Record the audio, possibly with subed-record, left, and right.
+7. Split the lines for nicer subtitles.
+8. Use <elisp:subed-record-compile>
+
+
+### DONE E-mail speakers asking them to confirm the pronunciations
+
+
+<a id="phases-and-lessons-learned-prepare-the-infrastructure"></a>
## Prepare the infrastructure
@@ -314,7 +463,7 @@ Checklist:
- [ ] Icecast
-<a id="org9f978d1"></a>
+<a id="phases-and-lessons-learned-getting-ready-for-captions"></a>
## Getting ready for captions
@@ -332,17 +481,78 @@ Onboarding:
<elisp:emacsconf-pad-prepopulate-shift-hyperlists>
-### TODO Send check-in details, schedule update, etc.
+### DONE Check in with speakers for cancellations, adjustments
+
+emacsconf-mail-intro-to-all
-### Two days before the conference
+### TODO Record opening remarks
-Go through the :tminustwo: tags.
+
+### TODO Send check-in details, schedule update, etc. :email:
### One day before the conference
-Go through the :tminusone: tags.
+- [X] Set `emacsconf-publishing-phase` to `conference`.
+- [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] 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] Start the VNC servers.
+
+ #!/bin/bash
+ # SSH to both
+ cd ~/proj/emacsconf/emacsconf-ansible
+
+ # Gen
+ export TRACK=gen; TRACK_PORT=5905; export SSH_PORT=46668
+ ssh emacsconf-$TRACK@res.emacsconf.org -p $SSH_PORT /home/emacsconf-$TRACK/bin/track-vnc
+ sleep 5
+ ssh emacsconf-$TRACK@res.emacsconf.org -N -L $TRACK_PORT:127.0.0.1:$TRACK_PORT -p $SSH_PORT &
+ xvncviewer 127.0.0.1:$TRACK_PORT -shared -geometry 1280x720 -passwd vnc-passwd-$TRACK &
+
+ # Dev
+ export TRACK=dev; export TRACK_PORT=5906; export SSH_PORT=46668
+ ssh emacsconf-$TRACK@res.emacsconf.org -p $SSH_PORT /home/emacsconf-$TRACK/bin/track-vnc
+ sleep 5
+ ssh emacsconf-$TRACK@res.emacsconf.org -N -L $TRACK_PORT:127.0.0.1:$TRACK_PORT -p $SSH_PORT &
+ xvncviewer 127.0.0.1:$TRACK_PORT -shared -geometry 1280x720 -passwd vnc-passwd-$TRACK &
+- [X] Confirm that we can use &ldquo;Start Recording&rdquo; to stream to gen.
+ - [X] play-with-intro sat-open
+ - [X] <https://live.emacsconf.org/2025/watch/gen/>
+ - [X] mpv <https://live0.emacsconf.org/gen.webm>
+ - [X] play-with-intro sun-open (to check the overlays)
+ - [X] <https://live.emacsconf.org/2025/watch/gen-480p/>
+ - [X] mpv <https://live0.emacsconf.org/gen-480p.webm>
+- [X] Confirm that we can stream to dev.
+ - [X] play-with-intro sat-open
+ - [X] <https://live.emacsconf.org/2025/watch/dev/>
+ - [X] mpv <https://live0.emacsconf.org/dev.webm>
+ - [X] play-with-intro sun-open (to check the overlays)
+ - [X] <https://live.emacsconf.org/2025/watch/dev-480p/>
+ - [X] mpv <https://live0.emacsconf.org/dev-480p.webm>
+- [X] Confirm that I can restream to YouTube.
+ - Settings - Stream, paste in the RTMP key for the relevant event, then Start Streaming.
+ - [X] gen
+ - [X] dev
+- [X] Confirm that I can restream to Toobnix
+ - [X] live0: restream-gen-toobnix
+ - [X] live0: restream-dev-toobnix
+- [X] Check automated announcements and publishing
+ - [X] orga@res: talk sat-open TO\_STREAM
+ - [X] <https://emacsconf.org/2025/talks/sat-open/> doesn&rsquo;t have video
+ - [X] <https://media.emacsconf.org/2025> doesn&rsquo;t have it
+ - orga@res: talk sat-open PLAYING
+ - [X] <https://emacsconf.org/2025/talks/sat-open/> has video and transcript
+ - [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)
<a id="conf"></a>
@@ -352,22 +562,347 @@ Go through the :tminusone: tags.
<elisp:emacsconf-pad-open-shift-hyperlist>
-<a id="org85c6f49"></a>
+<a id="phases-and-lessons-learned-after-the-conference"></a>
+
+## After the conference
+
+
+### Capture stats
+
+2024 stats
+
+Saturday:
+gen: 177 peak + 14 peak lowres
+dev: 226 peak + 79 peak lowres
+
+Sunday:
+gen: 89 peak + 10 peak lowres
+
+<http://live0.emacsconf.org/admin/stats> (username: admin, password is in prod-vars.yml)
+
+meet peak 409% CPU (100% is 1 CPU), average 69.4%
+front peak 70.66% CPU (100% is 1 CPU)
+live peak 552% CPU (100% is 1 CPU) average 144%
+res peak 81.54% total CPU (each OBS ~250%), mem 7GB used
+
+so far we have used 1.2TB of transfer this month
+
+
+### Back up the data
+
+
+#### Icecast
+
+rsync -avze ssh live:&rsquo;/data/emacsconf-2024-\*&rsquo; media:~/2024
+
+rsync -avze ssh live:&rsquo;/data/emacsconf-2024-\*&rsquo; .
+
+
+#### BigBlueButton
+
+rsync -avze ssh root@bbb:/var/bigbluebutton/ bigbluebutton/
+
+ssh root@66.175.208.243 &rsquo;dd if=/dev/sda bs=5M &rsquo; | dd of=bbb-img-2024-12-08.img status=progress
+
+The img can be loaded with
+sudo losetup &ndash;find &ndash;show bbb-img-2024-12-08.img
+sudo mount /dev/loop10 test
+cd test
+
+
+##### Reviewing all the Q&A durations and chat messages
+
+ (let ((default-directory "/home/sacha/proj/emacsconf/2024/backups/bigbluebutton/published/video"))
+ (mapconcat
+ (lambda (dir)
+ (let ((chat (xml-parse-file
+ (expand-file-name "video.xml" dir)))
+ (metadata (xml-parse-file
+ (expand-file-name "metadata.xml" dir))))
+ (concat
+ "- "
+ (dom-text (car (dom-by-tag metadata 'meetingName))) " ("
+ (format-seconds "%.2h:%z%.2m:%.2s"
+ (/ (string-to-number (dom-text (dom-by-tag metadata 'duration)))
+ 1000))
+ ")"
+ "\n"
+ (if (dom-by-tag chat 'chattimeline)
+ (mapconcat (lambda (node)
+ (concat " - " (dom-attr node 'name) ": "
+ (dom-attr node 'message) "\n"))
+ (dom-by-tag chat 'chattimeline)
+ "")
+ "")
+ "")
+ )
+ )
+ (directory-files "." nil "-"))
+ )
+
+- Copy IRC logs to cache and therefore to backstage: (ex: 2024-12-07-emacsconf-gen.txt)
+
+
+### Combine the IRC logs and the pads, and add them to the wiki
+
+(did we e-mail the speakers before or after?)
+
+
+### Process the Q&A recordings and live presentations
+
+- Save answers videos as &ndash;answers.webm.
+- From the pad file: emacsconf-extract-copy-pad-to-wiki
+- update cache
+- Set `QA_PUBLIC` property to t as each Q&A gets processed.
+- change status to `TO_INDEX_QA`
+- emacsconf-publish-media-files-on-change
+- emacsconf-publish-info-pages-for-talk
+
+Indexing
+
+- emacsconf-extract-insert-note-with-question-heading
+- emacsconf-subed-make-chapter-file-based-on-comments
+- change status to `TO_CAPTION_QA`
+
+Also copy the YouTube comments and IRC comments
+emacsconf-extract-irc-anonymize-log
+
+
+### Send thank-you emails to the speakers :email:
+
+
+### Notify emacs-discuss that the Q&A is up
+
+<https://lists.gnu.org/archive/html/emacsconf-discuss/2024-12/msg00000.html>
+
+ Hello, everyone!
+
+ https://emacsconf.org/2024/talks and https://media.emacsconf.org/2024
+ should have the talks and Q&A sessions now, hooray, including chapter
+ indices for the Q&A. I've also copied over notes from Etherpad and IRC
+ on the talk pages, and I've e-mailed them to the speakers so they can
+ update the wiki directly or send in additional answers.
+
+ BigBlueButton audio mixing is kinda iffy, so I'm holding off on
+ uploading the Q&A videos (and the live talk for secrets) to
+ YouTube/Toobnix until Leo and other volunteers have a listen to see
+ whether the audio needs to be tweaked, and maybe even to do some kind of
+ normalization. Unfortunately, recordings with separate audio tracks per
+ participant aren't available--it would be cool to figure that out next
+ year--so some talks might need some manual processing. (Please feel free
+ to volunteer if that's up your alley!) In the meantime, you can check
+ out the Q&A videos from the talk pages on the wiki. Please let us know
+ if there's anything that needs tweaking.
+
+ Enjoy!
+
+ Sacha
+
+
+### Write a report
+
+Sample: <https://emacsconf.org/2023/report/>
+
+
+### Send thank-you emails to the volunteers :email:
+
+emacsconf-mail-template-ask-volunteer-for-mailing-address
+
+
+### Process the lessons learned
+
+
+<a id="ideas"></a>
+
+# Ideas for improvement
+
+How can we make EmacsConf better for participants? Speakers? Volunteers? People who come across the videos afterwards?
+
+- Emacs:
+ - view Etherpad (read-only): might be able to query something like <https://pad.emacsconf.org/2024/export/html> or <https://pad.emacsconf.org/2024/export/txt>
+ - view upcoming talks, countdown?
+ - resources, past talks
+ - ??: Collaborative real-time editing? Not sure crdt.el or collab-mode can scale up as far as we like; how would we test this?
+- HTML/CSS/JS:
+ - general design improvements?
+ - [This is what the talks page looks like when there&rsquo;s no schedule yet](https://web.archive.org/web/20240806134541/https://emacsconf.org/2024/talks/)
+ - [This is what the schedule page looks like before the conference](https://web.archive.org/web/20241108132608/https://emacsconf.org/2024/talks/)
+ - [This is what a talk page looks like before the conference](https://web.archive.org/web/20241208042046/https://emacsconf.org/2024/talks/literate/)
+ - [This is the watch page for the general track](https://web.archive.org/web/20241208034535/https://emacsconf.org/2024/watch/gen/)
+ - [This is the same talk page after the conference, with the videos, notes, and captions](https://web.archive.org/web/20241212145433/https://emacsconf.org/2024/talks/literate)
+ - [This is what the talks page looks like after the conference](https://emacsconf.org/2024/talks/) - list of resources
+ - timezone translations in the schedule SVG, on the schedule page, etc.
+ - countdown on talk pages?
+ - prettier viewers for videos, captions
+ - make it easier to see the talk/pad/IRC at the same time?
+ - easy timestamp jumping
+- Volunteers:
+ - better documentation
+ - share to OBS from local? Maybe vdo.ninja?
+ - how do we manage the fallback/switchover in case we need to go back to shared VNC?
+ - meeting layout?
+ - countdown to switch over to the next talk, or easier manual control; web or command-line interface to control it?
+ - make it easier for people to join as hosts or check-in volunteers?
+ - improve backstage experience?
+ - automate or cross-train more people in what Sacha does (coordination, infrastructure) to reduce bus factor and increase awesomeness
+- Processing:
+ - audio normalization: better workflow, more people helping
+ - noise removal (many speakers don&rsquo;t have external mics)
+ - Makefile improvements
+ - captioning:
+ - simplify common edits
+ - reflowing? check out [sub-seg](https://gitlab.com/jun8git/sub-seg)?
+ - handle last-minute uploads
+ - validation: make sure audio, video, and caption times agree
+- Infrastructure:
+ - document media processing pipeline
+ - make media processing pipeline more hands-off; ideally, just copy the video to the directory and that kicks off everything including eventually republishing the backstage index
+ - add read-only non-JS links to pads; make the pads viewable through the web instead of being downloaded (&hellip;/export/html)
+ - upgrade to latest versions
+ - front0 and live0: currently Debian 10.13
+ - <span class="timestamp-wrapper"><time class="timestamp" datetime="2025-09-21">[2025-09-21 Sun]</time></span> bandali will look into upgrades, cleaning up
+ - <span class="timestamp-wrapper"><time class="timestamp" datetime="2025-09-19">[2025-09-19 Fri]</time></span> sachac: e-mailed bandali to ask if I can do the upgrades or if he wants to
+ - ffmpeg 6.0.1, latest is 8
+ - 7 has demuxing, decoding, filtering, encoding, and muxing in the ffmpeg CLI now all run in parallel
+ - OBS on res? Currently 29.1.2
+ - probably no must-haves up to version 32, okay to stay with current version
+ - Do we want to go back to having hosts stream from their local computers?
+ - local: better performance
+ - via VNC:
+ - easier to switch in a different host or manage multiple streams
+ - easier to move files around
+ - consistent setup for profiles, overlays
+ - DONE Etherpad (upgrade 1.9.7 to 2.5.0)
+ - DONE BigBlueButton (deployed 3.0.12, which is the latest as of 2025-08-02)
+ - Consider 3.1 beta? new interface, probably new bugs; see if it&rsquo;s worth it?
+ - DONE Icecast (deployed 2.4.4-1) - decided to stick with current version
+ - <span class="timestamp-wrapper"><time class="timestamp" datetime="2025-09-21">[2025-09-21 Sun]</time></span> Decision: stick with Icecast
+ - Leaning towards sticking with [Icecast](https://icecast.org/)
+ - 2.5.0-rc1? health reporting, bugfixes; probably not essential
+ - [Ant Media Server](https://antmedia.io/) community edition, to enable adaptive bitrate streaming, lower latency, and HLS for wider support?
+ - [Owncast](https://owncast.online/)? Automatic downscaling, Fediverse support; might need two instances to support two tracks
+ - [SRS](https://github.com/ossrs/srs)? record, replay? more of a building block?
+ - Nginx RTMP? More of a building block
+ - customize BigBlueButton welcome, slides, title, branding
+ - change the default presentation (maybe someone can make a PDF?) <https://docs.bigbluebutton.org/administration/customize/#change-the-default-presentation>
+ - modify the default landing page <https://docs.bigbluebutton.org/administration/customize/#modify-the-default-landing-page>
+ - change the default welcome messages <https://docs.bigbluebutton.org/administration/customize/#change-the-default-welcome-message>
+ - change the favicon <https://docs.bigbluebutton.org/administration/customize/#change-favicon>
+ - change the default logo <https://docs.bigbluebutton.org/administration/customize/#changing-the-default-logo>
+ - check out BigBlueButton live captions?
+ - figure out if we can connect to or reuse the etherpad in BigBlueButton?
+ - figure out how to record separate audio streams in BigBlueButton because the audio mixing is sometimes terrible (some people&rsquo;s audio streams end up much louder than others). Related: <https://github.com/bigbluebutton/bigbluebutton/issues/12302> , but not sure how to actually do it&hellip;
+ - replicate BBB setup in a virtual machine so that it&rsquo;s easy to re-deploy
+ - replicate streaming setup (OBS+VNC) in a virtual machine so that it&rsquo;s easy to re-deploy
+ - replicate video processing workflow on my computer and/or a virtual machine
+- Other:
+ - panel? some thoughts: <https://pad.emacsconf.org/emacsconf-panel>
+ - unconference?
+
+
+<a id="general-infrastructure"></a>
# General infrastructure
+<a id="general-infrastructure-linode-instance-sizes"></a>
+
+## Linode instance sizes
+
+
+### Production
+
+- front0 shared Linode 32GB
+- live0 shared Linode 64GB
+- meet Dedicated CPU 16GB
+
+
+### Dormant
+
+Resize disk to 25GB, copying large files to media if needed
+
+- nanode front0
+- nanode live0
+- delete meet after downloading all the recordings, or resize down to nanode
+
+
+<a id="upload"></a>
+
+## File uploads
+
+[psi-4ward/psitransfer: Simple open source self-hosted file sharing solution](https://github.com/psi-4ward/psitransfer)
+
+Before the conference:
+
+1. Set `upload_enabled` to `true` in `prod-vars.yml` and run `ansible-playbook -i inventory.yml prod-playbook.yml --tags upload`.
+2. Confirm that <https://upload.emacsconf.org> has the upload interface and works with the password. If it&rsquo;s not up yet, use `sudo service upload start`.
+3. Use `emacsconf-mail-template-to-all-groups` and `emacsconf-mail-upload-and-backstage-info` to e-mail the upload information to all speakers.
+
+After the conference:
+
+1. Set `upload_enabled` to `false` in `prod-vars.yml` and run `ansible-playbook -i inventory.yml prod-playbook.yml --tags upload`.
+2. Confirm that <https://upload.emacsconf.org> shows the in-between page.
+
+
+<a id="general-infrastructure-media-processing"></a>
+
+## Media processing
+
+1. Make sure `group_vars/all.yml` has the correct setting for `emacsconf_year`.
+2. `ansible-playbook -i inventory.yml prod-playbook.yml --tags prerec`
+3. Set up the `update-cache` script.
+
+ #!/bin/bash
+ # export CONF_PUBLIC=1
+ rsync -avu ~/proj/emacsconf/2025/assets/intros/*--intro.* ~/proj/emacsconf/2025/cache/
+ rsync -avzue ssh --exclude ffmpeg2pass* --exclude .lock-\* --exclude 'partial--*' res:~/cache/ ~/proj/emacsconf/2025/cache/ --exclude .git
+ chmod ugo+r . -R
+ rsync -avzue ssh --exclude ffmpeg2pass* --exclude 'partial--*' ~/proj/emacsconf/2025/cache/ res:~/cache/ $* --exclude .git
+ rsync -avzue ssh --exclude ffmpeg2pass* --exclude 'partial--*' ~/proj/emacsconf/2025/cache/ orga@media:/var/www/media.emacsconf.org/2025/backstage/ $* --exclude .git
+ ssh orga@media "cd ~/backstage; chmod ugo+r -- *"
+ if [ ! -z "$CONF_PUBLIC" ]; then
+ echo "Updating public media"
+ rsync -avzue ssh --exclude \*--original\* --exclude ffmpeg2pass* --exclude \*--reencoded\* ~/proj/emacsconf/2025/cache/ orga@media:/var/www/media.emacsconf.org/2025/ 3--exclude .git
+ fi
+ rsync -avzue ssh ~/proj/emacsconf/2025/assets/ res:~/current/assets/
+
+When a talk comes in:
+
+1. Update the talk status to `PROCESSING`. Re-evaluate the schedule draft.
+2. Set the file prefix with `emacsconf-set-file-prefix-if-needed` or use `emacsconf-set-file-prefixes`.
+3. Download the talk&rsquo;s files to your local cache (as specified by `emacsconf-cache-dir`).
+4. Rename the files with `emacsconf-rename-files`.
+5. Use `../update-cache` to update res and backstage.
+6. SSH to res. Go to the `~/cache` directory.
+ 1. Start or reuse a `screen` session.
+ 2. Use `make` to convert the file to WEBM and caption the file.
+7. On your local computer, use `../update-cache` to move files around.
+8. `emacsconf-publish-cache-video-data` to save the file size and length.
+9. `emacsconf-publish-backstage-index`
+
+
+<a id="org7f83d48"></a>
+
+## Wiki
+
+Stylesheet: <file://ssh:front|sudo:ikiwiki@front:/var/www/emacsconf.org/style.css>
+
+See also Ansible notes
+
+
<a id="icecast"></a>
-## Icecast
+## DONE Icecast
-Success: You can use [OBS+VNC to record](#obs-instructions), and the results can be viewed by mpv.
+Success: You can send a stream to Icecast and the results can be viewed by mpv.
- [X] Gen
- [X] Dev
Also, recordings are available in /data.
+See also: [Use OBS+VNC to record](#obs-instructions)
+
New year:
1. Reprovision with
@@ -380,8 +915,8 @@ New year:
3. To test, you can use FFmpeg like this for the gen stream:
ffmpeg -y -f lavfi -i testsrc=size=1280x720:rate=10 -i background-music.opus \
- -c:v libvpx -b:v 500K -crf 25 -b:a 128k \
- -content_type video/webm "icecast://emacsconf:$EMACSCONF_ICECAST_SOURCE_PASSWORD@live0.emacsconf.org:8001/gen.webm"
+ -c:v libvpx -b:v 500K -crf 25 -b:a 128k \
+ -content_type video/webm "icecast://emacsconf:$EMACSCONF_ICECAST_SOURCE_PASSWORD@live0.emacsconf.org:8001/gen.webm"
For dev:
@@ -392,11 +927,18 @@ New year:
and then view it with
mpv https://live0.emacsconf.org/gen.webm
+ mpv https://live0.emacsconf.org/dev.webm
+
+
+### Cooldown
+
+ssh live0.emacsconf.org
+sudo /etc/init.d/emacsconf stop
<a id="watch"></a>
-## Watching pages
+## DONE Watching pages
Success: You can watch at <https://live.emacsconf.org>.
@@ -407,7 +949,7 @@ Success: You can watch at <https://live.emacsconf.org>.
New year:
-1. ansible-playbook -i inventory.yml prod-playbook.yml &#x2013;tags live
+1. `ansible-playbook -i inventory.yml prod-playbook.yml --tags live`
2. Republish with <elisp:emacsconf-publish-watch-pages>.
3. Update front:/var/www/live.emacsconf.org.
@@ -416,7 +958,7 @@ Set up test streams (see ffmpeg instructions from [Icecast](#icecast)) and then:
<a id="vnc"></a>
-## VNC
+## DONE VNC
We use VNC to connect to the X servers on res.emacsconf.org so that we can stream from it.
@@ -425,10 +967,6 @@ Success:
- [X] Confirm that you can connect to emacsconf-gen via VNC
- [X] Confirm that you can connect to emacsconf-dev via VNC
-Setting up
-
-- <elisp:emacsconf-publish-res-index>
-
<a id="vnc-instructions"></a>
@@ -471,21 +1009,29 @@ and then connect with:
xvncviewer 127.0.0.1:$TRACK_PORT -shared -geometry 1280x720 -passwd vnc-passwd-$TRACK &
+### Cooldown
+
+ssh sachac@res
+sudo killall Xtigervnc
+
+
<a id="obs"></a>
-## Streaming with OBS
+## DONE Streaming with OBS
-Success: Confirm that you can stream
+Success: You can use [OBS+VNC to record](#obs-instructions), and the results can be viewed by mpv.
- [X] gen
- [X] dev
New year: reprovision with
- ansible-playbook -i inventory.yml prod-playbook.yml --tags obs
+ ansible-playbook -i inventory.yml prod-playbook.yml --tags obs,stream
so that the year is updated in the shell scripts.
+icecast is on live0.emacsconf.org and can be restarted with `/etc/init.d/emacsconf restart`.
+
<a id="obs-instructions"></a>
@@ -499,24 +1045,34 @@ so that the year is updated in the shell scripts.
mpv https://live0.emacsconf.org/$TRACK.webm &
+so that the year is updated in the configuration.
+
-### Icecast
+<a id="org09cd092"></a>
-Success: You can use [OBS+VNC to record](#obs-instructions), and the results can be viewed by mpv.
+## DONE Mumble
-- [ ] gen
-- [ ] dev
+Success:
-New year: reprovision with
+- [X] You can connect to Mumble on your preferred device(s).
+- [X] You can broadcast to the emacsconf-gen channel.
+- [X] You can broadcast to the emacsconf-dev channel.
- ansible-playbook -i inventory.yml prod-playbook.yml --tags stream
+mumble.emacsconf.org is hosted on front. Start it with:
-so that the year is updated in the configuration.
+ sudo /etc/init.d/mumble-server start
+
+It listens on port 64738
+
+Logs are in `/var/log/mumble-server`.
+
+To add a new account:
-This is on live.emacsconf.org and can be restarted with `/etc/init.d/emacsconf restart`.
+- After they log in, register their user.
+- Right-click on the server name. Edit - Groups. Add them to the org group.
-<a id="orgab7108a"></a>
+<a id="general-infrastructure-shell-scripts"></a>
## Shell scripts
@@ -561,67 +1117,67 @@ Explanation of files:
</colgroup>
<tbody>
<tr>
-<td class="org-left">&#x2013;original.mp4/mov/webm</td>
+<td class="org-left"><code>--original.mp4/mov/webm</code></td>
<td class="org-left">original file as uploaded by the speaker</td>
</tr>
<tr>
-<td class="org-left">&#x2013;silence.mp4/mov/webm</td>
+<td class="org-left"><code>--silence.mp4/mov/webm</code></td>
<td class="org-left">silence sample if uploaded by speaker</td>
</tr>
<tr>
-<td class="org-left">&#x2013;reencoded.webm</td>
+<td class="org-left"><code>--reencoded.webm</code></td>
<td class="org-left">converted to .webm format and compressed</td>
</tr>
<tr>
-<td class="org-left">&#x2013;reencoded.opus</td>
+<td class="org-left"><code>--reencoded.opus</code></td>
<td class="org-left">audio only</td>
</tr>
<tr>
-<td class="org-left">&#x2013;normalized.opus</td>
+<td class="org-left"><code>--normalized.opus</code></td>
<td class="org-left">normalized audio</td>
</tr>
<tr>
-<td class="org-left">&#x2013;reencoded.vtt</td>
+<td class="org-left"><code>--reencoded.vtt</code></td>
<td class="org-left">WhisperX captions, WebVTT format</td>
</tr>
<tr>
-<td class="org-left">&#x2013;reencoded.json</td>
+<td class="org-left"><code>--reencoded.json</code></td>
<td class="org-left">WhisperX word data</td>
</tr>
<tr>
-<td class="org-left">&#x2013;reencoded.srt</td>
+<td class="org-left"><code>--reencoded.srt</code></td>
<td class="org-left">WhisperX captions, SRT format</td>
</tr>
<tr>
-<td class="org-left">&#x2013;reencoded.txt</td>
+<td class="org-left"><code>--reencoded.txt</code></td>
<td class="org-left">WhisperX captions, plain text</td>
</tr>
<tr>
-<td class="org-left">&#x2013;main.vtt</td>
+<td class="org-left"><code>--main.vtt</code></td>
<td class="org-left">edited captions</td>
</tr>
<tr>
-<td class="org-left">&#x2013;main&#x2013;chapters.vtt</td>
+<td class="org-left"><code>--main--chapters.vtt</code></td>
<td class="org-left">chapter markers</td>
</tr>
<tr>
-<td class="org-left">&#x2013;main.txt</td>
+<td class="org-left"><code>--main.txt</code></td>
<td class="org-left">captions as text (optional)</td>
</tr>
<tr>
-<td class="org-left">&#x2013;main.webm</td>
+<td class="org-left"><code>--main.webm</code></td>
<td class="org-left">version for streaming based on the most recent resources</td>
</tr>
</tbody>
@@ -630,29 +1186,34 @@ Explanation of files:
Other files might also have been uploaded by the speaker, such as slides or notes.
-<a id="org5545d42"></a>
+<a id="general-infrastructure-irc-web-client"></a>
-## IRC web client
+## Thelounge IRC web client
Success:
+- [X] When the service is not running, the error page is displayed
- [X] You can join from <https://chat.emacsconf.org>
- [X] You can join from <https://live.emacsconf.org> and the channels end up as the latest ones
+ansible: lounge tag
+
+On front:
+
+- To start: sudo systemctl start thelounge
+- To stop: sudo systemctl stop thelounge
+
+
+### DONE Ask libera.chat to increase IRC limits
+
Remember to schedule a task to ask libera.chat to increase the number of users it will accept from chat.emacsconf.org to avoid connection exhaustion errors.
Message I&rsquo;ve posted to support@libera.chat:
-Thank you for running libera.chat. We&rsquo;re looking forward to using IRC
-(#emacsconf-gen, #emacsconf-dev) for the discussions for the upcoming
-EmacsConf (Dec 7-8, <https://emacsconf.org>). In the past, we&rsquo;ve needed to
-coordinate with Libera staff to increase the number of connections
-allowed from chat.emacsconf.org during conference days in order to avoid
-connection exhaustion errors. Is that something we can plan now or would
-you like me to bring it up a few days before the conference?
+Thank you for running libera.chat. We&rsquo;re looking forward to using IRC (#emacsconf, #emacsconf-gen, #emacsconf-dev, #emacsconf-org) for the discussions for the upcoming EmacsConf (Dec 6-7, <https://emacsconf.org>). In the past, we&rsquo;ve needed to coordinate with Libera staff to increase the number of connections allowed from chat.emacsconf.org during conference days in order to avoid connection exhaustion errors. Is that something we can plan now or would you like me to bring it up a few days before the conference?
-<a id="orgd7fd9ee"></a>
+<a id="general-infrastructure-etherpad"></a>
## Etherpad
@@ -661,6 +1222,17 @@ Success:
- [X] pad.emacsconf.org redirects to this year&rsquo;s entry
- [X] Each talk has its own Etherpad
+Lessons learned:
+
+- After 2024: Added pronouns and pronunciation to the pad template since that&rsquo;s what the hosts will be looking at
+
+The pad is at front0.emacsconf.org
+
+Non-JS way to get plain text or HTML of a pad: ex:
+
+- <https://pad.emacsconf.org/orgmeetup/export/txt>
+- <https://pad.emacsconf.org/orgmeetup/export/html>
+
<a id="media"></a>
@@ -672,14 +1244,13 @@ Start of year:
2. `ansible-playbook -i inventory.yml prod-playbook.yml --tags media`
3. Generate the index with `emacsconf-publish-update-media`
-Confirm by setting a submitted talk to `PLAYING` and testing with
-<elisp:emacsconf-publish-media-files-on-change> . The public media
+Confirm by using `talk sat-open PLAYING` on res. The public media
directory should have the files and the entry should be in the index.
Switching it back to `TO_STREAM` and calling
<elisp:emacsconf-publish-media-files-on-change> should remove it.
-### TODO Switch public media to unprotected root before the conference :tminustwo:
+### DONE Switch public media to unprotected root before the conference :tminustwo:
1. Clear public media directory.
2. Set `media_protect_root` to false in Ansible `group_vars/all.yml`.
@@ -688,14 +1259,31 @@ Switching it back to `TO_STREAM` and calling
You can generate the index with `emacsconf-publish-update-media`.
-<a id="org75cad9b"></a>
+<a id="orgc40bf50"></a>
+
+## Automated publishing to the media server
+
+`ansible-playbook -i inventory.yml prod-playbook.yml --tags publish,edit`
+
+On orga@res, in the screen session with the emacs server, make sure emacsconf-year and emacsconf-cache-dir refer to the current ones.
+
+
+<a id="general-infrastructure-automated-irc-announcements"></a>
-## Automated IRC announcements
+## DONE Automated IRC announcements
Success:
- [ ] When a talk starts playing, it is announced in the relevant channel
+How it works: On res:
+
+/usr/local/bin/handle-session sudos to the orga user and calls the `/usr/local/bin/talk` shell script,
+
+You will need the private repository checked out to `orga/emacsconf-2025-private`, which is set up by the ansible playbook `publish` tag.
+
+This is by `/usr/local/bin/talk` on res, which connects to a running Emacs with emacsclient. Make sure the emacs thing has the right year.
+
<a id="bbb"></a>
@@ -712,7 +1300,38 @@ ssh root@bbb
cd greenlight-v3
docker compose restart
-Does not seem to work in Firefox private browsing; documented at <https://emacsconf.org/2024/watch/>.
+Sizes:
+
+- dormant: 1 GB nanode
+- testing: 4 core 8 GB shared CPU
+- production: 8 core 16 GB dedicated CPU (roughly half CPU load for 107 simultaneous users, 2024)
+ - maybe 8 core 16 GB shared CPU next?
+
+
+<a id="general-infrastructure-bigbluebutton-installing-bigbluebutton"></a>
+
+### Installing BigBlueButton
+
+1. Create the instance.
+ - Linode 4core 8GB shared CPU
+ - Image: Ubuntu 22.04
+2. Update the DNS for bbb.emacsverse.org with its IP address.
+3. Download the BBB installer and make it executable.
+4. ufw allow 16384:32768/udp
+5. Run the BBB installer: `./bbb-install.sh -v jammy-300 -s bbb.emacsverse.org -e emacsconf@sachachua.com -g`
+6. `sudo apt install bbb-playback-video` and then follow the instructions at [Server Customization | BigBlueButton](https://docs.bigbluebutton.org/3.0/administration/customize/#install-additional-recording-processing-formats) .
+ - /usr/local/bigbluebutton/core/scripts/bigbluebutton.yml:
+
+ steps:
+ archive: 'sanity'
+ sanity: 'captions'
+ captions:
+ - 'process:presentation'
+ - 'process:video'
+ 'process:presentation': 'publish:presentation'
+ 'process:video': 'publish:video'
+ - systemctl restart bbb-rap-resque-worker.service
+7. docker exec -it greenlight-v3 bundle exec rake admin:create[&rsquo;name&rsquo;,&rsquo;email&rsquo;,&rsquo;password&rsquo;]
### System audio limitations
@@ -728,16 +1347,111 @@ BBB says sharing system audio works only if you use Chrome on Mac OS X or Micros
Related: <https://github.com/bigbluebutton/bigbluebutton/issues/8632>
-<a id="org5a3d818"></a>
+### DONE Create meeting rooms for each speaker
+
+ docker exec -it greenlight-v3 /bin/bash -c "bundle exec rails console"
+
+ user_id = User.find_by_email("emacsconf@sachachua.com").id
+
+1. <elisp:emacsconf-bbb-create-rooms>
+2. <elisp:emacsconf-bbb-load-rooms>: set the ROOM properties.
+3. <elisp:emacsconf-publish-bbb-static-redirects>
+
+Print out the room IDs with:
+
+ Room.all.each { |x| puts x.friendly_id + " " + x.name }; nil
+
+It&rsquo;s possible to change the friendly\_id and then use `x.save!`.
+
+
+### DONE Set up moderator access codes
+
+- <elisp:emacsconf-bbb-spookfox-set-moderator-codes>
+- <elisp:emacsconf-bbb-spookfox-confirm-settings>
+
+Then you can use <elisp:emacsconf-mail-checkin-instructions-for-attending-speakers>
+or <elisp:emacsconf-mail-checkin-instructions-to-all> to send the info.
+
+
+### Processing BBB videos
+
+`bbb-record --list` shows all the recordings. You can use `bbb-record --rebuild` to regenerate the meeting, and `bbb-record --watch` to monitor progress. Presentation is a web-based interface, video is a single video file that contains the webcam, the screenshare, and the audio.
-## Manual IRC announcements
+If you don&rsquo;t see the video format, doublecheck that [the video format is enabled](#general-infrastructure-bigbluebutton-installing-bigbluebutton).
+
+bbb-record seems to call `ruby /usr/local/bigbluebutton/core/scripts/process/video.rb -m ID`, which might be a useful backup.
+
+
+### Backing up BBB :backup:
+
+rsync -avze ssh root@bbb:/var/bigbluebutton/ bigbluebutton/
+
+ssh root@bbb &rsquo;tar zcvf - /var/bigbluebutton /etc/bigbluebutton /root/greenlight-v3 /usr/local/bigbluebutton /usr/share/bbb-web&rsquo; > bbb-backup-$(date &ldquo;+%Y-%m-%d&rdquo;).tar.gz
+
+ssh root@bbb &rsquo;dd if=/dev/sda bs=5M &rsquo; | dd of=bbb-img-$(date &ldquo;+%Y-%m-%d&rdquo;).img status=progress
+
+
+### Scaling BBB up and down
+
+[Scaling a BigBlueButton server down to a 1 GB node between uses](https://sachachua.com/blog/2025/01/scaling-a-bigbluebutton-server-down-to-a-1-gb-node-between-uses/)
+
+When the server is downscaled, `/etc/nginx/sites-backup` configures the Nginx.
+The web root is `/var/www/bigbluebutton-default/assets`, and the page is `/var/www/bigbluebutton-default/assets/backup/index.html`.
+
+
+### Spinning BBB up again from scratch
+
+Previous notes:
+
+1. Create a Nanode.
+2. Update the DNS for bbb.emacsverse.org with its IP address. (dns.he.net)
+3. Reboot into Rescue mode. In Lish:
+
+ passwd # set interactively
+ sed -i -e 's/#PasswordAuthentication yes/PasswordAuthentication yes/g' /etc/ssh/sshd_config
+ echo 'PermitRootLogin yes' >> /etc/ssh/sshd_config
+ service ssh start
+4. From the backup directory:
+ gunzip -c bbb-img-2024-12-08.img.gz | ssh root@bbb.emacsconf.org &ldquo;dd of=/dev/sda bs=4M status=progress oflag=direct iflag=fullblock&rdquo;
+5. After I resized to 4core 8GB RAM, I couldn&rsquo;t log in with SSH, so I used the Linode shell. `sshd -t` said no host keys available. Fix:
+
+ ssh-keygen -A
+ service ssh --full-restart
+6. ./bbb-install.sh -v jammy-300 -s bbb.emacsverse.org -e emacsconf@sachachua.com
+
+Resources:
+
+- <https://overto.eu/posts/gunzip-into-dd/>
+- <https://www.linode.com/community/questions/20386/how-do-i-ssh-to-linode-from-the-finnix-boot-in-order-to-copy-my-local-vm-over-to>
+- <https://github.com/bigbluebutton/bigbluebutton/issues/9485>
+
+
+<a id="general-infrastructure-manual-irc-announcements"></a>
+
+## TODO Manual IRC announcements
Success:
- [X] You can /opall, /conftopic, and /broadcast
-<a id="orge08d62d"></a>
+<a id="orgc7d6d2a"></a>
+
+## Check test crontab
+
+
+<a id="general-infrastructure-confirm-automated-irc-announcements-from-res"></a>
+
+## TODO Confirm automated IRC announcements from res
+
+Success:
+
+- A test schedule can generate announcements.
+
+ See C-u M-x emacsconf-stream-crontabs
+
+
+<a id="general-infrastructure-low-res-stream"></a>
## Low-res stream
@@ -748,7 +1462,7 @@ backup on live:
- /usr/local/bin/emacsconf-lowres-dev-on-connect
-<a id="org7f2e95e"></a>
+<a id="general-infrastructure-upload-talks-to-youtube"></a>
## Upload talks to YouTube
@@ -784,11 +1498,58 @@ backup on live:
(emacsconf-publish-prepare-for-display (emacsconf-get-talk-info)))
-<a id="org0cc19c3"></a>
+<a id="general-infrastructure-restream-to-youtube"></a>
## Restream to YouTube
+### TODO Set up YouTube restreaming events
+
+Need to have set up shifts first.
+
+1. Switch to the EmacsConf account.
+2. Go to <https://studio.youtube.com/channel/UCwuyodzTl_KdEKNuJmeo99A>
+3. Create > Go live > Schedule stream.
+ - [X] Gen - Sat AM
+ - [X] Gen - Sat PM
+ - [X] Dev - Sat AM
+ - [X] Dev - Sat PM
+ - [X] Gen - Sun AM
+ - [X] Gen - Sun PM
+ - [X] Test
+
+ emacsconf-stream-copy-livestream-description
+
+ Then set the emacsconf-rtmp-shifts variable. See the conf.org from 2025 for an example.
+
+ This will be used in the shift hyperlists, which you can generate with emacsconf-pad-prepopulate-shift-hyperlists
+
+ There&rsquo;s also a note in the ansible README.org about restreaming.
+ Set up the `restreaming_platforms` variable in `prod-vars.yml` and
+ use `ansible-playbook -i inventory.yml prod-playbook.yml --tags restream` to set up
+
+
+<a id="orgdc911e7"></a>
+
+## Restream to Toobnix
+
+
+### DONE Set up Toobnix restreaming events
+
+1. <https://toobnix.org>, Publish, Permanent/recurring live
+2. emacsconf-stream-toobnix-copy-livestream-description
+
+
+<a id="org692ea98"></a>
+
+## i3 window manager
+
+termit is the terminal
+
+- M-d: launcher
+- M-1, M-2: change workspace
+
+
<a id="other"></a>
# Other process notes
@@ -802,9 +1563,20 @@ backup on live:
docker exec -it greenlight-v2 bundle exec rake user:create["USERNAME","EMAIL","PASSWORD","user"]
-<a id="org4efd774"></a>
+<a id="org5f8f6b0"></a>
+
+## Schedule changes
+
+In general:
-## When a talk is added after the schedule has already been drafted
+ (emacsconf-schedule-update-from-info)
+ (emacsconf-update-schedule)
+ (emacsconf-publish-watch-pages)
+ (emacsconf-publish-talks-json-to-files)
+ (emacsconf-publish-info-pages)
+
+
+### When a talk is added after the schedule has already been drafted
- [X] Add the talk to conf.org
- [X] Add the talk ID to the draft schedule
@@ -822,16 +1594,34 @@ backup on live:
- [ ] Record the intro
-<a id="cancel-talk"></a>
+### When a talk is cancelled
-## When a talk is cancelled
+<elisp:emacsconf-cancel-talk>
-1. Update the status to CANCELLED.
+1. Update the status to CANCELLED. Update that specific talk with <elisp:emacsconf-publish-info-pages-for-talk>.
2. Rejig the schedule if needed, and update with <elisp:emacsconf-schedule-update-from-info>
-3. Update the published schedule with <elisp:emacsconf-update-schedule> and push the wiki.
-4. Regenerate the intros (before, after). <elisp:emacsconf-stream-generate-in-between-pages>, then use <elisp:subed-record-compile-video> in the intros file.
-5. Sync the new intros to the /data/emacsconf/shared/$YEAR/assets/intros directory.
-6. Regenerate the pads: <elisp:emacsconf-pad-prepopulate-all-talks>
+3. Update the published schedule with <elisp:emacsconf-update-schedule>.
+
+Manual steps:
+
+1. Push the wiki.
+2. Regenerate the intros (before, after). <elisp:emacsconf-stream-generate-in-between-pages>, then use <elisp:subed-record-compile-video> in the intros file.
+3. Resync the cache directory.
+4. Consider updating the screenshots for sat-open and sun-open.
+
+
+### When a talk changes title
+
+1. Update the title in conf.org.
+2. Delete the FILE\_PREFIX property.
+3. Call <elisp:emacsconf-set-file-prefix-if-needed>.
+4. Rename existing files with <elisp:emacsconf-update-file-prefixes>.
+5. Update the intro VTT file with the new title.
+6. Update the wiki page for the talk.
+7. Regenerate the in-between images with <elisp:emacsconf-stream-generate-in-between-pages>
+8. Rerecord and recompile the intro, and recompile the intro for the talk after it.
+9. <elisp:emacsconf-update-schedule>
+10. <elisp:emacsconf-pad-prepopulate-hyperlists>
<a id="change-talk-qa"></a>
@@ -846,7 +1636,15 @@ backup on live:
6. Regenerate talks.json: <elisp:emacsconf-publish-talks-json-to-files>
-<a id="org17cc58c"></a>
+<a id="other-process-notes-to-play-the-other-stream"></a>
+
+## To play the other stream
+
+- `mpv --profile=full https://live0.emacsconf.org/gen.webm`
+- Change the channel topic to note that discussion can be in the other channel
+
+
+<a id="other-process-notes-when-a-system-is-down"></a>
## When a system is down
@@ -859,7 +1657,7 @@ Update the status page:
/broadcast <message> may also be helpful
-<a id="org4636e4e"></a>
+<a id="other-process-notes-when-we-need-to-bring-on-a-last-minute-volunteer"></a>
## When we need to bring on a last-minute volunteer
@@ -868,7 +1666,7 @@ Update the status page:
will give them the backstage credentials and links to the index
-<a id="org811d67a"></a>
+<a id="other-process-notes-checking-people-in"></a>
## Checking people in
@@ -876,7 +1674,7 @@ will give them the backstage credentials and links to the index
/room nick (should be automatic if live, but there just in case)
-<a id="org5d78595"></a>
+<a id="other-process-notes-ansible"></a>
## Ansible
diff --git a/organizers-notebook/index.org b/organizers-notebook/index.org
index 13d55ca7..31bdb3af 100644
--- a/organizers-notebook/index.org
+++ b/organizers-notebook/index.org
@@ -41,26 +41,28 @@ Check in with core organizers from the previous year to see who's in.
This repository will store submissions, contact information, etc.
1. Create the repository on ~front0~. Ex:
- #+begin_src sh :eval no
+
+ #+begin_src sh
+ export YEAR=2025
sudo su - git
cd repositories
- mkdir emacsconf-2024-private.git
- cd emacsconf-2024-private.git
+ mkdir emacsconf-$YEAR-private.git
+ cd emacsconf-$YEAR-private.git
git init --bare
#+end_src
- 2. Edit ~gitolite-admin/config/gitolite-conf~. Add lines for the group and the repo. Commit and push. Ex:
+ 2. In the ~gitolite-admin~ repo, edit ~conf/gitolite-conf~. Add lines for the group and the repo. Commit and push. Ex:
#+begin_example
@emacsconf-2024-org = bandali sachac ...
repo emacsconf-2024-private
- RW+ = @admins @emacsconf-2024-org orga
+ RW+ = @admins @emacsconf-2024-org orga
#+end_example
- 3. Clone the private repository into the appropriate location. ~git clone git@git.emacsconf.org:emacsconf-2024-private private~
+ 3. Clone the private repository into the appropriate location. ~git clone git@git.emacsconf.org:emacsconf-2025-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: 2024/organizers-notebook/index.org
+Ex: file:../2024/organizers-notebook/index.org
* Phases and lessons learned
:PROPERTIES:
:CUSTOM_ID: phases-and-lessons-learned
@@ -71,16 +73,100 @@ Ex: 2024/organizers-notebook/index.org
:END:
Create linked pages
-- [ ] year index
-- [ ] volunteer page
-- [ ] submit page
+- [ ] year index: ex: [[file:../2024.md]]
+- [ ] volunteer page: ex: [[file:../volunteer.md]]
+- [ ] submit page: ex: [[file:../2024/submit.md]]
*** How to mark pages as drafts
+:PROPERTIES:
+:CUSTOM_ID: phases-and-lessons-learned-draft-cfp-how-to-mark-pages-as-drafts
+:END:
+
+Have a Markdown export block with the following contents. Replace { and } with [ and ].
+
+#+begin_export md
+{{!template id=pagedraft}}
+#+end_export md
+
+*** Wiki template for year index
+:PROPERTIES:
+:CUSTOM_ID: phases-and-lessons-learned-draft-cfp-wiki-template-for-year-index
+:END:
+
+Replace { and } with [ and ].
+
+#+begin_example
+{{!meta copyright="Copyright &copy; 2021-2022 Amin Bandali; 2023-2025 Sacha Chua"}}
+
+<p class="center">EmacsConf 2025 | Online Conference<br />
+<b>December 6 and 7, 2024 (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 2025, and we would
+love to have *your* help to make EmacsConf 2025 amazing, much like the
+previous EmacsConfs. See our {{**Call for Participation**|cfp}}, get
+involved, and help spread the word!
+
+We are holding EmacsConf 2025 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}, or by visiting
+{chat.emacsconf.org}{chat} in your web browser.
+
+{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
+#+end_example
-Put inside double square brackets: =!template id=pagedraft=
*** Previous years
+:PROPERTIES:
+:CUSTOM_ID: phases-and-lessons-learned-draft-cfp-previous-years
+:END:
[[file:~/proj/emacsconf/wiki/2023/cfp.org][2023]]
+*** Update dates
+:PROPERTIES:
+:CUSTOM_ID: phases-and-lessons-learned-draft-cfp-update-dates
+:END:
+
+[[file:~/proj/emacsconf/lisp/emacsconf.el]]
+[[file:~/proj/emacsconf/lisp/emacsconf-erc.el]]
+
+*** Update the IRC topic
+:PROPERTIES:
+:CUSTOM_ID: phases-and-lessons-learned-draft-cfp-update-the-irc-topic
+:END:
+
+#+begin_src emacs-lisp
+(erc-cmd-OPALL)
+(erc-cmd-CONFTOPIC (emacsconf-replace-plist-in-string
+ `(:year ,emacsconf-year :cfp-deadline ,emacsconf-cfp-deadline)
+ "Getting ready for EmacsConf ${year}! Call for proposals: https://emacsconf.org/${year}/cfp by ${cfp-deadline}, volunteer: https://emacsconf.org/volunteer/"))
+(erc-cmd-DEOPALL)
+#+end_src
*** Lessons learned
:PROPERTIES:
@@ -121,11 +207,37 @@ Put inside double square brackets: =!template id=pagedraft=
European organizers and volunteers, though.
- Put the speaker introduction right after the talk description for easier web page copying.
** Announce
+:PROPERTIES:
+:CUSTOM_ID: phases-and-lessons-learned-announce
+:END:
- Post CFP to emacsconf-discuss, reddit.com/r/emacs, and in Emacs News
- Submit to https://foss.events/
+*** Promote the conference
+:PROPERTIES:
+:CUSTOM_ID: phases-and-lessons-learned-announce-promote-the-conference
+:END:
+
+Submit to https://foss.events/
+
+Maybe it would be good to get in touch with podcasts like
+
+- [[https://systemcrafters.net/][System Crafters]]
+- [[https://www.youtube.com/playlist?list=PLbFVcOQ-YH_LRP687N0YeN78YZmBp5wqF][This Week in Linux]]
+- [[https://linuxunplugged.com/][Linux Unplugged]]
+- [[http://asknoahshow.com/][Ask Noah]]
+- [[https://linuxafterdark.net/][Linux After Dark]]
+- [[https://anonradio.net/][Lispy Gopher Show]]
+
+etc to give a heads up on EmacsConf before it
+happens and also mention to them when videos are
+available to spark more interest.
+
** Process proposals
+:PROPERTIES:
+:CUSTOM_ID: phases-and-lessons-learned-process-proposals
+:END:
1. In the private repository, create a conf.org.
2. Set ~emacsconf-org-file~ to its location.
@@ -152,7 +264,10 @@ When proposals come in:
SLUG, EMAIL, NAME_SHORT, CUSTOM_ID,
TRACK, TIMEZONE, CATEGORY, DATE_SUBMITTED,
PUBLIC_EMAIL
-** Accept proposals
+** Accept proposals :email:
+:PROPERTIES:
+:CUSTOM_ID: phases-and-lessons-learned-accept-proposals
+:END:
Setup:
@@ -165,6 +280,19 @@ For each talk:
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~
+
+After the CFP ends:
+
+1. Change the yyyy.md page to remove the CFP and submit links.
+2. Update the yyyy/sidebar.md page to remove the CFP and submit links.
+3. Update the yyyy/talks.md page to remove the CFP.
+4. Change the IRC channel topics.
+ 1. ~/opall~,
+ 2. ex: ~/conftopic Getting ready for EmacsConf 2025! Volunteer: https://emacsconf.org/volunteer~
+ 3. ~/deopall~
+
+[[https://git.emacsconf.org/emacsconf-wiki/commit/?id=9b2c5a6f86d9e4c3faf4c7f028eabb758583fa97][Example git commit]]
+
** Draft schedule
:PROPERTIES:
:CUSTOM_ID: draft-schedule
@@ -179,24 +307,45 @@ For each talk:
- Q_AND_A: pad
- Create draft-schedule section in the public organizers notebook for the year
- Add missing items to plan
+*** TODO Send draft schedule to speakers :email:
+:PROPERTIES:
+:CUSTOM_ID: phases-and-lessons-learned-draft-schedule-send-draft-schedule-to-speakers
+:END:
+
+1. Evaluate the draft schedule we want to use.
+2. ~emacsconf-schedule-update-from-info~
+3. ~C-u M-x emacsconf-mail-template-to-all-groups RET emacsconf-mail-draft-schedule RET~
+4. If that looks good, ~M-x emacsconf-mail-template-to-all-groups~. You can use ~M-x emacsconf-mail-merge-send-all~ to send all the drafts, or send them one by one.
+
** Set up backstage and upload
+:PROPERTIES:
+:CUSTOM_ID: phases-and-lessons-learned-set-up-backstage-and-upload
+:END:
See [[emacsconf-ansible:README.org]].
Lessons learned:
- Next year, let's get upload.emacsconf.org in place as the domain name so that people don't try to FTP files to it.
-
+*** DONE Send backstage and upload instructions :email:
+CLOSED: [2025-11-12 Wed 13:48]
+:PROPERTIES:
+:CUSTOM_ID: phases-and-lessons-learned-set-up-backstage-and-upload-send-backstage-and-upload-instructions
+:END:
** Post the schedule
+:PROPERTIES:
+:CUSTOM_ID: phases-and-lessons-learned-post-the-schedule
+:END:
- [[elisp:(setq emacsconf-publishing-phase 'schedule)]]
- elisp:emacsconf-publish-info-pages
- elisp:emacsconf-publish-schedule-org-files
- elisp:emacsconf-ical-generate-all
- Update talks.md to refer to watch.md as well
-
-
** Process uploaded files
+:PROPERTIES:
+:CUSTOM_ID: phases-and-lessons-learned-process-uploaded-files
+:END:
Basic setup:
@@ -209,6 +358,7 @@ Process:
1. Review uploaded files with elisp:emacsconf-upload-dired
2. Open the JSON for the file you want to process and use elisp:emacsconf-upload-copy-from-json .
If more than one file uses the same extension, provide a suffix to disambiguate them.
+ If emacsconf-upload-copy-from-json might take a long time, you can also scp the file to your local
3. On res:
1. Create a directory ~/current/files/$slug.
2. Copy the uploaded file from ~/cache as =$video_slug--original.$extension=, or use =rename-original.sh $slug $file=.
@@ -217,15 +367,60 @@ Process:
1. update-cache on my computer.
2. elisp:emacsconf-publish-cache-video-data or elisp:emacsconf-cache-all-video-data
3. elisp:emacsconf-publish-backstage-index
-** Generate assets
+** TODO Generate assets
+:PROPERTIES:
+:CUSTOM_ID: phases-and-lessons-learned-generate-assets
+:END:
*** In-between pages
+:PROPERTIES:
+:CUSTOM_ID: phases-and-lessons-learned-generate-assets-in-between-pages
+:END:
- Make the $year/assets/in-between directory and copy the template.svg from the previous year.
- elisp:emacsconf-stream-generate-in-between-pages
*** Intros
+:PROPERTIES:
+:CUSTOM_ID: phases-and-lessons-learned-generate-assets-intros
+:END:
- In an empty VTT file, elisp:emacsconf-subed-intro-subtitles
- Record the audio and get captions
- Splice together into a file that will be processed with subed-record-compile-video.
+*** TODO Test videos
+:PROPERTIES:
+:CUSTOM_ID: phases-and-lessons-learned-generate-assets-test-videos
+:END:
+elisp:emacsconf-stream-generate-test-videos
+** Record pronunciations
+:PROPERTIES:
+:CUSTOM_ID: phases-and-lessons-learned-record-pronunciations
+:END:
+*** DONE Record pronunciations
+CLOSED: [2025-11-22 Sat 17:41]
+:PROPERTIES:
+:CUSTOM_ID: phases-and-lessons-learned-record-pronunciations-record-pronunciations
+:Effort: 2:00
+:END:
+:LOGBOOK:
+CLOCK: [2025-11-21 Fri 12:58]--[2025-11-21 Fri 15:10] => 2:12
+:END:
+
+1. mkdir -p ~/proj/emacsconf/2025/assets/intros ~/proj/emacsconf/2025/assets/in-between
+2. cp ~/proj/emacsconf/2024/assets/in-between/template.svg ~/proj/emacsconf/2025/assets/in-between/template.svg
+3. elisp:emacsconf-stream-generate-in-between-pages
+4. Create ~/proj/emacsconf/2025/assets/intros/intro.vtt
+5. elisp:emacsconf-subed-intro-subtitles
+6. Record the audio, possibly with subed-record, left, and right.
+7. Split the lines for nicer subtitles.
+8. Use elisp:subed-record-compile
+
+*** DONE E-mail speakers asking them to confirm the pronunciations
+CLOSED: [2025-11-22 Sat 17:41]
+:PROPERTIES:
+:CUSTOM_ID: phases-and-lessons-learned-record-pronunciations-e-mail-speakers-asking-them-to-confirm-the-pronunciations
+:END:
** Prepare the infrastructure
+:PROPERTIES:
+:CUSTOM_ID: phases-and-lessons-learned-prepare-the-infrastructure
+:END:
Checklist:
@@ -245,6 +440,9 @@ Checklist:
- [ ] Icecast
** Getting ready for captions
+:PROPERTIES:
+:CUSTOM_ID: phases-and-lessons-learned-getting-ready-for-captions
+:END:
Onboarding:
@@ -257,27 +455,138 @@ Onboarding:
:END:
elisp:emacsconf-pad-prepopulate-shift-hyperlists
-*** TODO Send check-in details, schedule update, etc.
-SCHEDULED: <2024-11-30 Sat>
+*** DONE Check in with speakers for cancellations, adjustments
+CLOSED: [2025-11-28 Fri 21:32]
:PROPERTIES:
-:CREATED: [2024-11-27 Wed 17:34]
+:Effort: 1:00
+:END:
+:LOGBOOK:
+CLOCK: [2025-11-21 Fri 11:12]--[2025-11-21 Fri 11:14] => 0:02
:END:
-*** Two days before the conference
-
-Go through the :tminustwo: tags.
+emacsconf-mail-intro-to-all
+*** TODO Record opening remarks
+SCHEDULED: <2025-12-02 Tue>
+:PROPERTIES:
+:CREATED: [2025-11-28 Fri 21:32]
+:END:
+*** TODO Send check-in details, schedule update, etc. :email:
+:PROPERTIES:
+:CREATED: [2024-11-27 Wed 17:34]
+:CUSTOM_ID: phases-and-lessons-learned-getting-ready-for-the-conference-send-check-in-details-schedule-update-etc
+:END:
*** One day before the conference
+:PROPERTIES:
+:CUSTOM_ID: phases-and-lessons-learned-getting-ready-for-the-conference-one-day-before-the-conference
+:END:
-Go through the :tminusone: tags.
+- [X] Set ~emacsconf-publishing-phase~ to ~conference~.
+- [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] 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] Start the VNC servers.
+ #+begin_src sh :tangle emacsconf-set-up-tracks.sh
+ #!/bin/bash
+ # SSH to both
+ cd ~/proj/emacsconf/emacsconf-ansible
+
+ # Gen
+ export TRACK=gen; TRACK_PORT=5905; export SSH_PORT=46668
+ ssh emacsconf-$TRACK@res.emacsconf.org -p $SSH_PORT /home/emacsconf-$TRACK/bin/track-vnc
+ sleep 5
+ ssh emacsconf-$TRACK@res.emacsconf.org -N -L $TRACK_PORT:127.0.0.1:$TRACK_PORT -p $SSH_PORT &
+ xvncviewer 127.0.0.1:$TRACK_PORT -shared -geometry 1280x720 -passwd vnc-passwd-$TRACK &
+
+ # Dev
+ export TRACK=dev; export TRACK_PORT=5906; export SSH_PORT=46668
+ ssh emacsconf-$TRACK@res.emacsconf.org -p $SSH_PORT /home/emacsconf-$TRACK/bin/track-vnc
+ sleep 5
+ ssh emacsconf-$TRACK@res.emacsconf.org -N -L $TRACK_PORT:127.0.0.1:$TRACK_PORT -p $SSH_PORT &
+ xvncviewer 127.0.0.1:$TRACK_PORT -shared -geometry 1280x720 -passwd vnc-passwd-$TRACK &
+ #+end_src
+- [X] Confirm that we can use "Start Recording" to stream to gen.
+ - [X] play-with-intro sat-open
+ - [X] https://live.emacsconf.org/2025/watch/gen/
+ - [X] mpv https://live0.emacsconf.org/gen.webm
+ - [X] play-with-intro sun-open (to check the overlays)
+ - [X] https://live.emacsconf.org/2025/watch/gen-480p/
+ - [X] mpv https://live0.emacsconf.org/gen-480p.webm
+- [X] Confirm that we can stream to dev.
+ - [X] play-with-intro sat-open
+ - [X] https://live.emacsconf.org/2025/watch/dev/
+ - [X] mpv https://live0.emacsconf.org/dev.webm
+ - [X] play-with-intro sun-open (to check the overlays)
+ - [X] https://live.emacsconf.org/2025/watch/dev-480p/
+ - [X] mpv https://live0.emacsconf.org/dev-480p.webm
+- [X] Confirm that I can restream to YouTube.
+ - Settings - Stream, paste in the RTMP key for the relevant event, then Start Streaming.
+ - [X] gen
+ - [X] dev
+- [X] Confirm that I can restream to Toobnix
+ - [X] live0: restream-gen-toobnix
+ - [X] live0: restream-dev-toobnix
+- [X] Check automated announcements and publishing
+ - [X] orga@res: talk sat-open TO_STREAM
+ - [X] https://emacsconf.org/2025/talks/sat-open/ doesn't have video
+ - [X] https://media.emacsconf.org/2025 doesn't have it
+ - orga@res: talk sat-open PLAYING
+ - [X] https://emacsconf.org/2025/talks/sat-open/ has video and transcript
+ - [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
** During the conference
:PROPERTIES:
:CUSTOM_ID: conf
:END:
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>
+
** After the conference
+:PROPERTIES:
+:CUSTOM_ID: phases-and-lessons-learned-after-the-conference
+:END:
*** Capture stats
+:PROPERTIES:
+:CUSTOM_ID: phases-and-lessons-learned-after-the-conference-capture-stats
+:END:
2024 stats
Saturday:
@@ -287,6 +596,8 @@ dev: 226 peak + 79 peak lowres
Sunday:
gen: 89 peak + 10 peak lowres
+http://live0.emacsconf.org/admin/stats (username: admin, password is in prod-vars.yml)
+
meet peak 409% CPU (100% is 1 CPU), average 69.4%
front peak 70.66% CPU (100% is 1 CPU)
live peak 552% CPU (100% is 1 CPU) average 144%
@@ -294,13 +605,22 @@ 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
+:PROPERTIES:
+:CUSTOM_ID: phases-and-lessons-learned-after-the-conference-back-up-the-data
+:END:
**** Icecast
+:PROPERTIES:
+:CUSTOM_ID: phases-and-lessons-learned-after-the-conference-back-up-the-data-icecast
+:END:
rsync -avze ssh live:'/data/emacsconf-2024-*' media:~/2024
rsync -avze ssh live:'/data/emacsconf-2024-*' .
**** BigBlueButton
+:PROPERTIES:
+:CUSTOM_ID: phases-and-lessons-learned-after-the-conference-back-up-the-data-bigbluebutton
+:END:
rsync -avze ssh root@bbb:/var/bigbluebutton/ bigbluebutton/
@@ -311,6 +631,9 @@ sudo losetup --find --show bbb-img-2024-12-08.img
sudo mount /dev/loop10 test
cd test
***** Reviewing all the Q&A durations and chat messages
+:PROPERTIES:
+:CUSTOM_ID: phases-and-lessons-learned-after-the-conference-back-up-the-data-bigbluebutton-reviewing-all-the-q-a-durations-and-chat-messages
+:END:
#+begin_src emacs-lisp :eval no
(let ((default-directory "/home/sacha/proj/emacsconf/2024/backups/bigbluebutton/published/video"))
(mapconcat
@@ -344,8 +667,14 @@ 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
+:PROPERTIES:
+:CUSTOM_ID: phases-and-lessons-learned-after-the-conference-combine-the-irc-logs-and-the-pads-and-add-them-to-the-wiki
+:END:
(did we e-mail the speakers before or after?)
*** Process the Q&A recordings and live presentations
+:PROPERTIES:
+:CUSTOM_ID: phases-and-lessons-learned-after-the-conference-process-the-q-a-recordings-and-live-presentations
+:END:
- Save answers videos as --answers.webm.
- From the pad file: emacsconf-extract-copy-pad-to-wiki
@@ -364,36 +693,250 @@ Indexing
Also copy the YouTube comments and IRC comments
emacsconf-extract-irc-anonymize-log
-*** Send thank-you emails to the speakers
+*** Send thank-you emails to the speakers :email:
+:PROPERTIES:
+:CUSTOM_ID: phases-and-lessons-learned-after-the-conference-send-thank-you-emails-to-the-speakers
+:END:
+*** Notify emacs-discuss that the Q&A is up
+:PROPERTIES:
+:CUSTOM_ID: phases-and-lessons-learned-after-the-conference-notify-emacs-discuss-that-the-q-a-is-up
+:END:
+
+https://lists.gnu.org/archive/html/emacsconf-discuss/2024-12/msg00000.html
+
+#+begin_example
+Hello, everyone!
+
+https://emacsconf.org/2024/talks and https://media.emacsconf.org/2024
+should have the talks and Q&A sessions now, hooray, including chapter
+indices for the Q&A. I've also copied over notes from Etherpad and IRC
+on the talk pages, and I've e-mailed them to the speakers so they can
+update the wiki directly or send in additional answers.
+
+BigBlueButton audio mixing is kinda iffy, so I'm holding off on
+uploading the Q&A videos (and the live talk for secrets) to
+YouTube/Toobnix until Leo and other volunteers have a listen to see
+whether the audio needs to be tweaked, and maybe even to do some kind of
+normalization. Unfortunately, recordings with separate audio tracks per
+participant aren't available--it would be cool to figure that out next
+year--so some talks might need some manual processing. (Please feel free
+to volunteer if that's up your alley!) In the meantime, you can check
+out the Q&A videos from the talk pages on the wiki. Please let us know
+if there's anything that needs tweaking.
+
+Enjoy!
+
+Sacha
+#+end_example
+
*** Write a report
+:PROPERTIES:
+:CUSTOM_ID: phases-and-lessons-learned-after-the-conference-write-a-report
+:END:
Sample: https://emacsconf.org/2023/report/
-*** Notify emacs-discuss that the Q&A is up
-*** Send thank-you emails to the volunteers
+*** Send thank-you emails to the volunteers :email:
+:PROPERTIES:
+:CUSTOM_ID: phases-and-lessons-learned-after-the-conference-send-thank-you-emails-to-the-volunteers
+:END:
+
+emacsconf-mail-template-ask-volunteer-for-mailing-address
+
*** Process the lessons learned
+:PROPERTIES:
+:CUSTOM_ID: phases-and-lessons-learned-after-the-conference-process-the-lessons-learned
+:END:
+* Ideas for improvement
+:PROPERTIES:
+:CUSTOM_ID: ideas
+:END:
+
+How can we make EmacsConf better for participants? Speakers? Volunteers? People who come across the videos afterwards?
+
+- Emacs:
+ - view Etherpad (read-only): might be able to query something like https://pad.emacsconf.org/2024/export/html or https://pad.emacsconf.org/2024/export/txt
+ - view upcoming talks, countdown?
+ - resources, past talks
+ - ??: Collaborative real-time editing? Not sure crdt.el or collab-mode can scale up as far as we like; how would we test this?
+- HTML/CSS/JS:
+ - general design improvements?
+ - [[https://web.archive.org/web/20240806134541/https://emacsconf.org/2024/talks/][This is what the talks page looks like when there's no schedule yet]]
+ - [[https://web.archive.org/web/20241108132608/https://emacsconf.org/2024/talks/][This is what the schedule page looks like before the conference]]
+ - [[https://web.archive.org/web/20241208042046/https://emacsconf.org/2024/talks/literate/][This is what a talk page looks like before the conference]]
+ - [[https://web.archive.org/web/20241208034535/https://emacsconf.org/2024/watch/gen/][This is the watch page for the general track]]
+ - [[https://web.archive.org/web/20241212145433/https://emacsconf.org/2024/talks/literate][This is the same talk page after the conference, with the videos, notes, and captions]]
+ - [[https://emacsconf.org/2024/talks/][This is what the talks page looks like after the conference]] - list of resources
+ - timezone translations in the schedule SVG, on the schedule page, etc.
+ - countdown on talk pages?
+ - prettier viewers for videos, captions
+ - make it easier to see the talk/pad/IRC at the same time?
+ - easy timestamp jumping
+- Volunteers:
+ - better documentation
+ - share to OBS from local? Maybe vdo.ninja?
+ - how do we manage the fallback/switchover in case we need to go back to shared VNC?
+ - meeting layout?
+ - countdown to switch over to the next talk, or easier manual control; web or command-line interface to control it?
+ - make it easier for people to join as hosts or check-in volunteers?
+ - improve backstage experience?
+ - automate or cross-train more people in what Sacha does (coordination, infrastructure) to reduce bus factor and increase awesomeness
+- Processing:
+ - audio normalization: better workflow, more people helping
+ - noise removal (many speakers don't have external mics)
+ - Makefile improvements
+ - captioning:
+ - simplify common edits
+ - reflowing? check out [[https://gitlab.com/jun8git/sub-seg][sub-seg]]?
+ - handle last-minute uploads
+ - validation: make sure audio, video, and caption times agree
+- Infrastructure:
+ - document media processing pipeline
+ - make media processing pipeline more hands-off; ideally, just copy the video to the directory and that kicks off everything including eventually republishing the backstage index
+ - add read-only non-JS links to pads; make the pads viewable through the web instead of being downloaded (.../export/html)
+ - upgrade to latest versions
+ - front0 and live0: currently Debian 10.13
+ - [2025-09-21 Sun] bandali will look into upgrades, cleaning up
+ - [2025-09-19 Fri] sachac: e-mailed bandali to ask if I can do the upgrades or if he wants to
+ - ffmpeg 6.0.1, latest is 8
+ - 7 has demuxing, decoding, filtering, encoding, and muxing in the ffmpeg CLI now all run in parallel
+ - OBS on res? Currently 29.1.2
+ - probably no must-haves up to version 32, okay to stay with current version
+ - Do we want to go back to having hosts stream from their local computers?
+ - local: better performance
+ - via VNC:
+ - easier to switch in a different host or manage multiple streams
+ - easier to move files around
+ - consistent setup for profiles, overlays
+ - DONE Etherpad (upgrade 1.9.7 to 2.5.0)
+ - DONE BigBlueButton (deployed 3.0.12, which is the latest as of 2025-08-02)
+ - Consider 3.1 beta? new interface, probably new bugs; see if it's worth it?
+ - DONE Icecast (deployed 2.4.4-1) - decided to stick with current version
+ - [2025-09-21 Sun] Decision: stick with Icecast
+ - Leaning towards sticking with [[https://icecast.org/][Icecast]]
+ - 2.5.0-rc1? health reporting, bugfixes; probably not essential
+ - [[https://antmedia.io/][Ant Media Server]] community edition, to enable adaptive bitrate streaming, lower latency, and HLS for wider support?
+ - [[https://owncast.online/][Owncast]]? Automatic downscaling, Fediverse support; might need two instances to support two tracks
+ - [[https://github.com/ossrs/srs][SRS]]? record, replay? more of a building block?
+ - Nginx RTMP? More of a building block
+ - customize BigBlueButton welcome, slides, title, branding
+ - change the default presentation (maybe someone can make a PDF?) https://docs.bigbluebutton.org/administration/customize/#change-the-default-presentation
+ - modify the default landing page https://docs.bigbluebutton.org/administration/customize/#modify-the-default-landing-page
+ - change the default welcome messages https://docs.bigbluebutton.org/administration/customize/#change-the-default-welcome-message
+ - change the favicon https://docs.bigbluebutton.org/administration/customize/#change-favicon
+ - change the default logo https://docs.bigbluebutton.org/administration/customize/#changing-the-default-logo
+ - check out BigBlueButton live captions?
+ - figure out if we can connect to or reuse the etherpad in BigBlueButton?
+ - figure out how to record separate audio streams in BigBlueButton because the audio mixing is sometimes terrible (some people's audio streams end up much louder than others). Related: https://github.com/bigbluebutton/bigbluebutton/issues/12302 , but not sure how to actually do it...
+ - replicate BBB setup in a virtual machine so that it's easy to re-deploy
+ - replicate streaming setup (OBS+VNC) in a virtual machine so that it's easy to re-deploy
+ - replicate video processing workflow on my computer and/or a virtual machine
+- Other:
+ - panel? some thoughts: https://pad.emacsconf.org/emacsconf-panel
+ - unconference?
+
* General infrastructure
+:PROPERTIES:
+:CUSTOM_ID: general-infrastructure
+:END:
** Linode instance sizes
+:PROPERTIES:
+:CUSTOM_ID: general-infrastructure-linode-instance-sizes
+:END:
*** Production
+:PROPERTIES:
+:CUSTOM_ID: general-infrastructure-linode-instance-sizes-production
+:END:
- front0 shared Linode 32GB
- live0 shared Linode 64GB
- meet Dedicated CPU 16GB
*** Dormant
+:PROPERTIES:
+:CUSTOM_ID: general-infrastructure-linode-instance-sizes-dormant
+:END:
Resize disk to 25GB, copying large files to media if needed
- nanode front0
- nanode live0
- delete meet after downloading all the recordings, or resize down to nanode
+** File uploads
+:PROPERTIES:
+:CUSTOM_ID: upload
+:END:
+
+[[https://github.com/psi-4ward/psitransfer][psi-4ward/psitransfer: Simple open source self-hosted file sharing solution]]
+
+Before the conference:
+
+1. Set ~upload_enabled~ to ~true~ in ~prod-vars.yml~ and run ~ansible-playbook -i inventory.yml prod-playbook.yml --tags upload~.
+2. Confirm that https://upload.emacsconf.org has the upload interface and works with the password. If it's not up yet, use ~sudo service upload start~.
+3. Use ~emacsconf-mail-template-to-all-groups~ and ~emacsconf-mail-upload-and-backstage-info~ to e-mail the upload information to all speakers.
+After the conference:
-** Icecast
+1. Set ~upload_enabled~ to ~false~ in ~prod-vars.yml~ and run ~ansible-playbook -i inventory.yml prod-playbook.yml --tags upload~.
+2. Confirm that https://upload.emacsconf.org shows the in-between page.
+** Media processing
+:PROPERTIES:
+:CUSTOM_ID: general-infrastructure-media-processing
+:END:
+
+1. Make sure ~group_vars/all.yml~ has the correct setting for ~emacsconf_year~.
+2. ~ansible-playbook -i inventory.yml prod-playbook.yml --tags prerec~
+3. Set up the ~update-cache~ script.
+
+#+begin_src sh :eval no :tangle ~/proj/emacsconf/2025/update-cache
+#!/bin/bash
+# export CONF_PUBLIC=1
+rsync -avu ~/proj/emacsconf/2025/assets/intros/*--intro.* ~/proj/emacsconf/2025/cache/
+rsync -avzue ssh --exclude ffmpeg2pass* --exclude .lock-\* --exclude 'partial--*' res:~/cache/ ~/proj/emacsconf/2025/cache/ --exclude .git
+chmod ugo+r . -R
+rsync -avzue ssh --exclude ffmpeg2pass* --exclude 'partial--*' ~/proj/emacsconf/2025/cache/ res:~/cache/ $* --exclude .git
+rsync -avzue ssh --exclude ffmpeg2pass* --exclude 'partial--*' ~/proj/emacsconf/2025/cache/ orga@media:/var/www/media.emacsconf.org/2025/backstage/ $* --exclude .git
+ssh orga@media "cd ~/backstage; chmod ugo+r -- *"
+if [ ! -z "$CONF_PUBLIC" ]; then
+ echo "Updating public media"
+ rsync -avzue ssh --exclude \*--original\* --exclude ffmpeg2pass* --exclude \*--reencoded\* ~/proj/emacsconf/2025/cache/ orga@media:/var/www/media.emacsconf.org/2025/ 3--exclude .git
+fi
+rsync -avzue ssh ~/proj/emacsconf/2025/assets/ res:~/current/assets/
+#+end_src
+
+When a talk comes in:
+
+1. Update the talk status to ~PROCESSING~. Re-evaluate the schedule draft.
+2. Set the file prefix with ~emacsconf-set-file-prefix-if-needed~ or use ~emacsconf-set-file-prefixes~.
+3. Download the talk's files to your local cache (as specified by ~emacsconf-cache-dir~).
+4. Rename the files with ~emacsconf-rename-files~.
+5. Use ~../update-cache~ to update res and backstage.
+6. SSH to res. Go to the ~~/cache~ directory.
+ 1. Start or reuse a ~screen~ session.
+ 2. Use ~make~ to convert the file to WEBM and caption the file.
+7. On your local computer, use ~../update-cache~ to move files around.
+8. ~emacsconf-publish-cache-video-data~ to save the file size and length.
+9. ~emacsconf-publish-backstage-index~
+** Wiki
+
+Stylesheet: file:/ssh:front|sudo:ikiwiki@front:/var/www/emacsconf.org/style.css
+
+See also Ansible notes
+
+** DONE Icecast
+CLOSED: [2025-11-15 Sat 15:05]
:PROPERTIES:
:CUSTOM_ID: icecast
+:Effort: 0:30
+:END:
+:LOGBOOK:
+- Note taken on [2025-11-15 Sat 15:05] \\
+ okay for 2025
+CLOCK: [2025-11-15 Sat 14:43]--[2025-11-15 Sat 15:05] => 0:22
:END:
-Success: You can use [[#obs-instructions][OBS+VNC to record]], and the results can be viewed by mpv.
+Success: You can send a stream to Icecast and the results can be viewed by mpv.
- [X] Gen
- [X] Dev
Also, recordings are available in /data.
+See also: [[#obs-instructions][Use OBS+VNC to record]]
+
New year:
1. Reprovision with
@@ -405,7 +948,7 @@ New year:
Start it again with ~/etc/init.d/emacsconf start~
3. To test, you can use FFmpeg like this for the gen stream:
#+begin_src sh
- ffmpeg -y -f lavfi -i testsrc=size=1280x720:rate=10 -i background-music.opus \
+ffmpeg -y -f lavfi -i testsrc=size=1280x720:rate=10 -i background-music.opus \
-c:v libvpx -b:v 500K -crf 25 -b:a 128k \
-content_type video/webm "icecast://emacsconf:$EMACSCONF_ICECAST_SOURCE_PASSWORD@live0.emacsconf.org:8001/gen.webm"
#+end_src
@@ -418,9 +961,18 @@ New year:
and then view it with
#+begin_src sh
mpv https://live0.emacsconf.org/gen.webm
+ mpv https://live0.emacsconf.org/dev.webm
#+end_src
+*** Cooldown
+:PROPERTIES:
+:CUSTOM_ID: general-infrastructure-icecast-cooldown
+:END:
-** Watching pages
+ssh live0.emacsconf.org
+sudo /etc/init.d/emacsconf stop
+
+** DONE Watching pages
+CLOSED: [2025-11-15 Sat 14:57]
:PROPERTIES:
:CUSTOM_ID: watch
:END:
@@ -432,16 +984,21 @@ Success: You can watch at https://live.emacsconf.org.
- [X] Schedule is correct
New year:
-1. ansible-playbook -i inventory.yml prod-playbook.yml --tags live
+1. ~ansible-playbook -i inventory.yml prod-playbook.yml --tags live~
2. Republish with elisp:emacsconf-publish-watch-pages.
3. Update front:/var/www/live.emacsconf.org.
Set up test streams (see ffmpeg instructions from [[#icecast][Icecast]]) and then:
-** VNC
+** DONE VNC
+CLOSED: [2025-11-15 Sat 15:02]
:PROPERTIES:
:CUSTOM_ID: vnc
:END:
+:LOGBOOK:
+- Note taken on [2025-11-15 Sat 15:02] \\
+ Okay for 2025
+:END:
We use VNC to connect to the X servers on res.emacsconf.org so that we can stream from it.
@@ -449,9 +1006,6 @@ Success:
- [X] Confirm that you can connect to emacsconf-gen via VNC
- [X] Confirm that you can connect to emacsconf-dev via VNC
-Setting up
-- elisp:emacsconf-publish-res-index
-
*** Instructions
:PROPERTIES:
:CUSTOM_ID: vnc-instructions
@@ -501,24 +1055,38 @@ and then connect with:
#+begin_src sh :eval no
xvncviewer 127.0.0.1:$TRACK_PORT -shared -geometry 1280x720 -passwd vnc-passwd-$TRACK &
#+end_src
+*** Cooldown
+:PROPERTIES:
+:CUSTOM_ID: general-infrastructure-vnc-cooldown
+:END:
-** Streaming with OBS
+ssh sachac@res
+sudo killall Xtigervnc
+
+** DONE Streaming with OBS
+CLOSED: [2025-11-15 Sat 15:04]
:PROPERTIES:
:CUSTOM_ID: obs
:END:
+:LOGBOOK:
+- Note taken on [2025-11-15 Sat 15:04] \\
+ Okay for 2025
+:END:
-Success: Confirm that you can stream
+Success: You can use [[#obs-instructions][OBS+VNC to record]], and the results can be viewed by mpv.
- [X] gen
- [X] dev
New year: reprovision with
#+begin_src sh :eval no
-ansible-playbook -i inventory.yml prod-playbook.yml --tags obs
+ansible-playbook -i inventory.yml prod-playbook.yml --tags obs,stream
#+end_src
so that the year is updated in the shell scripts.
+icecast is on live0.emacsconf.org and can be restarted with =/etc/init.d/emacsconf restart=.
+
*** Instructions
:PROPERTIES:
:CUSTOM_ID: obs-instructions
@@ -534,25 +1102,40 @@ so that the year is updated in the shell scripts.
mpv https://live0.emacsconf.org/$TRACK.webm &
#+end_example
-*** Icecast
+so that the year is updated in the configuration.
+** DONE Mumble
+CLOSED: [2025-12-01 Mon 12:49]
:PROPERTIES:
-:CUSTOM_ID: icecast
+:Effort: 1:00
+:END:
+:LOGBOOK:
+CLOCK: [2025-12-01 Mon 11:25]--[2025-12-01 Mon 12:49] => 1:24
:END:
-Success: You can use [[#obs-instructions][OBS+VNC to record]], and the results can be viewed by mpv.
-- [ ] gen
-- [ ] dev
+Success:
+- [X] You can connect to Mumble on your preferred device(s).
+- [X] You can broadcast to the emacsconf-gen channel.
+- [X] You can broadcast to the emacsconf-dev channel.
-New year: reprovision with
+mumble.emacsconf.org is hosted on front. Start it with:
#+begin_src sh :eval no
-ansible-playbook -i inventory.yml prod-playbook.yml --tags stream
+sudo /etc/init.d/mumble-server start
#+end_src
-so that the year is updated in the configuration.
+It listens on port 64738
+
+Logs are in ~/var/log/mumble-server~.
+
+To add a new account:
+
+- After they log in, register their user.
+- Right-click on the server name. Edit - Groups. Add them to the org group.
-This is on live.emacsconf.org and can be restarted with =/etc/init.d/emacsconf restart=.
** Shell scripts
+:PROPERTIES:
+:CUSTOM_ID: general-infrastructure-shell-scripts
+:END:
Success: From the commandline, hosts can:
- [X] play just the intro: intro $SLUG
@@ -582,45 +1165,71 @@ Update this with elisp:emacsconf-publish-backstage-index
Explanation of files:
-| --original.mp4/mov/webm | original file as uploaded by the speaker |
-| --silence.mp4/mov/webm | silence sample if uploaded by speaker |
-| --reencoded.webm | converted to .webm format and compressed |
-| --reencoded.opus | audio only |
-| --normalized.opus | normalized audio |
-| --reencoded.vtt | WhisperX captions, WebVTT format |
-| --reencoded.json | WhisperX word data |
-| --reencoded.srt | WhisperX captions, SRT format |
-| --reencoded.txt | WhisperX captions, plain text |
-| --main.vtt | edited captions |
-| --main--chapters.vtt | chapter markers |
-| --main.txt | captions as text (optional) |
-| --main.webm | version for streaming based on the most recent resources |
+| ~--original.mp4/mov/webm~ | original file as uploaded by the speaker |
+| ~--silence.mp4/mov/webm~ | silence sample if uploaded by speaker |
+| ~--reencoded.webm~ | converted to .webm format and compressed |
+| ~--reencoded.opus~ | audio only |
+| ~--normalized.opus~ | normalized audio |
+| ~--reencoded.vtt~ | WhisperX captions, WebVTT format |
+| ~--reencoded.json~ | WhisperX word data |
+| ~--reencoded.srt~ | WhisperX captions, SRT format |
+| ~--reencoded.txt~ | WhisperX captions, plain text |
+| ~--main.vtt~ | edited captions |
+| ~--main--chapters.vtt~ | chapter markers |
+| ~--main.txt~ | captions as text (optional) |
+| ~--main.webm~ | version for streaming based on the most recent resources |
Other files might also have been uploaded by the speaker, such as slides or notes.
-** IRC web client
+** Thelounge IRC web client
+:PROPERTIES:
+:CUSTOM_ID: general-infrastructure-irc-web-client
+:END:
Success:
+- [X] When the service is not running, the error page is displayed
- [X] You can join from https://chat.emacsconf.org
- [X] You can join from https://live.emacsconf.org and the channels end up as the latest ones
+ansible: lounge tag
+
+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
+CLOSED: [2025-11-12 Wed 13:50]
+:PROPERTIES:
+:CUSTOM_ID: general-infrastructure-irc-web-client-ask-libera-chat-to-increase-irc-limits
+:END:
+
Remember to schedule a task to ask libera.chat to increase the number of users it will accept from chat.emacsconf.org to avoid connection exhaustion errors.
Message I've posted to support@libera.chat:
-Thank you for running libera.chat. We're looking forward to using IRC
-(#emacsconf-gen, #emacsconf-dev) for the discussions for the upcoming
-EmacsConf (Dec 7-8, https://emacsconf.org). In the past, we've needed to
-coordinate with Libera staff to increase the number of connections
-allowed from chat.emacsconf.org during conference days in order to avoid
-connection exhaustion errors. Is that something we can plan now or would
-you like me to bring it up a few days before the conference?
+Thank you for running libera.chat. We're looking forward to using IRC (#emacsconf, #emacsconf-gen, #emacsconf-dev, #emacsconf-org) for the discussions for the upcoming EmacsConf (Dec 6-7, https://emacsconf.org). In the past, we've needed to coordinate with Libera staff to increase the number of connections allowed from chat.emacsconf.org during conference days in order to avoid connection exhaustion errors. Is that something we can plan now or would you like me to bring it up a few days before the conference?
** Etherpad
+:PROPERTIES:
+:CUSTOM_ID: general-infrastructure-etherpad
+:END:
Success:
- [X] pad.emacsconf.org redirects to this year's entry
- [X] Each talk has its own Etherpad
+
+Lessons learned:
+
+- After 2024: Added pronouns and pronunciation to the pad template since that's what the hosts will be looking at
+
+The pad is at front0.emacsconf.org
+
+Non-JS way to get plain text or HTML of a pad: ex:
+- https://pad.emacsconf.org/orgmeetup/export/txt
+- https://pad.emacsconf.org/orgmeetup/export/html
** Publishing media to the server and to the wiki
:PROPERTIES:
:CUSTOM_ID: media
@@ -632,24 +1241,50 @@ Start of year:
2. =ansible-playbook -i inventory.yml prod-playbook.yml --tags media=
3. Generate the index with =emacsconf-publish-update-media=
-Confirm by setting a submitted talk to =PLAYING= and testing with
-elisp:emacsconf-publish-media-files-on-change . The public media
+Confirm by using ~talk sat-open PLAYING~ on res. The public media
directory should have the files and the entry should be in the index.
Switching it back to =TO_STREAM= and calling
elisp:emacsconf-publish-media-files-on-change should remove it.
-*** TODO Switch public media to unprotected root before the conference :tminustwo:
+*** DONE Switch public media to unprotected root before the conference :tminustwo:
+CLOSED: [2025-11-30 Sun 16:52]
+:PROPERTIES:
+:CUSTOM_ID: general-infrastructure-publishing-media-to-the-server-and-to-the-wiki-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=.
-** Automated IRC announcements
+** Automated publishing to the media server
+
+=ansible-playbook -i inventory.yml prod-playbook.yml --tags publish,edit=
+
+On orga@res, in the screen session with the emacs server, make sure emacsconf-year and emacsconf-cache-dir refer to the current ones.
+
+** DONE Automated IRC announcements
+CLOSED: [2025-11-30 Sun 16:52]
+:PROPERTIES:
+:CUSTOM_ID: general-infrastructure-automated-irc-announcements
+:Effort: 1:00
+:END:
+:LOGBOOK:
+CLOCK: [2025-11-27 Thu 14:31]--[2025-11-28 Fri 15:10] => 24:39
+:END:
Success:
- [ ] When a talk starts playing, it is announced in the relevant channel
+
+How it works: On res:
+
+/usr/local/bin/handle-session sudos to the orga user and calls the ~/usr/local/bin/talk~ shell script,
+
+You will need the private repository checked out to ~orga/emacsconf-2025-private~, which is set up by the ansible playbook ~publish~ tag.
+
+This is by ~/usr/local/bin/talk~ on res, which connects to a running Emacs with emacsclient. Make sure the emacs thing has the right year.
+
** BigBlueButton
:PROPERTIES:
:CUSTOM_ID: bbb
@@ -666,6 +1301,41 @@ ssh root@bbb
cd greenlight-v3
docker compose restart
+Sizes:
+
+- dormant: 1 GB nanode
+- testing: 4 core 8 GB shared CPU
+- production: 8 core 16 GB dedicated CPU (roughly half CPU load for 107 simultaneous users, 2024)
+ - maybe 8 core 16 GB shared CPU next?
+
+*** Installing BigBlueButton
+:PROPERTIES:
+:CUSTOM_ID: general-infrastructure-bigbluebutton-installing-bigbluebutton
+:END:
+
+1. Create the instance.
+ - Linode 4core 8GB shared CPU
+ - Image: Ubuntu 22.04
+2. Update the DNS for bbb.emacsverse.org with its IP address.
+3. Download the BBB installer and make it executable.
+4. ufw allow 16384:32768/udp
+5. Run the BBB installer: ~./bbb-install.sh -v jammy-300 -s bbb.emacsverse.org -e emacsconf@sachachua.com -g~
+6. ~sudo apt install bbb-playback-video~ and then follow the instructions at [[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
+ steps:
+ archive: 'sanity'
+ sanity: 'captions'
+ captions:
+ - 'process:presentation'
+ - 'process:video'
+ 'process:presentation': 'publish:presentation'
+ 'process:video': 'publish:video'
+ #+end_example
+ - systemctl restart bbb-rap-resque-worker.service
+7. docker exec -it greenlight-v3 bundle exec rake admin:create['name','email','password']
+
+
*** System audio limitations
:PROPERTIES:
@@ -682,48 +1352,132 @@ BBB says sharing system audio works only if you use Chrome on Mac OS X or Micros
Related: https://github.com/bigbluebutton/bigbluebutton/issues/8632
+*** DONE Create meeting rooms for each speaker
+CLOSED: [2025-11-12 Wed 13:51]
+:PROPERTIES:
+:CUSTOM_ID: general-infrastructure-bigbluebutton-creating-talk-bbb-rooms
+:END:
-*** Creating talk BBB rooms
-
-- =docker exec -it greenlight-v3 /bin/bash=
-- =bundle exec rails console=
-- =user_id = User.find_by_email("sacha@sachachua.com").id=
+#+begin_src sh :eval no
+docker exec -it greenlight-v3 /bin/bash -c "bundle exec rails console"
+#+end_src
-#+begin_src emacs-lisp :results replace
-(mapconcat (lambda (group)
- (format
- "Room.create(user_id: user_id, name: \"%s - %s\")\n"
- (plist-get (cadr group) :speakers)
- (string-join (mapcar (lambda (talk) (plist-get talk :slug))
- (cdr group)))))
- (emacsconf-mail-groups (emacsconf-active-talks (emacsconf-get-talk-info)))
- "")
+#+begin_src ruby :eval no
+user_id = User.find_by_email("emacsconf@sachachua.com").id
#+end_src
-- elisp:emacsconf-publish-bbb-static-redirects
+1. elisp:emacsconf-bbb-create-rooms
+2. elisp:emacsconf-bbb-load-rooms: set the ROOM properties.
+3. elisp:emacsconf-publish-bbb-static-redirects
-Print out the room IDs with
+Print out the room IDs with:
-#+begin_src ruby
+#+begin_src ruby :eval no
Room.all.each { |x| puts x.friendly_id + " " + x.name }; nil
#+end_src
-*** Setting up moderator access codes
+It's possible to change the friendly_id and then use ~x.save!~.
+
+*** DONE Set up moderator access codes
+CLOSED: [2025-11-12 Wed 13:51]
+:PROPERTIES:
+:CUSTOM_ID: general-infrastructure-bigbluebutton-setting-up-moderator-access-codes
+:END:
+
+- elisp:emacsconf-bbb-spookfox-set-moderator-codes
+- elisp:emacsconf-bbb-spookfox-confirm-settings
+
+Then you can use elisp:emacsconf-mail-checkin-instructions-for-attending-speakers
+or elisp:emacsconf-mail-checkin-instructions-to-all to send the info.
+
+*** Processing BBB videos
+:PROPERTIES:
+:CUSTOM_ID: general-infrastructure-bigbluebutton-processing-bbb-videos
+:END:
+
+~bbb-record --list~ shows all the recordings. You can use ~bbb-record --rebuild~ to regenerate the meeting, and ~bbb-record --watch~ to monitor progress. Presentation is a web-based interface, video is a single video file that contains the webcam, the screenshare, and the audio.
+
+If you don't see the video format, doublecheck that [[#general-infrastructure-bigbluebutton-installing-bigbluebutton][the video format is enabled]].
+
+bbb-record seems to call ~ruby /usr/local/bigbluebutton/core/scripts/process/video.rb -m ID~, which might be a useful backup.
+
*** Backing up BBB :backup:
+:PROPERTIES:
+:CUSTOM_ID: general-infrastructure-bigbluebutton-backing-up-bbb
+:END:
rsync -avze ssh root@bbb:/var/bigbluebutton/ bigbluebutton/
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
ssh root@bbb 'dd if=/dev/sda bs=5M ' | dd of=bbb-img-$(date "+%Y-%m-%d").img status=progress
+*** Scaling BBB up and down
+:PROPERTIES:
+:CUSTOM_ID: general-infrastructure-bigbluebutton-scaling-bbb-up-and-down
+:END:
-** Manual IRC announcements
+[[https://sachachua.com/blog/2025/01/scaling-a-bigbluebutton-server-down-to-a-1-gb-node-between-uses/][Scaling a BigBlueButton server down to a 1 GB node between uses]]
+
+When the server is downscaled, ~/etc/nginx/sites-backup~ configures the Nginx.
+The web root is ~/var/www/bigbluebutton-default/assets~, and the page is ~/var/www/bigbluebutton-default/assets/backup/index.html~.
+
+*** Spinning BBB up again from scratch
+:PROPERTIES:
+:CUSTOM_ID: general-infrastructure-bigbluebutton-spinning-bbb-up-again
+:END:
+
+Previous notes:
+
+1. Create a Nanode.
+2. Update the DNS for bbb.emacsverse.org with its IP address. (dns.he.net)
+3. Reboot into Rescue mode. In Lish:
+ #+begin_src sh :eval no
+ passwd # set interactively
+ sed -i -e 's/#PasswordAuthentication yes/PasswordAuthentication yes/g' /etc/ssh/sshd_config
+ echo 'PermitRootLogin yes' >> /etc/ssh/sshd_config
+ service ssh start
+ #+end_src
+4. From the backup directory:
+ gunzip -c bbb-img-2024-12-08.img.gz | ssh root@bbb.emacsconf.org "dd of=/dev/sda bs=4M status=progress oflag=direct iflag=fullblock"
+5. After I resized to 4core 8GB RAM, I couldn't log in with SSH, so I used the Linode shell. ~sshd -t~ said no host keys available. Fix:
+ #+begin_src sh :eval no
+ ssh-keygen -A
+ service ssh --full-restart
+ #+end_src
+6. ./bbb-install.sh -v jammy-300 -s bbb.emacsverse.org -e emacsconf@sachachua.com
+
+Resources:
+
+- https://overto.eu/posts/gunzip-into-dd/
+- https://www.linode.com/community/questions/20386/how-do-i-ssh-to-linode-from-the-finnix-boot-in-order-to-copy-my-local-vm-over-to
+- https://github.com/bigbluebutton/bigbluebutton/issues/9485
+** TODO Manual IRC announcements
+:PROPERTIES:
+:CUSTOM_ID: general-infrastructure-manual-irc-announcements
+:END:
Success:
- [X] You can /opall, /conftopic, and /broadcast
+** Check test crontab
+** TODO Confirm automated IRC announcements from res
+SCHEDULED: <2025-11-27 Thu>
+:PROPERTIES:
+:CUSTOM_ID: general-infrastructure-confirm-automated-irc-announcements-from-res
+:CREATED: [2025-11-26 Wed 15:04]
+:END:
+
+Success:
+
+- A test schedule can generate announcements.
+
+ See C-u M-x emacsconf-stream-crontabs
+
** Low-res stream
+:PROPERTIES:
+:CUSTOM_ID: general-infrastructure-low-res-stream
+:END:
Should be automatic, handled by Icecast
backup on live:
- /usr/local/bin/emacsconf-lowres-gen-on-connect
@@ -732,6 +1486,7 @@ backup on live:
SCHEDULED: <2024-11-30 Sat>
:PROPERTIES:
:CREATED: [2024-11-27 Wed 17:33]
+:CUSTOM_ID: general-infrastructure-upload-talks-to-youtube
:END:
[[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][Channel videos]]
@@ -781,8 +1536,55 @@ SCHEDULED: <2024-11-30 Sat>
:end:
** Restream to YouTube
+:PROPERTIES:
+:CUSTOM_ID: general-infrastructure-restream-to-youtube
+:END:
+*** TODO Set up YouTube restreaming events
+:PROPERTIES:
+:CUSTOM_ID: general-infrastructure-restream-to-youtube-set-up-youtube-restreaming-events
+:END:
+
+Need to have set up shifts first.
+
+1. Switch to the EmacsConf account.
+2. Go to https://studio.youtube.com/channel/UCwuyodzTl_KdEKNuJmeo99A
+3. Create > Go live > Schedule stream.
+ - [X] Gen - Sat AM
+ - [X] Gen - Sat PM
+ - [X] Dev - Sat AM
+ - [X] Dev - Sat PM
+ - [X] Gen - Sun AM
+ - [X] Gen - Sun PM
+ - [X] Test
+
+ emacsconf-stream-copy-livestream-description
+
+ Then set the emacsconf-rtmp-shifts variable. See the conf.org from 2025 for an example.
+
+ This will be used in the shift hyperlists, which you can generate with emacsconf-pad-prepopulate-shift-hyperlists
+ There's also a note in the ansible README.org about restreaming.
+ Set up the =restreaming_platforms= variable in =prod-vars.yml= and
+ use =ansible-playbook -i inventory.yml prod-playbook.yml --tags restream= to set up
+** Restream to Toobnix
+*** DONE Set up Toobnix restreaming events
+CLOSED: [2025-12-05 Fri 18:54]
+:PROPERTIES:
+:Effort: 0:30
+:END:
+:LOGBOOK:
+CLOCK: [2025-11-22 Sat 17:42]--[2025-11-23 Sun 12:15] => 18:33
+:END:
+
+1. https://toobnix.org, Publish, Permanent/recurring live
+2. emacsconf-stream-toobnix-copy-livestream-description
+** i3 window manager
+
+termit is the terminal
+
+- M-d: launcher
+- M-1, M-2: change workspace
* Other process notes
:PROPERTIES:
:CUSTOM_ID: other
@@ -792,11 +1594,26 @@ SCHEDULED: <2024-11-30 Sat>
:CUSTOM_ID: bbb-user
:END:
-#+begin_src ssh :eval no
+#+begin_src ssh :eval no :tangle no
ssh bbb.emacsverse.org
docker exec -it greenlight-v2 bundle exec rake user:create["USERNAME","EMAIL","PASSWORD","user"]
#+end_src
-** When a talk is added after the schedule has already been drafted
+** Schedule changes
+
+In general:
+
+#+begin_src emacs-lisp
+ (emacsconf-schedule-update-from-info)
+ (emacsconf-update-schedule)
+ (emacsconf-publish-watch-pages)
+ (emacsconf-publish-talks-json-to-files)
+ (emacsconf-publish-info-pages)
+#+end_src
+
+*** When a talk is added after the schedule has already been drafted
+:PROPERTIES:
+:CUSTOM_ID: other-process-notes-when-a-talk-is-added-after-the-schedule-has-already-been-drafted
+:END:
- [X] Add the talk to conf.org
- [X] Add the talk ID to the draft schedule
- [X] Run the draft schedule block
@@ -812,19 +1629,28 @@ docker exec -it greenlight-v2 bundle exec rake user:create["USERNAME","EMAIL","P
- [X] Generate the intro text
- [ ] Record the intro
-** When a talk is cancelled
+*** When a talk is cancelled
:PROPERTIES:
:CUSTOM_ID: cancel-talk
:END:
+elisp:emacsconf-cancel-talk
+
1. Update the status to CANCELLED. Update that specific talk with elisp:emacsconf-publish-info-pages-for-talk.
2. Rejig the schedule if needed, and update with elisp:emacsconf-schedule-update-from-info
-3. Update the published schedule with [[elisp:emacsconf-update-schedule]] and push the wiki.
-4. Regenerate the intros (before, after). elisp:emacsconf-stream-generate-in-between-pages, then use elisp:subed-record-compile-video in the intros file.
-5. Resync the cache directory.
-6. Consider updating the screenshots for sat-open and sun-open.
+3. Update the published schedule with [[elisp:emacsconf-update-schedule]].
+
+Manual steps:
-** When a talk changes title
+1. Push the wiki.
+2. Regenerate the intros (before, after). elisp:emacsconf-stream-generate-in-between-pages, then use elisp:subed-record-compile-video in the intros file.
+3. Resync the cache directory.
+4. Consider updating the screenshots for sat-open and sun-open.
+
+*** When a talk changes title
+:PROPERTIES:
+:CUSTOM_ID: other-process-notes-when-a-talk-changes-title
+:END:
1. Update the title in conf.org.
2. Delete the FILE_PREFIX property.
@@ -847,8 +1673,18 @@ docker exec -it greenlight-v2 bundle exec rake user:create["USERNAME","EMAIL","P
4. Sync the new intros to the /data/emacsconf/shared/$YEAR/assets/intros directory.
5. Regenerate the pads: elisp:emacsconf-pad-prepopulate-all-talks
6. Regenerate talks.json: elisp:emacsconf-publish-talks-json-to-files
+** To play the other stream
+:PROPERTIES:
+:CUSTOM_ID: other-process-notes-to-play-the-other-stream
+:END:
-** When a system is down
+- ~mpv --profile=full https://live0.emacsconf.org/gen.webm~
+- Change the channel topic to note that discussion can be in the other channel
+
+** When a system is down - status page
+:PROPERTIES:
+:CUSTOM_ID: other-process-notes-when-a-system-is-down
+:END:
Let people know in #emacsconf and #emacsconf-org
@@ -859,17 +1695,26 @@ Update the status page:
/broadcast <message> may also be helpful
** When we need to bring on a last-minute volunteer
+:PROPERTIES:
+:CUSTOM_ID: other-process-notes-when-we-need-to-bring-on-a-last-minute-volunteer
+:END:
/backstage nick
will give them the backstage credentials and links to the index
** Checking people in
+:PROPERTIES:
+:CUSTOM_ID: other-process-notes-checking-people-in
+:END:
/checkin nick
/room nick (should be automatic if live, but there just in case)
** Ansible
+:PROPERTIES:
+:CUSTOM_ID: other-process-notes-ansible
+:END:
#+begin_src sh :eval no
git clone git@git.emacsconf.org:pub/emacsconf-ansible
diff --git a/script.js b/script.js
new file mode 100644
index 00000000..428adf3a
--- /dev/null
+++ b/script.js
@@ -0,0 +1,227 @@
+// @license magnet:?xt=urn:btih:0b31508aeb0634b347b8270c7bee4d411b5d4109&dn=agpl-3.0.txt AGPL-3.0-or-later
+ /*
+
+ SeekToTime - simple script to add video time jump functionality to timestamp links
+ Copyright (C) 2020 Grant Shangreaux
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Affero General Public License as
+ published by the Free Software Foundation, either version 3 of the
+ License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+ This script enables wiki editors to create anchor tags with the class "time-link"
+ that will be parsed for seeking to specific time stamps in the main video on a page.
+ The tag should look like this:
+
+ <a href="#mainVideo" class="time-link">mm:ss</a>
+
+ This could be extended to accept hours in the time stamp as well, but currently does not.
+ */
+ let timestamps;
+
+ // expects a string like "mm:ss.mmm"
+ function parseSeconds(timeString) {
+ return timeString.split(":").reduce(function(prev, o) {
+ return prev * 60 + parseFloat(o);
+ }, 0);
+ }
+
+ function handleSubtitleClick(event) {
+ var video = event.target.getAttribute('data-video');
+ var start = event.target.getAttribute('data-start');
+ var videoElem = document.getElementById(video);
+ if (videoElem) {
+ videoElem.currentTime = parseSeconds(start);
+ videoElem.scrollIntoView();
+ }
+ if (event.preventDefault) {
+ event.preventDefault();
+ }
+ }
+
+ window.onload = function initScript() {
+ let subtitles = document.getElementsByClassName('subtitle');
+ for (let i = 0; i < subtitles.length; i++) {
+ subtitles[i].onclick = handleSubtitleClick;
+ }
+ }
+// @license-end
+ // @license magnet:?xt=urn:btih:90dc5c0be029de84e523b9b3922520e79e0e6f08&dn=cc0.txt txt CC0-1.0
+ // Copyright (C) 2021, 2022 Sacha Chua
+
+ if (document.querySelector('.times')) {
+ var dateOptions = {dateStyle: 'short', timeStyle: 'short'};
+ var localStart = (new Date(document.querySelector('.times').getAttribute('start'))).toLocaleString([], dateOptions);
+ var localEnd = (new Date(document.querySelector('.times').getAttribute('end'))).toLocaleString([], dateOptions);
+ var dateElem = document.createElement('div');
+ dateElem.appendChild(document.createTextNode('Your local time: ~ ' + localStart + ' to ~ ' + localEnd));
+ document.querySelector('.times').prepend(dateElem);
+ if (document.querySelector('.times').querySelector('.others')) {
+ document.querySelector('.times').querySelector('.others').style.display = 'none';
+ }
+ }
+ if (document.querySelector('.time-overlay')) {
+ document.querySelectorAll('.time-overlay').forEach(function (o) {
+ if (o.getAttribute('title')) return;
+ var dateOptions = {dateStyle: 'short', timeStyle: 'short'};
+ var localStart, localEnd;
+ if (o.getAttribute('start') && o.getAttribute('end')) {
+ localStart = (new Date(o.getAttribute('start'))).toLocaleString([], dateOptions);
+ localEnd = (new Date(o.getAttribute('end'))).toLocaleString([], dateOptions);
+ o.setAttribute('title', 'Your local time: ~ ' + localStart + ' to ~ ' + localEnd);
+ } else if (o.getAttribute('start')) {
+ localStart = (new Date(o.getAttribute('start'))).toLocaleString([], dateOptions);
+ o.setAttribute('title', 'Your local time: ~ ' + localStart);
+ }
+ });
+ }
+
+ if (document.querySelector('a[name=transcript]')) {
+ var transcriptLink = document.createElement('a');
+ transcriptLink.setAttribute('href', '#transcript');
+ transcriptLink.textContent = 'View transcript';
+ var video = document.querySelector('.mainVideo video');
+ if (video) {
+ var resources = document.querySelector('.mainVideo video').closest('.vid').querySelector('.resources');
+ var transcriptDiv = document.createElement('div');
+ transcriptDiv.appendChild(transcriptLink)
+ if (resources) { resources.prepend(transcriptDiv); }
+ }
+ }
+ var chat = document.querySelector('.chat-iframe');
+ if (chat) {
+ if (chat.getAttribute('data-track')) {
+ chat.innerHTML = '<iframe src="https://chat.emacsconf.org?join=emacsconf,emacsconf-' +
+ chat.getAttribute('data-track').replace(/[^A-Za-z]/g, '') + '" height="600" width="100%"></iframe>';
+ } else {
+ chat.innerHTML = '<iframe src="https://chat.emacsconf.org" height="600" width="100%"></iframe>';
+ }
+ }
+
+// @license-end
+ // @license magnet:?xt=urn:btih:90dc5c0be029de84e523b9b3922520e79e0e6f08&dn=cc0.txt txt CC0-1.0
+ // Copyright (c) 2021 Sacha Chua - CC0 Public Domain
+ function displayChapters(elem) {
+ var i;
+ var chapter;
+ var list = document.createElement('ol');
+ list.setAttribute('class', 'chapters');
+ var link;
+ var target = elem.getAttribute('data-target');
+ var video = document.getElementById(target);
+ var track;
+ if (video) {
+ track = video.addTextTrack('chapters');
+ track.mode = 'hidden';
+ }
+ var chapters = elem.textContent.split(/[ \t]*\n+[ \t]*/).forEach(function(line) {
+ var m = (line.match(/^(((?:[0-9]+:)?[0-9]+:[0-9]+)(?:\.[0-9]+))[ \t]+(.*)/));
+ if (m) {
+ var start = m[1];
+ var text = m[3];
+ chapter = document.createElement('li');
+ link = document.createElement('a');
+ link.setAttribute('href', '#');
+ link.setAttribute('data-video', target);
+ link.setAttribute('data-start', start);
+ link.setAttribute('data-start-s', parseSeconds(start));
+ link.appendChild(document.createTextNode(m[2] + ' ' + text));
+ link.onclick = handleSubtitleClick;
+ chapter.appendChild(link);
+ list.appendChild(chapter);
+ if (track) {
+ var time = parseSeconds(start);
+ if (track.cues.length > 0) {
+ track.cues[track.cues.length - 1].endTime = time - 1;
+ }
+ track.addCue(new VTTCue(time, time, text));
+ }
+ }
+ })
+ if (track && track.cues.length > 0) {
+ video.addEventListener('durationchange', function() {
+ track.cues[track.cues.length - 1].endTime = video.duration;
+ });
+ track.addEventListener('cuechange', function() {
+ if (!this.activeCues[0]) return;
+ if (list.querySelector('.current')) {
+ list.querySelector('.current').className = '';
+ }
+ var chapter;
+ if (chapter = list.querySelector('a[data-start-s="' + this.activeCues[0].startTime + '"]')) {
+ chapter.parentNode.className = 'current';
+ }
+ });
+ }
+ elem.parentNode.replaceChild(list, elem);
+ }
+
+ document.querySelectorAll('pre.chapters').forEach(displayChapters);
+
+ var video = document.querySelector('video.reload');
+ if (video) {
+ var myVar = setInterval(reloadAsNeeded, 1000);
+ var oldTime = '';
+ function reloadAsNeeded() {
+ if ((video.paused != true && (video.currentTime - oldTime) == 0 && video.currentTime != 0)) {
+ var source = video.querySelector('source');
+ var oldVideo = source.src;
+ source.src = '';
+ source.src = oldVideo;
+ video.load();
+ video.play();
+ }
+ oldTime = video.currentTime;
+ };
+ }
+
+ /* videoType: mainVideo, qanda */
+ function addStickyVideo(videoType) {
+ const transcriptDiv = document.querySelector('.transcript-' + videoType);
+ const video = document.querySelector('.vid.' + videoType + ' video');
+ if (!video || !transcriptDiv) return;
+ if (transcriptDiv.querySelector('.vid'))
+ transcriptDiv.querySelector('.vid').remove();
+ // already has it
+ // TODO: Make a copy of the video and place it at the start of the btranscript div, positioned to the left, and sticky, but only on large screens.
+ const videoCopy = video.cloneNode(true);
+ transcriptDiv.prepend(videoCopy);
+ videoCopy.classList.add('sticky-video');
+ // TODO: fix the ID
+
+ }
+
+
+
+ // @license-end
+ // @license magnet:?xt=urn:btih:90dc5c0be029de84e523b9b3922520e79e0e6f08&dn=cc0.txt txt CC0-1.0
+ // Copyright (c) 2023 Sacha Chua - CC0 Public Domain
+ function highlightTalks() {
+ // highlight any talk mentioned in the highlight URL parameter
+ var params = new URLSearchParams(window.location.search);
+ if (!params.get('highlight')) return;
+ var talks = params.get('highlight').split(',').filter(function(o) { return o.match(/^[-a-z0-9]+$/); });
+ var regexp = new RegExp('/talks/(' + talks.join('|') + ')/?$');
+ document.querySelectorAll('a[href]').forEach(function(link) {
+ console.debug(link.getAttribute('href'), link.getAttribute('href').match(regexp));
+ if (link.getAttribute('href').match(regexp)) {
+ console.debug(link);
+ link.classList.add('highlight');
+ }
+ });
+ }
+
+ addEventListener('DOMContentLoaded', highlightTalks);
+ addEventListener('DOMContentLoaded', function() {
+ addStickyVideo('mainVideo');
+ addStickyVideo('qanda');
+ });
+ // @license-end
diff --git a/talks.md b/talks.md
index cfa744f6..153453d6 100644
--- a/talks.md
+++ b/talks.md
@@ -1,3 +1,3 @@
[[!meta title="Talks"]]
-[[!inline pages="2023/talks/* or 2022/talks/* or 2021/talks/* or 2020/talks/*" archive="yes"]]
+[[!inline pages="2024/talks/* or 2023/talks/* or 2022/talks/* or 2021/talks/* or 2020/talks/*" archive="yes"]]
diff --git a/templates/page.tmpl b/templates/page.tmpl
index f12dfd12..cc8357d7 100644
--- a/templates/page.tmpl
+++ b/templates/page.tmpl
@@ -42,7 +42,7 @@
/*
SeekToTime - simple script to add video time jump functionality to timestamp links
- Copyright (C) 2020 Grant Shangreaux
+ Copyright (C) 2020-2024 Grant Shangreaux and Sacha Chua
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
@@ -65,9 +65,7 @@
This could be extended to accept hours in the time stamp as well, but currently does not.
*/
- let mainVideo;
- let qnaVideo; // some pages have a questions and answers video
- let timestamps;
+ let timestamps;
// expects a string like "mm:ss.mmm"
function parseSeconds(timeString) {
@@ -78,36 +76,27 @@
function handleSubtitleClick(event) {
var video = event.target.getAttribute('data-video');
- var start = event.target.getAttribute('data-start');
- let m = video.match(/(mainVideo|qnaVideo)-(.*)/);
- if (m) {
- video = m[2] + '-' + m[1];
- }
- var videoElem = document.getElementById(video);
- if (videoElem) {
- videoElem.currentTime = parseSeconds(start);
- videoElem.scrollIntoView();
- }
- event.preventDefault();
- }
+ var start = event.target.getAttribute('data-start');
+ const stickyVideo = document.querySelector('.transcript #' + video);
+ const indexCardVideo = document.querySelector('.vid #' + video);
+ if (indexCardVideo) {
+ indexCardVideo.currentTime = parseSeconds(start);
+ }
+ if (stickyVideo && window.getComputedStyle(stickyVideo).display == 'block') {
+ stickyVideo.currentTime = parseSeconds(start);
+ } else {
+ indexCardVideo.scrollIntoView();
+ }
+ if (event.preventDefault) {
+ event.preventDefault();
+ }
+ }
window.onload = function initScript() {
- mainVideo = document.getElementById("mainVideo");
- qnaVideo = document.getElementById("qnaVideo");
- timestamps = document.getElementsByClassName("time-link");
- var len = timestamps.length;
- for (let i = 0; i < len; i++) {
- timestamps[i].onclick = function () {
- videoType = this.href.split("/").pop();
- video = (videoType == "#mainVideo") ? mainVideo : qnaVideo;
- video.currentTime = parseSeconds(this.innerText)
- };
- }
let subtitles = document.getElementsByClassName('subtitle');
for (let i = 0; i < subtitles.length; i++) {
subtitles[i].onclick = handleSubtitleClick;
}
-
}
// @license-end
</script>
@@ -409,49 +398,68 @@ Last edited <TMPL_VAR MTIME>
}
elem.parentNode.replaceChild(list, elem);
}
-
- document.querySelectorAll('pre.chapters').forEach(displayChapters);
+
+ document.querySelectorAll('pre.chapters').forEach(displayChapters);
var video = document.querySelector('video.reload');
-if (video) {
- var myVar = setInterval(reloadAsNeeded, 1000);
- var oldTime = '';
- function reloadAsNeeded() {
- if ((video.paused != true && (video.currentTime - oldTime) == 0 && video.currentTime != 0)) {
- var source = video.querySelector('source');
- var oldVideo = source.src;
- source.src = '';
- source.src = oldVideo;
- video.load();
- video.play();
- }
- oldTime = video.currentTime;
- };
-}
+ if (video) {
+ var myVar = setInterval(reloadAsNeeded, 1000);
+ var oldTime = '';
+ function reloadAsNeeded() {
+ if ((video.paused != true && (video.currentTime - oldTime) == 0 && video.currentTime != 0)) {
+ var source = video.querySelector('source');
+ var oldVideo = source.src;
+ source.src = '';
+ source.src = oldVideo;
+ video.load();
+ video.play();
+ }
+ oldTime = video.currentTime;
+ };
+ }
+
+ /* videoType: mainVideo, qanda */
+ function addStickyVideo(videoType) {
+ const transcriptDiv = document.querySelector('.transcript-' + videoType);
+ const video = document.querySelector('.vid.' + videoType + ' video');
+ if (!video || !transcriptDiv) return;
+ if (transcriptDiv.querySelector('.vid'))
+ transcriptDiv.querySelector('.vid').remove();
+ // already has it
+ // TODO: Make a copy of the video and place it at the start of the transcript div, positioned to the left, and sticky, but only on large screens.
+ const videoCopy = video.cloneNode(true);
+ transcriptDiv.prepend(videoCopy);
+ videoCopy.classList.add('sticky-video');
+ // TODO: fix the ID
+ }
// @license-end
// @license magnet:?xt=urn:btih:90dc5c0be029de84e523b9b3922520e79e0e6f08&dn=cc0.txt txt CC0-1.0
- // Copyright (c) 2023 Sacha Chua - CC0 Public Domain
- function highlightTalks() {
- // highlight any talk mentioned in the highlight URL parameter
- var params = new URLSearchParams(window.location.search);
- if (!params.get('highlight')) return;
- var talks = params.get('highlight').split(',').filter(function(o) { return o.match(/^[-a-z0-9]+$/); });
- var regexp = new RegExp('/talks/(' + talks.join('|') + ')/?$');
- document.querySelectorAll('a[href]').forEach(function(link) {
- console.debug(link.getAttribute('href'), link.getAttribute('href').match(regexp));
- if (link.getAttribute('href').match(regexp)) {
- console.debug(link);
- link.classList.add('highlight');
- }
- });
- }
+ // Copyright (c) 2023 Sacha Chua - CC0 Public Domain
+ function highlightTalks() {
+ // highlight any talk mentioned in the highlight URL parameter
+ var params = new URLSearchParams(window.location.search);
+ if (!params.get('highlight')) return;
+ var talks = params.get('highlight').split(',').filter(function(o) { return o.match(/^[-a-z0-9]+$/); });
+ var regexp = new RegExp('/talks/(' + talks.join('|') + ')/?$');
+ document.querySelectorAll('a[href]').forEach(function(link) {
+ console.debug(link.getAttribute('href'), link.getAttribute('href').match(regexp));
+ if (link.getAttribute('href').match(regexp)) {
+ console.debug(link);
+ link.classList.add('highlight');
+ }
+ });
+ }
- addEventListener('DOMContentLoaded', highlightTalks);
- // @license-end
+ addEventListener('DOMContentLoaded', highlightTalks);
+ addEventListener('DOMContentLoaded', function() {
+ addStickyVideo('mainVideo');
+ addStickyVideo('qanda');
+ });
+ // @license-end
</script>
</body>
</html>
diff --git a/templates/script.js b/templates/script.js
new file mode 100644
index 00000000..428adf3a
--- /dev/null
+++ b/templates/script.js
@@ -0,0 +1,227 @@
+// @license magnet:?xt=urn:btih:0b31508aeb0634b347b8270c7bee4d411b5d4109&dn=agpl-3.0.txt AGPL-3.0-or-later
+ /*
+
+ SeekToTime - simple script to add video time jump functionality to timestamp links
+ Copyright (C) 2020 Grant Shangreaux
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Affero General Public License as
+ published by the Free Software Foundation, either version 3 of the
+ License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+ This script enables wiki editors to create anchor tags with the class "time-link"
+ that will be parsed for seeking to specific time stamps in the main video on a page.
+ The tag should look like this:
+
+ <a href="#mainVideo" class="time-link">mm:ss</a>
+
+ This could be extended to accept hours in the time stamp as well, but currently does not.
+ */
+ let timestamps;
+
+ // expects a string like "mm:ss.mmm"
+ function parseSeconds(timeString) {
+ return timeString.split(":").reduce(function(prev, o) {
+ return prev * 60 + parseFloat(o);
+ }, 0);
+ }
+
+ function handleSubtitleClick(event) {
+ var video = event.target.getAttribute('data-video');
+ var start = event.target.getAttribute('data-start');
+ var videoElem = document.getElementById(video);
+ if (videoElem) {
+ videoElem.currentTime = parseSeconds(start);
+ videoElem.scrollIntoView();
+ }
+ if (event.preventDefault) {
+ event.preventDefault();
+ }
+ }
+
+ window.onload = function initScript() {
+ let subtitles = document.getElementsByClassName('subtitle');
+ for (let i = 0; i < subtitles.length; i++) {
+ subtitles[i].onclick = handleSubtitleClick;
+ }
+ }
+// @license-end
+ // @license magnet:?xt=urn:btih:90dc5c0be029de84e523b9b3922520e79e0e6f08&dn=cc0.txt txt CC0-1.0
+ // Copyright (C) 2021, 2022 Sacha Chua
+
+ if (document.querySelector('.times')) {
+ var dateOptions = {dateStyle: 'short', timeStyle: 'short'};
+ var localStart = (new Date(document.querySelector('.times').getAttribute('start'))).toLocaleString([], dateOptions);
+ var localEnd = (new Date(document.querySelector('.times').getAttribute('end'))).toLocaleString([], dateOptions);
+ var dateElem = document.createElement('div');
+ dateElem.appendChild(document.createTextNode('Your local time: ~ ' + localStart + ' to ~ ' + localEnd));
+ document.querySelector('.times').prepend(dateElem);
+ if (document.querySelector('.times').querySelector('.others')) {
+ document.querySelector('.times').querySelector('.others').style.display = 'none';
+ }
+ }
+ if (document.querySelector('.time-overlay')) {
+ document.querySelectorAll('.time-overlay').forEach(function (o) {
+ if (o.getAttribute('title')) return;
+ var dateOptions = {dateStyle: 'short', timeStyle: 'short'};
+ var localStart, localEnd;
+ if (o.getAttribute('start') && o.getAttribute('end')) {
+ localStart = (new Date(o.getAttribute('start'))).toLocaleString([], dateOptions);
+ localEnd = (new Date(o.getAttribute('end'))).toLocaleString([], dateOptions);
+ o.setAttribute('title', 'Your local time: ~ ' + localStart + ' to ~ ' + localEnd);
+ } else if (o.getAttribute('start')) {
+ localStart = (new Date(o.getAttribute('start'))).toLocaleString([], dateOptions);
+ o.setAttribute('title', 'Your local time: ~ ' + localStart);
+ }
+ });
+ }
+
+ if (document.querySelector('a[name=transcript]')) {
+ var transcriptLink = document.createElement('a');
+ transcriptLink.setAttribute('href', '#transcript');
+ transcriptLink.textContent = 'View transcript';
+ var video = document.querySelector('.mainVideo video');
+ if (video) {
+ var resources = document.querySelector('.mainVideo video').closest('.vid').querySelector('.resources');
+ var transcriptDiv = document.createElement('div');
+ transcriptDiv.appendChild(transcriptLink)
+ if (resources) { resources.prepend(transcriptDiv); }
+ }
+ }
+ var chat = document.querySelector('.chat-iframe');
+ if (chat) {
+ if (chat.getAttribute('data-track')) {
+ chat.innerHTML = '<iframe src="https://chat.emacsconf.org?join=emacsconf,emacsconf-' +
+ chat.getAttribute('data-track').replace(/[^A-Za-z]/g, '') + '" height="600" width="100%"></iframe>';
+ } else {
+ chat.innerHTML = '<iframe src="https://chat.emacsconf.org" height="600" width="100%"></iframe>';
+ }
+ }
+
+// @license-end
+ // @license magnet:?xt=urn:btih:90dc5c0be029de84e523b9b3922520e79e0e6f08&dn=cc0.txt txt CC0-1.0
+ // Copyright (c) 2021 Sacha Chua - CC0 Public Domain
+ function displayChapters(elem) {
+ var i;
+ var chapter;
+ var list = document.createElement('ol');
+ list.setAttribute('class', 'chapters');
+ var link;
+ var target = elem.getAttribute('data-target');
+ var video = document.getElementById(target);
+ var track;
+ if (video) {
+ track = video.addTextTrack('chapters');
+ track.mode = 'hidden';
+ }
+ var chapters = elem.textContent.split(/[ \t]*\n+[ \t]*/).forEach(function(line) {
+ var m = (line.match(/^(((?:[0-9]+:)?[0-9]+:[0-9]+)(?:\.[0-9]+))[ \t]+(.*)/));
+ if (m) {
+ var start = m[1];
+ var text = m[3];
+ chapter = document.createElement('li');
+ link = document.createElement('a');
+ link.setAttribute('href', '#');
+ link.setAttribute('data-video', target);
+ link.setAttribute('data-start', start);
+ link.setAttribute('data-start-s', parseSeconds(start));
+ link.appendChild(document.createTextNode(m[2] + ' ' + text));
+ link.onclick = handleSubtitleClick;
+ chapter.appendChild(link);
+ list.appendChild(chapter);
+ if (track) {
+ var time = parseSeconds(start);
+ if (track.cues.length > 0) {
+ track.cues[track.cues.length - 1].endTime = time - 1;
+ }
+ track.addCue(new VTTCue(time, time, text));
+ }
+ }
+ })
+ if (track && track.cues.length > 0) {
+ video.addEventListener('durationchange', function() {
+ track.cues[track.cues.length - 1].endTime = video.duration;
+ });
+ track.addEventListener('cuechange', function() {
+ if (!this.activeCues[0]) return;
+ if (list.querySelector('.current')) {
+ list.querySelector('.current').className = '';
+ }
+ var chapter;
+ if (chapter = list.querySelector('a[data-start-s="' + this.activeCues[0].startTime + '"]')) {
+ chapter.parentNode.className = 'current';
+ }
+ });
+ }
+ elem.parentNode.replaceChild(list, elem);
+ }
+
+ document.querySelectorAll('pre.chapters').forEach(displayChapters);
+
+ var video = document.querySelector('video.reload');
+ if (video) {
+ var myVar = setInterval(reloadAsNeeded, 1000);
+ var oldTime = '';
+ function reloadAsNeeded() {
+ if ((video.paused != true && (video.currentTime - oldTime) == 0 && video.currentTime != 0)) {
+ var source = video.querySelector('source');
+ var oldVideo = source.src;
+ source.src = '';
+ source.src = oldVideo;
+ video.load();
+ video.play();
+ }
+ oldTime = video.currentTime;
+ };
+ }
+
+ /* videoType: mainVideo, qanda */
+ function addStickyVideo(videoType) {
+ const transcriptDiv = document.querySelector('.transcript-' + videoType);
+ const video = document.querySelector('.vid.' + videoType + ' video');
+ if (!video || !transcriptDiv) return;
+ if (transcriptDiv.querySelector('.vid'))
+ transcriptDiv.querySelector('.vid').remove();
+ // already has it
+ // TODO: Make a copy of the video and place it at the start of the btranscript div, positioned to the left, and sticky, but only on large screens.
+ const videoCopy = video.cloneNode(true);
+ transcriptDiv.prepend(videoCopy);
+ videoCopy.classList.add('sticky-video');
+ // TODO: fix the ID
+
+ }
+
+
+
+ // @license-end
+ // @license magnet:?xt=urn:btih:90dc5c0be029de84e523b9b3922520e79e0e6f08&dn=cc0.txt txt CC0-1.0
+ // Copyright (c) 2023 Sacha Chua - CC0 Public Domain
+ function highlightTalks() {
+ // highlight any talk mentioned in the highlight URL parameter
+ var params = new URLSearchParams(window.location.search);
+ if (!params.get('highlight')) return;
+ var talks = params.get('highlight').split(',').filter(function(o) { return o.match(/^[-a-z0-9]+$/); });
+ var regexp = new RegExp('/talks/(' + talks.join('|') + ')/?$');
+ document.querySelectorAll('a[href]').forEach(function(link) {
+ console.debug(link.getAttribute('href'), link.getAttribute('href').match(regexp));
+ if (link.getAttribute('href').match(regexp)) {
+ console.debug(link);
+ link.classList.add('highlight');
+ }
+ });
+ }
+
+ addEventListener('DOMContentLoaded', highlightTalks);
+ addEventListener('DOMContentLoaded', function() {
+ addStickyVideo('mainVideo');
+ addStickyVideo('qanda');
+ });
+ // @license-end
diff --git a/volunteer.md b/volunteer.md
index 9fd30f2e..e4727461 100644
--- a/volunteer.md
+++ b/volunteer.md
@@ -1,9 +1,7 @@
[[!meta title="Volunteer"]]
[[!meta copyright="Copyright &copy; 2022-2024 Sacha Chua"]]
-Want to help make EmacsConf awesomer and learn a lot along the way?
-Volunteering is a great way to meet fellow Emacs geeks, tinker around
-with interesting packages and scripts, and develop your skills.
+Want to help make EmacsConf awesomer and learn a lot along the way? Volunteering is a great way to meet others in the wonderful Emacs community, tinker around with interesting packages and scripts, and develop your skills.
In addition to the
[emacsconf-discuss](https://lists.gnu.org/mailman/listinfo/emacsconf-discuss)